• 締切済み

行列の和、積、乗算(C言語)

まだC言語の勉強を始めて1か月の初心者なのですが、みなさんにお聞きしたいことがあります。 任意の行列に対して和、積、乗算の関数を作り出力するプログラムを 作りたいのですが、試しに和の関数を作ってビルトしてみたら、 31個もエラーが出て、困っています。 ↓参考書を見ながら、自分なりに考えたプログラムです。 #include <stdio.h> typedef struct matrix{ int m; int n; double data[100][100]; } MATRIX; int main(void) { MATRIX a; MATRIX b; a.m=2; a.n=3; a.data[100][100]={{1,2,1},{2,3,3}}; b.m=2; b.n=3; b.data[100][100]={{2,3,1},{1,2,1}}; kekka=add_mat(MATRIX a,MATRIX b); printf("和:%f,kekka.data); //行列和関数 MATRIX add_mat(MATRIX a,MATRIX b){ MATRIX sum; int i,j; sum.m=a.m; sum.n=a.n; sum.data[100][100]={{0,0,0}{0,0,0}}; for(i=0;i<sum.m;i++){ for(j=0;j<sum.n;j++){ sum.data=(a.data)+(b.data); return sum; } } } return 0; } おそらく相当ダメな感じなのでしょうが、エラー文を読んでも なかなか解決できません。 ちなみに、積の関数は mul_mat(MATRIX c,MATRIX a,MATRIX b){ int i,j,k; for(i = 0; i < a.m; i++){ for(j = 0; j < b.n; j++){ for(k = 0; k < a.n; k++){ C[i][j] = C[i][j] + A[i][k] * B[k][j]; } } } という風に考えました。みなさまのお力を借りたいです。 よろしくお願いします。

みんなの回答

noname#227064
noname#227064
回答No.1

> おそらく相当ダメな感じなのでしょうが、エラー文を読んでもなかなか解決できません。 基本的なところを理解していないと、エラー文を読んでもわからないでしょう。 まず、この3行 > a.data[100][100]={{1,2,1},{2,3,3}}; > b.data[100][100]={{2,3,1},{1,2,1}}; > sum.data[100][100]={{0,0,0}{0,0,0}}; これは、初期化ではなく配列の100行100列の要素に複数の値を入れようとしています。配列の範囲外のうえ、さらに値が一つしか入らないところに複数の値を入れようとしているのです。 あとsum.dataのところでカンマ(,)が抜けています。 初期化はこれで十分です。 MATRIX a = { 2, 3, {{1, 2, 1}, {2, 3, 3}}}; MATRIX b = { 2, 3, {{2, 3, 1}, {1, 2, 1}}}; 二つ目、 > kekka=add_mat(MATRIX a,MATRIX b); 変数kekkaはどこで定義されていますか? 関数の定義ではないので、引数に型名をつける必要はありません。 三つ目、 > printf("和:%f,kekka.data); kekkaはどこで定義されていますか? ダブルクォーテーション(")が抜けています。 あと、これではkekka.dataの中身が表示されません。 ポインタを表示しようとしています。 for文を二重にして要素ごとに表示しましょう。 行列を表示する関数を別に作って、a, b, kekkaを表示させるといいと思います。 四つ目、関数add_matを関数内(main内)で定義している。 C言語は、関数内で関数を定義することはできません。 五つ目、 > sum.data=(a.data)+(b.data); これでは、要素ごとに値が足されることはありません。 あと、この行あとすぐに > return sum; をしては、計算を途中でやめてしまっています。

a0672113
質問者

お礼

素早い返答・丁寧なご指摘ありがとうございます。 回答を参考に、もうちょっと頑張ってみます!

関連するQ&A

専門家に質問してみよう