C语言实验题——一元二次方程
解一元二次方程ax2+bx+c=0的解。输入输入三个实数a,b,c的值,且a不等于0。输出输出两个根X1和X2,用空格隔开,具体格式为:X1X2其中大的根先输出,即X1>...
解一元二次方程ax2+bx+c=0的解。
输入
输入三个实数a,b,c的值,且a不等于0。
输出
输出两个根X1和X2,用空格隔开,具体格式为:
X1 X2
其中大的根先输出,即X1>=X2。
结果保留两位小数。数据保证一定有实根。
样例输入
1 5 -2
样例输出
0.37 -5.37
我的代码是这样子的,请教各位大牛,哪里错掉了啊,谢谢
#include <stdio.h>
#include<math.h>
int main()
{
int a,b,c;
double d,x1,x2;
scanf("%d",&a);
while(a!=0)
{
scanf("%d %d",&b,&c);
d=sqrt(b*b-4*a*c);
if (d>=0)
{
x1=((-b+d)/(2*a));
x2=((-b-d)/(2*a));
printf("%.2lf %.2lf\n",x1,x2);
}
else
printf("ERROR\n");
break ;
}
return 0;
} 展开
输入
输入三个实数a,b,c的值,且a不等于0。
输出
输出两个根X1和X2,用空格隔开,具体格式为:
X1 X2
其中大的根先输出,即X1>=X2。
结果保留两位小数。数据保证一定有实根。
样例输入
1 5 -2
样例输出
0.37 -5.37
我的代码是这样子的,请教各位大牛,哪里错掉了啊,谢谢
#include <stdio.h>
#include<math.h>
int main()
{
int a,b,c;
double d,x1,x2;
scanf("%d",&a);
while(a!=0)
{
scanf("%d %d",&b,&c);
d=sqrt(b*b-4*a*c);
if (d>=0)
{
x1=((-b+d)/(2*a));
x2=((-b-d)/(2*a));
printf("%.2lf %.2lf\n",x1,x2);
}
else
printf("ERROR\n");
break ;
}
return 0;
} 展开
6个回答
展开全部
#include<stdio.h>
#include<math.h>
int main()
{
double a,b,c,x1,x2; //输入三个实数,所以a,b,c是double类型
scanf("%lf %lf %lf",&a,&b,&c);
x1=(-b+sqrt(b*b-4*a*c))/(2*a);
x2=(-b-sqrt(b*b-4*a*c))/(2*a);
if(x1>=x2)
printf("%.2f %.2f\n",x1,x2);
else
printf("%.2f %.2f\n",x2,x1);
return 0;
}
#include<math.h>
int main()
{
double a,b,c,x1,x2; //输入三个实数,所以a,b,c是double类型
scanf("%lf %lf %lf",&a,&b,&c);
x1=(-b+sqrt(b*b-4*a*c))/(2*a);
x2=(-b-sqrt(b*b-4*a*c))/(2*a);
if(x1>=x2)
printf("%.2f %.2f\n",x1,x2);
else
printf("%.2f %.2f\n",x2,x1);
return 0;
}
展开全部
#include <stdio.h>
#include<math.h>
int main()
{
int a,b,c;
double d,x1,x2;
scanf("%d",&a);
while(a!=0)
{
scanf("%d %d",&b,&c);
d=(b*b-4*a*c*1.0);//sqrt肯定是大于0的,是里面的东西不能小于0
if (d>=0)
{
d=sqrt(d);
x1=((-b+d)/(2*a));
x2=((-b-d)/(2*a));
if(x1<x2)
printf("%.2lf %.2lf\n",x1,x2);
else printf("%.2lf %.2lf\n",x2,x1);
}
else
printf("ERROR\n");
break ;
}
return 0;
}
#include<math.h>
int main()
{
int a,b,c;
double d,x1,x2;
scanf("%d",&a);
while(a!=0)
{
scanf("%d %d",&b,&c);
d=(b*b-4*a*c*1.0);//sqrt肯定是大于0的,是里面的东西不能小于0
if (d>=0)
{
d=sqrt(d);
x1=((-b+d)/(2*a));
x2=((-b-d)/(2*a));
if(x1<x2)
printf("%.2lf %.2lf\n",x1,x2);
else printf("%.2lf %.2lf\n",x2,x1);
}
else
printf("ERROR\n");
break ;
}
return 0;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你定义的变量不应该是整形,应该是双精度的实型变量才行!
建议使用我的这个(借鉴):
#include<stdio.h>
#include<math.h>
#include<string>
main()
{
for(;;)
{
double a,b,c,x1,x2,temp,temp1;
printf("请输入参数a的值为:\n");
scanf("%lf",&a);
printf("请输入参数b的值为:\n");
scanf("%lf",&b);
printf("请输入参数c的值为:\n");
scanf("%lf",&c);
temp=b*b-4*a*c;
if(temp<0)
{
printf("你的函数是:(%lf)x2+(%lf)x+(%lf)=0\n",a,b,c);
printf("该函数是函数是:%lf*x2+%lf*x+c=0\n",a,b,c);
printf("该函数没有实解!");
}
else if(temp==0)
{
x1=x2=(-b)/(2*a);
printf("你的函数是:%lf*x2+%lf*x+%lf=0\n",a,b,c);
printf("该函数有两个相等的实根!分别为:x1=x2=%lf\n",x1);
}
else if(temp>0)
{
temp1=sqrt(temp);
printf("你的函数是:%lf*x2+%lf*x+%lf=0\n",a,b,c);
printf("你的函数是:%lf x2+%lf x+c=0\n",a,b,c);
x1=(b*b-temp1)/2*a;x2=(b*b-temp1)/2*a;
printf("该函数有两个不同的实根,分别为:x1=%lf \n x2=%lf \n",x1,x2);
}
system("pause");
system("cls");
}
}
/*================================================================Mr_computer */
建议使用我的这个(借鉴):
#include<stdio.h>
#include<math.h>
#include<string>
main()
{
for(;;)
{
double a,b,c,x1,x2,temp,temp1;
printf("请输入参数a的值为:\n");
scanf("%lf",&a);
printf("请输入参数b的值为:\n");
scanf("%lf",&b);
printf("请输入参数c的值为:\n");
scanf("%lf",&c);
temp=b*b-4*a*c;
if(temp<0)
{
printf("你的函数是:(%lf)x2+(%lf)x+(%lf)=0\n",a,b,c);
printf("该函数是函数是:%lf*x2+%lf*x+c=0\n",a,b,c);
printf("该函数没有实解!");
}
else if(temp==0)
{
x1=x2=(-b)/(2*a);
printf("你的函数是:%lf*x2+%lf*x+%lf=0\n",a,b,c);
printf("该函数有两个相等的实根!分别为:x1=x2=%lf\n",x1);
}
else if(temp>0)
{
temp1=sqrt(temp);
printf("你的函数是:%lf*x2+%lf*x+%lf=0\n",a,b,c);
printf("你的函数是:%lf x2+%lf x+c=0\n",a,b,c);
x1=(b*b-temp1)/2*a;x2=(b*b-temp1)/2*a;
printf("该函数有两个不同的实根,分别为:x1=%lf \n x2=%lf \n",x1,x2);
}
system("pause");
system("cls");
}
}
/*================================================================Mr_computer */
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
我用的是vc6.0,运行没问题,估计是软件的不同。
我认为,scanf("%d",&a);while(a!=0)之间是不是要加一条getchar();
应为输入完a后,你是要打回车的或空格,可能回车空格的ASC吗,赋给了之后的scanf("%d %d",&b,&c);
中的b了,所以你出错了,试试看吧!
我认为,scanf("%d",&a);while(a!=0)之间是不是要加一条getchar();
应为输入完a后,你是要打回车的或空格,可能回车空格的ASC吗,赋给了之后的scanf("%d %d",&b,&c);
中的b了,所以你出错了,试试看吧!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
没错啊,估计是输入时输错了,先输入a,然后回车,再输入b 空格 再输入c
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询