質問: C言語のプログラミングについてです。 行列の積のプログラムを作ったのですが、2行目の答えが正しく計算されません。
回答: C言語の配列の添え字は0から始まります。 int a[2][3]; の宣言では 配列aのサイズは2*3=6個です。 アクセスするときはは a[0][0], a[0][1], a[0][2] a[1][0], a[1][1], a[1][2] とします。 行列の入力が煩わしいので変えました。 元のはコメント内にあります。 #define _CRT_SECURE_NO_WARNINGS #include int main() { int i, j, k, a[2][3], b[3][2], c[2][2]; printf("数値をスペースで区切って入力してください\n"); printf("行列Aの入力\n"); for (i = 0; i < 2; i++) { printf("a[%d][1]...a[%d][3]=", i+1, i+1); for (j = 0; j < 3; j++) { scanf("%d", &a[i][j]); } } printf("行列Bの入力\n"); for (j = 0; j < 3; j++) { printf("a[%d][1]...a[%d][2]=", j+1, j+1); for (k = 0; k < 2; k++) { scanf("%d", &b[j][k]); } } /* printf("行列Aの入力\n"); for (i = 0; i < 2; i++) { for (j = 0; j < 3; j++) { printf("a[%d][%d]=", i+1, j+1); scanf("%d", &a[i][j]); } } printf("行列Bの入力\n"); for (j = 0; j < 3; j++) { for (k = 0; k < 2; k++) { printf("b[%d][%d]=", j+1, k+1); scanf("%d", &b[j][k]); } } */ for (i = 0; i < 2; i++) { for (k = 0; k < 2; k++) { c[i][k] = 0; for (j = 0; j < 3; j++) { c[i][k] += a[i][j] * b[j][k]; } } } printf("行列の積\n"); for (i = 0; i < 2; i++) { for (k = 0; k < 2; k++) { printf("%3d ", c[i][k]); } printf("\n"); } }