2次方程式の解
今回、大学の授業で課題が出たのですが、どうしても問題文に書かれている条件を満たせず再提出になってしまいました。
もし、分かる方がいらっしゃいましたら、お力をお貸しいただけないでしょうか。お願いします。
問題
ax^2+bx+c=0の式においてa,b,c(double型)をmainの中でキーボードから入力して、2次方程式の解を求める関数を作りmainの中で根を表示するプログラムを作りなさい。(判別式が負になる場合は共役な複素数根になる。)
main→関数 a,b,cの係数
関数→main 方程式の根(2個)[複素数の構造体にする]
私は以下のプログラムを提出しましたが、「複素数の構造体を用いて、構造体のポインタを使ったプログラムにしてください」
#include<stdio.h>
#include<math.h>
typedef struct{
double a,b,c,ha,an1,an2,re,im;
}COMP;
void main()
{
COMP s;
COMP x(COMP);
printf("aを入力してください===>");
scanf("%lf",&s.a);
printf("bを入力してください===>");
scanf("%lf",&s.b);
printf("cを入力してください===>");
scanf("%lf",&s.c);
s=x(s);
if(s.ha>=0)
{
printf("xは %.2lf,%.2lfです\n",s.an1,s.an2);
}
else if(s.ha<0)
{
printf("xは %.2lf + %.2lfi,%.2lf - %.2lfiです\n",s.re,s.im,s.re,s.im);
}
}
COMP x(COMP p)
{
COMP d;
d.ha=p.b*p.b-4.0*p.a*p.c;
if(d.ha>=0)
{
d.an1=(-p.b+sqrt(d.ha))/(2.0*p.a);
d.an2=(-p.b-sqrt(d.ha))/(2.0*p.a);
}
else if(d.ha<0)
{
d.re=-p.b/(2.0*p.a);
d.im=sqrt(-1.0*d.ha)/(2.0*p.a);
}
return d;
}
お礼
ありがとうございます。 調べてみます。