<環境>
- windows10
- visuals studio 2017
#include <stdio.h> #define N 3 int main() { float a[N][N+1] = { {5,-1,-1,0}, { 2,1,-3,-5 }, { 1,1,1 ,6} }; // The matrix int i; for (i = 0; i <=3; i++) { a[1][i] = a[1][i] - a[0][i] * a[1][0] / a[0][0]; //printf("%d= a[1][i]- a[0][i]* a[0][i]/ a[0][i]である\n", b); printf("a[1][%d]= a[1][%d]- a[0][%d]* a[0][%d]/ a[0][%d]である\n",i, i, i, i, i); } //デバック a[1][1] = a[1][1] - a[0][1] * a[1][0] / a[0][0]; { printf("a[1][1]は%fである\n", a[1][1]); } a[2][i] = a[2][i] - a[0][i] * a[2][0] / a[0][0]; return 0; }
以上のプログラムのa[1][1] = a[1][1] - a[0][1] * a[1][0] / a[0][0];より
a[1][1] - a[0][1] * a[1][0] / a[0][0]の計算結果をa[1][1]にいれてprintfで中の数字を表示させたいのですが、なぜか1.0000000とでます。
以下は実行結果です。
a[1][0]= a[1][0]- a[0][0]* a[0][0]/ a[0][0]である a[1][1]= a[1][1]- a[0][1]* a[0][1]/ a[0][1]である a[1][2]= a[1][2]- a[0][2]* a[0][2]/ a[0][2]である a[1][3]= a[1][3]- a[0][3]* a[0][3]/ a[0][3]である a[1][1]は1.000000である
紙に計算したところ1.4と出ました。
初歩的な質問で恥ずかしいのですが、今回はfor文や基礎的なものを実践的に学んで基礎力を付けるため一から3つの連立方程式を解くプログラムを作ろうとしています。
<編集>
asmさんのアドバイスのおかげで正しい結果は出たのですが、なぜ正しい結果が出たのか恥ずかしながら全くわかりません。
以下はasmさんのアドバイスを基に編集したプログラムです。
質問1 なぜ(i = 3; i >= 0; i--)と置くことで正しい結果1.4が得られたのか。
質問2 仮にforの中で
a[1][1] = a[1][1] - a[0][1] * a[1][0] / a[0][0];
と表すとしたらどうすればよいのでしょうか?
for (i = 3; i >= 0; i--) { a[1][i] = a[1][i] - a[0][i] * a[1][0] / a[0][0]; //printf("%d= a[1][i]- a[0][i]* a[0][i]/ a[0][i]である\n", b); printf("a[1][%d]= a[1][%d]- a[0][%d]* a[0][%d]/ a[0][%d]である\n",i, i, i, i, i); } //デバック float d = a[1][0] / a[0][0]; a[1][1] = a[1][1] - a[0][1] * d;
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/07/26 21:06
2018/07/26 21:07
2018/07/27 10:51
2018/07/27 18:09
2018/07/28 00:31