• ベストアンサー

初心者です。プログラミング 3×3行列の積

先日、課題が出されて、1週間ほど考えてはみたのですがわからなかったため質問させていただきます。 3行3列の行列の積を求めるプログラムを作成しなさい。ただし、各行列要素は疑似乱数を使って値を求めるようにしなさい。また各行列要素は二桁以下の整数とし、行列の積を計算する部分を関数で行うようにしなさい。という問題なんですが、どなたかわかる方がいらっしゃいましたらご回答よろしくお願いいたします。できれば詳しく式などを書いていただきたいです。

質問者が選んだベストアンサー

  • ベストアンサー
  • asuncion
  • ベストアンサー率33% (2127/6289)
回答No.1

#include <stdio.h> #include <stdlib.h> #include <time.h> #define N (3) void input(int (*a)[N], int (*b)[N]) { int i, j; for (i = 0; i < N; i++) { for (j = 0; j < N; j++) { a[i][j] = rand() % 100; b[i][j] = rand() % 100; } } } void multiple(int (*a)[N], int (*b)[N], int (*c)[N]) { int i, j, k; for (i = 0; i < N; i++) { for (j = 0; j < N; j++){ for (c[i][j] = k = 0; k < N; k++) { c[i][j] += a[i][k] * b[k][j]; } } } } void print(int (*a)[N], int (*b)[N], int (*c)[N]) { int i, j; for (i = 0; i < N; i++) { for (j = 0; j < N; j++) { printf("%2d ", a[i][j]); } printf("%s", (i == 1) ? "* " : " "); for (j = 0; j < N; j++) { printf("%2d ", b[i][j]); } printf("%s", (i == 1) ? "= " : " "); for (j = 0; j < N; j++) { printf("%6d ", c[i][j]); } putchar('\n'); } } int main(void) { int a[N][N], b[N][N], c[N][N]; srand((unsigned int) time(NULL)); input(a, b); multiple(a, b, c); print(a, b, c); return 0; }

関連するQ&A