问答题 编写程序,实现矩阵(3行、3列)的转置(即行列互换)。 例如,若输入下面的矩阵: 100 200 300 400 500 600 700 800 900则程序输出: 100 400 700 200 500 800 300 600 900 注意:部分源程序在文件PROGI.C中。 请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。 试题程序:#include < stdio.h >#include < conio.h >#include < stdlib.h >voici fun (int array[3][3]) {}void main () { FILE *wf;int i,j,int array [3] [3] = { {100,200,300 },{400,500,600 }, {700,800,900 } };system "'CLS ") ;for(i=0;i < 3;i++){for(j=0;j < 3;j++)printf ("% 7d ",array[i][j]):printf ("/n ") ;}fun (array) ;printf ("converted array:/n ") ;for(i=0;i < 3;i++){for(j=0; j < 3;j++)printf ( "%7d ", array [ i][j]);printf ("/n ") :}/*********found*********/wf = fopen ("out.dat", "w") ;for(i=0;i < 3;i++){for(j=0;j < 3;j++)fprintf ( wf, "% 7d ",array[ i] [ j ] ) ; fprintf (wf, "/n") ; fclose (wf);/*********found*********/}
【正确答案】正确答案:void fun (int array[3][3]) { int i,j,t; for(i=0;i < 3;i++)/*将右上三角和左下三角对换,实现行列互换*/ for(j=i+l;j < 3;j++) {t=array[i][j]; array[i][j] =array[j][i]; array[j][i] =t; } }
【答案解析】解析:要实现矩阵转置,即将右上角数组元素和左下角数组元素对换,本题通过数组元素交换方法,完成矩阵转置操作。因为对矩阵转置后仍然存回其本身,所以只能循环矩阵中的一个角(本程序是右上半三角)。控制右上半三角的方法是在内层循环中循环变量j从i+1或i开始。