请大佬帮看,while和for的区别

P1035 [NOIP2002 普及组] 级数求和

MrKeanu @ 2020-02-17 11:40:19

第一次是用for语句写的循环体,结果怎么都不对,但是用while语句写就对了,这是什么原因呢?

在测试中发现for语句最后n的值会多出1,这个与它的语句体有关吗?

楼下附上源代码。

for语句:

#include<stdio.h>

int main(){
    int n,k;
    double s=0.0;

    scanf("%d",&k);
    for(n=1;s<=k;n++){
        s =s+ 1.0/n;    
    printf("%d",n);

    return 0;
} 

while语句:

#include<stdio.h>

int main(){
    int n,k;
    double s=0.0;

    scanf("%d",&k);
    while(s<=k){
        n++;
        s+=1.0/n;
    }
    printf("%d",n);

    return 0;
} 

by UnyieldingTrilobite @ 2020-02-17 12:10:00

@SIXIANG

请不要欺负人家萌新,你也曾是初学


by a___ @ 2020-02-17 12:10:57

不是,for完了加上一个n--不香吗


by liqingyang @ 2020-02-17 12:11:37

@MrKeanu 这个东西我研究过

首先for语句的执行顺序是:

第一个分号前面,第一个分号后面,第二个分号后面,第一个分号后面,第二个分号后面,第一个分号后面,第二个分号后面,第一个分号后面......所以它会加完后发现不对,再改


by SIXIANG32 @ 2020-02-17 12:14:12

@Zyque 我也才1年啊,菜的不像话


by liqingyang @ 2020-02-17 12:15:20

望关注!


by SIXIANG32 @ 2020-02-17 12:15:28

@iTwinkle 哦,对,但我直接输出return0;


by SIXIANG32 @ 2020-02-17 12:28:53

@iTwinkle 忘说了,我以为这事大家都知道,而且我写的用的是return 0不是break


by MrKeanu @ 2020-02-17 13:31:44

@Program404 谢谢提醒啊,复制粘贴的时候漏掉了,初始值是不是0不影响结束条件的,循环次数是一样的。


by MrKeanu @ 2020-02-17 13:33:37

@SIXIANG 半年多了,但平时很少用c艹


by MrKeanu @ 2020-02-17 13:35:40

@SIXIANG 谢谢提醒啊,这个是写回答时复制粘贴漏了的(尴尬.jpg)


上一页 |