求解,为什么for语句的语句三第一次循环不执行

P1035 [NOIP2002 普及组] 级数求和

a516237481 @ 2019-09-30 12:09:06

include <stdio.h>

int main() { int n,k; double sum; n=1; scanf("%d",&k); for(sum=0;sum<k;sum+=1.0/n) { n++; } printf("%d",n); } 第一次sum=0,n=2; 第二次sum=0.5,n=3;


by a516237481 @ 2019-09-30 12:11:12

n前加了double也是一样的结果


by 只以 @ 2019-09-30 12:11:42

希望更丰富的展现?使用Markdown


by Lstdo @ 2019-09-30 12:35:31

本来就不执行的


by Fabj7_s9w @ 2019-09-30 13:19:20

希望更丰富的展现?使用Markdown


by 火车司机 @ 2019-09-30 13:37:06

如果您学过while语句,可以将for循环理解以下代码

int sum=0;
while (sum<k) {
    n++;
   sum+=1.0/n;
}

所以第三条语句在第一次循环时会执行,只不过是在 n++ 之后罢了

如果您想要第一次就执行这个语句,可以写成以下代码

for (sum=1.0/n;sum<k;sum+=1.0/n) {
    n++;
}

by 火车司机 @ 2019-09-30 13:37:47

@a516237481


by a516237481 @ 2019-12-21 11:50:03

@火车司机 如果是类似你说的while形式,那么第一遍判定sum<k成立后,应该n+1,然后sum也加个1/n,那么第一遍的结果应该是n=1,sum=1,但结果是sum=0,我觉得是第一遍第三条语句不执行。


by 火车司机 @ 2019-12-21 20:59:01

@a516237481 对,抱歉我审题有误,给您带来麻烦了


|