whlie
语法
C++ 中 while 循环的语法:
while(condition) { statement(s); }
在这里,statement(s) 可以是一个单独的语句,也可以是几个语句组成的代码块。condition 可以是任意的表达式,当为任意非零值时都为真。当条件为真时执行循环。
当条件为假时,程序流将继续执行紧接着循环的下一条语句。
流程图
在这里,while 循环的关键点是循环可能一次都不会执行。当条件被测试且结果为假时,会跳过循环主体,直接执行紧接着 while 循环的下一条语句。
实例
实例
#include <iostream>
using namespace std;
int main ()
{
// 局部变量声明
int a = 10;
// while 循环执行
while( a < 20 )
{
cout << "a 的值:" << a << endl;
a++;
}
return 0;
}
当上面的代码被编译和执行时,它会产生下列结果:
a 的值: 10 a 的值: 11 a 的值: 12 a 的值: 13 a 的值: 14 a 的值: 15 a 的值: 16 a 的值: 17 a 的值: 18 a 的值: 19
当 while() 中的条件值为 0 时,循环就结束了。
开始 y = 10,每循环一次 y 的值就减 1(y-- 会导致 y 减 1),当 y 值一直减到 0 时,退出 while 循环,但是还要继续做 y --操作,所以 y 最后的值就是 -1。
for
语法
C++ 中 for 循环的语法:
for ( init; condition; increment ) { statement(s); }
下面是 for 循环的控制流:
- init 会首先被执行,且只会执行一次。这一步允许您声明并初始化任何循环控制变量。您也可以不在这里写任何语句,只要有一个分号出现即可。
- 接下来,会判断 condition。如果为真,则执行循环主体。如果为假,则不执行循环主体,且控制流会跳转到紧接着 for 循环的下一条语句。
- 在执行完 for 循环主体后,控制流会跳回上面的 increment 语句。该语句允许您更新循环控制变量。该语句可以留空,只要在条件后有一个分号出现即可。
- 条件再次被判断。如果为真,则执行循环,这个过程会不断重复(循环主体,然后增加步值,再然后重新判断条件)。在条件变为假时,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
这次的题是OpenJudge的1.5编程基础之循环控制