- 締切済み
c言語について
このプログラムであと2行削れるとこがあるそうです。 どこがけずれますか? #include <stdio.h> #include <math.h> #define f(x) ((x)+(log(x))) #define EPS 1e-8 main( ) { double a, b, c, fa, fb, fc; int i=1; printf("input a and b: "); /*区間[a,b]の入力, a<b とする*/ scanf("%lf%lf", &a, &b); fa = f(a); fb = f(b); do { c = (a+b) / 2; /*cの値の更新*/ fc = f(c); printf(" %2d : a = %f, b = %f, c = %f, fc = %f\n", i, a, b, c, fc); if (fb*fc < 0){ a = c; fa = fc; } if (fa*fc < 0) { b = c; fb = fc; } if(fabs(fc) < EPS ) break; }while(++i<100); /*iが100以上になったら繰り返し終了*/ }
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- JaritenCat
- ベストアンサー率37% (122/322)
オメガ定数(≒0.567143290409783873)を二分法で求めるプログラムですね。 ・f(a)とf(b)は異符号なのでf(c)とf(b)を調べればf(a)は不要。 ・f(c)の収束判定はwhile文に移動。 こんな感じ? int main(void) { double a, b, c, fc; int i=1; printf("input a and b: "); /* 区間[a,b]の入力 */ scanf("%lf%lf", &a, &b); if (f(a)*f(b)>0) return -1; /* f(x)が同符号なら入力エラー */ do { c = (a+b) / 2; /*cの値の更新*/ fc = f(c); printf(" %2d : a = %f, b = %f, c = %f, fc = %f\n", i, a, b, c, fc); if (f(b)*fc < 0) { a = c; } else { b = c; } } while (++i<100 && fabs(fc)>=EPS); /* iが100以上か収束したら繰り返し終了 */ return 0; }
お礼
ありがとうございます