fork download
  1. #include <stdio.h>
  2.  
  3. #define SIZE 5
  4.  
  5. // 行列の掛け算を行う関数 (R = M1 * M2)
  6. void multiply_matrices(double m1[SIZE][SIZE], double m2[SIZE][SIZE], double r[SIZE][SIZE]) {
  7. // 結果を格納する配列を一度0で初期化
  8. for (int i = 0; i < SIZE; i++) {
  9. for (int j = 0; j < SIZE; j++) {
  10. r[i][j] = 0;
  11. }
  12. }
  13.  
  14. // 行列の積の定義に基づいて計算
  15. for (int i = 0; i < SIZE; i++) {
  16. for (int j = 0; j < SIZE; j++) {
  17. for (int k = 0; k < SIZE; k++) {
  18. r[i][j] += m1[i][k] * m2[k][j];
  19. }
  20. }
  21. }
  22. }
  23.  
  24. // 行列を表示する関数
  25. void print_matrix(double m[SIZE][SIZE]) {
  26. for (int i = 0; i < SIZE; i++) {
  27. for (int j = 0; j < SIZE; j++) {
  28. // 小数点以下をきれいに揃えて表示
  29. printf("%6.0f\t", m[i][j]);
  30. }
  31. printf("\n");
  32. }
  33. }
  34.  
  35. int main() {
  36. // 1. 初期行列 A の定義
  37. double A[SIZE][SIZE] = {
  38. {10, -2, 0, 0, 0},
  39. {-2, 9, -1, 0, 0},
  40. { 0, -1, 8, -2, 0},
  41. { 0, 0, -2, 7, -1},
  42. { 0, 0, 0, -1, 5}
  43. };
  44.  
  45. double A2[SIZE][SIZE]; // A^2 を格納する配列
  46. double A3[SIZE][SIZE]; // A^3 を格納する配列
  47.  
  48. // 2. A^2 = A * A を計算
  49. multiply_matrices(A, A, A2);
  50.  
  51. // 3. A^3 = A^2 * A を計算
  52. multiply_matrices(A2, A, A3);
  53.  
  54. // 4. 結果の表示
  55. printf("--- 行列 A^2 の結果 ---\n");
  56. print_matrix(A2);
  57.  
  58. printf("\n--- 行列 A^3 の結果 ---\n");
  59. print_matrix(A3);
  60.  
  61. return 0;
  62. }
Success #stdin #stdout 0s 5312KB
stdin
Standard input is empty
stdout
--- 行列 A^2 の結果 ---
   104	   -38	     2	     0	     0	
   -38	    86	   -17	     2	     0	
     2	   -17	    69	   -30	     2	
     0	     2	   -30	    54	   -12	
     0	     0	     2	   -12	    26	

--- 行列 A^3 の結果 ---
  1116	  -552	    54	    -4	     0	
  -552	   867	  -226	    48	    -2	
    54	  -226	   629	  -350	    40	
    -4	    48	  -350	   450	  -114	
     0	    -2	    40	  -114	   142