用c语言swich函数,写求一元二次方程az’+e+c=0的根,通过键盘输入a、b、c,根据入的值输出对应x1和x2的值(保留一位小数)
时间: 2023-05-30 11:06:12 浏览: 378
以下是解法:
```c
#include <stdio.h>
#include <math.h>
int main()
{
float a, b, c, delta, x1, x2;
printf("请输入a、b、c的值:");
scanf("%f %f %f", &a, &b, &c);
delta = b * b - 4 * a * c;
switch (delta > 0 ? 1 : (delta == 0 ? 2 : 3)) {
case 1: // 有两个不相等的实数根
x1 = (-b + sqrt(delta)) / (2 * a);
x2 = (-b - sqrt(delta)) / (2 * a);
printf("x1 = %.1f, x2 = %.1f\n", x1, x2);
break;
case 2: // 有两个相等的实数根
x1 = x2 = -b / (2 * a);
printf("x1 = x2 = %.1f\n", x1);
break;
case 3: // 有两个共轭的复数根
x1 = -b / (2 * a);
x2 = sqrt(-delta) / (2 * a);
printf("x1 = %.1f + %.1fi, x2 = %.1f - %.1fi\n", x1, x2, x1, x2);
break;
}
return 0;
}
```
解释:
1. 首先,用 scanf 函数从键盘输入 a、b、c 的值。
2. 然后,计算判别式 delta。
3. 接着,使用 switch 函数根据 delta 的值判断方程的根的类型。如果 delta > 0,则方程有两个不相等的实数根;如果 delta = 0,则方程有两个相等的实数根;如果 delta < 0,则方程有两个共轭的复数根。
4. 对于每种情况,我们分别计算出方程的两个根 x1 和 x2,并用 printf 函数输出结果。由于题目要求保留一位小数,因此使用格式化输出 "%.1f" 来控制输出的小数位数。
5. 最后,程序返回 0,表示正常结束。
阅读全文