重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

課題内容
ニュートン法を用いて√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;
}

コンパイルできません。

間違いとどうすればよいかを教えていただけるとありがたいです!!!

A 回答 (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 );
}
    • good
    • 0

初期値を入力するのにどういう意味があるのかわかりませんでした。


√aを求める場合、aが1以上ならa、1未満なら1を初期値にすればよいと思います。

表示で10桁表示する指示が無いようです。
    • good
    • 0

>コンパイルできません。


>間違いとどうすればよいかを教えていただけるとありがたいです!!!

コンパイル時に出たエラーメッセージくらいは書きましょう。

とりあえず少なくとも乗算の演算子を省略して
2 * x を 2x などとは書けません。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!