Skip to content

1. 流程结构

C++支持最基本的三种程序运行结构:

  1. 顺序结构:程序按顺序执行,不发生跳转。
  2. 选择结构:依据是否满足条件,有选择的执行相应功能。
  3. 循环结构:依据条件是否满足,循环多次执行某段代码。

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)ifif (b != 0) c = a / b;
双分支(如奇偶判断)if...elseif (a%2==1) ... else ...
多分支(如比较大小)if...else ifif (a>b) ... else if ...
离散整数值(如星期枚举)switchcase 1: cout << "周一";

1.3 循环结构

循环三要素:

  1. 循环控制条件:决定循环何时退出。
  2. 循环体:重复执行的代码段。
  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;

知识如风,常伴吾身