[C++]C++ 中for循环的语法

作者:黑马程序员
链接:https://www.zhihu.com/question/598431727/answer/3050908873
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
 

for ( init; condition; increment )
{
   statement(s);
}

下面是 for 循环的控制流:

  1. init 会首先被执行,且只会执行一次。这一步允许您声明并初始化任何循环控制变量。您也可以不在这里写任何语句,只要有一个分号出现即可。
  2. 接下来,会判断 condition。如果为真,则执行循环主体。如果为假,则不执行循环主体,且控制流会跳转到紧接着 for 循环的下一条语句。
  3. 在执行完 for 循环主体后,控制流会跳回上面的 increment 语句。该语句允许您更新循环控制变量。该语句可以留空,只要在条件后有一个分号出现即可。
  4. 条件再次被判断。如果为真,则执行循环,这个过程会不断重复(循环主体,然后增加步值,再然后重新判断条件)。在条件变为假时,for 循环终止。

流程图

实例

实例
#include <iostream> using namespace std; int main () { // for 循环执行 for( int a = 10; a < 20; a = a + 1 ) { cout << "a 的值:" << a << endl; } return 0; }

当上面的代码被编译和执行时,它会产生下列结果:

a 的值: 10
a 的值: 11
a 的值: 12
a 的值: 13
a 的值: 14
a 的值: 15
a 的值: 16
a 的值: 17
a 的值: 18
a 的值: 19

基于范围的for循环(C++11)

for 语句允许简单的范围迭代:

int my_array[5] = {1, 2, 3, 4, 5}; // 每个数组元素乘于 2 for (int &x : my_array) { x *= 2; cout << x << endl; } // auto 类型也是 C++11 新标准中的,用来自动获取变量的类型 for (auto &x : my_array) { x *= 2; cout << x << endl; }

上面for述句的第一部分定义被用来做范围迭代的变量,就像被声明在一般for循环的变量一样,其作用域仅只于循环的范围。而在":"之后的第二区块,代表将被迭代的范围。

实例
#include<iostream> #include<string> #include<cctype> using namespace std; int main() { string str("some string"); // range for 语句 for(auto &c : str) { c = toupper(c); } cout << str << endl; return 0; }

上面的程序使用Range for语句遍历一个字符串,并将所有字符全部变为大写,然后输出结果为:

SOME STRING

for循环扩展形式

1) 表达式12和表达式3可以是一个简单的表达式,也可以是逗号表达式(即包含了一个简单表达式),例如:

for(i=0,j=100; i<j; i++,j--)
    k=i+j;

这里的循环控制变量可以不止一个。而且表达式1也可以是与循环变量无关的其他表达式。

2) 循环条件可由一个较复杂表达式的值来确定,例如:

for(i=0; s[i]!=c && s[i]!= '\0'; ++i)

3) 表达式2一般是关系表达式或逻辑表达式,但也可以是数值表达式或字符表达式,只要其值不等于 0 就执行循环体。例如:

for(k=1; k-4; k++)
    s=s+k;

仅当 k 的值等于 4 时终止循环。k-4 是数值表达式。

for循环省略形式

for 循环语句中的 3 个表达式都是可以省略的。

1) 省略“表达式1”,此时应在 for 语句之前给循环变量赋初值。例如:

i=1;
for(; i<=100; i++)
    sum+=i;

2) 省略“表达式2”,表示不判断循环条件,循环无终止地进行下去,也可以认为表达式2始终为真。例如:

for(i=1; ; i++)
    sum+=i;

上面的代码将无休止地执行循环体,一直做累加和。为了终止循环,就要在循环体中加入 break 语句和 goto 语句等。

3) 省略“表达式3”,此时应在循环体内部实现循环变量的增量,以保证循环能够正常结束。例如:

for(i=1;i<=100;){
    sum+=i;
    i++;
}

相当于把表达式3写在了循环体内部,作为循环体的一部分。

4) 省略“表达式1”和“表达式3”,此时只给出了循环条件。例如:

i=1;
for(; i<=100; ) {
    sum+=i;
    i++;
}

相当于把表达式1放在了循环的外面,表达式3作为循环体的一部分。这种情况与C语言 while 语句完全相同。

5) 3个表达式都省略,既不设初值,也不判断条件,循环变量不增值,无终止地执行循环体。例如:

for(; ;)
    循环体语句;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

生活家小毛.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值