条件で”二次方程式a*x*x + b*x + c = 0の係数a,b,cをscanf_sで入力させ,構造体に格納する.また,入力に成功した場合は1,エラーなどで失敗した場合は0を返す”という条件がよくわかりません。どのようにしたらいいのか教えてください。
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
#include <math.h>
typedef struct {
double a, b, c; //二次方程式の係数a, b, c
double x1, x2; //実数解(x1 > x2とする.重解の場合は,x1とx2は同値)
double re, im; //虚数解の場合の,実数部:reと虚数部:im.
double D; //判別式の結果
} Answer;
double Solve(Answer *pAns);
int Input(Answer *pAns);
void Display(Answer *pAns);
double Solve(Answer *pAns)
{
double D;
D = (pAns->b* pAns->b - 4 * pAns->a*pAns->c);
pAns->x1 = (-pAns->b + sqrt(D)) / (2 * pAns->a);
pAns->x2 = (-pAns->b - sqrt(D)) / (2 * pAns->a);
pAns->re = (pAns->b) / (2 * pAns->a);
pAns->im = (sqrt(-D)) / (2 * pAns->a);
return D;
}
int Input(Answer *pAns)
{
//abcの入力
printf("二次方程式の係数a:"); scanf_s("%lf", &pAns->a);
printf("二次方程式の係数b:"); scanf_s("%lf", &pAns->b);
printf("二次方程式の係数c:"); scanf_s("%lf", &pAns->c);
return 1;
}
void Display(Answer *pAns)
{
double D;
Answer z;
D = Solve(&z);
if (D > 0)
{
printf("その解は%gと%gです\n", pAns->x1, pAns->x2);//異なる二つの実数解
}
else if (D < 0) {
printf("その解は%g+%giと%g-%giです\n", pAns->re, pAns->im, pAns->re, pAns->im);//虚数解
}
else {
printf("その解は%gのみです\n", pAns->x1);//重解
}
}
int main()
{
double D;
Answer z;
Input(&z);
D = Solve(&z);
puts("\n二次方程式");
printf("%gx*x %+g*x + %g = 0\n", z.a, z.b, z.c);
puts("を解きます。\n");
Display( &z);
return 0;
}