質問: a[1][1] - a[0][1] * d; ```
回答: i = 0の時に a[1][i] = a[1][0]が0になってしまうので その後のa[1][0] / a[0][0]が0になります。 forを逆順に回す ``` for (i = 3; i >= 0; i--) { ``` もしくはforの外で計算しておく ``` float d = a[1][0] / a[0][0]; ``` と正しい計算結果が得られます。 **追記** 問題を単純化します。 ``` #include int main(void) { int s[3] = {3, 6, 9}; for(int i = 0; i < 3; i++){ printf("s[%d]\t= s[%d] / s[0]\n", i, i); printf("\t= %d / %d\n", s[i], s[0]); printf("\t= %d\n", s[i] / s[0]); s[i] /= s[0]; } return 0; } ``` 配列sをsの先頭要素で割るという単純なプログラムです。 実行結果は ``` s[0]= s[0] / s[0] = 3 / 3 = 1 s[1]= s[1] / s[0] = 6 / 1 = 6 s[2]= s[2] / s[0] = 9 / 1 = 9 ``` となります。 計算順序の問題で i = 0の時: s[0] が3から1に変化 i = 1の時: s[0] は1 となってしまっています * s[0]を退避するか * s[0]/=s[0]を最後に計算するか * 答え領域bを作るか この辺が回避策になりますね