C语言解2次方程,麻烦大师看看为什么不对
答案:5 悬赏:60 手机版
解决时间 2021-01-24 18:50
- 提问者网友:蓝莓格格巫
- 2021-01-24 15:30
#includeint main(){float x;float y;scanf("f%",&y);y=-0.0052*x*x-0.0043*x+1.3685;printf("%f\n",x);return 0;}需要反解X
最佳答案
- 五星知识达人网友:三千妖杀
- 2021-01-24 15:50
你这问题太大了
如果解方程能这么简单的话,那真的是牛B了。
y=ax^2+bx+c
要得到x,就要知道x的公式啊
d=b^2-4ac
x1=(-b-sqrt(d))/(2a)
x2=(-b+sqrt(d))/(2a)
要计算得到结果啊
例如:
#include
#include
int main()
{
float x;
float d;
float x1,x2;
//-0.0052*x*x-0.0043*x+1.3685=0;
float a,b,c;
a=-0.0052;
b=-0.0043;
c=1.3685;
d=b*b-4*a*c;
x1=(-b-sqrt(d))/(2*a);
x2=(-b+sqrt(d))/(2*a);
printf("%f\t%f\n",x1,x2);
return 0;
}
如果y不是0的话
可以参考一下以下代码
#include
#include
int main()
{
float a,b,c,y;
float d;
float x1,x2;
printf("一元二次方程的形式为ax^2+bx+c=y\n");
printf("请分别输入a,b,c,y用空格隔开");
scanf("%f %f %f %f",&a,&b,&c,&y);
//此时的方程为 ax^2+bx+c-y=0
d=b*b-4*a*(c-y);
if(a==0) //一次方程
{
printf("方程的解为:%f",(y-c)/b);
}
else
{
//判断d
if(d<0)
{
printf("此一元二次方程无解");
}
else if(d==0)
{
x1=(-b-sqrt(d))/(2*a);
printf("此一元二次方程有一个解,解为:%f",x1);
}
else //两个解
{
x1=(-b-sqrt(d))/(2*a);
x2=(-b+sqrt(d))/(2*a);
printf("此一元二次方程有两个解,分别为:%f %f",x1,x2);
}
}
return 0;
}
如果解方程能这么简单的话,那真的是牛B了。
y=ax^2+bx+c
要得到x,就要知道x的公式啊
d=b^2-4ac
x1=(-b-sqrt(d))/(2a)
x2=(-b+sqrt(d))/(2a)
要计算得到结果啊
例如:
#include
#include
int main()
{
float x;
float d;
float x1,x2;
//-0.0052*x*x-0.0043*x+1.3685=0;
float a,b,c;
a=-0.0052;
b=-0.0043;
c=1.3685;
d=b*b-4*a*c;
x1=(-b-sqrt(d))/(2*a);
x2=(-b+sqrt(d))/(2*a);
printf("%f\t%f\n",x1,x2);
return 0;
}
如果y不是0的话
可以参考一下以下代码
#include
#include
int main()
{
float a,b,c,y;
float d;
float x1,x2;
printf("一元二次方程的形式为ax^2+bx+c=y\n");
printf("请分别输入a,b,c,y用空格隔开");
scanf("%f %f %f %f",&a,&b,&c,&y);
//此时的方程为 ax^2+bx+c-y=0
d=b*b-4*a*(c-y);
if(a==0) //一次方程
{
printf("方程的解为:%f",(y-c)/b);
}
else
{
//判断d
if(d<0)
{
printf("此一元二次方程无解");
}
else if(d==0)
{
x1=(-b-sqrt(d))/(2*a);
printf("此一元二次方程有一个解,解为:%f",x1);
}
else //两个解
{
x1=(-b-sqrt(d))/(2*a);
x2=(-b+sqrt(d))/(2*a);
printf("此一元二次方程有两个解,分别为:%f %f",x1,x2);
}
}
return 0;
}
全部回答
- 1楼网友:归鹤鸣
- 2021-01-24 19:02
你这程序和你要完成的功能根本就不是在同一套路上
首先,定义了float x和y,没赋初值,编译器自动给0.000000,scanf是把你要给y的值赋给了y,但是x仍然是0.000000;y=````这句表达式只是将x=0.000000代入表达式中计算然后把计算值重新赋给了y,所以y是1.3685,x是0.000000,没有实现任何解方程功能,编写程序不能想当然的去写,虽然计算机可以很智能,但是要人写算法去实现的,只是一个工具
- 2楼网友:長槍戰八方
- 2021-01-24 18:42
scanf("%1f%1f%1f",&a,&b,&c);
里面的不是数字1和字母f而是两个字母l和f,你试试,对了就速度给分啊,我要下东西
- 3楼网友:上分大魔王
- 2021-01-24 17:33
y=。。。。那一行换成x= 43/104 + sqrt(10000*y - 13685 + (43/104)^2);
这样就可以了。sqrt就是求平方根,你可能要包含头文件math.h,自己查一下是不是这个头文件把。 另外你可能要先判断sqrt里面的数字是否大于0。如果小于0就是虚数了,这个应该不是你需要的。
- 4楼网友:旧脸谱
- 2021-01-24 16:43
scanf("f%",&y);这里应该是%f
你解的也不对,要反解x,在C语言中就是对x赋值,而你的没有对x赋值,只有对y的赋值,而x是一个随机值。
应该是这样的
定义一个临时的变量
float z = y-1.3685
则一元二次方程为0.0052*x*x-0.0043*x-z = 0
然后根据数学中求根公式x = -b加减根号下b的平方减4ac再除以2a
现在一元二次方程的a b c都知道了,按照就跟公式对x赋值就可以了
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯