问答题
编写程序,实现矩阵(3行3列)的转置f即行列互换)。
例如,输入下面的矩阵:
100 200 300
400 500 600
700 800 900
程序输出:
100 400 700
200 500 800
300 600 900
请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
给定源程序:
#include<stdio.h>
void fun(int array[3][3])
{
}
main()
{
int i, j;
int array[3][3]={{100, 200, 300},
{400, 500, 600},
{700, 800, 900}};
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");
}
}
【正确答案】
【答案解析】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[j][i]=t;
}
}
[解析] 要实现矩阵转置,即将右上角数组元素和左下角数组元素对换,本题通过数组元素交换方法,完成矩阵转置操作。
因为对矩阵转置后仍然存回其本身,所以只能循环矩阵中的一个角(本程序是右上半三角)。控制右上半三角的方法是在内层循环中循环变量j从i+1或j开始。