|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
描述
求一元二次方程“ax^2+bx+c=0”的根,其中a不等于0。结果要求精确到小数点后5位。
若两个实根相等,则输出形式为:“x1=x2=XXX.XXXXX”;
若两个实根不等,需满足根小者在前的原则,中间用分号隔开,输出形式为:“x1=XX.XXXXX;x2=XX.XXXXX";
若无实根输出“No answer!”。
格式
输入格式
输入一行,包含三个浮点数a, b, c(它们之间以一个空格分开),分别表示方程a的系数。
输出格式
输出一行,表示方程的解。 所有输出部分要求精确到小数点后5位,数字、符号之间没有空格。
我打的::不知道问题出哪了
#include<stdio.h>
#include<math.h>
int main()
{
int a,b,c,g,x;
double x1,x2;
scanf("%d %d %d",&a,&b,&c);
if(0==a*x*x+b*x+c)
{
g=b*b-4*a*c;
if(g<0)
printf("No answer");
while(g>=0)
{
if(g>0)
{
x1=(-b+sqrt(g))/2*a;
x2=(-b-sqrt(g))/2*a;
}
if(g==0)
{
x1=(-b)/2*a;
x2=x1;
}
return(0);
}
printf("%lf;%lf",x1,x2);
}
}
本帖最后由 jackz007 于 2021-1-6 11:50 编辑
- int a,b,c,g,x;
- . . . . . .
- if(0==a*x*x+b*x+c)
复制代码
x 未赋值就引用,这个逻辑条件怕是永远也无法满足。后面计算 x1、x2 的代码根本没有机会得到执行!
- #include<stdio.h>
- #include<math.h>
- int main()
- {
- int a , b , c , d ;
- double x1 , x2 ;
- scanf("%d%d%d" , & a , & b , & c) ;
- d = b * b - 4 * a * c ;
- if(d >= 0) {
- x1 = 1.0 * (- b + sqrt(d)) / (2 * a) ;
- x2 = 1.0 * (- b - sqrt(d)) / (2 * a) ;
- if(x2 < x1) printf("x1 = %.5lf ; x2 = %.5lf\n" , x2 , x1) ;
- else if (x2 > x1) printf("x1 = %.5lf ; x2 = %.5lf\n" , x1 , x2) ;
- else printf("x1 = x2 = %.5lf\n" , x1 , x2) ;
- } else {
- printf("No answer") ;
- }
- }
复制代码
编译、运行实况
- D:\0002.Exercise\C>g++ -o x x.c
- D:\0002.Exercise\C>x
- 5 3 2
- No answer
- D:\0002.Exercise\C>x
- 2 5 3
- x1 = -1.50000 ; x2 = -1.00000
- D:\0002.Exercise\C>x
- 2 -5 3
- x1 = 1.00000 ; x2 = 1.50000
- D:\0002.Exercise\C>
复制代码
|
|