|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
- #include <stdio.h>
- #include <math.h>
- int main()
- {
- float a, b, c, p, q, x1, x2, x3, x4;
- printf("please input a,b,c\n");
- scanf("%f%f%f", &a, &b, &c);
- p = -b / 2 * a;
- q = sqrt(b * b - 4 * a * c) / 2 * a;
- if(a = 0)
- {
- printf("不是二次方程\n");
- }
- else
- {
- if(b * b - 4 * a * c == 0)
- {
- printf("有两个相等的实根\n");
- }
- else if((b * b - 4 * a * c) > 0)
- {
- x1 = p + q;
- x2 = p - q;
- printf("有两个不相等实根%.2f,%.2f\n");
- }
- else
- {
- x3 = p + q * i;
- x4 = p - q * i;
- printf("有两个复根%.2f,%.2f\n");
- }
- }
- }
- return 0;
- }
复制代码
哪里有问题
这段代码有两个问题:
1. 在计算p和q时,运算符的优先级有误,应该加上括号,即 p = -b / (2 * a) 和 q = sqrt(b * b - 4 * a * c) / (2 * a) 。
2. 在判断二次方程有无实根时,使用了错误的赋值运算符“=”,应该使用相等运算符“==”,即 if(a == 0) 。
修改后的代码如下:
- #include <stdio.h>
- #include <math.h>
- int main()
- {
- float a, b, c, p, q, x1, x2, x3, x4;
- printf("please input a,b,c\n");
- scanf("%f%f%f", &a, &b, &c);
- p = -b / (2 * a);
- q = sqrt(b * b - 4 * a * c) / (2 * a);
- if(a == 0)
- {
- printf("不是二次方程\n");
- }
- else
- {
- if(b * b - 4 * a * c == 0)
- {
- printf("有两个相等的实根\n");
- }
- else if((b * b - 4 * a * c) > 0)
- {
- x1 = p + q;
- x2 = p - q;
- printf("有两个不相等实根%.2f,%.2f\n", x1, x2);
- }
- else
- {
- x3 = p + q * I;
- x4 = p - q * I;
- printf("有两个复根%.2f+%.2fi,%.2f-%.2fi\n", creal(x3), cimag(x3), creal(x4), cimag(x4));
- }
- }
- return 0;
- }
复制代码
|
|