解题思路:声明两个数组a[3][3],b[3][3],后者存放转置后的元素。先用for循环嵌套输入a数组元素,接着(关键点)是转置:我们把二维数组看成矩阵,或者说坐标系,这样就很容易想到,行列互换就是横纵坐标对应的元素互换。用代码描述就是b[j][i]=a[i][j]。最后输出b数组就行了。
注意事项:输出b数组时不能把for循环嵌套这部分放到main函数中,不然会输出9个奇怪的数。因为,b数组作用域在自定义函数内。
还有,自定义函数中不要对数组a再定义,否则会重定义;也不要把数组b放到main函数中,不然自定义函数缺少数组b的声明。
参考代码:
#include<stdio.h> void zhuanzhi(int a[3][3]) { int b[3][3]; int i,j; //转置 for(i=0; i<3; i++) { for(j=0; j<3; ++j) { b[j][i]=a[i][j]; } } //输出 for(i=0; i<3; i++) { for(j=0; j<3; j++) { printf("%d ", b[i][j]); } printf("\n"); } } int main() { int i,j; int a[3][3]; //输入 for(i=0; i<3; i++) { for(j=0; j<3; ++j) { scanf("%d", &a[i][j]); } } zhuanzhi(a); return 0; }
0.0分
44 人评分
#include<stdio.h> #define a 3 #define b 3 int main() { void transform(int array[a][b]){ for(int i=0;i<a;i++){ for(int j=0;j<b;j++){ printf("%d ",array[j][i]); } printf("\n"); } } int array[a][b]; for(int i=0;i<a;i++){ for(int j=0;j<b;j++){ scanf("%d ",&array[i][j]); } } transform(array); return 0; }
为什么要声明两个数组,只声名一个a【3】【3】,输入a[i][j],打印a[j][i]不就可以了吗
呵呵 2021-09-29 19:35:05 |
我这么搞的最后出来了一堆很奇怪的数字,但是不知道原因是什么
superks 2021-10-24 20:43:13 |
他要函数啊
冰雹追不上的男人 2021-12-31 09:52:13 |
#include<stdio.h> int main() { int a[3][3]; for(int i=0;i<3;i++) { for(int j=0;j<3;j++) { scanf("%d",&a[i][j]); } } for(int i=0;i<3;i++) { for(int j=0;j<3;j++) { int temp=i; i=j; j=temp; printf("%d",a[i][j]); } printf(" "); } return 0; }
冰雹追不上的男人 2021-12-31 09:54:35 |
这个为啥不行
这个·直接在自定义函数里面打印a[j][i]可以么,我写的话说格式不对
为什么我定义数组a[2][2]就不行,我用的方法和楼主的一样,我调试的时候,每次一到每行最后一个时,那个数都会自动加一,就是3会变成4储存,6会变成7储存,9会变成10储存,其他的又没变
【亲和数】 (C语言代码)浏览:541 |
C语言程序设计教程(第三版)课后习题6.10 (C语言代码)浏览:900 |
字符逆序 (C语言代码)浏览:645 |
计算质因子 (C语言代码)浏览:778 |
输入输出格式练习 (C语言代码)浏览:883 |
C语言程序设计教程(第三版)课后习题12.3 (C语言代码)浏览:587 |
C语言程序设计教程(第三版)课后习题7.5 (C语言代码)浏览:712 |
找出最长的字符串来 (C语言代码)浏览:1840 |
神奇的fans (C语言代码)浏览:1124 |
C语言程序设计教程(第三版)课后习题11.8 (C语言代码)浏览:1060 |