c++的高手,看看这个程序哪有问题???

来源:百度知道 编辑:UC知道 时间:2024/06/05 08:42:32
先不说这个程序好不好,只看看哪错了
运行结果是 什么都没有,直接是"press any key ……
#include <iostream>
#include <cmath>
using namespace std;
float f(float x,float a,float b,float c,float d,float e);
float zhong(float x1,float x2,float a,float b,float c,float d,float e);
void root(float x1,float x2,float a,float b,float c,float d,float e);

int main()
{
float qi=-1000,qe,a,b,c,d,e; //找-1000到1000的基本上所有解
cout<<"ax4+bx3+cx2+dx+e=0"<<"请输入方程的系数"<<endl;
cin>>a>>b>>c>>d>>e;
while (qi<1000)
{
while(f(qi,a,b,c,d,e)*f(qi+0.1,a,b,c,d,e)>=0) //间隔0。1确定解的大概位置
qi=qi+0.1;
qe=qi+0.1;
root(qi,qe,a,b,c,d,e);

}
return 3;
}
float f(float x,float a,float b,float c,float d,float e)
{
int y;
y=a*x*x*x*x+b*x*x*x+c*x*x+d*x+e;
return (y);
}
float zhong(float x1,float x2,float a,f

我这里可以正常运行

程序好不好我不知道,先说几个比较明显的问题
看情况应该是在解方程对吧,一个数一个数地试

首先这一句逻辑就不对,应该用>0
while(f(qi,a,b,c,d,e)*f(qi+0.1,a,b,c,d,e)>=0) //间隔0。1确定解的大概位置
qi=qi+0.1;
比如方程是 x=0,那么这个循环就死掉了

你说结果一直是Press any key to continue..那么说明没碰到这个问题,先忽略。问题是没有输出对吧,好像只有在root这个函数有一处会输出的,而这句输出有条件的,没有输出说明条件没有满足。
zhong这个函数我还没分析过,一直没有输出说明这个fabs一直是比较大的,你的步长是0.1,要达到0.0000001的精度,我觉得不大可能的。。

不过把那个>=0改掉之后,用-x+1=0这个方程就有结果了,但是结果明显不对

说明程序本身就是错的,建议好好考虑下程序里面的逻辑,怎么迭代,精度可以到多少

另外不要一下子就上复杂的例子,先用简单的方程测试,有问题的话通过调试跟踪到你自己写的每一步,哪一步该是怎么样你自己最清楚了