用C语言求解一元二次方程的解,为什么编译什么的都过了,就是运行的结果不对啊,求帮忙看下哪里错了? 10
#include<stdio.h>#include<math.h>//一元二次方程求解intmain(){doublea,b,c;doubledelta;delta=b*...
#include<stdio.h>#include<math.h>
//一元二次方程求解
int main()
{
double a,b,c;
double delta;
delta=b*b-4*a*c; //delta存放b*b-4ac的值
printf("请输入一元二次方程的系数a,b,c\n");
getchar();
scanf("a=%fb=%fc=%f\n",&a,&b,&c);
getchar();
double x1,x2; //存放一元二次方程的两个解
if(delta>0)
{
x1=(-b+sqrt(delta))/2*a;
x2=(-b-sqrt(delta))/2*a;
printf("该方程有两个不同解x1=%f,x2=%f\n",x1,x2);
}
else if(delta==0)
{
x1=(-b)/2*a;
x2=x1;
printf("该方程有唯一的一个解x1=x2=%f\n",x2);
}
else
{
printf("该方程无解\n");
}
return 0;} 展开
//一元二次方程求解
int main()
{
double a,b,c;
double delta;
delta=b*b-4*a*c; //delta存放b*b-4ac的值
printf("请输入一元二次方程的系数a,b,c\n");
getchar();
scanf("a=%fb=%fc=%f\n",&a,&b,&c);
getchar();
double x1,x2; //存放一元二次方程的两个解
if(delta>0)
{
x1=(-b+sqrt(delta))/2*a;
x2=(-b-sqrt(delta))/2*a;
printf("该方程有两个不同解x1=%f,x2=%f\n",x1,x2);
}
else if(delta==0)
{
x1=(-b)/2*a;
x2=x1;
printf("该方程有唯一的一个解x1=x2=%f\n",x2);
}
else
{
printf("该方程无解\n");
}
return 0;} 展开
展开全部
程序修改为:
#include<stdio.h>
#include<math.h>
//一元二次方程求解
int main()
{
double a,b,c;
double delta;
double x1,x2; /*变量定义放在一起! */
printf("请输入一元二次方程的系数a,b,c\n");
getchar(); /*这一句不是必须的! */
scanf("lf,%lf,%lf\n",&a,&b,&c); /*记住:double数据要用:lf%格式!!!! */
getchar(); /*这一句也不是必须的! */
delta=b*b-4*a*c; /*delta存放b*b-4ac的值 */
if(delta>0)
{
x1=(-b+sqrt(delta))/(2*a);
x2=(-b-sqrt(delta))/(2*a);
printf("该方程有两个不同解x1=%lf,x2=%lf\n",x1,x2); /*记住:double数据要用:*/
/* lf%格式!!!! */
}
else if(delta==0) /*计算机中,存在误差(精度),对实数来讲,小到一定程序就是0了,*/
/*所以实型变量是否为0,跟整型数据使用的形式还真不一样。 */
/*比如delta<e-10即小于10的负10次方,就认为是0了。 */
{
x1=(-b)/(2*a); /* !!!*/
x2=x1;
printf("该方程有唯一的一个解x1=x2=%lf\n",x2); /* 记住:double数据要用: */
/* lf%格式!!!! */
}
else
{
printf("该方程无解\n");
}
return 0;}
#include<stdio.h>
#include<math.h>
//一元二次方程求解
int main()
{
double a,b,c;
double delta;
double x1,x2; /*变量定义放在一起! */
printf("请输入一元二次方程的系数a,b,c\n");
getchar(); /*这一句不是必须的! */
scanf("lf,%lf,%lf\n",&a,&b,&c); /*记住:double数据要用:lf%格式!!!! */
getchar(); /*这一句也不是必须的! */
delta=b*b-4*a*c; /*delta存放b*b-4ac的值 */
if(delta>0)
{
x1=(-b+sqrt(delta))/(2*a);
x2=(-b-sqrt(delta))/(2*a);
printf("该方程有两个不同解x1=%lf,x2=%lf\n",x1,x2); /*记住:double数据要用:*/
/* lf%格式!!!! */
}
else if(delta==0) /*计算机中,存在误差(精度),对实数来讲,小到一定程序就是0了,*/
/*所以实型变量是否为0,跟整型数据使用的形式还真不一样。 */
/*比如delta<e-10即小于10的负10次方,就认为是0了。 */
{
x1=(-b)/(2*a); /* !!!*/
x2=x1;
printf("该方程有唯一的一个解x1=x2=%lf\n",x2); /* 记住:double数据要用: */
/* lf%格式!!!! */
}
else
{
printf("该方程无解\n");
}
return 0;}
追答
1、double默认输出格式0太多,改成printf("该方程有两个不同解x1=%5.2lf,x2=%5.2lf\n",x1,x2); 吧
2、将else if(delta==0) 改为else if(abs(delta)<1e-5)
输入应该是:
scanf("%lf,%lf,%lf\n",&a,&b,&c);
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你确定你这个是要用C语言写的? 定义竟然想学C++,而且scanf("a=%fb=%fc=%f\n",&a,&b,&c);这个在你输入的时候会很烦的 ,你只能这样输入a=4.0b=5.0c=7.0;这种形式输入,除非你改成scanf("%f%f%f",&a,&b,&c);C语言一般输入都是这样子的 ,别在scnaf中加东西,不然输入很麻烦,你程序蛮多处错误的,现在在帮你慢慢改
更多追问追答
追问
谢谢
追答
#include
#include
//一元二次方程求解
int main()
{
double a,b,c;
double delta;
double x1,x2;//存放一元二次方程的两个解
printf("请输入一元二次方程的系数a,b,c:");
scanf("%f %f %f",&a,&b,&c);
delta=b*b-4*a*c; //delta存放b*b-4ac的值
if(delta>0)
{
x1=(-b+sqrt(delta))/2*a;
x2=(-b-sqrt(delta))/2*a;
printf("该方程有两个不同解x1=%f,x2=%f\n",x1,x2);
}
else if(delta==0)
{
x1=(-b)/2*a;
x2=x1;
printf("该方程有唯一的一个解x1=x2=%f\n",x2);
}
else
{
printf("该方程无解\n");
}
return 0;}
这个可以运行 你之前的那个问题是,就像我上面说的,输入方便方法不对 ,因为你用的是scanf("a=%fb=%fc=%f\n",&a,&b,&c); 所以你输入是的方式只能是a=1 b=2 c=1才行 或者你把scanf改成我上面说的就行
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
delta=b*b-4*a*c; //delta存放b*b-4ac的值
上面这行放到getchar();下面,不然你就是使用未初始化的a\b\c在运算了
另外要注意输入格式:a=3.0b=4.0c=5.0
上面这行放到getchar();下面,不然你就是使用未初始化的a\b\c在运算了
另外要注意输入格式:a=3.0b=4.0c=5.0
追问
改了但是还是不行啊??
追答
注意我说的输入格式:a=3.0b=4.0c=5.0
"a="、"b="和"c="是必须的,因为你的scanf这样写了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
应该把
delta=b*b-4*a*c; //delta存放b*b-4ac的值
这个放在
scanf("a=%fb=%fc=%f\n",&a,&b,&c);
之后 因为没赋值之前便令并非没有值
delta=b*b-4*a*c; //delta存放b*b-4ac的值
这个放在
scanf("a=%fb=%fc=%f\n",&a,&b,&c);
之后 因为没赋值之前便令并非没有值
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询