3. 选择结构程序设计

根据条件走不同分支:血量低于 30% 回城,否则继续团战。本节对应考纲 3。

这一章在学什么

前面学了顺序结构:程序从上到下一条一条执行。这一章学选择结构根据条件决定执行哪一段代码——比如「如果血量低于 1000 就输出“注意”,否则输出“还能打”」。

会用到的两个写法:if / else(如果…否则…)和 switch(根据一个变量的值选不同分支)。易错点:判断“相等”要用 == 两个等号,写成一个等号 = 是赋值,会出错。

本节考纲要点

本节代码里的英文词

关系运算符与关系表达式

条件是什么

要“根据条件选哪条路”,先要会写条件。条件就是用关系运算符比较两个数,结果是“真”或“假”。

六个关系运算符

易错:== 和 = 别写混

判断“相等”必须写 ==,写成一个 = 就变成赋值了,逻辑会错。考试经常考这里。

逻辑运算符与逻辑表达式

并且、或者、取反

要把多个条件组合起来,用逻辑运算符

下面例子:血量低于 1000并且蓝量大于 50 时,执行 use_skill()。

if (hero_hp < 1000 && mana > 50)  /* 血量低但有蓝,可以放技能再走 */
    use_skill();

逻辑表达式本身也有“真/假”的结果,可以再和别的条件组合,例如 (a > 0) && (b < 10)

if 语句(单分支、双分支)

语法格式

如果大括号里只有一条语句,可以省略大括号(但不建议初学省略,容易写错)。

例子:血量低于最大血量的 30% 就回城,否则继续团战。

if (hero_hp < max_hp * 0.3)
    go_back();
else
    keep_fighting();

多分支:else if

多条分支可以用 else ifif (条件1) { ... } else if (条件2) { ... } else { ... },从上往下判断,第一个成立的就执行对应的块,后面的不再看。

条件运算符(了解)

三目运算符 ? :

条件 ? 值1 : 值2 — 条件为真时整个表达式的值是“值1”,为假时是“值2”。例如:max = (a > b) ? a : b; 表示把 a、b 里大的那个赋给 max。考纲为了解即可。

switch 语句(多分支)

什么时候用 switch

当要“根据一个变量的具体值选不同操作”时,用 switch 比一长串 if-else 更清晰。比如按技能键 1、2、3 分别放不同技能。

语法与执行过程

语法:switch (变量或表达式) { case 值1: 语句; break; case 值2: 语句; break; ... default: 语句; }

执行过程:先算 switch 后面的值,然后看和哪个 case 相等,就从那里执行下去;break 表示“到这里结束 switch,跳出去”,没有 break 会继续执行下一个 case(叫“穿透”)。default 表示“上面都不匹配时”执行的内容。

switch (skill_key) {
    case '1': skill_one(); break;   /* 按 1 放一技能,然后 break 跳出 */
    case '2': skill_two(); break;
    case '3': skill_three(); break;
    default:  normal_attack();     /* 按别的键就普攻 */
}

易错:每个 case 后面一般要写 break;,否则会继续执行下一个 case,常常不是你想要的效果。

本章总示例(含 main)

本章讲的是选择结构:用 if/else 根据条件执行不同语句。下面是一段完整可运行的程序。

#include <stdio.h>
int main() {
    int hero_hp = 800;
    if (hero_hp < 1000)
        printf("血量低,注意!\n");
    else
        printf("还能打\n");
    return 0;
}

下面练习区已预填了这段代码,可修改后点击「运行」。

练习区域

提示:注释可以暂时不写,等以后学熟了再慢慢加。请仿照上面 if/switch 代码在下面输入或修改,点击「运行」。

运行结果:

(点击「运行」后显示在这里)

易错知识(避免踩坑)

小结