• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:C言語です)

C言語で行列の積を計算するプログラム

このQ&Aのポイント
  • C言語のプログラムで行列の積を計算する方法について解説します。
  • 行列の積を計算する際に、初期化のタイミングを間違えると実行結果が異なる場合があります。
  • 正しい初期化の方法を確認し、問題なく行列の積を計算できるようにしましょう。

質問者が選んだベストアンサー

  • ベストアンサー
  • hirotn
  • ベストアンサー率59% (147/246)
回答No.1

+= 演算子を使っているので、積算しています(計算結果をmatCに足し続ける) しかし、for(k = 0; k < 4; ++k){のループの度にmatCを初期化してしまうので、最後の掛け算しか残っていないことになる。 と読めます。

その他の回答 (3)

  • KEIS050162
  • ベストアンサー率47% (890/1879)
回答No.4

計算の過程が知りたいとき、部分的にデバッグ用に、printf() 文とgetch() などを組み合せて追加し、処理の過程などを確認してみると良いでしょう。デバッグが終わったら、コメントにしてしまえばOKです。 for(k = 0; k < 4; ++k){    matC[i][j]+=matA[i][k]*matB[k][j];    printf( "matc{ %d ][ %d ] = %d\n". i, i, matc[i][i] );    getch(); デバッグが終わったら、コメントにする。 //   printf( "matc{ %d ][ %d ] = %d\n". i, i, matc[i][i] ); //   getch(); 色んな場所に上記の様なprintf()を入れ込んで試してみてください。

  • Wr5
  • ベストアンサー率53% (2173/4061)
回答No.3

ステップ実行のやりかたとか調べるか、pritnf()などで変数の内容出力してみるとかしないんですか? 質問乱立しまくりのようですが……。 for(i = 0; i < 4; ++i){  for(j = 0; j < 4; ++j){   matC[i][j]=0; /*初期化が必要*/   for(k = 0; k < 4; ++k){    matC[i][j]+=matA[i][k]*matB[k][j];   }  } } を for(i = 0; i < 4; ++i){  for(j = 0; j < 4; ++j){   for(k = 0; k < 4; ++k){    matC[i][j]=0; /*初期化が必要*/    matC[i][j]+=matA[i][k]*matB[k][j];   }  } } にしたら、結果が異なるのはな~んでだろ~? って質問でいいんですかね? for(k = 0; k < 4; ++k)のループで matC[i][j]=0;により0が入ります。 次にmatC[i][j]+=matA[i][k]*matB[k][j];の演算結果を代入します。 次のループに入って、 matC[i][j]=0;により0が入ります。 # つまり「以前の演算結果はご破算にしろ」と言っています。 それを繰り返して、結果として有効になるのは最後の演算結果だけです。 「そうしろ」というコードなのですから、CPUは言われたとおりに忠実に実行しただけです。

  • hirotn
  • ベストアンサー率59% (147/246)
回答No.2

matC[i][j]+=matA[i][k]*matB[k][j];を、 matC[i][j]=matA[i][k]*matB[k][j]; として試行してみてください。実行結果が異なる場合とおなじになりませんか?

関連するQ&A

専門家に質問してみよう