在主函数中输入一个矩阵,调用函数对其进行转置,在主函数中输出结果

#include <stdio.h>int a[2][3];int x, y, R;
int change(int x,int y,int R){ int b[3][2]; for (x=0;x<3;x++) for (y=0;y<2;y++) b[x][y]=a[y][x];
for (x=0;x<3;x++) for (y=0;y<2;y++) { R=b[x][y]; return (R); }}
void main(){ int i,j,r; for (i=0;i<2;i++) for (j=0;j<3;j++) { scanf("%d",a[i][j]); r=change(x,y,R); printf("%5d",r); }

}这是我做的程序。系统是win7的,不兼容c++。做了以后无法正常运行。请问一下这个程序对了错了。顺路求改正或者指点。

楼上说的对,首先是取地址符又没加上。这个细节很重要,以后数组和指针学多了你就知道了&的重要性。其次,你这个子函数的返回值正常情况下是只能有一个的,用指针和定义数组子函数是可以返回很多值,但不属于通常意义下的范畴。你用for循环不断的return是不对的,编译不会通过。如果你害怕return值做不好,可以在把子函数定义为void型。调用的时候还有个最重要的知识点:传值和传址要看透彻,如果以后想用子函数使程序模块化,这个概念就是根本。以后学数据结构还要用到。另外在以后提问的时候要说明这个程序的目的是什么,你的思路是什么。你定义的变量都是些什么东西。稍微大点的程序如果再仅仅把代码发上来就很少有人愿意做了,看起来很费劲。追问

谢谢。请问下return0,return1之类的代码是什么意思啊。我们课本上这一个点根本没介绍。
还有怎么把整个数组传递给change函数啊。

追答

return的值作为子函数对主调函数的返回信息,通过这个信息主调函数可以做出判断进而进行下一步。或者就是子函数结束,因为函数执行到return就结束了。如果课本上没有介绍的话你就把函数定义为void类型,返回的就是空类型,不需要return值。至于数组的传递到你学到传值的时候就会学到,现在说你也不一定听得懂。现在你就把数组的概念弄懂,到时候数组的传值问题一学就会。

温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2018-04-12
第一错
scanf("%d",a[i][j])
scanf("%d",&a[i][j])
少了&
第二错
int change函数
运行后只会返回a[0][0]
int change函数只会返回一个值
行列转置
#include <stdio.h>
int main()
{ int i,j,a[2][3];
for(i=0;i<2;i++)
for(j=0;j<3;j++)
scanf("%d",&a[i][j]);
for(j=0;j<3;j++)
for(i=0;i<2;i++)
printf("%d%s",a[i][j],(i+1)%2==0?"\n":" ");
return 0;
}本回答被网友采纳
相似回答