题目:
写一个函数,使给定的一个二维数组(3×3)转置,即行列互换。
解题思路:
本函数的功能是实现转置,输入一个二维数组,输出转置后的二维数组。
在转置过程中当i,j值不相等时,就把a[i][j]=a[j][i];这段操作是交换而不是代替
因此需要临时变量t=a[i][j]; a[i][j]=a[j][i]; a[j][i]=t;
更简单的办法是直接循环输出的时候选择输出a[j][i],但这毕竟达到不了锻炼的目的,但也是一种好思路。
注意事项:
①首先输入时不能直接输入一个数组,需要遍历输入,两个循环先行后列
②在转置时也是只需要遍历上三角,也就是i<=j的情况,否则值会和原来一样,依然是需要双层循环
③在初始化时需要给数组分配空间,本题使用3即可
④虽然是数组,但是应该用int类型(不知为何总想着用char)
⑤注意数组可能越界,在循环时如果写for(i=1;i<=3;i++)那么就会越界,此时数组应该开到4
参考代码:
先记录一下刚做题时天真的代码(哈哈)很多问题,不忍直视
#include<stdio.h> int main() { void reverse(char a[i][j]); char a[i][j]; scanf("%s",&a[i][j]); a[i][j]=reverse(char a[i][j]); printf("%s",a[i][j]); return 0; } void reverse(char a[i][j]) { char a[i][j]; char a[m][n]; if(i<=j) { a[m][n]=a[i][j]; a[i][j]=a[j][i]; a[j][i]=a[m][n]; } return a[i][j]; }
下面才是正确的~
#include<stdio.h> int main() { int a[3][3]; int i,j; for(i=0;i<3;i++) { for(j=0;j<3;j++) { scanf("%d",&a[i][j]); } } reverse(a); for(i=0;i<3;i++) { for(j=0;j<3;j++)//不要随便写,会有数组越界问题的 { printf("%d ",a[i][j]); } printf("\n");//注意换行时机 } return 0; } void reverse(int a[3][3])//一开始的错误,写了a[i][j] { int t,i,j; for(i=0;i<3;i++) { for(j=0;j<3;j++) { if(i<=j) { t=a[i][j]; a[i][j]=a[j][i]; a[j][i]=t; } } } }
0.0分
0 人评分
C二级辅导-进制转换 (C语言代码)浏览:750 |
C二级辅导-公约公倍 (C语言代码)浏览:537 |
蛇行矩阵 (C语言代码)浏览:559 |
矩形面积交 (C语言代码)浏览:1433 |
C语言训练-大、小写问题 (C语言代码)浏览:719 |
A+B for Input-Output Practice (IV) (C语言代码)浏览:529 |
C语言程序设计教程(第三版)课后习题8.6 (C语言代码)浏览:854 |
【偶数求和】 (C++代码)浏览:744 |
C语言程序设计教程(第三版)课后习题5.7 (C语言代码)浏览:1207 |
求教大神。。。。1063,统计字符。浏览:11704 |