有一个矩阵,数据如图所示,在数组初始化时给数组赋值,然后将矩阵转置。
- 提问者网友:雾里闻花香
- 2021-01-02 17:39
1 2 3
4 5 6
7 8 9
}
转化矩阵{
1 4 7
2 5 8
3 6 9}
矩阵的转置就是将第i行第j列的元素与第j行第i列的元素互换。转置后的矩阵如图所示。
- 五星知识达人网友:罪歌
- 2021-01-02 18:20
main(){
int a[3][3]={{1,2,3},{4,5,6},{7,8,9}};
int b[3][3];
int temp,i;
for(i=0;i<3;i++){
for(j=0;j<3;j++){
b[j][i]=a[i][j];
}
}
printf("array A is:");
for(i=0;i<3;i++){
for(j=0;j<3;j++){
printf("\t%d",a[i][j]); }
}
for(i=0;i<3;i++){
for(j=0;j<3;j++){
printf:("\t%d",b[i][j]); }
}
}
- 1楼网友:你哪知我潦倒为你
- 2021-01-02 19:12
解决了,详见注释。你可以学习一下调试的方法,这样以后这种简单问题就不需要别人帮忙了,而且调试的时候会大大提升你的编程能力。
你的问题主要出在边界控制上,可以一步一步跟着分析一下。
#include<stdio.h> int main() { int n; printf("请输入矩阵阶数:");scanf("%d",&n);printf("\n\n\n"); int paixu(int n); paixu(n); return 0; } int paixu(int n) { int b[100][100]; int i,j,k,m=1; for(k=0,i=0,j=-1;k<(n+1)/2;) //控制螺旋矩阵闭合圈数的循环 { //注意循环结束条件 每次for循环结束后i/j的值都多移动了1 应修正之 //每次某方向到头之后 要向下一个方向移动1 否则会覆盖 for(j++;j<n-k;j++) //向右赋值,移动 { b[i][j]=m++; } j--;//回调 for(i++;i<n-k;i++) //向下赋值 { b[i][j]=m++; } i--; for(j--;j>=k;j--) //向左赋值,k从0起 { b[i][j]=m++; } j++; k++;//即将转完一圈避免覆盖,也可将下一句写为i>k而把k++放到外层for循环中 for(i--;i>=k;i--) //向上赋值 { b[i][j]=m++; } i++; }
for(i=0;i<n;i++) { for(j=0;j<n;j++) { printf("%d\t",b[i][j]); if(j==n-1)printf("\n\n\n\n"); //每输出4列换一行输出 } } return 0; }