• 締切済み

分からないです(;_;)

分からないです(;_;) 4 二次関数の係数が格納できる構造体(タグ名equation)、2つの解が格納できる構造体(タグ名answer)を作成する。 さらに、int型ユーザー関数discriminant(struct equation x)と、struct answer型関数calc_ans(struct equation x)を作成する。 ・int型ユーザー関数discriminantは、2次方程式の二次方程式の判別式を計算し、解が存在する場合は0を、存在しない場合は1を返す関数とする。 ・struc answer型関数calc_ansは、2次方程式の解の公式を計算し、2つの解が格納されたanswer型の構造体を返す関数とする。 まず、任意の変数名で構造体equation、answerをそれぞれ宣言し、equation型構造体に2次方程式を格納する。次に、equation型構造体をユーザー関数discriminantに渡して判別させ、解がなければエラーを出力し終了する。 解が存在する場合は、equation型構造体をユーザー関数calc_ansに渡して計算させる。最後に、帰ってたanswer型構造体に含まれる2つの解を出力すること。 <実行結果>  iInput ax^2 + bx + c = 0 Input a:3 Input b:-22.2 Input c:5.32 answer 1 : 7.152053 answer 2 : 0.247947 Input ax^2 + bx + c = 0 Input a:5 Input b:3 Input c:1 Error!!

みんなの回答

回答No.1

// これも暇潰しにやってみた // 二次方程式の解と言ったって、 // なんやらの定理を使って収束値を求めろ // とかいう問題じゃないのね // とくに指定はなかったからsqrt関数は使ったけど、 // 平方根を自分で計算しろとかいう問題じゃないだろうな #include <stdio.h> #include <math.h> typedef struct equation { double a, b, c; } equation; typedef struct answer { double s1, s2; } answer; int discriminant(equation x) { return(((x.b * x.b) - (4.0 * x.a * x.c)) < 0.0 ? 1 : 0); } answer calc_ans(equation x) { answer ans; double sqt = sqrt((x.b * x.b) - (4.0 * x.a * x.c)); ans.s1 = (- x.b + sqt) / (2.0 * x.a); ans.s2 = (- x.b - sqt) / (2.0 * x.a); return(ans); } void main() { equation x; answer ans; printf("Input ax^2 + bx + c = 0\n"); printf("Input a:"); scanf("%lf", &(x.a)); printf("Input b:"); scanf("%lf", &(x.b)); printf("Input c:"); scanf("%lf", &(x.c)); if (discriminant(x)) { printf("Error!!\n"); } else { ans = calc_ans(x); printf("answer 1 : %f\n", ans.s1); printf("answer 2 : %f\n", ans.s2); } }

関連するQ&A