# define m 3
# define n 2
#include<stdio.h>
void input(int a[m][n])
{
int i,j;
printf("请输入数据:\n");
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
scanf("%d",&a[i][j]);
}
}
void output(int a[m][n])
{
int i,j;
for(i=0;i<n;i++)
{
for(j=0;j<m;j++)
printf(" %d",a[i][j]);
printf("\n");
}
}
void zhuanzhi(int a[m][n])
{
int i,j;
int b[n][m];
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
b[j][i]=a[i][j];
}
output(b);
}
void main()
{
int a[m][n];
input(a);
zhuanzhi(a);
}
#define m 3
#define n 2
#include<stdio.h>
void output(int a[m][n])
{
int i,j;
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
printf(" %d",a[i][j]);
printf("\n");
}
}
void input(int a[m][n])
{
int i,j;
printf("请输入数据:\n");
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
scanf("%d",&a[i][j]);
}
output(a);
}
void zhuanzhi(int a[m][n])
{
int i,j;
int b[2][3];
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
b[j][i]=a[i][j];
}
for(i=0;i<n;i++)
{
for(j=0;j<m;j++)
printf(" %d",b[i][j]);
printf("\n");
}
}
void main()
{
int a[m][n];
input(a);
zhuanzhi(a);
}
你的输出函数调用
output(b);
实参的类型和形参不匹配。
我这是两个数组,不是一样的吧
追答不好意思,看错啦~这样,是输出的问题,你看output(b),这个时候传递的参数是一个两行三列的,而output中的形参则是三行两列的,你将output中参数a[m][n]改为a[n][m]就可以啦~这个里面是值传递的问题,不是刚才说的转置的问题,你再试一下~
能不能说一下怎么改
追答在函数转置中输出数组b
追问我不就是这么写的么
追答不是通过函数调用输出,而是用for循环输出
追问谢谢
本回答被提问者采纳c语言求矩阵转置 结果老是不对,求解
实参的类型和形参不匹配。
矩阵转置的C语言实现,为什么答案总是错的,想了半天。。。运行的错误结果...
int main(void){ int i;int j;static int a[3][4]={{1,3,7,8},{2,5,6,9},{4,3,2,7}};static int b[4][3];for(i=0;i<3;i++)for(j=0;j<4;j++){ b[j][i]=a[i][j];} for(i=0;i<4;i++){ for(j=0;j<3;j++)printf("%d\\t",b[i][j]);printf(...
这个c语言程序为什么转置不成功?
因为矩阵转置是以主对角线为对称轴对调两侧的相应元素,所以只要遍历半个矩阵(矩阵的下三角区域)与另半个矩阵对调,就行了.你遍历了整个矩阵,等于整个矩阵以主对角线为轴对调了两次(转置了两次),所以矩阵没变.解决方法 把自定义的转置函数的内循环(for_j循环)终止条件由j小于3改成j小于i,就行了.完整...
c语言中,3行3列矩阵的转置,这样编写fun函数为什么不对?该怎样??
错了,这样下三角被上三角覆盖了 改为下面就可以了 void fun(int array[3][3]){int i,j,temp;for (i=0;i<3;i++)for (j=0;j<;j++){ trmp=array[i][j];array[i][j]=array[j][i];array[j][i]=temp;} } 其实很好理解,打个比方 int a=5,b=6;a=b;b=a;其实 ab的...
一个实现矩阵转置的程序,运行得了,但是结果不正确。是循环错了还是其他...
应该算是逻辑问题。错在这里:for(z1=0,z2=0;z1<m*n;z1=z1+n,z2++) { for(p1=a[0]+z1,p2=b[0]+z2;p1<a[0]+z1+n;p1++,p2=p2+n) { *p2=*p1; } } 外层for中每次z1的增量为“给二维数组的行向量分配的空间大小”, 而不是“输入矩阵每行的元素个数”, ...
我这个到底错哪了? C语言 “ 将一个3×3的矩阵转置,用一函数实现之...
问题很大,这个程序即使能交换也执行不了如,我改的 include<stdio.h> void main(){ int i,j,a[3][3];void exchange(int * a,int *b);printf("Please input the numbers in the book:\\n");for(i=0;i<3;i++)for(j=0;j<3;j++)scanf("%d",&a[i][j]);printf("before ...
我这个到底错哪了? C语言 “ 将一个3×3的矩阵转置,用一函数实现之...
你要明白一点,子函数中改变了,调用它的地方的参数是不会改变的,也就是说,子函数中的参数会另外开辟一块内存来保存这个数据,那么这个新开辟的内存中的数据改变了,原来的参数内存地址中的数据还是没有改变,指针也是不会改变的 指针能交换,道理是指针没有变,而指针指向的空间的数据改变了,所以...
c语言转置矩阵问题
或M-1)。如此,即可在循环中安全交换矩阵的元素,实现转置操作。正确执行C语言矩阵转置,需要关注数组维度的匹配以及循环条件的设定。通过确保行与列维度正确对应,以及合理设定循环范围,可以有效避免数组下标越界错误。正确处理这些细节,能够确保转置操作顺利进行,得到正确的结果矩阵。
c语言用指针求矩阵转置~
在C语言中,矩阵转置问题通过指针解决的方法有很多。首先,定义一个指针数组 int*p1[N],这里的N代表矩阵的行数。然而,当您传入参数a时,实际上传入的是一个指针,而非一个数组。这种参数类型不一致,导致了后续操作的错误。同时,转置函数trans()没有正确返回转置后的矩阵,使得main()函数中打印的...
C语言想要实现矩阵的转置,为什么出现的这样的结果
你这里i,j当下标的时候,需要printf(“%d\\t", a[i-1][j-1]),否则a[3][3]就越界了,下标是0开始的,要么就 for(int i = 0; i < 3; ++ i){ for(int j = 0; j < 3; ++ j){ printf("%d\\t", a[i][j]);} printf("\\n");} ...