题目如下图(想要答案的直接看最后代码)
---------------------------------------------------------------------------------------------------------------------------------
题目讲解(思路)
---------------------------------------------------------------------------------------------------------------------------------
首先,我们需要输入a,b,c三个值,再判断a是否等于0,如果等于0则输出 Not quadratic equation , 如果a不等于0 则开始解一元二次方程
第二步,当a ≠ 0 时,需要判断 △ 的三种情况(=0,>0 , <0)三种情况,三种情况分别对应三个数值,全部正确输出则本题完成
根据以上情况分析,我们可以写出题目要求的模板
代码如下
#include<stdio.h>
#include<math.h>
int main()
{
float a = 0.0f,b = 0.0f,c = 0.0f;
while(scanf("%f%*c%f%*c%f",&a,&b,&c)!=EOF){
//计算 △
float dert = 0.0f;
dert = b*b-4*a*c;
//计算 △ 的平方根
float k = sqrt(dert);
//两个一元二次方程的值x1,x2
float x1 = 0.0f,x2 = 0.0f;
if(a == 0){
printf("Not quadratic equation\n");
}
if(a!=0){
if(dert == 0){
}
if(dert > 0){
}
if(dert < 0){
}
}
}
}
当 △ = 0 时,x1 = x2 = -b/2a ,用代码写就是 -b/(2.0*a)
注意:这里的2*a一定要用小括号括起来,否则代码实现的是 -b / 2.0,得出的结果乘了一个a
当 △ > 0 时,只需要按照解一元二次方程的求根公式正常求值就可以
注意:在用代码套公式时依然要注意小括号的使用,否则运算结果会随着代码的运算顺序出错(与△ = 0 时的原理一样)
△ > 0 代码如下
if (dert > 0) {
x1 = (-b - k) / 2.0 / a;
x2 = (-b + k) / 2.0 / a;
printf("x1=%.2f;x2=%.2f\n", x1, x2);
}
当 △ < 0 时,根据题目要求,需要求出实部和虚部(题目给公式了)
但是题目需要带上虚数i,这里只需要在输出时带上一个i就可以了
△ < 0 代码如下
if (dert < 0) {
float shi = -b / 2.0 / a;
float xu = sqrt(-dert) / 2.0 / a;
printf("x1=%.2f-%.2fi;x2=%.2f+%.2fi\n", shi, xu, shi, xu);
}
---------------------------------------------------------------------------------------------------------------------------------
总结代码
---------------------------------------------------------------------------------------------------------------------------------
#include<stdio.h>
#include<math.h>
int main() {
float a = 0.0f, b = 0.0f, c = 0.0f;
while (scanf("%f%*c%f%*c%f", &a, &b, &c) != EOF) {
//计算 △
float dert = 0.0f;
dert = b * b - 4 * a * c;
//计算 △ 的平方根
float k = sqrt(dert);
//两个一元二次方程的值x1,x2
float x1 = 0.0f, x2 = 0.0f;
if (a == 0) {
printf("Not quadratic equation\n");
}
if (a != 0) {
if (dert == 0) {
//这里 b == 0是根据题目需求添加的
if (b == 0) {
printf("x1=x2=0.00\n");
} else {
printf("x1=x2=%.2f\n", -b / (2.0 * a));
//易错写法printf("x1=x2=%.2f\n",-b/2.0*a)
}
}
if (dert > 0) {
x1 = (-b - k) / 2.0 / a;
// 一定要注意小括号!!!
x2 = (-b + k) / 2.0 / a;
printf("x1=%.2f;x2=%.2f\n", x1, x2);
}
if (dert < 0) {
float shi = -b / 2.0 / a;
float xu = sqrt(-dert) / 2.0 / a;
//注意i的位置
printf("x1=%.2f-%.2fi;x2=%.2f+%.2fi\n", shi, xu, shi, xu);
}
}
}
}