- 締切済み
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; } コンパイルできません。 間違いとどうすればよいかを教えていただけるとありがたいです!!!
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- KEIS050162
- ベストアンサー率47% (890/1879)
これで試してみてください。 #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 ); }