例3-51つの未知数から2次方程式の根を見つける
問題の説明1つの変数で2次方程式ax2 + bx + c = 0の根を見つけます。3つの係数a、b、およびcはキーボードによって入力され、aを0にすることはできず、b2-4ac> 0です。
プログラムに含まれる変数はdouble型です。スペースで区切られた1つの要素の2次方程式の3つの係数を
入力
し、2倍精度のダブルタイプの
出力
。2つのルートは次のように分岐によって出力されます(最後の新しい行に注意してください)
。r1=最初のルート
r2 = 2番目のルート
結果が出力されるとき、幅は小数点以下2桁を含む7桁。
サンプル入力コピー
1 3 2
サンプル出力コピー
R1 = -1.00
R2 = -2.00
、それはシーケンシャル構造の質問設定されているため、シーケンシャル構造の溶液法が採用されています
#include <stdio.h>
#include <math.h>
int main() {
double a, b, c, r1, r2;
scanf("%lf%lf%lf", &a, &b, &c);
double discriminant;
discriminant = b * b - 4 * a * c;
if (a == 0)
return 0;
if (discriminant <= 0)
return 0;
else {
r1 = (-b + sqrt(discriminant)) / (2 * a);
r2 = (-b - sqrt(discriminant)) / (2 * a);
printf("r1=%7.2f\nr2=%7.2f", r1, r2);
}
return 0;
}
実際、この質問は選択構造で書くこともでき、コードの行数が減ります
#include <stdio.h>
#include <math.h>
int main() {
double a, b, c;
scanf("%lf%lf%lf", &a, &b, &c);
double discriminant = b * b - 4 * a * c;
if (a != 0) {
if (discriminant > 0) {
printf("r1=%7.2f\n", (-b + sqrt(discriminant)) / 2 * a);
printf("r2=%7.2f\n", (-b - sqrt(discriminant)) / 2 * a);
}
}
return 0;
}