• 締切済み

次のプログラムは、円周率だの近似値を求めるプログラムである。プログラム

次のプログラムは、円周率だの近似値を求めるプログラムである。プログラム中の○に適するものを記入しなさい。 これを教えてください! C言語です #include<stdio.h> void main(void) { int sei,en; float pai,x,y,r; r=1.0; sei=0; en=0; for(x=0,1;○;x=x+0,1){ for(y=0.1;y<=1.0;○){ sei=sei+1; if((x*x+y*y)<=r*r)en=○; } } pai=(4.0*○)/(float)sei; printf("円周率=○¥n",pai); }

みんなの回答

回答No.1

多分出題者の意図は以下のようなコードだろう。 http://ideone.com/SRm1h で、細かく分割するとだいぶ近い数値が求められる。 http://ideone.com/ck680 実際には0.0001の部分はどっか変数に格納しておいたほうが変更が容易だろう。 1.これ、r*rで代用したほうが変数が減っていいんじゃね 2.なんとなくfloatよりdoubleの方が好きで、必要以上にdoubleを使いたくないのでxとyとrをintにする で、できたコードがこれ。 http://ideone.com/Jfh1U

関連するQ&A

  • 円周率 πの値

    円周率πの値を求めたのですがNを大きくすると3.1415・・・に近づくはずですが、うまくいきません。どうすればいいのか検討がつきませんので、ご指摘お願いします。 float myrand() { float ans; ans=(float)rand()/(RAND_MAX); return(ans); } main() { int i,sum; long N; float ans,x,y,r,p; srand((unsigned)time(NULL)); sum=0; for(N=10;N<=1000000;N*=10){ for(i=10;i<N;i++){ x=myrand(); y=myrand(); r=x*x+y*y; if(r<=1){ sum++; } } ans=(float)(sum)/N; p=ans*4; printf("%d %f\n",N,p); } getch(); exit(0); } 実行結果 10 0.000000 100 2.640000 1000 3.440000 10000 3.483600 100000 3.490640 1000000 3.491268

  • Switch文を使ったプログラミング

    switch文を使って1のときは円周、2のときは円の面積、3のときは球の面積を求めるという問題をしています。xが1の時は出力結果は合っているのですが、xが2と3のときはdefaultの結果の"もう一度やり直し"になってしまいます。 どこが間違っているのかわかりません。 rは半径、Lは円周、Sは円の面積、Vは球の体積です。paiはπです。 #include<stdio.h> #include<stdio.h> int main(void){ double L, x, r, S, V, pai=3.14159; printf("半径rを入力:"); scanf("%lf",&r); printf("処理番号(1:円周は 2:円の面積は 3:球の体積は)"); scanf("%lf",&x); switch(x){ case 1: L = 2*pai*r; printf("円周は%0.2lf",L); break; case 2: S = pai*r*r; printf("円の面積は%0.2lf",S); break; case 3: V = 4*pai*r*r*r/3; printf("球の体積は%0.2lf",V); break; default: printf("もう一度やり直し\n"); } return 0; }

  • プログラムのおかしいところを教えてください

    ライプニッツの公式により、円周率の近似値を求めるプログラムを作 成しなさい。ただし、この公式は収束が遅い。          1     1      1     1     1      1       1    1 円周率=4(── - ── + ── - ── + ── - ──+…- ──+──)          1    3      5      7     9     11      47    49 ってやつをJAVAでやるのですが自分で作ったのは class en{ public static void main(String argv[]) { int i;double n,o,p,q,r; n=0;o=0;p=0;q=0;r=0; for (i=1; i<=49; i=i+4) { n=1/i; o=o+n; } for (i=3; i<=47; i=i+4) { p=1/i; q=q+p; } r=4*(o-q); System.out.println("円周率="+r); } } なんですが 結果が円周率=4.0になってしまいます。アドバイスをお願いします

    • ベストアンサー
    • Java
  • C言語、円周率の値が0.000000?

    いつも大変お世話になりありがとうございます。 下記のコードを実行したところ、円周率の値が0.000000になりました。 どうしてでしょうか? アドバイスの程宜しくお願い申し上げます。 #include <stdio.h> int main(void) { double pi; printf("円周率の値はいくつですか?\n"); scanf("%1f", &pi); printf("円周率の値は%fです。\n", pi); return 0; } C:\MinGW>Sample9 円周率の値はいくつですか? 3.14 円周率の値は0.000000です。

  • 次のプログラムを教えてほしいのですが・・・・

    #include<stdio.h> main() { int a,b,c,d,e; a=1;b=3;c=5;d=7;e=8; float X; X = (a+b+c+d+e)/5.0; printf("Y =%f\n",X); } X=4.8 となるプログラムですが、Xという変数を用いています。 これを変数を用いず、4.8を導きだせ という宿題が出ました。 全くわからないので詳しい方回答お願いします。

  • 円周上の穴あけについて ファナックプログラムです。

    初めての投稿をさせていただきます。 現在円周上の穴あけに対して 座標を打ち込む際は 例 PCDф100.0 3-ф5.0 G68X0Y0R0 X0Y-50.0 G68X0Y0R120.0 X0Y-50.0 G68X0Y0R240.0 X0Y-50.0 G69 上のプログラムみたいに作ってるのですが、 今回円周上に100か所の穴をあけるさいに 全てG68で3.6度ずつ回転させたプログラムを作ってもいいのですが、 これだと プログラムを凄く長くなってしまって困っております。 いろいろ調べてみたら、 OSP(オークマ)のプログラムでは 1行でそのプログラムを作ることも可能と聞いたのですが、 G300?を使ってか ファナックのプログラムでもできるのでしょうか 読みずらい文章ですが、よろしくお願いします

  • for文を使ったプログラムで困っています

    for文を使って、10000からある数xを何回引けるか?またその残りを求めるプログラム(例:10000から3000は3回引くことができ、残りは1000である。)を作りたいのですが、引く回数が1多くなってしまいます。どこがいけないかわからないので困っています。よろしくおねがいします。 #include<stdio.h> void main() { int x; int Sa = 10000; int y; printf("10000以下の数を入力してください:"); scanf("%d",&x); for(y = 1; y*x <= 10000 ; y++) { Sa = Sa - x; } printf("10000から%d回引くことができます。\n",y); printf("残りは%dです。",Sa); }

  • プログラム問題

    質問】 2つの実数xとyを入力し、xとyの値とx,yが格納されている領域のアドレスを表示するプログラムを作成します。 【プログラム作成例】 数 x と y を入力しなさい=> 2 3 数 x = 2.000000 x のアドレス = #0044 数 y = 3.000000 y のアドレス = #0048 上記の解答は下記の通りなのですが、下記以外の解答方法を教えてはいただけないでしょうか? C言語に詳しい方よろしくお願いいたします。 #include <stdio.h> void main(void) { float x, y; printf("数 x と y を入力しなさい=> "); scanf("%f %f", &x, &y); printf("数 x = %f x のアドレス = %p\n", x, &x); printf("数 y = %f y のアドレス = %p\n", y, &y); }

  • Cの九九を表示するプログラムについて

    九九の表示を変えたいんですけど #include <stdio.h> int main(void) { int x,y; for (x = 1;x <= 9;x++) { for (y = 1;y <= 9;y++) { printf(" %2d ", x * y); } printf("\n"); } return 0; } これを実行すると 1 2 3 4 5 6 7 8 9 2 4 6 8 10 12 14 16 18 . . 9 . . . . . . . 81 となるのですが、これを 1 * 1 1 * 2 1 * 3 . . . 1 * 9 1 * 2 . . 1 * 9 . . . . . 9 * 9 と表示させたいのですがどなたか知恵を貸していただきませんでしょうか?

  • 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; }