• 締切済み

ガウスの消去法のプログラムについて

ガウスの消去法のプログラムについて #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' と出たのですがどこを直せばよいのでしょうか?><

みんなの回答

  • yama5140
  • ベストアンサー率54% (136/250)
回答No.2

>というプログラムを実行したら  「コンパイルしたら」、・・ですよね。 ☆実行したら、前半の 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)
回答No.1

ぜひ英語を読んでほしいのですが.... 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 (エラーじゃないけど注意) がでています.

関連するQ&A