作者 朱会东
单位 郑州轻工业大学
求一元二次方程ax2+bx+c=0的根。
输入格式:
输入三个用空格隔开的实数a、b、c,分别表示一元二次方程的系数,并保证a不为0。
输出格式:
在一行中输出方程的实根,每个根占宽度15,保留5位小数,右对齐,如果有两个相同的实根,只需要输出一个数,如果有两个不同的实根,按从小到大的顺序输出;如果没有实根,请输出字符串“No Answer”。
输入样例:
2 3 -6
输出样例:
-2.63746 1.13746
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
栈限制
8192 KB
#include <stdio.h>
#include <math.h>
int main()
{
double A, B, C;
scanf("%lf %lf %lf", &A, &B, &C);
// 判断系数a是否为0
if (A == 0) {
printf("No Answer"); // 如果为0,无解
return 0;
}
// 计算判别式delta
double delta = B * B - 4 * A * C;
if (delta < 0) { // 如果delta小于0,无实数根
printf("No Answer");
return 0;
}
// 根据公式计算两个解
double x1 = (-B - sqrt(delta)) / (2 * A);
double x2 = (-B + sqrt(delta)) / (2 * A);
// 将两个根的顺序调整为从小到大,并去除重复根
if (fabs(x1 - x2) < 0.000001) { // 如果两个根相等,只输出一个根
printf("%15.5f", x1);
} else {
if (x1 > x2) { // 如果x1大于x2,则交换两个根的值
double t = x1; x1 = x2; x2 = t;
}
printf("%15.5f%15.5f", x1, x2); // 输出两个根,使用printf函数格式化输出
}
return 0;
}