3. 选择结构程序设计
根据条件走不同分支:血量低于 30% 回城,否则继续团战。本节对应考纲 3。
这一章在学什么
前面学了顺序结构:程序从上到下一条一条执行。这一章学选择结构:根据条件决定执行哪一段代码——比如「如果血量低于 1000 就输出“注意”,否则输出“还能打”」。
会用到的两个写法:if / else(如果…否则…)和 switch(根据一个变量的值选不同分支)。易错点:判断“相等”要用 == 两个等号,写成一个等号 = 是赋值,会出错。
本节考纲要点
- 掌握 关系运算符和关系表达式
- 熟悉 逻辑运算符和逻辑表达式
- 掌握 if 语句的使用
- 了解 条件运算符和条件表达式
- 掌握 switch 语句的使用
本节代码里的英文词
hero_hp— 英雄血量mana— 蓝量use_skill— 释放技能max_hp— 最大血量go_back— 回城keep_fighting— 继续打skill_key— 技能键skill_one / skill_two / skill_three— 一技能 / 二技能 / 三技能normal_attack— 普攻case— 情况(switch 里“当值是…”)default— 默认(其他情况)break— 跳出(结束 switch)
关系运算符与关系表达式
条件是什么
要“根据条件选哪条路”,先要会写条件。条件就是用关系运算符比较两个数,结果是“真”或“假”。
六个关系运算符
<小于(如 血量 < 1000)>大于(如 蓝量 > 50)==等于(注意是两个等号,一个等号是赋值!)!=不等于<=小于等于、>=大于等于
易错:== 和 = 别写混
判断“相等”必须写 ==,写成一个 = 就变成赋值了,逻辑会错。考试经常考这里。
逻辑运算符与逻辑表达式
并且、或者、取反
要把多个条件组合起来,用逻辑运算符:
&&并且(两个条件都成立才为真)— 如“有蓝且 CD 好”才放技能||或者(有一个成立就为真)— 如“没血或没蓝”就回城!取反(真的变假,假的变真)— 如!cd_ready表示 CD 还没好
下面例子:血量低于 1000并且蓝量大于 50 时,执行 use_skill()。
if (hero_hp < 1000 && mana > 50) /* 血量低但有蓝,可以放技能再走 */
use_skill();
逻辑表达式本身也有“真/假”的结果,可以再和别的条件组合,例如 (a > 0) && (b < 10)。
if 语句(单分支、双分支)
语法格式
- 单分支:
if (条件) { 语句; }— 条件为真就执行大括号里的,为假就跳过。 - 双分支:
if (条件) { 语句1; } else { 语句2; }— 条件为真执行语句1,为假执行语句2。
如果大括号里只有一条语句,可以省略大括号(但不建议初学省略,容易写错)。
例子:血量低于最大血量的 30% 就回城,否则继续团战。
if (hero_hp < max_hp * 0.3)
go_back();
else
keep_fighting();
多分支:else if
多条分支可以用 else if:if (条件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 代码在下面输入或修改,点击「运行」。
运行结果:
(点击「运行」后显示在这里)
易错知识(避免踩坑)
- 判断相等用 = 写成赋值:要写
if (x == 5)两个等号,写成一个等号if (x = 5)是赋值,条件永远为真,必错。 - switch 的 case 后面忘记 break:没有 break 会“穿透”到下一个 case 继续执行,往往不是你要的效果。
- if 后面多写分号:
if (x > 0);多了分号变成空语句,下面的语句永远执行。
小结
- 关系运算符:< > == != <= >= ;判断相等用
==不是=。 - 逻辑运算符:&& 并且、|| 或者、! 取反。
- if:if (条件) { } ;if (条件) { } else { } ;多分支用 else if。
- switch:按值多分支,case 后记得 break,否则会穿透。