3次方程式の実数解の個数のプログラムについて…
C++で、3次方程式の実数解の個数を調べるプログラムを作ってみた(↓)のですが、実行したときに問題点があって困っています。
#include<stdio.h>
#include<math.h>
void main(void) /*3次方程式の実数解の個数*/
{
double a,b,c,d,D,A,B;
printf("f(x)=a*pow(x,3)+b*pow(x,2)+c*x+d=0 に対して、a,b,c,dの値を定めると、\n");
scanf("%lf %lf %lf %lf",&a,&b,&c,&d);
D=4*pow(b,2)-12*a*c;
A=(-b+sqrt(b*b-3*a*c))/(3*a);
B=(-b-sqrt(b*b-3*a*c))/(3*a);
if(a>0)
if(D<=0 || (D>0 && A>0) || (D>0 && B<0))
printf("実数解の個数は1個\n");
else
if(A<0 && B>0)
printf("実数解の個数は3個\n");
else
printf("実数解の個数は2個\n");
else
a=-a;
b=-b;
c=-c;
d=-d;
if(D<=0 || (D>0 && A>0) || (D>0 && B<0))
printf("実数解の個数は1個\n");
else
if(A<0 && B>0)
printf("実数解の個数は3個\n");
else
printf("実数解の個数は2個\n");
その問題点というのは、実数解の個数が2個と3個のときは、実行したときの結果として、
実数解の個数は2個
Press any key to continue
あるいは
実数解の個数は3個
Press any key to continue
と正しく表示されるのですが、実数解の個数が1個のときは、
実数解の個数は1個
実数解の個数は1個
Press any key to continue
と「実数解の個数は1個」が2回表示されてしまうのです。
なぜ、2回表示されるのか分かりません。
初心者なので、できるだけ詳しい解決法などよろしくお願い致します。
お礼
なるほど 習ったのが数年前なので 複接線のときに何かが違うような気もしたのですが そのままつかっても 大丈夫なのですね ありがとうございます。