• 締切済み

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以上になったら繰り返し終了*/ }

みんなの回答

回答No.3

オメガ定数(≒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; }

noname#74733
質問者

お礼

ありがとうございます

  • Wr5
  • ベストアンサー率53% (2173/4061)
回答No.2

>if(fabs(fc) < EPS ) >break; >}while(++i<100); /*iが100以上になったら繰り返し終了*/ こごのbreakはdo~while()の終了条件に加えられませんか? それならば、if文とbreakの2行が削ると思いますが。

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

空行を削れば 2行どころか 5行削れますな.

関連するQ&A