御笔剑客 发表于 2017-10-21 00:39:29

这段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;
}

newu 发表于 2017-10-21 09:23:54

代码第9行, 1/n会被系统转换为int型,导致double型数据被截断,从而sum恒等于1,导致了while死循环。
解决方法:
sum+=(double)1/n;

身骑白马入华山 发表于 2017-10-21 09:25:27

k初始化一下数值。

斌斌斌 发表于 2017-10-21 09:25:49

从n=2开始,1/n都等于0,所以会无限循环吧

御笔剑客 发表于 2017-10-21 09:30:56

newu 发表于 2017-10-21 09:23
代码第9行, 1/n会被系统转换为int型,导致double型数据被截断,从而sum恒等于1,导致了while死循环。
解 ...

为什么呢?我不是定义了sum为double型吗?

BngThea 发表于 2017-10-21 09:40:31

虽然sum为double类型,但是这句话是这样执行的:
sum += 1/n
先求出1/n,因为n是int类型,所以当n>1以后其值一直为零
再将sum加上该值赋给sum
所以sum才一直会是1,while成了死循环

正确的做法是在第一步就进行转换
sum += 1/double(n)
或者 sum += 1.0/n

御笔剑客 发表于 2017-10-21 09:41:52

BngThea 发表于 2017-10-21 09:40
虽然sum为double类型,但是这句话是这样执行的:
sum += 1/n
先求出1/n,因为n是int类型,所以当n>1以后 ...

我懂了,谢谢

身骑白马入华山 发表于 2017-10-21 12:28:56

身骑白马入华山 发表于 2017-10-21 09:25
k初始化一下数值。

尴尬。。不太会。
页: [1]
查看完整版本: 这段c代码无法运行,是哪里出了问题呢?