- 締切済み
C言語 二分法
初投稿です。 お恥ずかしながらパソコンが苦手で、Cゲッが難しくてできません。 今回二分法です。 途中まではやったのですができません。 演習 0~1の乱数を12個発生させ,これらの平均をxi,yi とする。(s,tは乱数) xi=1/12(x1i+x2i+....x12i) yi=1/12(y1i+y2i+....y12i) このようなを1000個作り,(xi,yi)で散布図 を作りなさい。またx,yのそれぞれの平均を求 めよ。 この演習で #include<stdio.h> #include<stdlib.h> #include<math.h> #define eps 1.0e-5 float f(double x); void nibuin(void); int main () { int count; double a,b,m; count=0; printf("範囲の左の値を入力してください。\n"); scanf("%lf",&a); printf("範囲の右の値を入力してください。\n"); scanf("%lf",&a); if(count==1000){ printf("収束しませんでした。\n"); exit(1); } } while(!(fabs(a-b)<eps)); printf("解の値は%f\n収束するのに%d回かかりました。"m,count); } float f(double x) { reurn x*sin(x)+log(x); } まではできたのですが、 scanf("%lf",&a);とif(count==1000){の間に入る命令が打てません。 よろしくお願いします。
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- FT56F001
- ベストアンサー率59% (355/599)
二分法というタイトルと書きかけのプログラムは,雰囲気的に関係ありそうなので, 乱数の12個の平均を出す演習問題は入れ間違いで, 「x*sin(x)+log(x)=0を二分法で解くプログラムを作れ」 といった二分法の問題があるのかしら? 二分法で方程式f(x)=0を解くのなら, 1) f(a)*f(b)<0となる下限aと上限bを読み込む。 2) m=(a+b)/2に対してf(m)を計算する。 3) f(m)*f(a)>0なら下限aをmに置き換え,そうでなければ上限bをmに置き換える。 4) 2)~3)を,abs(a-b)がepsより大きく,かつ,カウントが1000以下である限り,繰り返す。 をコーディングすればよいわけです。