永发信息网

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;
}
全部回答
  • 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赋值就可以了
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯