1. 流程结构
C++支持最基本的三种程序运行结构:
- 顺序结构:程序按顺序执行,不发生跳转。
- 选择结构:依据是否满足条件,有选择的执行相应功能。
- 循环结构:依据条件是否满足,循环多次执行某段代码。
1.1 顺序结构
- 按书写顺序从上至下依次执行。
开始
语句1
语句2
结束1.2 选择结构
1.2.1 if语句
格式:
cpp
if(表达式) // 表达式为真则执行语句块1
{
语句块1;
}流程图:
开始
↓
判断条件 → true → 执行语句 → 结束
↓
false
↓
结束示例:
cpp
if (score == 100)
{
std::cout << "满分, 厉害啊你小子" << std::endl;
}
// 单语句可省略{}
if (score == 100)
std::cout << "满分, 厉害啊你小子" << std::endl;1.2.2 if...else语句
格式:
cpp
if(表达式)
{
语句块1;
}
else // 不能脱离if单独使用
{
语句块2;
}示例:
cpp
if(age < 6)
{
std::cout << "还没到入学年龄" << std::endl;
}
else
{
std::cout << "时辰已到,允许入学" << std::endl;
}1.2.3 if...else if...else语句
格式:
cpp
if(表达式1)
{
语句块1;
}
else if(表达式2)
{
语句块2;
}
else if(表达式3)
{
语句块3;
}
else // 可省略
{
语句块4;
}执行规则:
- 只有前序表达式均不满足时,才会执行
else块。 else if不能脱离if单独存在。
示例:
cpp
int time = 200;
if (time < 180)
std::cout << "去打职业吧" << std::endl;
else if (time < 240)
std::cout << "技术不错,有待提高" << std::endl;
else if (time < 300)
std::cout << "菜就多练" << std::endl;
else
std::cout << "我奶奶来都比你打得好" << std::endl;1.2.4 switch语句
格式:
cpp
switch(表达式) // 表达式需为整型
{
case 常量表达式1:
语句1;
break; // 不可省略
case 常量表达式2:
语句2;
break;
default: // 可省略
语句n+1;
break;
}规则:
- 匹配
case后执行对应语句,若无break会穿透后续case。 default在所有case不匹配时执行。
示例:
cpp
int score = 81;
int level = score / 10;
switch (level)
{
case 10: // 穿透到case 9
case 9:
std::cout << "A" << std::endl;
break;
case 8:
std::cout << "B" << std::endl;
// 无break会穿透到case 7!
case 7:
std::cout << "C" << std::endl;
break;
default:
std::cout << "E" << std::endl;
break;
}1.2.5 选择结构应用场景
| 场景 | 推荐结构 | 示例 |
|---|---|---|
| 单条件(如除数非0) | if | if (b != 0) c = a / b; |
| 双分支(如奇偶判断) | if...else | if (a%2==1) ... else ... |
| 多分支(如比较大小) | if...else if | if (a>b) ... else if ... |
| 离散整数值(如星期枚举) | switch | case 1: cout << "周一"; |
1.3 循环结构
循环三要素:
- 循环控制条件:决定循环何时退出。
- 循环体:重复执行的代码段。
- 循环终止语句:使循环条件最终为假(如
i++)。
1.3.1 while循环
格式:
cpp
while (循环控制条件)
{
循环体语句;
循环终止语句;
}流程图:
开始 → 循环变量初始化 → 判断条件 → false → 结束
↓ true
循环体 → 循环变量自增 → 返回判断示例:
cpp
int age = 1;
while (age < 18)
{
std::cout << "我今年还没成年,才" << age << "岁" << std::endl;
age++;
}1.3.2 do...while循环
格式:
cpp
do {
循环体语句;
循环终止语句;
} while (循环控制条件); // 分号不可省略特点: 至少执行一次循环体。
示例:
cpp
int age = 18;
do {
std::cout << "我今年还没成年" << std::endl; // 仍会执行一次
age++;
} while (age < 18);1.3.3 while与do...while区别
while:先判断条件,再决定是否执行循环体。do...while:先执行一次循环体,再判断条件。
1.3.4 for循环
格式:
cpp
for (初始化表达式; 循环条件表达式; 循环后操作表达式)
{
循环体语句;
}流程图:
开始 → 初始化 → 判断条件 → false → 结束
↓ true
循环体 → 循环后操作 → 返回判断特殊形式:
cpp
for (;;); // 死循环
for (int i=0; ; i++); // 条件缺失→死循环示例(1~n求和):
cpp
int sum = 0;
for (; n > 0; n--)
{
sum += n;
}1.3.5 循环嵌套
规则:
- 嵌套层数建议 ≤3 层。
- 总执行次数 = 外层次数 × 内层次数。
示例(九九乘法表):
cpp
for (int i = 1; i <= 9; i++)
{
for (int j = 1; j <= i; j++)
{
std::cout << j << "*" << i << "=" << j*i << " ";
}
std::cout << std::endl;
}效率优化: 将最长循环放在最内层(减少外层切换开销)。
1.3.6 跳转语句
1.3.6.1 break
- 立即跳出当前层循环或
switch。
cpp
for (int i=1; i<18; i++)
{
if (i == 8) break; // i=8时跳出循环
std::cout << i << std::endl;
}1.3.6.2 continue
- 跳过本次循环剩余代码,进入下一轮。
cpp
for (int i=1; i<=100; i++)
{
if (i % 7 != 0) continue; // 非7倍数跳过
std::cout << i << std::endl;
}1.3.6.3 goto
- 跳转到函数内指定标签(慎用,破坏结构)。
cpp
for (int col=0; col<5; col++)
{
for (int row=0; row<8; row++)
{
if (col==3 && row==4) goto end; // 跳出多层循环
}
}
end: std::cout << "程序结束" << std::endl;