- ベストアンサー
C言語で3次正方行列のn乗を計算するプログラム
- C言語で3次正方行列のn乗を計算するプログラムを作成しています。
- 試行錯誤していますが、うまくいきません。
- 教えていただけると助かります。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
計算方法はあってます。 違っているのは次の2箇所です。 (1) 行列a, bの値設定 (2) 計算結果の表示 > int a[3][3]={ {-1,2,-1},{3,0,-2},{-1,1,2} }; > int b[3][3]={ {-1,2,-1},{3,0,-2},{-1,1,2} }; 1行1列目の要素(つまりa[0][0]とb[0][0]の値)が-1になっています。 行列Dの1行1列目の要素は1ですよね。 > printf("%3d",s[i][j]); > putchar('\n'); この2行だけだとs[3][3]だけを表示して終わってしまいます。 また、この位置で出力してしまうと2乗 ~ n乗の結果が全部表示されてしまいます。 n乗の結果のみを出力したいなら、 この2行を消してreturn文の直前に for(i = 0; i < 3; i++){ for(j = 0; j < 3; j++){ printf("%3d",s[i][j]); } putchar('\n'); } と打ち込んでみましょう (ちなみに上のコードは全角空白を含んでいるので、 回答文からこのコードをコピー&ペーストしてしまうと コンパイルエラーが起きるので注意してください)。
その他の回答 (3)
- m0r1_2006
- ベストアンサー率36% (169/464)
printf("%3d",s[i][j]); ここ,上の i,j の for 文抜けた後だから, i=3, j=3 の s[3][3] つまり, 行列の 4,4 成分を表示している. コンパイルエラーか segmentation faults か意味のない数を表示するか のどれか printf("%3d",s[i][j]); putchar('\n'); の2行を for(i=0;i<3;i++){ for(j=0;j<3;j++){ printf("%3d",s[i][j]); } putchar('\n'); } に置き換える.
- alice_44
- ベストアンサー率44% (2109/4759)
カテゴリー違いです。 そのプログラムでは、n が 2 以上であれば、 return の直前の時点で、s[][] の中に a[][] の n 乗が正しく求められています。 デバッガ上で s の値を確認すれば判ことです。 表示が上手くいかないとすれば、 数学以外の点に誤りがあります。
- hitokotonusi
- ベストアンサー率52% (571/1086)
最後の表示だけじゃないですか。 ループの外に出てる >printf("%3d",s[i][j]);
お礼
質問の記入ミスのご指摘ありがとうございました。 また指摘された所を直したらうまく実行できました。 ありがとうございました。