fork download
  1. /* Kadai043 */
  2. /* 3×3 の arrayA の転置行列を求め、それと arrayB との行列同士の積を求めるプログラム
  3. を作成せよ。 */
  4. /* 2026.7.6 H.Funayama */
  5. #include <stdio.h>
  6. #define ARRAYSIZE 3
  7.  
  8. int main(void) {
  9. int arrayA[ARRAYSIZE][ARRAYSIZE] = { {1,1,1},{2,2,2}, {3,3,3} };
  10. int arrayB[ARRAYSIZE][ARRAYSIZE] = { {1,1,1},{1,1,1}, {1,1,1} };
  11.  
  12. int transA[ARRAYSIZE][ARRAYSIZE]; // Aの転置行列
  13. int arrayC[ARRAYSIZE][ARRAYSIZE]; // 積の結果
  14. int i, j, k;
  15.  
  16. /*転置行列*/
  17. for (i = 0; i < ARRAYSIZE; i++) {
  18. for (j = 0; j < ARRAYSIZE; j++) {
  19. transA[i][j] = arrayA[j][i];
  20. }
  21. }
  22.  
  23. /*行列の積 */
  24. for (i = 0; i < ARRAYSIZE; i++) {
  25. for (j = 0; j < ARRAYSIZE; j++) {
  26. arrayC[i][j] = 0;
  27. for (k = 0; k < ARRAYSIZE; k++) {
  28. arrayC[i][j] += transA[i][k] * arrayB[k][j];
  29. }
  30. }
  31. }
  32.  
  33. for (i = 0; i < ARRAYSIZE; i++) {
  34. for (j = 0; j < ARRAYSIZE; j++)
  35. printf("%3d", transA[i][j]);
  36.  
  37. if (i == ARRAYSIZE / 2)
  38. printf(" × ");
  39. else
  40. printf(" ");
  41.  
  42. for (j = 0; j < ARRAYSIZE; j++)
  43. printf("%3d", arrayB[i][j]);
  44.  
  45. if (i == ARRAYSIZE / 2)
  46. printf(" = ");
  47. else
  48. printf(" ");
  49.  
  50. for (j = 0; j < ARRAYSIZE; j++)
  51. printf("%3d", arrayC[i][j]);
  52.  
  53. printf("\n");
  54. }
  55.  
  56. printf("\n終了します。\n");
  57.  
  58. return 0;
  59. }
  60.  
  61.  
Success #stdin #stdout 0.01s 5328KB
stdin
{1,1,1},{2,2,2}, {3,3,3} {1,1,1},{1,1,1}, {1,1,1}
stdout
  1  2  3     1  1  1     6  6  6
  1  2  3 ×   1  1  1 =   6  6  6
  1  2  3     1  1  1     6  6  6

終了します。