• 締切済み

C言語課題(数値計算)お願いします。

課題内容 ニュートン法を用いて√2の値を求められるプログラムを作る。 10ケタまで表示する。 書いてみたソースコード #include <stdio.h> #include <stdlib.h> #include <math.h> #define max 1000 //最大繰り返し回数 #define eps 1.0e-10 //収束条件 double f(double x); double df(double x); void newton(void); int main() { newton(); return 0; } void newton(void) { int count; double a,newa; count=0; printf("初期値を入力してください。\n"); scanf("%lf",&a); for(;;) { count++; newa=a-f(a)/df(a); if(fabs(newa-a)<eps) break; a=newa; if(count==max) { printf("収束しませんでした。\n"); exit(1); } } printf("解の値は %f\n収束するのに %d 回かかりました。\n", newa,count); } double f(double x) { return x*x-2; } double df(double x) { return 2x; } コンパイルできません。 間違いとどうすればよいかを教えていただけるとありがたいです!!!

みんなの回答

  • KEIS050162
  • ベストアンサー率47% (890/1879)
回答No.3

これで試してみてください。 #include <stdio.h> #include <stdlib.h> #include <math.h> #define MAX 1000 //最大繰り返し回数 #define EPS 1.0e-10 //収束条件 double f( double x ) { return( x*x - 2 ); } double df( double x ) { return( 2 * x ); } void newton(void) { int count; double a,newa; count=0; printf( "初期値を入力してください。\n" ); scanf( "%lf", &a ); while( 1 ) { count++; newa= a - f( a ) / df( a ); if ( fabs( newa-a ) < EPS ) { printf("解の値は %f\n収束するのに %d 回かかりました。\n", newa, count); break; } a=newa; if ( count > MAX ) { printf( "収束しませんでした。\n" ); break; } } } int main(void) { while( 1 ) { newton(); printf( "Repeat? <y> or <n>\n" ); if ( getch() == 'n' ) break; } return ( 0 ); }

  • hashioogi
  • ベストアンサー率25% (102/404)
回答No.2

初期値を入力するのにどういう意味があるのかわかりませんでした。 √aを求める場合、aが1以上ならa、1未満なら1を初期値にすればよいと思います。 表示で10桁表示する指示が無いようです。

  • wormhole
  • ベストアンサー率28% (1626/5665)
回答No.1

>コンパイルできません。 >間違いとどうすればよいかを教えていただけるとありがたいです!!! コンパイル時に出たエラーメッセージくらいは書きましょう。 とりあえず少なくとも乗算の演算子を省略して 2 * x を 2x などとは書けません。

関連するQ&A