|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
题目是
输入描述
输入一行,包含三个浮点数a,b,c
(它们之间以一个空格分开),分别表示方程ax2+bx+c=0
的系数。
输出描述
输出一行,表示方程的解。
若b2=4∗a∗c
,则两个实根相等,则输出形式为:x1=x2=...。
若b2>4∗a∗c
,则两个实根不等,则输出形式为:x1=...;x2= ...,其中x1>x2
。
若b2<4∗a∗c
,则有两个虚根,则输出:x1=实部+虚部i; x2=实部-虚部i,即x1
的虚部系数大于等于x2
的虚部系数,实部为0时不可省略。
我的代码是- #include<stdio.h>
- #include<math.h>
- int main()
- {
- double a,b,c,t;
- scanf("%lf%lf%lf",&a,&b,&c);
- if(pow(b,2)==4*a*c) printf("x1=x2=%.5lf",(-b)/(2*a));
- if(pow(b,2)>4*a*c)
- {
- int x,y;
- x=(((-b)+sqrt(b*b-4*a*c))/(2*a));
- y=(((-b)-sqrt(b*b-4*a*c))/(2*a));
- if(x<y){t=x;x=y;y=t;}
- printf("x1=%.5lf;x2=%.5lf",x,y);
- }
- if(pow(b,2)<4*a*c)
- {
- int s,x;
- s=(-b)/(2*a);x=sqrt(4*a*c-b*b)/(2*a);
- printf("x1=%.5lf+%.5lfi;x2=%.5lf-%.5lfi",s,fabs(x),s,fabs(x));
- }
- }
复制代码
代码有两个问题:
1. 在处理实根时,应该使用 double 类型存储根的值,而不是 int 类型。
2. 在处理虚根时,应该使用 fabs() 函数计算虚部的绝对值,而不是直接取反。
修改后的代码如下:
- #include <stdio.h>
- #include <math.h>
- int main()
- {
- double a, b, c, t;
- scanf("%lf%lf%lf", &a, &b, &c);
- if (pow(b, 2) == 4 * a * c)
- printf("x1=x2=%.5lf", (-b) / (2 * a));
- if (pow(b, 2) > 4 * a * c)
- {
- double x, y;
- x = ((-b) + sqrt(b * b - 4 * a * c)) / (2 * a);
- y = ((-b) - sqrt(b * b - 4 * a * c)) / (2 * a);
- if (x < y)
- {
- t = x;
- x = y;
- y = t;
- }
- printf("x1=%.5lf;x2=%.5lf", x, y);
- }
- if (pow(b, 2) < 4 * a * c)
- {
- double s, x;
- s = (-b) / (2 * a);
- x = sqrt(4 * a * c - b * b) / (2 * a);
- printf("x1=%.5lf+%.5lfi;x2=%.5lf-%.5lfi", s, fabs(x), s, fabs(x));
- }
- return 0;
- }
复制代码
|
|