c语言转置矩阵的
Ⅰ 将一个3x3的矩阵转置,怎样用c语言写
#include<stdio.h>
int main()
{
int a[3][3];int*i;
for(i=*a;i<*a+9;scanf("%d",i++));//输入矩阵
void trans(int(*p)[3]);//声明转换函数
trans(a);
}
void trans(int(*p)[3])
{
int i,j,t,*k;
for(i=0;i<3;i++)
for(j=0;j<i;j++)
{
t=*(*(p+i)+j);*(*(p+i)+j)=*(*(p+j)+i);*(*(p+j)+i)=t;//行列交换
}
for(i=0;i<3;i++,printf(" "))
for(k=*(p+i);k<*(p+i)+3;printf("%2d",*k++));//输出转置矩阵
}
(1)c语言转置矩阵的扩展阅读:
C#中for语句的语法:
for(initialization;Boolean expression;update control variable)
statement
其中,statement(语句)是for循环主体,要么是一个语句,要么是用大括号{}封闭的代码块。[3]
例子1:
static void Main(string[]args)
{
for(int i=0;i<10;i++)
{
Console.WriteLine(i);
Console.ReadLine();
}
}
例子2:
static void Main(string[]args)
{
int i=0;
for(;i<10;i++)
{
Console.WriteLine(i);
Console.ReadLine();
}
}
例子2运算得到例子1相同的结果。
Pascal语言中的for循环
循环次数已知时,可以用for语句实现循环结构。
for语句有两种格式:递增型和递减型。
(1)递增型for语句格式
for<循环变量>:=<初值>to<终值>do<语句>;
(2)递减型for语句格式,
for<循环变量>:=<初值>downto<终值>do<语句>;
其中,“循环变量"为一个有序类型的数据,
在第一种形式中,使用的是保留字to,循环变量则从“初值"开始逐一增加到“终值";
在第二种形式中,使用的是保留字downto,“循环变量"则从“初值"开始逐一递减到“终值",每次执行一次循环体语句。
Ⅱ c语言如何通过定义函数来转置矩阵
#include <stdio.h>
int main()
{ struct aaa
{ int x;
int y;
};
struct aaa t,a[3][3]= {0,0,0,1,0,2,1,0,1,1,1,2,2,0,2,1,2,2};
int i,j;
for(i=0; i<3; i++)
{ for(j=0; j<3; j++)
printf("[%d,%d] ",a[i][j].x,a[i][j].y);
printf(" ");
}
printf("after: ");
for(i=0; i<3; i++)
for(j=0; j<i; j++)
{ t=a[i][j];
a[i][j]=a[j][i];
a[j][i]=t;
}
for(i=0; i<3; i++)
{ for(j=0; j<3; j++)
printf("[%d,%d] ",a[i][j].x,a[i][j].y);
printf(" ");
}
return 0;
}
或:
#include <stdio.h>
struct aaa
{ int x;
int y;
};
void zhuan(struct aaa a[][3])
{ struct aaa t;
int i,j;
for(i=0; i<3; i++)
for(j=0; j<i; j++)
{ t=a[i][j];
a[i][j]=a[j][i];
a[j][i]=t;
}
}
void prt(struct aaa a[][3])
{ int i,j;
for(i=0; i<3; i++)
{ for(j=0; j<3; j++)
printf("[%d,%d] ",a[i][j].x,a[i][j].y);
printf(" ");
}
}
int main()
{ struct aaa a[3][3]= {0,0,0,1,0,2,1,0,1,1,1,2,2,0,2,1,2,2};
prt(a);
zhuan(a);
printf("after: ");
prt(a);
return 0;
}
Ⅲ C语言、用指针方法实现一个3*3矩阵的转置
#include<iostream>
#include<iomanip>
using namespace std;
int main()
{
void move(int*pointer);//函数声明
int a[3][3],i,j;
int*p;
cout<<"请输入矩阵元素:"<<endl;
for(i=0;i<3;i++)//输入数组
{
for(j=0;j<3;j++)
{
cin>>a<i>[j];
}
}
cout<<"输出原矩阵:"<<endl;//输出矩阵
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
{
cout<<setw(5)<<a<i>[j];
}
cout<<endl;
}
p=&a[0][0];//将数组首元素赋给指针变量p
move(p);//函数调用
cout<<"处理后的矩阵:"<<endl;
for(i=0;i<3;i++)//输出处理后的矩阵
{
for(j=0;j<3;j++)
{
cout<<setw(5)<<a<i>[j];
}
cout<<endl;
}
return 0;
}
//交换函数
void move(int*pointer)
{
int i,j,t;
for(i=0;i<3;i++)
{
for(j=i;j<3;j++)
{
t=*(pointer+3*i+j);//这是关键将矩阵转置的条件
*(pointer+3*i+j)=*(pointer+3*j+i);
*(pointer+3*j+i)=t;
}
}
}
(3)c语言转置矩阵的扩展阅读:
用函数
#include<stdio.h>
int main()
{
void move(int*s);
int a[3][3];int i=0;
int*p=&a[0][0];
printf("请输入一个3*3的数组: ");
for(i=0;i<3;i++)
{
scanf("%d%d%d",&a<i>[0],&a<i>[1],&a<i>[2]);
}
move(p);
printf("转置后的结果: ");
for(i=0;i<3;i++)
{
printf("%d%d%d ",a<i>[0],a<i>[1],a<i>[2]);
}
return 0;
}
void move(int*s)
{
int i,j,t;
for(i=0;i<3;i++)
{
for(j=i;j<3;j++)
{
t=*(s+3*i+j);
*(s+3*i+j)=*(s+3*j+i);
*(s+3*j+i)=t;
}
}
}
Ⅳ 用C语言编写一个矩阵转置的函数,矩阵的行数和列数在程序中由用户输入,请问怎么写,非常感谢
我的代码逻辑是:
矩阵行指针初值指向每行首地址,迭代依次取所有行指针指向值组成新行,所有行指针自增。最终组合新的矩阵。
#include<stdio.h>
#include<malloc.h>
int**getList(introw,intclo);//获取矩阵地址空间
voidsetNum(int**nList,intn);//填写数值
voidprtList(int**nList,introw,intclo);//打印矩阵
int**zz(int**nList,introw,intclo);//转置函数
intmain()
{
introw,clo,**nList=NULL,**nListSave=NULL;
printf("输入矩阵行列数:");
scanf("%d%d",&row,&clo);
nList=getList(row,clo);
setNum(nList,row*clo);
printf("输入的矩阵为:
");
prtList(nList,row,clo);
printf("转置后的矩阵为:
");
nListSave=zz(nList,row,clo);
free(nList);
nList=nListSave;
prtList(nList,clo,row);
return0;
}
int**zz(int**nList,introw,intclo)
{
int*nSave=NULL,**listSave=NULL,**listp=nList,*p=NULL,i,j;
nSave=(int*)malloc(sizeof(int)*row*clo);
listSave=(int**)malloc(sizeof(int*)*clo);//倒置后的矩阵
p=nSave;
for(j=0;j<clo;j++)
{
for(i=0;i<row;i++)
{
*p++=*listp[i];
listp[i]=listp[i]+1;
}
}
for(i=0;i<clo;i++)
listSave[i]=&nSave[i*row];
for(i=0;i<row;i++)
free(nList[i]);//释放原矩阵行空间
returnlistSave;
}
voidprtList(int**nList,introw,intclo)
{
inti,j;
for(i=0;i<row;i++)
{
for(j=0;j<clo;j++)
printf("%d",nList[i][j]);
printf("
");
}
}
voidsetNum(int**nList,intn)
{
int*p=nList[0];
printf("填写矩阵中%d个数值:
",n);
while(n-->0)
scanf("%d",p++);
}
int**getList(introw,intclo)
{
int*nums,**nList,i;
nums=(int*)malloc(sizeof(int)*row*clo);
nList=(int**)malloc(sizeof(int*)*row);
for(i=0;i<row;i++)
nList[i]=&nums[i*clo];
returnnList;
}
Ⅳ C语言编程实现2*3的矩阵转置
#include<iostream>
usingnamespacestd;
voidzhuang(inta[3][3])
{intm,n,i;
for(m=0;m<2;m++)
for(i=0;i<3;i++)
{if(m!=1||i!=0)
{n=a[i][m];
a[i][m]=a[m][i];
a[m][i]=n;
}
}
}
intmain()
{
inta[3][3];
inti,j;
for(i=0;i<3;i++)
for(j=0;j<3;j++)
cin>>a[i][j];
zhuang(a)做汪伏;
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
cout<<a[i][j]<<"";
cout<<endl;
}
return0;
}
cout<<"处理后的矩阵:"<<endl;
for(i=0;i<3;i++)//输出处理后的矩阵
{
for(j=0;j<3;j++)
{
cout<<setw(5)<<a<i>[j];
}
cout<<endl;
}
return0;
}
//交换函数
voidmove(int*pointer)
{
inti,j,t;
for(i=0;i<3;i++)
{
for(j=i;j<3;j++)
{
t=*(pointer+3*i+j);//这是关键将矩阵转置的条件
*(pointer+3*i+j)=*(pointer+3*j+i);
*(pointer+3*j+i)=t;
}
}
}
运行效果:
(5)c语言转置矩阵的扩展阅读:
在C语言或C++中,会把用来#include的文件的扩展名叫.h,称其为头文件。
#include文件的目的就是把多个编译单元(也就是c或者cpp文件)公用的内容,单独放在一个文件里减少整体代码尺寸;或者提供跨工程公共代码。在现行的c++版本中,应用这个头文件应是#include<stdio.h>
stdio 就是指 “standard input & output"(标准输入输出)所以,源代码中如用到标准输纯携入输出函数时,就要包含这个头文件!
例如c语言中的 printf("%d"陵旅,i); scanf("%d",&i);等函数。
Ⅵ C语言编程:N*N方阵的转置
#include<stdio.h>
int main()
{
int n,t,a[100][100],i,j; scanf("%d",&n);
for(i=0;i<n;i++)
for(j=0;j<n;j++) scanf("%d",&a[i][j]);
printf("转换后: ");
for(i=0;i<n;i++)
for(j=0;j<n;j++)
{
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
if(j==0)
printf("%d",a[j][i]); else printf(" %d",a[j][i]);
}
printf(" ");
}}}
(6)c语言转置矩阵的扩展阅读:
C语言书写规则:
1、一个说明或一个语句占一行。
2、用{} 括起来的部分,通常表示了程序的某一层次结构。{}一般与该结构语句的第一个字母对齐,并单独占一行。
3、低一层次的语句或说明可比高一层次的语句或说明缩进若干格后书写。以便看起来更加清晰,增加程序的可读性。在编程时应力求遵循这些规则,以养成良好的编程风格。
网络-c语言
Ⅶ C语言,求3×3矩阵的转置矩阵(在自身进行转置)
#include<stdio.h>
int main()
{
int a1,b1;
int a[3][3];
int i,j;
for(i=0;i<3;i++)
for(j=0;j<3;j++)
scanf("%d",&a[i][j]);
printf("矩阵为 ");
for(i=0;i<3;i++)
for(j=0;j<3;j++)
{
printf("%d ",a[i][j]);
if(j==2)
printf(" ");
}
printf(" ");
for(i=0;i<2;i++)
for(j=1;j<3;j++)
{
a1=a[i][j];
b1=a[j][i];
a[i][j]=b1;
a[j][i]=a1;
}
for(i=0;i<3;i++)
for(j=0;j<3;j++)
{
printf("%d ",a[i][j]);
if(j==2)
printf(" ");
}
return 0;
}