循环语句
循环结构中,程序会重复地执行同一段代码,直到条件不满足,或者遇到强行跳出循环的语句。循环结构主要包括while循环、do while循环、for循环三种,这三种循环可以相互转化。所谓循环控制就是通过循环控制变量和表达式,以及break语句、continue语句和goto语句,控制程序的重复执行过程,当不符合循环条件时停止循环。循环程序可以让代码更加简洁。
1. while循环
表现形式如下:
while(表达式) {
语句块;
}
其中“表达式”一般指的是关系表达式或逻辑表达式,表示循环条件,值是一个逻辑真值或假值。
while循环的执行过程为:先计算“表达式”的值,当值为真时执行语句块,执行完语句块再次判断“表达式”的值,如果为真继续执行语句块,直到“表达式”的值为假值,才会结束循环。
小栗子: 计算1~100的累加和。
#include<iostream>
int main() {
int i = 1;
int sum = 0;
while (i <= 100) {
sum += i;
++i;
}
std::cout << "结果为:" << sum << std::endl;
return 0;
}
小栗子: 生物上学习的单细胞分裂,每一代细胞数量都会成倍数增长。一代只有一个细胞,二代有2个细胞,三代有四个细胞,请根据输入的代数输出该代数下的细胞数量
#include <iostream>
using namespace std;
int main() {
int generation;
cout << "请输入代数: ";
cin >> generation;
int cells = 1; // 初始为第一代的细胞数量
int currentGen = 1;
while (currentGen < generation) {
cells *= 2;
currentGen++;
}
cout << "第" << generation << "代的细胞数量为: " << cells << endl;
return 0;
}
不使用循环实现,高效率:
#include<iostream>
using namespace std;
int main() {
int x; // 细胞代数
int sum = 0; // 细胞总数
cout << "请输入代数: ";
std::cin >> x;
sum += 1 << x - 1;
std::cout << "第" << "x" << "代的细胞总数为:" << sum << std::endl;
return 0;
}
2. do...while
表现形式如下:
do{
语句块;
}while(表达式);
其中,do为关键字,必须与while配合使用;do和while之间的语句为循环体,同样用大括号括起来;“表达式”同样是关系表达式或逻辑表达式。do while与while循环的不同之处是:do while会先执行语句块,再判断表达式是否为真,如果为真继续循环,如果不为真则结束循环。因此,do while循环一定会执行一次循环体。
3. for循环
表现形式一般如下:
for(表达式1; 表达式2; 表达式3){
循环体;
}
其中“表达式1”仅在第一次循环时执行,通常是一个赋值表达式,用来对循环变量进行初始化赋值;“表达式2”是一个关系表达式,称为循环条件,决定了是否还要继续下次循环;“表达式3”通常是一个带有自增或自减操作的表达式,使循环条件逐渐变的不成立。
小栗子: 1~100的累加和,使用for循环实现。
#include<iostream>
using namespace std;
int main() {
int sum = 0;
for (int i = 0; i <= 100; ++i) {
sum += i;
}
cout << sum << endl;
return 0;
}
注意事项:
变量一般声明在for循环语句之外,也可以直接在表达式1中声明变量,注意:在括号里面声明的变量只能在循环体中访问到,循环之外是访问不到的。
#include<iostream>
using namespace std;
int main() {
for (int i = 0, sum = 0; i <= 100; i++) {
sum += i;
}
cout << sum << endl; // 这里会报错!
return 0;
}
for循环中的表达式1、表达式2、表达式3都可以省略,但分号必须保留。
#include<iostream>
using namespace std;
int main() {
for (; ;) {
cout << "Hello World!";
}
return 0;
}
省略所有表达式,那么这就是一个死循环。
省略表达式2,也就是省略了循环终止条件,循环也会变成死循环。
省略表达式3,需要在for循环体中加入修变量的语句。
省略表达式1和表达式3后,就变得跟while循环一样了。
4. 循环控制
循环控制包含两个方面,一是循环控制变量的变化方式,二是循环控制的跳转。循环控制的跳转需要用到break和continue关键字,这两条跳转语句的跳转效果不同,break是中断整个循环体,continue是跳出该循环体的本次执行。除此之外,goto语句也可以用来跳出循环。
4.1 循环控制变量
循环控制变量,就是循环过程中用来控制循环次数和循环条件的变量。它通常作为循环的计数器,用于追踪循环的进度和控制循环的终止条件。
#include<iostream>
using namespace std;
int main () {
int sum = 0;
for(int i = 10; i >= 1; i--) {
sum += i;
}
cout << sum << endl;
return 0;
}
程序中,在for循环的表达式1中声明变量i并初始化值为10;表达式2中限定循环控制变量是否大于等于1,如果小于1,就停止循环;表达式3使用循环控制变量由10~1递减变化,程序输出的结果是55。
4.2 break语句
break语句作用:跳出当前循环体,从而中断本次循环。
#include<iostream>
using namespace std;
int main() {
int i, n, sum;
sum = 0;
cout << "请输入3个数字:";
for(i = 1; i <= 3; ++i) {
cout << "第" << i << "项:";
cin >> n;
if(n < 0) {
break;
}
sum += n;
}
cout << "结果是:" << sum << endl;
return 0;
}
程序中需要用户输入3个数,然后计算三个数的和,当输入的数为负数时,就退出整个for循环,停止累加。
提示
当存在嵌套循环时,break语句只会使程序流程跳出包含它的内层循环结构,即只能跳出一层循环。
4.3 continue语句
continue语句是对break语句的补充。continue不是立即跳出循环体,而是跳过本次循环,回到循环的条件判断部分,重新开始执行循环。在for语句中遇到continue后,首先执行循环的增量部分,然后进行条件判断,在while和do while循环中,continue控制语句直接跳转到条件判断部分。
4.4 goto语句(不推荐使用)
goto语句被称为无条件跳转语句,用于改变语句的执行顺序。 goto label
。
其中,标签是用户自定义的一个标识符。goto语句可将程序跳转到由label代码定义的标签处继续执行。
#include<iostream>
using namespace std;
int main() {
int i = 0;
int sum = 0;
lable: i++;
sum += i;
if(i < 10) {
goto lable;
}
cout << sum << endl;
return 0;
}
示例中,通过goto语句标签实现了一定的循环功能。当语句执行到 if(i < 10) 时,如果条件成立,就跳转到label标签处,再一次执行循环变量i的自增运算和累加求和运算。
使用goto语句注意事项:
定义标签时,其后不能直接跟 “}”,会导致编译错误。
{
lable:
}
goto语句不能跳过除复合语句之外的其他变量定义的语句。
goto label:
int i = 10;
label: cout << "goto" << endl;
警告
goto语句是一种古老的语法,会使程序执行顺序变的错乱,CPU执行效率也较低。因此实际开发中要尽量避免使用goto。
5. 循环嵌套
for、while、do while循环之间可以相互嵌套:
for(; ;) {
while () {
}
}
小栗子: 输出九九乘法表。
#include<iostream>
using namespace std;
int main() {
for (int i = 1; i <= 9; ++i) {
for (int j = 1; j <= i; ++j) {
cout << j << " x " << i << " = " << i * j << ' ';
}
cout << endl;
}
return 0;
}
💬 欢迎评论!请确保您已登录 GitHub。