4 程序流程结构
C/C++支持的三种程序运行结构:顺序结构,选择结构,循环结构
- 顺序结构:类似于Python的运行结构,程序按顺序执行,不发生跳转
- 选择结构:依据条件是否满足,有选择的执行相应功能
- 循环结构:依据条件是否满足,循环多次执行某段代码
4.1 选择结构
4.1.1 if语句
作用: 执行满足条件的语句
其主要有三种形式:
- 单行格式if语句
- 多行格式if语句
- 多条件的if语句
- 单行格式if语句:
if(条件){ 条件满足执行的语句 }

示例:
int main()
{
//单行if结构
//让用户输入一个分数,如果大于600,则输出"恭喜"
//1. 用户输入分数
int score = 0;
cout << "请输入一个分数"<<endl;
cin >> score ;
//2. 打印用户分数
cout << "您的分数为:"<<score<<endl;
//3.判断
if(score > 600) //if条件语法后没有分号!!!
{
cout<<"恭喜"<<endl;
}
system("pause");
return(0);
}
Important
if条件后面不要加分号
- 多行格式if语句:
if(条件){ 条件为真执行的语句 }else{ 条件不满足执行的语句 }

示例:
int main()
{
//多行格式if
//提示用户输入分数,如果分数大于600,则输出"恭喜",若没有大于600,则输出"别放弃"
int score = 0;
cout <<"请输入一个分数"<<endl;
cin >> score;
cout << "您的分数为"<< score <<endl;
//执行判断
if(score > 600) //大于600的情况
{
cout << "恭喜"<<endl;
}
else //小于600的情况
{
cout << "别放弃"<<endl;
}
system("pause");
return(0);
}
- 多条件的if语句:
if(条件1){满足条件1执行的语句}else if(条件2){满足条件2执行的语句}... else{都不满足执行的语句}

int main()
{
//多条件的if语句
//1.输入分数
int score = 0;
cout << "请输入一个分数"<<endl;
cin >> score;
cout << "您的分数是" << score << endl;
//2.条件判断(大于600)
if (score >= 600)
{
cout << "恭喜"<<endl;
}
else if (score >= 500)//这里不能写(500 < score < 600)
{
cout << "别放弃"<<endl;
}
else if (score >= 400)
{
cout << "还可以"<<endl;
}
else
{
cout << "别摆烂辣!"<<endl;
}
system("pause");
return(0);
}
嵌套if语句:在if语句中再嵌套一个if语句
案例要求:
- 在上个代码的基础上,根据分数再细化
- 大于700为特等,大于650为一等,大于600为优秀
int main()
{
//多条件的if语句
//1.输入分数
int score = 0;
cout << "请输入一个分数"<<endl;
cin >> score;
cout << "您的分数是" << score << endl;
if (score >= 600)
{
cout << "恭喜"<<endl;
if (score >= 700) //嵌套的if语句
{
cout << "特等"<<endl;
}
else if (score >= 650)
{
cout << "一等"<<endl;
}
else
{
cout << "优秀"<<endl;
}
}
else if (score >= 500)//这里不能写(500 < score < 600)
{
cout << "别放弃"<<endl;
}
else if (score >= 400)
{
cout << "还可以"<<endl;
}
else
{
cout << "别摆烂辣!"<<endl;
}
system("pause");
return(0);
}
4.1.2 三目运算符
**作用:**通过三目运算符实现简单的判断
语法:表达式1 ? 表达式2 : 表达式3
解释:
如果表达式1的值为真,执行表达式2,并返回表达式2的结果;
如果表达式1的值为假,执行表达式3,并返回表达式3的结果;
示例:
int main()
{
//三目运算符
int a =30;
int b =20;
int c =0;
c=(a > b ? a : b);
cout << c <<endl;
//在C++中,三目运算符返回的是变量,可以继续赋值
(a > b ? a:b)=100; //a和b做大小比较,较大的变量被赋值为100
system("pause");
return(0);
}
4.1.3 switch语句
执行多条件分支语句
语法:
switch(表达式)
{
case 结果1 : 执行语句;break;
case 结果2 : 执行语句;break;
...
default : 执行语句;break;
}
示例:
int main()
{
//给电影评分
//9-10 经典
//7-8 非常好
//5-6 不错
// <5 不好
cout << "请给电影打分"<<endl;
int score = 0;
cin >> score ;
cout << "您的打分为"<<score<<endl;
switch (score)
{
case 10 :
cout << "经典"<<endl;
break; //退出当前分支
case 9 :
cout << "经典"<<endl;
break;
case 8 :
cout << "非常好"<<endl;
break;
case 7 :
cout << "非常好"<<endl;
break;
case 6 :
cout << "一般"<<endl;
break;
case 5 :
cout << "一般"<<endl;
break;
default:
cout << "不好"<<endl;
break;
}
system("pause");
return(0);
}
记得要写break;
缺点:switch判断的时候只能是整型或字符型,不可以是一个区间
优点:结构清晰,执行效率高(速度快)
4.2 循环结构
4.2.1 while循环语句
**作用:**满足循环条件,执行循环语句
语法:while(循环条件){循环语句}
解释:只要循环条件为真,就执行循环语句
示例:
int main()
{
//在屏幕中打印0-9这10个数字
int num = 0;
while (num < 10)
{
cout << num <<endl;
num++;
}
system("pause");
return(0);
}
如果while 后条件为(1),则为无限循环,要避免死循环的出现
练习:猜数游戏
int main()
{
//添加随机数种子
srand((unsigned int)time(NULL));
int num2 = rand()%100 + 1 ;
//cout << num22 <<endl;
int val = 0;
cout << "请输入一个数开始猜数游戏"<<endl;
while (val != num2)
{
cin >> val ;
if (val > num2 )
{
cout << "猜大辣,再来一次吧"<<endl;
}
else if (val < num2)
{
cout << "猜小辣,再来一次吧"<<endl;
}
}
cout << "厉害,对辣"<<endl;
system("pause");
return(0);
}
4.2.2 do…while循环
**作用:**满足循环条件,执行循环语句
语法:do{循环语句}while(循环条件);
Note
与while不同的是,do…while会先执行一次循环语句,再判断循环条件
示例:
int main()
{
//do while 循环
int num =0;
do
{
cout << num <<endl;
num++;
} while (num < 10);
system("pause");
return(0);
}
**练习案例:**水仙花数
- 水仙花数是一个三位数,它的每个位上的三次幂之和等于它本身
- 例:1^3^+5^3^+3^3^=153
//注意:要有#include<cmath>
int main()
{
//定义初始值,其中fnum3,2,1分别代表百十个位,这个三位数要和初始值fnum相等
int fnum1 = 0;
int fnum2 = 0;
int fnum3 = 1;
float fnumt = 0;
int fnum = 100;
do
{
fnum++;
fnum1++;
//三位数输出,个十百位分别输出
if (fnum1 - 1 == 9)
{
fnum1 = 0;
fnum2++;
}
if (fnum2 - 1 == 9)
{
fnum2 = 0;
fnum3++;
}
if (fnum3 - 1 == 9)
{
fnum3 = 0;
}
fnumt = pow(fnum1,3) + pow(fnum2,3) + pow(fnum3,3);
if ( fnumt == fnum)
{
cout <<"水仙花"<< fnum << endl;
}
// cout << fnum << endl;
// cout << fnumt << endl;
// cout <<"个位"<< fnum1 << endl;
// cout <<"十位" <<fnum2 << endl;
// cout <<"百位" <<fnum3 << endl;
} while (fnum < 1000);
system("pause");
return(0);
}
Important
如何获取一个三位数的个十百位?
- 例:153
- 个位:153%10 = 3 对数字取模于10可以获得个位
- 十位:153/10 = 15 15 % 10 = 5 C++中整除只留整数部分即
(153/10)%10
- 百位:153/100 = 1
示例:
int main()
{
int num = 100;
do{
num++;
if(num == pow(num%10,3)+pow((num/10)%10,3)+pow(num/100,3))
{
cout << num <<endl;
}
}while(num < 999);
system("pause");
return(0);
}
4.2.3 for 循环
**作用:**满足循环条件,执行循环语句
语法:for(起始表达式;条件表达式;末尾循环体){循环语句;}
- 起始表达式不参加循环
- 条件表达式确定循环条件
- 一次循环执行后执行末尾循环体
示例:
int main()
{
for (int i = 0; i < 10; i++)
{
cout << i <<endl;
}
system("pause");
return(0);
}
Note
对for(a;b;c){d}来看,执行顺序如下
- 先执行一次 a
- 判断 b
- 若b为真,重复2,3,4,5;否则退出循环
- 执行 d
- 执行 c
for 循环结构简单,比较常用
**练习案例:**敲桌子
- 输出1~100,若该数个位含有7,或10位含有7,或该数字是7的倍数,则我们输出敲桌子,其余数字直接打印
int main()
{
for (int i = 0; i < 100; i++)
{
if (i%10 == 7)
{
cout << "敲桌子" <<endl;
}
else if ((i/10)%10 == 7)
{
cout << "敲桌子" <<endl;
}
else if ( i%7 == 0 )
{
cout << "敲桌子" <<endl;
}
else
{
cout << i <<endl;
}
}
}
Note
if比较语句中我们可以用逻辑运算符来提高if语句的精确性
比如上面的示例中多个if便可以写成
if(i % 10 == 7 || i%7==0 || (i/10)%10==7 )
4.2.4 嵌套循环
- 在循环体中再次嵌套循环,用于解决实际问题
示例
int main()
{
for (int i = 0; i < 10 ; i++) //外层循环
{
for (int j = 0; j < 10; j++) //内层循环
{
cout << "*";
}
cout << endl;
}
// 外层走一次,内层走一周
system("pause");
return(0);
}
**案例:**乘法口诀表
- 打印九九乘法表
int main()
{
//九九乘法表,实际上就是 行 X 列 = 数字,即将行和列表示出来即可
for (int i = 0; i < 10; i++) // i 代表 行
{
for (int j = 1; j < i+1 ; j++) // j 代表 列
{
cout << j <<"X"<< i <<"="<<i*j<<" ";
}
cout << endl;
}
system("pause");
return(0);
}
输出呈现:
4.3 跳转语句
4.3.1 break 语句
**作用:**跳出选择结构或循环结构
break使用的时机:
- 出现在switch语句中,终止case并跳出switch
- 出现在循环语句中,作用是跳出当前循环语句
- 出现在嵌套循环中,作用是跳出最近的内层循环语句
示例1:
int main()
{
for (int i = 0; i < 10 ; i++)
{
cout << i << endl;
if (i == 5)
{
break;
}
}
system("pause");
return(0);
}
示例2
int main()
{
for (int i = 0; i < 10 ; i++)
{
for (int j = 0; j < 10; j++)
{
if (j == 5)
{
break;
}
cout << "*";
}
cout<< endl;
}
system("pause");
return(0);
}
4.3.2 countinue 语句
**作用:**在循环语句中,跳过本次循环中余下的未执行的代码,继续执行下一次循环
示例:
int main()
{
for (int i = 0; i <= 100; i++)
{
if (i%2 == 0)
{
continue;
}
cout << i << endl;
}
system("pause");
return(0);
}
- 实现了0~100奇数的输出
4.3.3 goto 语句
**作用:**可以无条件跳转语句
语法:goto 标记
- 标记一般用纯大写英文表示
- goto 语法尽量不要经常使用,以免造成代码逻辑混乱
- 标记定义
T: