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