【GESP】C++二级练习 luogu-B2053, 求一元二次方程
GESP二级练习,数学函数应用,难度★✮☆☆☆。
luogu-B2053 求一元二次方程
题目要求
题目描述
利用公式 :
\[x_1=\frac{-b+\sqrt{b^2-4ac}}{2a} , x_2=\frac{-b-\sqrt{b^2-4ac}}{2a}\]求一元二次方程 $ax^2+bx+c=0$ 的根,其中 $a$ 不等于 $0$。结果要求精确到小数点后 $5$ 位。
输入格式
输入一行,包含三个浮点数 $a,b,c$(它们之间以一个空格分开),分别表示方程 $ax^2+bx+c=0$ 的系数。
输出格式
输出一行,表示方程的解。
若两个实根相等,则输出形式为:
x1=x2=aaaa
;若两个实根不等,在满足根小者在前的原则,则输出形式为:
x1=aaaa;x2=bbbb
;若无实根输出
No answer!
。所有输出部分要求精确到小数点后 $5$ 位,数字、符号之间没有空格。
样例输入 #1
1
-15.97 19.69 12.02
样例输出 #1
1
x1=-0.44781;x2=1.68075
题目分析
本题的关键是正确地应用一元二次方程的根公式,并且根据判别式的值来判断方程是否有实根。首先,我们需要读取输入的系数a, b, c,并计算判别式ee = b^2 - 4ac。如果判别式非负,则方程有实根,我们可以计算根号判别式d,并根据公式计算x1和x2。然后,我们需要判断x1和x2是否相等,如果相等,则输出格式为x1=x2=aaaa;否则,我们需要确保根小者在前,输出格式为x1=aaaa;x2=bbbb。最后,如果判别式小于0,则方程无实根,我们输出No answer!。
示例代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include <cmath>
#include <cstdio>
#include <iostream>
using namespace std;
int main() {
double a, b, c; // 定义变量a, b, c
cin >> a >> b >> c; // 读取输入的a, b, c
double ee = b * b - 4 * a * c; // 计算判别式
if (ee >= 0) { // 如果判别式非负,则方程有实根
double d = sqrt(ee); // 计算根号判别式
double e = d - b; // 计算x1的分子
double x1 = e / (2 * a); // 计算x1
double e_x2 = -1 * b - d; // 计算x2的分子
double x2 = e_x2 / (2 * a); // 计算x2
if (x1 == x2) { // 如果两个根相等
printf("x1=x2=%.5f", x1); // 输出格式为x1=x2=aaaa
} else { // 如果两个根不相等
if (x1 > x2) { // 如果x1大于x2,则交换它们
printf("x1=%.5f;x2=%.5f", x2, x1); // 输出格式为x1=aaaa;x2=bbbb
} else {
printf("x1=%.5f;x2=%.5f", x1, x2); // 输出格式为x1=aaaa;x2=bbbb
}
}
} else { // 如果判别式小于0,则方程无实根
cout << "No answer!"; // 输出No answer!
}
return 0;
}
所有代码已上传至Github:https://github.com/lihongzheshuai/yummy-code
GESP各级别考纲要点、知识拓展和练习题目清单详见C++学习项目主页
“luogu-”系列题目已加入洛谷Java、C++初学团队,作业清单,可在线评测,团队名额有限,欢迎加入。
“bcqm-”系列题目可在编程启蒙题库进行在线评测。
本文由作者按照 CC BY 4.0 进行授权