【C/C++】一文带你彻底搞懂C/C++ for循环语句基础用法

i取值从0到n-1:

写此文章的最初目的:

本人最近在教准备考研跨考计算机的女朋友C++程序设计,但是她在for循环这一板块有严重薄弱与理解困难。同时我想到在以往的学习中有不少同学也在for循环中绕晕,摔跟头,因此我打算自己写博客,细说让所有新人“似懂非懂”“模棱两可”的for语句。


什么是for循环:

for 循环是允许你编写一个执行特定次数的循环的语句。

首先我们需要明白,最终我们要靠for循环实现的,是一个执行特定次数的任务

因此我们需要把一个个问题,抽象成可以“重复多次”的问题

假设让你输出一个"Hello",你可能会觉得,“这还不容易?不就是cout<<"Hello"<<endl;吗”

那假设让你输出两个"Hello",你可能会想把cout重复两次。

那如果执行一百次呢?此时重复显然是不适用的了,因此需要引入for循环。

for(int i=0;i<100;i++){
    cout<<"Hello"<<endl;
}

这是一个最简单的输出一百次"Hello"的方法。


让我们来剖析一下这段代码的结构以及执行过程。

为方便起见,我们给代码的每一段标个号。

for(int i=0 --1--;i<100 --2--;i++  --3--)
    cout<<"Hello"<<endl;
    --4--
}

首先解释一下每一段的内容。

--1--:int i=0代表初始化,如果你想要执行n次指令,一定需要有一个计数器,从1数到n(或0数到n-1)吧?那么int i = 0就是约定俗成的计数器,你可以任意取名字,可以从0或者1开始,相对应的限定条件也要发生改变。此处也可以省略,也就是说计数器可以之前就定义好。

--2--:循环能够执行的条件,类型为bool。意思也就是说,假如你把此处填为true,那么循环就会一直进行(除非你写了break;)此处因为我们需要执行100次,于是就需要i<100。

有同学会问,为什么不写成i<=100?的确,这是个很容易混淆的问题,别急,等我随后理清for语句执行过程你就明白了。

--3--:此处代表循环体结束之后需要执行的内容。当我们执行完一次任务之后,是否需要让计数器记一次数呢?这个板块就是用于干这个的。我们可以让i++,让它自增1,由此增加一次计数。此处如果省略或者写成i--,那么也会造成死循环。

--4--:循环体所需要执行的部分,也就是你要执行的具体命令。


接下来的内容至关重要。我们需要了解一个for语句的执行顺序。

按照上文的编号,执行顺序依次是:

1→2→4→32→4→32→4→32→4→3→……→2

当某一次--3--执行完时,我们会发现--2--已经不满足条件了。

以上文举例,当执行完100次之后,i会从99变成100,不满足i<100,因此循环退出。


那么为什么要写成i<100而不是i<=100呢?

从上文我们可以看到,for循环刚开始执行的顺序是1→2→4→3,

也就是说当第一次循环开始执行时,i还是初始值0,执行完第一次i才变成1

也就是说:

第1次执行→i =0

第2次执行→i =1

...

第100次执行→i =99

当第一百次执行完之后,进行--3--部分,也就是i++时,此时i=100,不符合i<100,循环退出。倘若把--2--部分的i<100改成i<=100,不就要执行第101次了吗?

如果经过以上点播已经明白了为什么要这样,那么恭喜你,你已经入门了。

(同样的,以上的i<100可以写成i<=99,原因自己推理。)

请注意,这里的1,2,3,4部分都是可以自定义的,甚至都可以空着,可以单纯写个for(;;){}的空死循环。


如果把循环“倒着执行”,也就是让计数器从大到小,那也完全ok.

for(int i=100;i>0;i--){
    cout<<"Hello"<<endl;
}

第1次执行时,i=100

第2次执行时,i=99

...

第100次执行时,i=1

当第100次执行完后,i--,i=0,此时不满足i>0条件,于是退出。

i>0同样可以写成i>=1.


如果突然分辨不清楚要不要加=,可以从小类推。例如

for(int i=1;i>0;i--){
    cout<<"Hello"<<endl;
}

第一次执行cout时,i=1,执行完之后i--,i=0,不满足i>0,因此执行一次。所以在i=1;i>0的情况下执行一次。

以此类推,i=100;i>0的情况下执行一百次。


如果你还是一头雾水,实在没办法学,那只能记一些常用的结论了。

但是如果可以的话一定要把上文的内容理清楚,这样才能以不变应万变。

i取值从0到n-1,执行n次:

//从0到n-1,执行n次
for (int i=0;i<n;i++){
    //代码
}

i取值从1到n,执行n次:

//从1到n,执行n次
for (int i=1;i<=n;i++){
    //代码
}

 i取值从n-1到0,执行n次:

//从n-1到0,执行n次
for (int i=n-1;i>=0;i--){
    //代码
}

i取值从n到1,执行n次:

//从n到1,执行n次
for (int i=n;i>=1;i--){
    //代码
}

最后,只学会机械地重复同一段代码是没有达到要求的。在实际的题目和程序中,计数变量i同样发挥着很大效用。

例如让你输出1-1000所有质数,你需要建立一个1-1000的for循环,每当i++后,就要判断它是不是质数,如果是质数就输出。

bool isPrime(int num){
    //..省略
}
///
///
for(int i=1;i<=1000;i++){
    if(isPrime(i)){
        cout<<i<<" ";
    }
}

相关题目:

最长连号 - 洛谷

字符三角形 - 洛谷

【深基4.例6】数字直角三角形 - 洛谷

【深基4.例11】数列求和 - 洛谷

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值