ページ 11

質問です

Posted: 2009年7月07日(火) 23:17
by ユーリ
#include <stdio.h>

int main(void)
{
	int i,j,k;
	int a[3][3]={{0,1,2},{1,2,3,},{2,3,4}};
	int b[3][3]={{0,1,2},{1,2,3,},{2,3,4}};
	int c[3][3];
printf("行列A\n");
         for(i=0; i<3; i++){
		printf("%d %d %d",a[0],a[1],a[2]);
				printf("\n");
			}
		printf("行列B\n");
		for(i=0; i<3; i++){
				printf("%d %d %d",a[0],a[1],a[2]);
				printf("\n");
			}
				for(i=0; i<3; i++){
			for(j=0; j<3; j++){
		for(k = 0; k<3; k++){
				c[j]=a[k]*b[k][j];
			}
		}
	}
		printf("行列C\n");
		for(i=0;i<3;i++){
			for(j=0;j<3;j++){
				
				printf("%5d", c[j]);
         }
				printf("\n");
			
			}
		
				
	return 0;
}

行列の積の計算をするプログラムを作りたいのですがどこが間違っているのでしょうか?
よろしければ教えてください。

Re:質問です

Posted: 2009年7月07日(火) 23:44
by conio
--------------------------------
for(i=0; i<3; i++){
  for(j=0; j<3; j++){
    for(k = 0; k<3; k++){
        c[j]=a[k]*b[k][j];
    }
  }
}
--------------------------------
この部分を順に、どのように計算されているかを調べれば良いのでは無いでしょうか。

下記のようにすれば、恐らく原因が分かるはずです。
--------------------------------
for(i=0; i<3; i++){
  for(j=0; j<3; j++){
    for(k = 0; k<3; k++){
        c[j]=a[k]*b[k][j];
        printf("c[%d][%d] = a[%d][%d] * b[%d][%d]", i,j,i,k,k,j);
        printf("( %d = %d * %d )\n", c[j], a[k], b[k][j]);
    }
  }
}
--------------------------------

あと、見たところ配列Cが初期化されて無いです。

Re:質問です

Posted: 2009年7月08日(水) 01:23
by ユーリ
ありがとうございました。
解決いたしました。