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の値が大きいと,このアルゴリズムは大幅に速度を向上させる.彼がどのようにこのアルゴリズムを考え出したのか分からない.