编写程序,实现矩阵(3行3列)的转置(即行列互换)。 例如,若输入下面的矩阵: 100 200 300 400 500 600 700 800 900 则程序输出: 100 400 700 200

admin2010-05-05  37

问题 编写程序,实现矩阵(3行3列)的转置(即行列互换)。
   例如,若输入下面的矩阵:
   100  200  300
   400  500  600
   700  800  900
   则程序输出:
   100  400  700
   200  500  800
   300  600  900
   注意:部分源程序给出如下。
   请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。
   试题程序:
       #include <stdio.h>
       #include <conio.h>
       int fun (int array[3][3])
       {
       }
       main()
       {
         int i,j;
         int array [3][3]={{100,200,300},{400,
                      500,600},{700,800,900}};
         clrscr();
         for (i-0;i<3;i++)
           {for (j=0;j<3;j++)
               printf("%7d ",array [j]);
            printf("\n ");
           }
         fun(array);
         printf("Converted array:\n ");
         for (i=0;i<3;i++)
           { for (j=0;j<3;j++)
               printf("%7d ",array[j]);
            printf("\n ");
           }
       }

选项

答案int 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[j][i]=t; } }

解析 注意对矩阵转置后仍然存回其本身时,只能循环矩阵中的一个角(本程序是右上半三角)。控制右上半三角的方法是在第2个循环中j从i+1或i开始,左下半三角的方法是在第2个循环中写成for(j=0;j<i;j++),若要控制所有元素在第2个循环要写成for(j=0;j<3;j++)。
转载请注明原文地址:https://jikaoti.com/ti/6SkiFFFM
0

最新回复(0)