8.4与えられた二次元配列(3)を作成する関数を書きます.×3)転置,すなわち行列交換.
1187 ワード
3日間も当直していたのに,夜は家にいなかった.今日は8章の関数を発見して1ヶ月前に見たことがありますが、中には忘れ物がたくさんあります.もう見たくないので、授業後の練習問題を直接やりましょう.私はこのように8.4を解いた.
#include//8.4 , (3×3) , 。
void input(int a[3][3])
{
int i,j;
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
{
printf(" a[%d][%d]=",i,j);
scanf("%d",&a[i][j]);
fflush(stdin);
}
}
}
void display(int a[3][3])
{
int i,j;
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
{
printf("a[%d][%d]=%d ",i,j,a[i][j]);
}
printf("
");
}
}
void change(int a[3][3])
{
int b[3][3],i,j;
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
{
b[i][j]=a[j][i];
}
}
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
{
a[i][j]=b[i][j];
}
}
}
int main()
{
int a[3][3];
input(a);
printf(" :
");
display(a);
change(a);
printf(" :
");
display(a);
return 0;
}
そして参考書の答えを読みました.転置部分の参考書では、次のように実現されています.for(i=0;i
j=i+1という条件で、転置部は3回だけ運転して終了していることに注意してください.実行速度は私が書いたよりずっと速いですが、プログラムは理解しにくいです.Nが他の値であれば実現できるだろうが,Nの値が大きいと,このアルゴリズムは大幅に速度を向上させる.彼がどのようにこのアルゴリズムを考え出したのか分からない.