C语言的错在哪

来源:百度知道 编辑:UC知道 时间:2024/06/19 11:12:57
#include<stdio.h>
#include<math.h>
main()
{
int n=1;
double m=0.5e-5,q=pow(-1,n-1)/n,l=log(2);
double s=0;
do{
s=s+q;
n++;
}while(fabs(s-l)>=m);
printf("%d\n",n);
}
错在哪啊

#include<stdio.h>
#include<math.h>
main()
{
int n=1;
double m=0.5e-5,q=pow(-1,n-1)/n,l=log(2);
double s=0;
do{
q=pow(-1,n-1)/n;
s=s+q;
n++;
}while(fabs(s-l)>=m);
printf("%d\n",n);
}

你规定的m值太小了,可能达不到,程序就会一直循环,不进行打印语句,或者达到了,但是n的值已经溢出。你换个m=0.5,就能出来2.

while(fabs(s-l)>=m)
这条语句有问题
调试程序发现s的值是从1到2到3......变化的
而l的值为0.693147...
m的值为5.00000000000000e-006
因而程序运行到while(fabs(s-l)>=m)
这条语句时,一直为真,一直做do....while 循环
所以不能执行下面的printf语句!!!