今天介绍的是程序中三个基本控制结构(顺序,分支,循环)的最后一个:循环。
只要三种基本的控制结构就能够表达用一个入口和一个出口框图表达的任何程序逻辑。所以在写程序的时候,要尽量避免使用GOTO语句,只用三种基本的控制结构。
写循环语句要有下面三个步骤:
- 需要重复的语句,即循环体
- 用循环语句包含循环体
- 循环条件,即什么时候跳出循环
WHILE循环
while循环的语法如下:
while(loop-condition) { //loop body }
loop-condition是循环条件,是一个bool类型的变量。当loop-condition为true时,就会执行{……}内的循环体。举个例子:
int sum = 0, i = 1; //循环4次,第5次时,i = 5,i < 5为false while (i < 5) { sum += i; i++; } cout << "5以内的数之和为:" << sum << endl; //结果为:5以内的数之和为:10
如果你想要用户确认后再循环:
char loop = 'Y'; while (loop == 'Y') { //loop body cout << "执行" << endl; cout << "Do you want to continue? Yes(y or Y) or No(n or N): "; cin >> loop; //toupper()函数再<cctype>头文件中,把单个字符转换为大写 loop = toupper(loop); }
执行结果:
DO-WHILE循环
do-while的基本语法:
do { //loop body } while (loop-condition);
注意最后的分号!
do-while循环和while基本相同,区别仅在于do-while先执行循环体,再判断条件,如果条件为真,则继续执行。
上面的例子用do-while循环重构一下:
int sum = 0, i = 1; //循环4次,第5次时,i = 5,i < 5为false do { sum += i; i++; }while (i < 5); cout << "5以内的数之和为:" << sum << endl; //结果为:5以内的数之和为:10
FOR循环
for循环是编程时最常用的循环格式,语法如下:
for (initial-action; loop-condition; action-after-each-iteration) { //loop body }
解释一下三个参数:
initial-action是初始化动作,即初始化循环时需要的变量
loop-condition是循环条件,为true时执行循环体
action-after-each-iteration是每次迭代后的动作,即执行完一次循环体后的操作,一般是i++
上面的例子用for循环重构一下:
int sum = 0; //循环4次,第5次时,i = 5,i < 5为false for (int i = 1; i < 5; i++) { sum += i; } cout << "5以内的数之和为:" << sum << endl; //结果为:5以内的数之和为:10
当然,如果要初始化的动作在前面写也可以:
int sum = 0, i = 1; //此时i的作用域为整个生命周期,而不是for循环 for (; i < 5; i++) { sum += i; } cout << "5以内的数之和为:" << sum << endl; //结果为:5以内的数之和为:10
同理,如果没有后续执行的操作,action-after-each-iteration可以不写
int sum = 0, i = 1; //循环4次,第5次时,i = 5,i < 5为false for (; i < 5;) { sum += i; i++; } cout << "5以内的数之和为:" << sum << endl; //结果为:5以内的数之和为:10
break和continue
这是C++的两个关键字。
break用来跳出整个控制语句(如while,switch...),continue用来跳过一次迭代。
(迭代就是当前执行的这一次)
break:
for (int i = 0;i < 10; i++) { if (i == 5) { //当i=5时,跳出整个循环 break; }
cout << i << endl;
}
执行结果:
从数字5之后就没有了,因为跳出了整个大的循环
continue:
for (int i = 0;i < 10; i++) { if (i == 5) { //当i=5时,跳过本次循环 continue; } cout << i << endl; }
执行结果:
只是没有数字五,因为i = 5时,跳过了本次循环