读书人

简单有关问题!这个为什么成死循环了打

发布时间: 2012-02-26 20:19:44 作者: rapoo

简单问题!这个为什么成死循环了打星号处。

#include "iostream.h "

void main()
{
float temp=0;
float c;
int n=1;
while(c!=temp)
{
cout < < "please input number " < <endl;
cin> > c;
if(c <0.01||c> 5.20||c==0)
{
cout < < "ERRor " < <endl;
break;
}
else if(0.01 <c <5.20)
{
while(c!=temp)
*{
*temp=1/(n+1)+temp;
*n++;
*}
}
}
cout < <n;
}


[解决办法]
楼主你的死循环是由于你对float型的变量进行了直接的=号比较的结果

float类型的比较不能用=号来决定,

因为它的精度太多,

很难保证完全一致.

所以对于float类型的比较要用绝对值来比较

也就是所谓的极限.

改一下你的如下:

while( (c-temp) <0.0001 && (c-temp)> -0.0001 )
{
temp=1/(n+1)+temp;
n++;
}

这样也就是当c-temp的绝对值小于0.0001时,我们认为c已经等于temp了.

读书人网 >C++

热点推荐