- ベストアンサー
配列について
以下の配列についての問題でわからないことがあるので、教えてください。 /* x と y の積を求める。 */ #include <stdio.h> int main(void) { int x[2][3] = {{1,2,3}, {4, 5, 6}}; int y[3][2] = {{1, 5}, {5, 3}, {8, 1}}; int ans[2][2] = {0}; int i, j, k, temp; for(i = 0; i < 2; i++) { for (k = 0; k < 2; k++) { temp = 0; for(j = 0; j < 3; j++) { temp += x[i][j] * y[j][k]; } ans[i][k] = temp; } } for(i = 0; i < 2; i++) { for(j = 0; j < 2; j++) { printf("%4d",ans[i][j]); } putchar('\n'); } return(0); } 以下の部分について詳しく説明してもらえないでしょうか? int ans[2][2] = {0}; int i, j, k, temp; for(i = 0; i < 2; i++) { for (k = 0; k < 2; k++) { temp = 0; for(j = 0; j < 3; j++) { temp += x[i][j] * y[j][k]; } ans[i][k] = temp; } }
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
> int ans[2][2] = {0}; ansの全要素を0で初期化。 (指定された初期値の数が配列の要素数より少ない場合、残りの要素は0で初期化されます。) > for(i = 0; i < 2; i++) { > for (k = 0; k < 2; k++) { > temp = 0; > for(j = 0; j < 3; j++) { > temp += x[i][j] * y[j][k]; > } > ans[i][k] = temp; > } > } 数学における行列の積の定義通りの記述ですが 何が分からないのですか?
その他の回答 (3)
- Werner
- ベストアンサー率53% (395/735)
> なぜ、x の 列[j] と y の 行[j]が > 同じなのでしょうか? 行列の積がそのように定義されているから。 http://ja.wikipedia.org/wiki/%E8%A1%8C%E5%88%97#.E8.A1.8C.E5.88.97.E3.81.AE.E7.A9.8D 数学の授業とかで習ってないですか?
- asuncion
- ベストアンサー率33% (2127/6289)
> なぜ、x の 列[j] と y の 行[j]が > 同じなのでしょうか? i行j列の行列Xとm行n列の行列Yの積が計算できるのは、 jとmが等しいときです。 積は、i行n列の行列になります。
お礼
回答していただきありがとうございます。 また宜しくお願いします。
- lesskey
- ベストアンサー率33% (66/200)
> x[i][j] > と > y[j][k] > について教えてください。 > なぜ、x の 列[j] と y の 行[j]が > 同じなのでしょうか? 何故3回ループしているのか?という話ですか? それであればソース見れば一目両全。 > int x[2][3] = {{1,2,3}, {4, 5, 6}}; > int y[3][2] = {{1, 5}, {5, 3}, {8, 1}}; x は2次元目の配列数が3、y は1次元目の配列が 3 だから ループ回数が同様になるのだと思います。
お礼
回答ありがとうございます。 ループ回数が同様になるというポイントがわかりました。 また宜しくお願いします。
お礼
ありがとうございます。 ”数学における行列の積の定義” を調べて理解しました。 またお願いします。
補足
x[i][j] と y[j][k] について教えてください。 なぜ、x の 列[j] と y の 行[j]が 同じなのでしょうか? 基本的なことですみません。