fork download
  1. /**
  2.  * This code is based on below article:
  3.  * https://d...content-available-to-author-only...o.jp/qa/question_detail/q10186458910
  4.  * Copyright is almost like public domain.
  5.  * https://a...content-available-to-author-only...o.jp/docs/info/terms/chapter1.html#cf3rd
  6.  */
  7. #include <stdio.h>
  8.  
  9. int a[4][3], b[3][4], c[4][4] = {0}; // ここで折角グローバル変数を宣言した意味を考えましょう.
  10.  
  11. void mat_mul(const int a[4][3], const int b[3][4], int c[4][4]) {
  12. int i, j, k;
  13. for (i = 0; i < 4; i++) // ; は不要.
  14. for (j = 0; j < 4; j++)
  15. for (k = 0; k < 3; k++) // ; は不要.
  16. c[i][j] += a[i][k] * b[k][j]; // = だと加算されないので += でなければ駄目.
  17. }
  18.  
  19. void mat_print(const int c[4][4]) {
  20. int i, j;
  21. for (i = 0; i < 4; i++) { // L21-25 に { } が必要(※1 は i のループ毎に実行).
  22. for (j = 0; j < 4; j++)
  23. printf("%4d", c[i][j]); // ※1
  24. putchar('\n');
  25. }
  26. }
  27.  
  28. void input_matrix() {
  29.  
  30. // int m1[4][3], m2[3][4]; // ローカル変数なのでこれに代入しても input_matrix() 外に渡せない.
  31. int i;
  32.  
  33. printf("4行3列の行列を入力せよ。(数字と数字の間は半角スペース)\n");
  34. for (i = 0; i < 4; i++) {
  35. // scanf("%d %d %d", &m1[i][0], &m1[i][1], &m1[i][2]);
  36. scanf("%d %d %d", &a[i][0], &a[i][1], &a[i][2]); // グローバル変数の a に代入.
  37. }
  38.  
  39. printf("3行4列の行列を入力せよ。(数字と数字の間は半角スペース)\n");
  40. for (i = 0; i < 3; i++) {
  41. // scanf("%d %d %d %d", &m2[i][0], &m2[i][1], &m2[i][2], &m2[i][3]);
  42. scanf("%d %d %d %d", &b[i][0], &b[i][1], &b[i][2], &b[i][3]); // グローバル変数の b に代入.
  43. }
  44. }
  45.  
  46. int main(void) {
  47. // int m1, m2, m3; // ※2
  48. input_matrix(); // 標準入力からグローバル変数 a, b に値を読み込む.
  49. // mat_mul(m1, m2, m3); // ※2 の m1, m2, m3 は int. mat_mul() は int 配列を渡す必要がある.
  50. mat_mul(a, b, c); // グローバル変数 a, b, c を渡す.
  51. puts("積");
  52. // mat_print(m3); // ※2 の m3 は int. mat_print() は int 配列を渡す必要がある.
  53. mat_print(c); // グローバル変数の c を渡す.
  54.  
  55. return 0;
  56. }
  57.  
Success #stdin #stdout 0s 4312KB
stdin
1 2 3
4 5 6
7 8 9
10 11 12
1 2 3 4
5 6 7 8
9 10 11 12
stdout
4行3列の行列を入力せよ。(数字と数字の間は半角スペース)
3行4列の行列を入力せよ。(数字と数字の間は半角スペース)
積
  38  44  50  56
  83  98 113 128
 128 152 176 200
 173 206 239 272