fork download
  1. #include <stdio.h>
  2.  
  3. // 行列のサイズを定義
  4. #define M 4 // aの行数(縦)
  5. #define N 3 // aの列数 兼 bの行数
  6. #define K 4 // bの列数(横)
  7.  
  8. int main(void) {
  9. // aは 4行3列 (M x N)
  10. int a[M][N] = {
  11. {1, 2, 3},
  12. {4, 5, 6},
  13. {7, 8, 9},
  14. {0, 9, 8}
  15. };
  16.  
  17. // bは 3行4列 (N x K)
  18. int b[N][K] = {
  19. {1, 2, 3, 4},
  20. {5, 6, 7, 8},
  21. {9, 0, 9, 8}
  22. };
  23.  
  24. // 計算結果の sum は 4行4列 (M x K) になる
  25. int sum[3][K];
  26.  
  27. // --- 行列の掛け算処理(3重ループ) ---
  28. for (int i = 0; i < 3; i++) { // aの行を上から順に(4回)
  29. for (int j = 0; j < K; j++) { // bの列を左から順に(4回)
  30.  
  31. sum[i][j] = 0; // 計算を始める前に中身を0にリセット
  32.  
  33. for (int x = 0; x < N; x++) { // aの横移動 と bの縦移動(3回)
  34. sum[i][j] += a[i][x] * b[x][j];
  35. }
  36.  
  37. }
  38. }
  39.  
  40. // --- 結果の表示 ---
  41. printf("--- 計算結果 (4行4列) ---\n");
  42. for (int i = 0; i < 3; i++) {
  43. for (int j = 0; j < K; j++) {
  44. printf("%3d ", sum[i][j]); // %3d で数字の幅を綺麗に揃える
  45. }
  46. printf("\n"); // 1行表示し終わったら改行
  47. }
  48.  
  49. return 0;
  50. }
Success #stdin #stdout 0.01s 5320KB
stdin
15 11 22 33 44 
stdout
--- 計算結果 (4行4列) ---
 38  14  44  44 
 83  38 101 104 
128  62 158 164