ページ 11

無題

Posted: 2010年11月11日(木) 13:08
by rid
画像のようにコンパイルしたいのですが、
キーボードからctrl+zが入力されるまで連続して係数を入力して解を求められるようにしなさい。と課題がついているので、どうやったらできるか教えてください!

申し訳ないのですが、明日が提出なので解答お願いいたします。



#include <stdio.h>
#include <math.h>

int main(void)
{
int a,b,c,type=0;
double d,answer[2];

puts("二次方程式 a*x*x + b*x + c = 0 を解きます。(a!=0)");
printf("係数a,b,cを入力してください:"); scanf("%d %d %d",&a,&b,&c);

d = b*b-4*a*c;

if (d < 0){
type++;
d *=-1;
}

if (d == 0){
type += 2;
}

switch(type){
case 0:
d = sqrt(d);
answer[0] = (double) (-1*b+d)/(2*a);
answer[1] = (double) (-1*b-d)/(2*a);
printf("異なる2つの実根 \n");
printf(" %lf \n",answer[0]);
printf(" %lf \n",answer[1]);
break;
case 1:
answer[0] = (double) (-1*b)/(2*a);
answer[1] = (double) sqrt(d)/(2*a);
printf("異なる2つの虚根 \n");
printf(" 実部 %lf \n",answer[0]);
printf(" 嘘部 %lf \n",answer[1]);
break;
case 2:
answer[0] = (-1*b)/(2*a);
printf("重根 \n");
printf(" %lf \n",answer[0]);
break;
}
return(0);
}

Re:無題

Posted: 2010年11月11日(木) 13:30
by 初心者
質問なのですが何がわからないのでしょうか?

解き方としては多分ですがベアストウ法を用いれば
いいと思うのですが。

Re:無題

Posted: 2010年11月11日(木) 14:43
by さかまき
もし、ここまで自分で出来ているんだったら、あとは出来そうな気もするし
あと何が足りないかの説明もできるはずです。
きっとこのソースも課題中に提示されているんじゃないでしょうか。

2次方程式は関係無いですね。単にループの中での整数3個の入力で
ctrl+zでループ終了するような仕組みを問う問題に思えます。

Re:無題

Posted: 2010年11月11日(木) 22:43
by Dixq (管理人)
同じ処理を繰り返すのなら全体をループさせればよさそうですね。
ループ処理の仕方は解りますか?

また、入力によって処理を分岐させたいなら、scanfの返り値を見ればよさそうです。

scanf
http://www.ee.t-kougei.ac.jp/tuushin/le ... scanf.html

返り値がどうなったら終了すればよいでしょうか。