PTA 7-58 求一元二次方程的根
分数 20
作者 刘继承
单位 河南工业大学
输入格式:
在一行给出a(
=0)、b、c三个整数的值(a非)。
输出格式:
如果有实数根,在一行从小到大顺序输出两个根,保留小数点后2位。如果是虚数根,输出两个-1。
输入样例:
1 -2 1
4 6 1
4 3 1
输出样例:
在这里给出相应的输出。例如:
1.00 1.00
-1.31 -0.19
-1 -1
代码长度限制
16 KB
时间限制
100 ms
内存限制
64 MB
代码:
#include <stdio.h>
#include <math.h>
int main(void){
//ax^2+bx+c=0
double a, b, c, imaginary; //定义方程二次方系数a, 一次放系数b, 常数c
double x1, x2; //定义方程的两个根x1, x2
scanf("%lf %lf %lf",&a, &b, &c);
imaginary = pow(b, 2) - (4.00 * a * c); //德尔塔判别式
if(a != 0){ //判断二次方系数是否为0
if(imaginary >= 0){ //德尔塔判别式大于0有两个解
x1 = ((-b) + sqrt(imaginary)) / (2.00 * a); //第一个解
x2 = ((-b) - sqrt(imaginary)) / (2.00 * a); //第二个解
printf("%.2lf %.2lf", x2, x1); //输出两个解
}else if(imaginary < 0){ //德尔塔判别式小于0无解
printf("-1 -1"); //无解则输出-1 -1
}
}
return 0;
}
解题思路:
step1:先求德尔塔判别式
step2:判断二次方系数是否为0
step3:判断德尔塔是否大于0
step4:用求根公式求解
归属知识点:
数学函数库
条件判断