问答题 编写程序,实现矩阵(3行、3列)的转置(即行列互换)。例如,若输入下面的矩阵:100 200 300400 500 600700 800 900则程序输出:100 400 700200 500 800300 600 900注意:部分源程序在文件PROG1.C中。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。试题程序:1 #include<stdio.h>2 #include<conio.h>3 #include<stdlib.h>4 void fun(int array[3][3])5 {67 }8 void main()9 {10 FILE,lc Wf;11 int i,j;12 int array[3][3]={{100,200,300),{400,500,600),{700,800,900});13 system("CLS");14 for(i=0;i<3;i++)15 { for(j=0;j<3;J++)16 printf("%7d",array[i][j]);17 printf("\n");18 }19 fun(array);20 printf("Converted array:\n");21 for(i=0;i<3;i++)22 { for(j=0;j<3;j++)23 printf("%7d",array[i][j]);24 printf("\n");25 }26 /*********found*********/27 wf=fopen(”out.dat”,”w”);28 for(i=0;i<3;i++)29 { for(j=0;j<3;j++)30 fprintf(wf,"%7d",array[i][j]);31 fprintf(wf,"\n");32 }33 fclose(wf);34 /*********found*********/35 }
【正确答案】正确答案:Void fun(int array[3][3]) { int i,j,t; for(i=0;i<3;i++)/*将右上三角和左下三角对换,实现行列互换*/ for(j=i+1;j<3;j++) {t=array[i][j]; array[[i][j]=array[j][i]; array[i][j]=array[i][j]; array[j][i]=t; } }
【答案解析】解析:要实现矩阵转置,即将右上角数组元素和左下角数组元素对换,本题通过数组元素交换方法,完成矩阵转置操作。 因为对矩阵转置后仍然存回其本身,所以只能循环矩阵中的一个角(本程序是右上半三角)。控制右上半三角的方法是在内层循环中循环变量j从i+1或i开始。