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

admin2017-02-24  90

问题 编写程序,实现矩阵(3行、3列)的转置(即行列互换)。
例如,若输入下面的矩阵:
100  200  300
400  500  600
700  800  900
则程序输出:
100  400  700
200  500  800
300  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  {
6
7  }
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[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[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[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开始。
转载请注明原文地址:https://kaotiyun.com/show/0MDp777K
0

最新回复(0)