C++循环结构
- 一、循环结构
- 1、while 循环
- 1.1 语法
- 1.2 练习题
- 1.3 代码找错
- 2、do-while 循环
- 2.1 语法
- 2.2 练习题
- 3、for 循环
- 3.1 语法
- 3.2 练习题
- 4、三种循环执行顺序
- 二、循环嵌套
- 1.输出正方形
- 2.输出乘法口诀
- 3.输出平行四边形
- 4.输出数字菱形
- 三、跳转语句
- 1.break语句
- 1.1 在 switch 中
- 1.2 在循环中
- 2.continue语句
- 3. goto语句
一、循环结构
1、while 循环
1.1 语法
while(循环条件){//符合条件执行循环语句;否则退出循环
循环语句//重复执行
}
执行顺序:先判断循环条件,再执行循环语句
1.2 练习题
1.输出66遍 “Hello World”
int a = 1;while (a <= 66){cout << "第" << a << "遍: Hello World" << endl;a++;//a++ 是非常重要的,如果去掉的话,a 的值永远保持 1,第二行行中的表达式将永远为 true,则循环就变成了“死循环”,必不可少的。}
2.水仙花数
求出100~999中的水仙花数(while)
分析:水仙花数是指一个 3 位数,它的每个位上的数字的 3次幂之和等于它本身
例如:1^3 + 5^3+ 3^3 = 153
int num = 100;while (num < 1000) {int gw = num % 10;//个位数,对num进行余10,结果为个位数int sw = num / 10 % 10;//十位数,先将num除以10得到十位和百位,再余10得到十位数int bw = num / 100;//百位数,除以100 得出百位数if (gw * gw * gw + sw * sw * sw + bw * bw * bw == num){cout << num << endl;}num++;}
1.3 代码找错
//第一个int i = 1;//1 while (i <= 66);//2{cout << "Hello World" << endl;//3i++;//4 }//第二个int i = 1;//1 while (i <= 66) //2{cout << "Hello World" << endl;//3}
2、do-while 循环
2.1 语法
do{
循环语句
} while(循环条件);
执行顺序:先执行循环语句,再判断循环条件
2.2 练习题
1.输出66遍 “Hello World”
int a = 1;do{cout << "Hello World" << endl;a++;} while (a <= 66);
2.水仙花数
求出100~999中的水仙花数(do-while)
分析:水仙花数是指一个 3 位数,它的每个位上的数字的 3次幂之和等于它本身
例如:1^3 + 5^3+ 3^3 = 153
int num = 100;do{int gw = num % 10;//个位数int sw = num / 10 % 10;//十位数int bw = num / 100;//百位数if (gw*gw*gw + sw*sw*sw + bw*bw*bw == num){cout << num << endl;}num++;} while (num < 1000);
3、for 循环
3.1 语法
for(起始表达式;条件表达式;末尾循环体) {
循环语句;
}
3.2 练习题
1.输出66遍 “Hello World”
for (int i = 1; i <= 66; i++){cout << "Hello World" << endl;}
2.水仙花数
求出100~999中的水仙花数(for)
for (int i = 100; i < 1000; i++){int gw = i % 10;//个位数int sw = i / 10 % 10;//十位数int bw = i / 100;//百位数if (gw * gw * gw + sw * sw * sw + bw * bw * bw == i){cout << i << endl;}}
4、三种循环执行顺序
while 和 for 相同,先进行循环条件判断,后执行循语句
do-while 是先执行循语句,后判断循环条件
二、循环嵌套
在二重循环中,外层循环每执行一次,内层循环要执行一圈。
1.输出正方形
for (int i = 1; i <= 6; i++){for (int j = 1; j <= 6; j++){cout << "* ";}cout << endl;}
当外层 i = 1 时,此时, j 从 1 开始,循环 6 次。
接下来返回外层循环 i = 2 ,准备打印下一行,依此类推,直到循环条件不成立
2.输出乘法口诀
一开始不知道怎么输出,可以先将乘法口诀表的九行九列输出
然后只需要更改输出那一行代码:cout << j << “" << i << “=”<<ij<<” ";
被除数第几列,除数是第几行,商i*j
for (int i = 1; i <= 9; i++){for (int j = 1; j <= i; j++) {//cout << "*";//先构建一个大框架cout << j << "*" << i << "="<<i*j<<" ";//输出乘法口诀表}cout << endl;}
3.输出平行四边形
for (int i = 1; i <=6; i++){for (int j = 1; j <=6-i ; j++){cout << " ";}for (int j = 1; j <=6 ; j++){cout << "*";}cout << endl;}
4.输出数字菱形
int b = 7;for (int i = 1; i <= b; i++){for (int j = 1; j <=b-i; j++){cout << " ";//输出的空格}for (int j = 1; j <= i; j++){cout << j;//正着输出的数}for (int j = i-1; j >= 1; j--){cout << j;//倒着输出的数}cout << endl;}for (int i = 1; i <= b; i++){for (int j = 1; j <= i-1; j++){cout << " ";}for (int j = 1; j <= b+1-i; j++){cout << j;}for (int j = b-i; j >= 1; j--){cout << j;}cout << endl;}
5.输出空心菱形
int b = 7;for (int i = 1; i <= b; i++){for (int j = 1; j <= b - i; j++){cout << " ";//输出的空格}for (int j = 1; j <= i; j++){if (j == 1) {cout << j;}else {cout << " ";}}for (int j = i - 1; j >= 1; j--){if (j == 1) {cout << j;}else {cout << " ";}}cout << endl;}for (int i = 1; i <= b; i++){for (int j = 1; j <= i - 1; j++){cout << " ";}for (int j = 1; j <= b + 1 - i; j++){if (j == 1) {cout << j;}else {cout << " ";}}for (int j = b - i; j >= 1; j--){if (j == 1) {cout << j;}else {cout << " ";}}cout << endl;}
三、跳转语句
1.break语句
break :跳出循环,
break关键字在 switch 中,可以跳出 switch,在循环中只跳出1层循环。
1.1 在 switch 中
int a = 0;cout << "请输入你要看的书(1-4):1 三国演义,2 红楼梦,3 西游记,4 水浒传" << endl;cin >> a;switch (a){case 1:cout << "看三国演义" << endl;break;case 2:cout << "看红楼梦" << endl;break;case 3:cout << "看西游记" << endl;break;case 4:cout << "看水浒传" << endl;break;default:cout << "请输入正确的编号!" << endl;break;}
如下图:满足条件,break直接跳出switch
1.2 在循环中
for (int i = 1; i <= 20; i++){for (int j = 1; j <= 20; j++){if (j == 10){break;}else {cout << j << " ";}}cout << endl;}
break在循环中只跳出1层循环。
如下图所示,第二层循环小于等于20,等于10的时候跳出,只是跳出本层循环,外层循环接着执行。
2.continue语句
continue,跳出本次循环,继续下一次循环。
for (int i = 1; i <= 20; i++){for (int j = 1; j <= 20; j++){if (j % 2 == 0){continue;}else {cout << j << " ";}}cout << endl;}
continue不会使循环终止,而是将满足条件的跳过,继续向下执行。图中条件是余2跳出,右边控制台部分没有显示余2为零的数。
3. goto语句
goto:无条件转移语句
语法: goto 语句标号;(命名规则和标识符的命名规则与变量名称相同)
执行goto语句后,程序就会跳转到语句标号处,并接着执行其后的语句。
cout << "A" << endl;cout << "B" << endl;goto FLAG;cout << "C" << endl;cout << "D" << endl;FLAG:cout << "E" << endl;
执行结果: