正方行列の積を求めるコードを書いています。dt1,dt2,dt3という三つの正方行列を用意して、dt3にdt1×dt2の結果が入力されるようにしました。この時dt3には、{{11,14},{18,23}}が入るはずですが、{{15,20}{24,31}}となってしまいます。どこが間違っているのでしょうか。教えていただきたいです。
また、ついでの質問になってしまうのですが、n次正方行列のnは#define ARRAY_SIZE 2の定義方法(2の部分をその都度変えていく)であっているのでしょうか。また、その時の初期化はどのように行えばよいのでしょうか。
よろしくお願いいたします。
c
1#include <stdio.h> 2 3#define ARRAY_SIZE 2 4 5int doub(int dt1[ARRAY_SIZE][ARRAY_SIZE], int dt2[ARRAY_SIZE][ARRAY_SIZE], int dt3[ARRAY_SIZE][ARRAY_SIZE]); 6 7int doub(int dt1[ARRAY_SIZE][ARRAY_SIZE], int dt2[ARRAY_SIZE][ARRAY_SIZE], int dt3[ARRAY_SIZE][ARRAY_SIZE]) { 8 9 for (int i = 0; i < ARRAY_SIZE; i++) { 10 for (int j = 0; j < ARRAY_SIZE; j++) { 11 for (int k = 0; k < ARRAY_SIZE; k++) { 12 13 dt3[i][j] += dt1[i][k] * dt2[k][j]; 14 15 } 16 } 17 } 18 return dt3[ARRAY_SIZE][ARRAY_SIZE]; 19} 20 21int main(void) 22{ 23 int dt1[][ARRAY_SIZE] = { {1,2},{2,3} }; 24 int dt2[][ARRAY_SIZE] = { {3,4},{4,5} }; 25 int dt3[][ARRAY_SIZE] = { {0,0},{0,0} }; 26 27 doub(dt1, dt2, dt3); 28 29 printf("dt1×dt2=\n"); 30 31 for (int i = 0; i < ARRAY_SIZE; i++) { 32 for (int j = 0; j < ARRAY_SIZE; j++) { 33 printf("%3d", dt3[i][j]); 34 } 35 printf("\n"); 36 } 37 38 return 0; 39}
回答4件
あなたの回答
tips
プレビュー