问题 问答题

请编写函数fun(),该函数的功能是:实现B=A+A’,即把矩阵A加上A的转置,存放在矩阵B中。计算结果在main()函数中输出。
例如,输入下面矩阵:
1 2 3
4 5 6
7 8 9
其转置矩阵为:
1 4 7
2 5 8
3 6 9
则程序输出:
2 6 10
6 10 14
10 14 18
注意:部分源程序给出如下。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。
试题程序:
#include <stdio.h>
#include<conio.h>
void fun (int a[3][3], int b[3][3])


main ()

int a[3][3]=1,2,3, 4,5,6,7,8,9,t[3] [3];
int i, j;
clrscr ();
fun (a,t);
for(i=0; i<3; i++)
for (j=0; j<3; j++)
printf ("%7d",t [i] [j] );
printf ("\n");

答案

参考答案:

void fun (int a[C][C], int b[C][C])

{

int i,j;

for (i=0;i<C;i++)

for (j=0; j<C;j++)

b [i][j]=a[i][j] +a[j][i]; /*把矩阵a加上a的转置,存放在矩阵b中*/

}

解析:

在《线性代数》里面有矩阵转置的概念,行列数相等的二维数组的转置就是行列互换。即转置后的第i行第j列正好对应原矩阵的第j行第i列。

若要将矩阵a转置后还存入a中可用程序:

int i,j,t;

for(i=0;i<N;i++)

for(j=i;j<N;j++)

{t=a[i][j];a[i][j]=a[j][i];a[j][i]=t; }

注意第2个循环的初值。

若要将矩阵a转置后存入c中:

int i,j;

for(i=0;i<N;i++)

for(j=0;j<N;j++)

c[i][j]=a[j][i];

注意数组c和a的下标。

问答题
单项选择题