• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:C言語のプログラムについて)

C言語でニュートン法を用いた方程式の近似解を求めるプログラム

このQ&Aのポイント
  • C言語でニュートン法を用いて、方程式x^3(xの3乗)-4=0の近似解を求めるプログラムです。実数解との誤差は0.0001以下とします。
  • プログラムは、初期値を入力し、ニュートン法を使って近似解を求めます。方程式の導関数は3x^2(3*xの二乗)です。
  • プログラムの流れは、初期値を設定し、近似解を計算する過程を繰り返し行います。最終的に近似解が求められます。

質問者が選んだベストアンサー

  • ベストアンサー
  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.2

これはBASICですね。それも、Visual Basicのような新しいものではなく、昔からあるやつ。パソコンが電源ONでROMから起動してたころの。今だと十進BASICが該当するでしょうか。 このタイプのBASICの変数の型を考えたら、明示されていないものには整数は使わないで、浮動小数点型にするのが妥当。floatってことになるんだろうけど、特に理由が無ければdoubleを使うのが、誤差が少なくてよい。 とうぜん、INPUTで入力する値も実数だろうからatoiは使えない。手を抜くならscanfで。 DEF は関数の定義だけど、式で表せる程度の単純なものしか定義できない。 LETは代入で、省略可能なことが多い。 IF ABS(A-B)<=.0001 THEN 170 って書き方のときは、 ~THEN GOTO 170の意味。 ベタ移植すればこんな感じ #include <stdio.h> #include <math.h> double F(double X) { return X*X*X-4;} double G(double X) { return 3*X*X;} int main() { double A,B ; L120: printf("初期値:") ; scanf("%lf",&A); /* INPUT PROMPT "初期値":A */ L130: B=A-F(A)/G(A) ; /* LET B=A-F(A)/G(A) */ L140: if ( fabs(A-B) <= .0001 ) { goto L170 ; } /* IF ABS(A-B)<=.0001 THEN 170 */ L150: A=B ; /* LET A=B */ L160: goto L130 ; /* GOTO 130 */ L170: printf("近似解: %g\n" , B) ; /* PRINT "近似解";B */ L180: return 0 ; /* END */ }

その他の回答 (1)

  • Mzi
  • ベストアンサー率38% (5/13)
回答No.1

そのBASICをC言語に変換したら以下のようになると思う。 >|c| #define F(X) X*X*X-1 #define G(X) 3*X*X int main ( int argc, char *argv[] ){     char a;     char b[10];     int i, A;     printf( "初期値:" );     i=0;     while ((a = getchar()) != EOF) {         b[i] = a;         i++;     }     b[i] = (char)0;     A = atoi( b );     float B=0;     while( abs( a-b ) > .0001 ){         B=A-F(A)/G(A);     }     printf( "近似解: %f\r\n", B );     return 0; }