• 締切済み

自然対数の底を求める

自然対数の底eを、第n項まで求めるプログラムを作成するのですが #include <stdio.h> #include <math.h> int main(void) { double e, x, k; int n=2*k-1; if(k==0) return(0.0); return(pow((x-1)/(x+1), n)/n + add(x, k-1)); double x=5.0; x = add(x,20)*2.0; printf("f(5.0)=%f\n",x); }if ( x >= 1 ) { printf("整数を%d個入力してください--->", x); for ( k = 0 ; k <= x-1 ; k++) { scanf("%d", &a); s += a ; } printf("これらの数の合計は%dです\n", s); } else { printf("この値は不適です\n"); } return 0; このようなプログラムを作ってみたのですが自分でも理解できていない状態です。 e=1+1/1!+1/2!+1/3!…1/n! の再帰呼出しを使いたいのですが、アドバイスお願い致します。

noname#61072
noname#61072

みんなの回答

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

再帰呼び出しで e をどのように計算すればよいか, わかっていますか?

noname#61072
質問者

補足

大変失礼いたしました。 私はプログラムの勉強を始めたばかりで 学校の授業についていけないような状態です。 参考URLなど、細かく教えて頂ければ幸いです。

関連するQ&A

  • 学校の課題で2次方程式のプログラムを作ってみたのですが、足りない部分ががあるらしいのでお教えてください

    キーボードからある整数の値を入力して、2次方程式を解くというプログラムを作ったのですが、解の方程式のところでどこかが足りないらしいのですが教えてください。 #include<math.h> #include<stdio.h> int quadraticEquation(double a, double b, double c){ int x,y,l,k,j; double z; x=b*b; y=4*a*c; z=x-y; if(z>=0){ l=sqrt((double)z); } else printf("ERROR!!\n"); k=(-b)+l; j=k/2*a; return j; } int main(void){ int n1,n2,n3; printf("input three integer!\n"); printf("intger1:"); scanf("%d",&n1); printf("intger2:"); scanf("%d",&n2); printf("intger3:"); scanf("%d",&n3); printf("kotaeha %d %d desu\n",quadraticEquation(n1, n2, n3),quadraticEquation(n1, n2, n3)); return 0; } が自分が作ったプログラムです。 後、解が2つある場合の出力方法がこれであっているかどうかも教えてください。 よろしくお願いします。

  • 数値解析法

    このHeun法のプログラムをRunge-Kutta法にするにはどうしたらいいですか? #include <stdio.h> #include <math.h> double f1(double y) { return y; } double f2(double y) { return -4*y; } int main(){ double a=0; double b; int m=10; int n; double h; double x,y; int k; double e; double f; double k1,k2; printf("Heun法計算例:y=e^x, y=1/e^4x\n\n"); // y = e^x b = 1; for(n=100;n<=10000;n*=100){ h = (b-a)/n; printf("y' = y: h(=dx) = %.1e (y=e^x)\n",h); x = a; y = 1; for(k=0;k<=n;k++) { x = k*h; if(k%(n/m)==0) { f = exp(x); e = fabs(y-f); printf("x=%.2f, y=%f, e^x=%f er=%.0e\n",x,y,f,e); } // Heun's method k1 = h*f1(y); k2 = h*f1(y+k1); y += (k1+k2)/2; } }

  • funcの値

    こんにちは! 以下のプログラムですがいまひとつ流れが 分からずにいます、5を入力すると120が出力 されるのですが、(5-1)*5なので20ではないのでしょうか?? どなたか宜しければ教えてくださいm(_ _)m #include <stdio.h> double func(double n){ if ( n > 0 ) { return func ( n - 1 ) * n; } else { return 1; } } int main(){ int n; scanf("%d",&n); printf("%.0f\n",func(n)); return 0; }

  • C言語のプログラム

    C言語で2つの微分方程式をEuler法、Heun法、Runge-Kutta法により求めるプログラムを作りたい。ただし、初期条件はx=0,y=1とする。また、間隔Δxを変えたときの解の変化を調べたい。 Euler法のプログラムはどうにか分かったのですが、Heun法、Runge-Kutta法のプログラムがわかりません。 Euler法のプログラム #include_<stdio.h> #include_<math.h> int_main(){ __double__a=0; __double__b; __int_____m=10; __int_____n; __double__h; __double__x,y; __double__dydx; __int_____k; __double__e; __double__f; __printf("オイラー法計算例:y=e^x,_y=1/e^4x\n\n"); __//_y_=_e^x __b_=_1; __for(n=100;n<=10000;n*=100){ ____h_=_(b-a)/n; ____printf("y'_=_y:_h(=dx)_=_%.1e_(y=e^x)\n",h); ____x_=_a;_y_=_1; ____for(k=0;k<=n;k++)_{ ______x_=_k*h; ______if(k%(n/m)==0)_{ ________f_=_exp(x); ________e_=_fabs(y-f); ________printf("x=%.2f,_y=%f,_e^x=%f_er=%.0e\n", ________x,y,f,e); ______} ______dydx_=_y; ______y_=_y_+_dydx*h; ____} __} __printf("\n"); __//_y_=_1/e^4x __b_=_4; __for(n=100;n<=10000;n*=100){ ____h_=_(b-a)/n; ____printf("y'_=_-4y:_h(=dx)_=_%.1e_(y=1/e^4x)\n",h); ____x_=_a;_y_=_1; ____for(k=0;k<=n;k++)_{ ______x_=_k*h; ______if(k%(n/m)==0)_{ ________f_=_exp(-4*x); ________e_=_fabs(y-f); ________printf("x=%.2f,_y=%f,_1/e^4x=%f_er=%.0e\n", ________x,y,f,e); ______} ______dydx_=_-4*y; ______y_=_y_+_dydx*h; ____} __} __return_0; } 分かる方がいましたら、回答よろしくお願いします。

  • C言語なんですがうまくうごきません。

    X=1においてX^nをm回微分した値を求めるプログラムを作っているのですが、 何度も考えて訂正したりしてるのですが、どこが悪いのかわかりません 再帰関数を使ってます。 デバッグして調べてみてるのですが、うまくいってるようにみえるのですが、最後の値が0になります。 nを大きい値にすると、マイナスになったりするんです。 よくわかりません。 ちなみにnとmは正で、mは10までの数を入力します。 このプログラムの基本形を変えないで問題改善することはできるのでしょうか? わかる人いましたら教えてください。 #include <stdio.h> double differentiate(double n, int m); int main(void) { int a, b; printf("Input 2 number\n"); fflush(stdout); scanf("%d %d", &a, &b); printf( "a = %d\nb = %d\n", a, b ); printf("Answer = %d\n", differentiate(a, b)); return 0; } } double differentiate(double n, int m) { if(m == 1){ return n; }else{ return n * n-1 * differentiate(n-1, m-1); } }

  • C言語<素数を求めるプログラム>

    #include<stdio.h> int j; int prime(int n) { int i; if(n < 2) return 0; if(n == 2) return 1; if(n%2 == 0) return 0; for(i = 3; i*i<= n; i += 2){ if(n%i == 0) return 0; } return 1; } int main(void) { int n; for(n=1; n <= 1000; n++) { if(prime(n)){ printf("%d\n",n); j++; } } printf("素数の個数は全部で %d 件見つかりました。\n",j); return 0; } このプログラムは1から1000までの素数のみを表示させるプログラムでありますが、このアルゴリズムが全くわかりません。 int prime(int n)の中身のアルゴリズムがどういう仕組みになっているのかお分かりになりますでしょうか?

  • c プログラム 

    以下のプログラムは,第n項までのe^xのマクローリン展開をさせるものです. これを修正して,理論値と近似値の誤差がある値(自分で入力)になったときに,計算を終了させるにはどうしたらよいでしょうか.御教授いただければ幸甚 です. ---------------------------------------- #include <stdio.h> #include <math.h> int main(void) { int n; double x=1.0,y=1.0,e=1.0,err; int i; double f=1.0,p=1.0; printf("x="); scanf("%lf",&x); printf("n="); scanf("%d",&n); printf("Mclaurin展開によるn項までのexp(x)の\n n 理論値 近似値 誤差\n"); for(i=1;i<=n;i++){ f*=(double)i; p*=x; y+=p/f;近似値 e=exp(x);理論値 err=e-y;誤差 printf("%2d %12.8e %12.8e %12.8e\n",i,e,y,err); } return 0; }

  • c言語プログラミングについて

    ニュートン法でx^2-2の根を初期値2、試行回数を200回までで求めるプログラムを作成しているのですがうまくいきません。 どなたかご教授お願いいたします。 #include<stdio.h> #include<math.h> int main() { int i; int N = 200; double x = 2.0; double xnew; double eps = 1e-16; for (i = 0; i < N; i++) { xnew = x - ( x * x - 2.0 ) / 2.0 * x; if (fabs(x - xnew) < eps) break; x = xnew; } printf("x=%.20lf\n", xnew); return(0); }

  • C言語の質問です。

    #include"stdio.h" int main(void){ int a, b, add; scanf_s("%d%d", &a, &b); add = a+b; printf("add=%d\n", add); return 0; } と、------------------------------------------------------------------------------ #include"stdio.h" int tasizan(int x, int y); int main(void){ int a, b, add; scanf_s("%d%d", &a, &b); add = tasizan(a, b); printf("add=%d\n", add); return 0; } int tasizan(int x, int y){ int aa; aa = x + y; return aa; } の違いを教えてください。

  • ニュートン法

    ケプラー方程式x-e*sin(x)-c=0の解をステップ数とともに出力するプログラムで、e,cはそれぞれ0.5と1です。 xに値を入力して計算させるのですが、どうしてもできません。 下のプログラムリストでおかしいところはどこでしょうか? // ニュートン法 x-e*sin(x)-c=0 #include <stdio.h> #include <math.h> #define e 0.5 #define c 1.0 #define K 10000 double fun(double x); double bibun(int i,double x); float m=1.0,n=1.0; int i=1; main(){ float x1,x2; float z; printf("初期値x0を入力して下さい\n"); scanf("%f",&x1); for(i=0;i<=K;i++){ x2 = x1 - fun(x1)/bibun(i,x1); x1 = x2; z = fun(x1); z = fabs(z); if(fabs(z)<=0.00001){ break; } if(i==K){ printf("収束しません\n"); exit(0); }    } printf("解 = %f\n",x1); printf("ステップ数 = %d",i); return 0; } // 関数f(x) double fun(double x1){ double r; r = x1 - e * sin(x1) - c; return r; } // 微分 double bibun(int i,double x1){ float p; if(i%2==1){ p = pow((-1.0),m)*e*sin(x1); m++; } else { p = pow((-1.0),n)*e*cos(x1); n++; } return p; }

専門家に質問してみよう