这段c代码无法运行,是哪里出了问题呢?
#include <stdio.h>int main()
{
int n=1,k;
double sum=0;
scanf("%d",&k);
while(sum<=k)
{
sum+=1/n;
n++;
}
printf("%d",n);
return 0;
} 代码第9行, 1/n会被系统转换为int型,导致double型数据被截断,从而sum恒等于1,导致了while死循环。
解决方法:
sum+=(double)1/n; k初始化一下数值。 从n=2开始,1/n都等于0,所以会无限循环吧 newu 发表于 2017-10-21 09:23
代码第9行, 1/n会被系统转换为int型,导致double型数据被截断,从而sum恒等于1,导致了while死循环。
解 ...
为什么呢?我不是定义了sum为double型吗? 虽然sum为double类型,但是这句话是这样执行的:
sum += 1/n
先求出1/n,因为n是int类型,所以当n>1以后其值一直为零
再将sum加上该值赋给sum
所以sum才一直会是1,while成了死循环
正确的做法是在第一步就进行转换
sum += 1/double(n)
或者 sum += 1.0/n BngThea 发表于 2017-10-21 09:40
虽然sum为double类型,但是这句话是这样执行的:
sum += 1/n
先求出1/n,因为n是int类型,所以当n>1以后 ...
我懂了,谢谢 身骑白马入华山 发表于 2017-10-21 09:25
k初始化一下数值。
尴尬。。不太会。
页:
[1]