- 締切済み
ガウスの消去法のプログラムについて
ガウスの消去法のプログラムについて #include <stdio.h> #define N 3 void main(void) { static double a[N][N+1]={{3.0, 1.0, 1.0, 8.0}, {6.0, 2.0, 3.0, 4.0}, {9.0, 4.0, 5.0, 12.0}}; double d; int i,j,k; for (k=0;k<N-1;k++){ for (i=k+1;i<N;i++){ d=a[i][k]/a[k][k]; for (j=k+1;j<=N;j++) a[i][j]=a[i][j]-a[k][j]*d; } } for (i=N-1;i>=0;i++){ d=a[i][N]; for (j=i+1;j<N;j++){ d=d-a[i][j]*a[j][N]; a[i][N]=d/a[i][i]; } } for (k=0;k<N;k++){ printf("x%d=%f\n",k+1,a[k][N]); } } というプログラムを実行したら 8-5.c: In function `main': 8-5.c:4: warning: return type of `main' is not `int' と出たのですがどこを直せばよいのでしょうか?><
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- yama5140
- ベストアンサー率54% (136/250)
>というプログラムを実行したら 「コンパイルしたら」、・・ですよね。 ☆実行したら、前半の for 構文内で、 ・k = 0, i = 1, j = 1 のとき、a[ 1 ][ 1 ] は、 a[ 1 ][ 1 ] = 2.0 a[ 0 ][ 1 ] = 1.0 d = 6.0 / 3.0 = 2.0 a[ 1 ][ 1 ] = 2.0 - 1.0 * 2.0 = 0.0 と0となり、 ・k = 1 のとき0割が発生します。 +++++++++++++++++++++++++++++++++++ お示しの「警告」は、void main( void ) についてのもののようですが、 年寄りの環境(BorlandC++5.x)では、なんら「警告」は出ませんでした。 これは、BorlandC++5.x が、void という main 関数定義を「可」としているからだと思います。 質問者様の処理系は、「警告」としたわけです。 もし、「 main の型は int にするよう決まっている」のなら、「警告」でなく「エラー」となっていたと思います。 なお、OSが MS-windows の場合、戻り値は「無視」だから、void が最適と思います。 「自分」がバッチファイル等で「戻り値」を利用するときだけ、int にすればいいと思います。 (古い規格で教鞭を執る先生への提出は・・ int )
- likipon
- ベストアンサー率38% (44/114)
ぜひ英語を読んでほしいのですが.... 8-5.c: In function `main': ・関数"main"の中で, 8-5.c:4: warning: return type of `main' is not `int' ・4行目: 警告: "main"関数の戻り値の型がint型じゃないですよ というわけで, void main(void) を int main(void) にしてみてください. Cの文法的には間違っていませんが, mainの型はintにするよう決まっているので, Warning (エラーじゃないけど注意) がでています.