8. 程序流程结构
C/C++支持最基本的三种程序运行结构:顺序结构、选择结构、循环结构
- 顺序结构:程序按顺序执行,不发生跳转
- 选择结构:依据条件是否满足,有选择的执行相应功能
- 循环结构:依据条件是否满足,循环多次执行某段代码
流程控制概述
流程控制结构:
-
顺序结构
最基本最简单的流程控制,没有特定的语法结构,执行顺序是自上而下、依次执行,程序中大多数代码都是这样执行的。
-
分支结构
执行具体的逻辑运算进行判断,逻辑运算的结果有两个,产生选择,按照不同的选择执行不同的代码
- if 语句
- switch 语句
-
循环结构
满足循环条件的情况下,反复执行某个功能,直到循环条件不满足时终止循环
- for 循环语句
- while 循环语句
- do while 循环语句
8.1 分支结构
8.1.1 if语句
作用:执行满足条件的语句
if语句的三种形式:
-
单行格式 if 语句
if(条件){条件满足执行的语句}
-
多行格式 if 语句
if(条件){条件满足执行的语句}else{条件不满足执行的语句}
-
多条件的 if 语句
if(条件1){条件1满足执行的语句}else if(条件2){条件2满足执行的语句}.....else{都不满足执行的语句}
嵌套 if 语句:在 if 语句中,可以嵌套使用 if 语句,达到更精确的条件判断
if(测试条件){
语句体;
}
cout << "请输入一个数:" << endl;
int num1;
cin >> num1;
cout << "请输入一个数:" << endl;
int num2;
cin >> num2;
if (num1 == num2) {
cout << "两个数相等" << endl;
}
cout << "两个数不相等" << endl;
if(测试条件){
语句体1;
}else{
语句体2;
}
if(测试条件1){
语句体1;
}else if(测试条件2){
语句体2;
}
...
else{
语句体n+1;
}
8.1.2 三目运算符
作用:通过三目运算符实现简单的判断
语法:表达式1 ? 表达式2 : 表达式3
int max=num1>num2?num1:num2
三元运算符:用于调用数据时逐级筛选
8.1.3 switch语句
作用:执行多条件分支语句
对几个常量值进行判断
switch(表达式){//表达式的结果必须是整数类型或枚举类型
case 值1://case后面跟的是要和表达式进行比较的值
语句体1;
break;
case 值2:
语句体1;
break;
...
default://deafault 语句表示所有情况都不匹配的时候执行,,可以省略
语句体n+1;
break;
}
8.2 循环结构
8.2.1 while循环语句
作用:满足循环条件,执行循环语句
语法:while(循环条件){循环语句}
只要循环条件的结果为真,就执行循环语句
#include<iostream>
using namespace std;
int main() {
int num = 0;
while (num < 10) {
cout << "num=" << num << endl;
num++;
}//0 1 2 3 4 5 6 7 8 9
return 0;
}
在执行循环语句时,程序必须提供跳出循环的出口,否则出现死循环
demo:猜数字游戏
r=rand()%(n-m+1)+m
生成[m,n]随机数
int main(){
//猜数字游戏 设置生成1-100的随机数
srand(time(0));//设置生成随机数的种子
//int gessNum = rand();//范围[0,32767]
int gessNum = rand() % 100 + 1;//生成[m,n]随机数 r=rand()%(n-m+1)+m
while (true) {
cout << "请输入您猜的数字" << endl;
int intNum;
cin >> intNum;
if (intNum == gessNum) {
cout << "恭喜猜对了" << endl;
break;
}
else if (intNum > gessNum) {
cout << "猜大了,请加油哦~" << endl;
}
else {
cout << "猜小了,请加油哦~" << endl;
}
}
return 0;
}
8.2.2 do…while循环语句
作用:满足循环条件,执行循环语句
语法:do{循环语句}while(循环条件)
与while的区别在于do…while会先执行一次循环语句,再判断循环条件
#include<iostream>
using namespace std;
int main() {
int num = 0;
do {
cout << num << endl;//0 1 2 3 4 5 6 7 8 9
num++;
cout << num << endl;//1 2 3 4 5 6 7 8 9 10
} while (num<10);
return 0;
}
demo:水仙花数
#include<iostream>
using namespace std;
int main() {
int num = 100;
do {
int temp = num;
int a = temp % 10;
temp = temp / 10;
int b= temp % 10;
temp = temp / 10;
int c = temp % 10;
if (a * a * a + b * b * b + c * c * c == num) {
cout << num << endl;//153 370 371 407
}
num++;
} while (num<1000);
return 0;
}
8.2.3 for循环结构
作用:满足循环条件,执行循环语句
语法:for(起始表达式;条件表达式;末尾表达式){循环语句;}
for (int i = 0; i < 10; i += 2) {// i += 2在循环的时候可控制步长
cout << "hello,world!" << endl;
}
8.2.4 嵌套循环
作用:在循环体中再嵌套一层循环,解决一些实际问题
#include<iostream>
using namespace std;
//乘法口诀表
int main() {
for (int i = 1; i < 10; i++) {
for (int j = 1; j <= i; j++) {
cout << j << "×" << i << "=" << j * i<<" ";
}
cout << endl;
}
return 0;
}
8.2.5 如何选择循环
-
for循环:
结构稳定,不容易遗漏任何循环要素,适合处理循环次数固定的场景
-
while循环:
先判断循环条件,再执行循环体
-
do while
先执行循环体,再判断循环条件
8.3 跳转语句
8.3.1 break语句
作用:用于跳出选择结构或者循环结构
break
使用的时机:
- 出现在
switch
条件语句中,作用是终止case
并跳出switch
- 出现在循环语句中,作用是跳出当前的循环语句
- 出现在嵌套语句中,作用是跳出最近的内层循环语句
8.3.2 continue
语句
作用:在循环语句中,跳过本次循环中余下尚未执行的语句,继续执行下一次循环
#include<iostream>
using namespace std;
int main() {
for (int i = 1; i < 10; i++) {
if (i % 2 == 0) {
continue;
}
cout <<i<< endl;//1 3 5 7 9
}
return 0;
}
8.3.3 goto语句
作用:可以无条件跳转语句
语法:goto标记;
解释:如果标记的名称存在,执行到goto语句时,会跳转到标记的位置
#include<iostream>
using namespace std;
int main() {
cout << "1.xxxxx" << endl;
cout << "2.xxxxx" << endl;
goto Flag;
cout << "3.xxxxx" << endl;
cout << "4.xxxxx" << endl;
Flag:
cout << "5.xxxxx" << endl;
//代码执行结果:
// 1.xxxxx
// 2.xxxxx
// 5.xxxxx
return 0;
}
在程序中不建议使用,以免造成程序混乱