fork download
  1. // 課題043
  2. //3*3のarrayAの転置行列を求め、arrayBとの行列同士の積を求めるプログラム
  3. // 2026.07.04 24A2021 伊藤宗兼
  4.  
  5. #include <stdio.h>
  6. #define ARRAYSIZE 3
  7. int main(void) {
  8. int arrayA[ARRAYSIZE][ARRAYSIZE] = { {1,1,1},{2,2,2},{3,3,3} };
  9. int arrayB[ARRAYSIZE][ARRAYSIZE] = { {1,1,1},{1,1,1},{1,1,1} };
  10. int arrayC[ARRAYSIZE][ARRAYSIZE];//arrayAの転置行列
  11. int arrayD[ARRAYSIZE][ARRAYSIZE];//積の結果
  12. int i, j, k;
  13.  
  14. //arrayAの転置行列を求める----------------------------------------------------
  15. for (i = 0; i < ARRAYSIZE; i++) {//結果の行番号
  16. for (j = 0; j < ARRAYSIZE; j++) {//結果の列番号
  17. arrayC[j][i] = arrayA[i][j];
  18. }
  19. }
  20. //転置行列とarrayBの積を求める-----------------------------------------------
  21. for (i = 0; i < ARRAYSIZE; i++) {//結果の行番号
  22. for (j = 0; j < ARRAYSIZE; j++) {//結果の列番号
  23. arrayD[i][j] = 0;//初期化
  24. for (k = 0; k < ARRAYSIZE; k++) {//内積計算用
  25. arrayD[i][j] += arrayC[i][k] * arrayB[k][j];
  26. }
  27. }
  28. }
  29.  
  30. //行列の式を見やすく表示する-------------------------------------------------
  31. for (i = 0; i < ARRAYSIZE; i++) {
  32. for (j = 0; j < ARRAYSIZE; j++)
  33. printf("%3d", arrayC[i][j]);
  34. if (i == ARRAYSIZE / 2)
  35. printf(" ×");
  36. else
  37. printf(" ");
  38. for (j = 0; j < ARRAYSIZE; j++)
  39. printf("%3d", arrayB[i][j]);
  40. if (i == ARRAYSIZE / 2)
  41. printf(" =");
  42. else
  43. printf(" ");
  44. for (j = 0; j < ARRAYSIZE; j++)
  45. printf("%3d", arrayD[i][j]);
  46. printf("\n");
  47. }
  48. printf("\n 終了します。\n");
  49. return 0;
  50. }
Success #stdin #stdout 0s 5320KB
stdin
Standard input is empty
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

 終了します。