CAPL 编程系列教程的第十一期内容,开始讲解 CAPL 中的流程控制结构,本期重点是分支结构中的 if 语句
CAPL 编程系列教程 - 第十一期:分支结构之 if 语句
一、 课程回顾与本期目标
- 回顾: 前面学习了 CAPL 的基础语法,包括数据类型、变量、运算符等
。 - 流程控制: 程序执行不仅仅是自上而下的顺序执行,还需要根据条件改变执行路径(分支)或重复执行某段代码(循环)
。 - 本期目标: 学习 CAPL 中的分支结构,重点掌握
if语句的三种形式:单分支 (if)、双分支 (if-else) 和多分支 (if-else if-else)。 - 与 C 语言的关系: CAPL 的
if语句语法与 C 语言完全一样。
二、 if 语句中的条件表达式
- 核心概念:
if语句根据其后的条件表达式 (Condition Expression) 的结果来决定执行哪个分支。 - 条件表达式的求值:
- 条件表达式可以是任何有效的 CAPL 表达式,最常用的是关系表达式(如
score >= 90)或逻辑表达式(如salary >= 7500 && balance >= 30000)。 - 求值规则:非零即真 (Non-zero is True)
。 - 表达式计算结果不为 0 (包括正数、负数、非 0.0 的浮点数、非空字符
\0的字符),则条件为真 (True),即条件成立。 - 表达式计算结果为 0 (或
0.0或空字符\0),则条件为假 (False),即条件不成立。
- 表达式计算结果不为 0 (包括正数、负数、非 0.0 的浮点数、非空字符
- 示例:
if (9): 条件为真 (9 非零)。 if (-3): 条件为真 (-3 非零)。 if (0): 条件为假。 if (3.5): 条件为真 (3.5 非零)。 if ('A'): 条件为真 ('A' 的 ASCII 码非零)。 if ('\0'): 条件为假 (空字符\0的值为 0)。 if (' '): 条件为真 (空格字符 ASCII 码非零)。
- 条件表达式可以是任何有效的 CAPL 表达式,最常用的是关系表达式(如
- 推荐用法: 虽然任何表达式都可作为条件,但通常使用关系或逻辑表达式作条件,这样代码更符合自然语言逻辑,可读性更好
。
三、 if 语句的三种形式
-
单分支:
if语句- 语法:
Code snippet
if (condition) { // statements to execute if condition is true } - 逻辑: 如果
condition为真 (非零),则执行花括号{}内的主体语句;如果condition为假 (零),则跳过花括号,执行if语句之后的代码。 - 主体语句: 花括号
{}括起来的部分。 - 花括号省略: 如果主体部分只有一条语句,花括号可以省略,但不推荐,保留花括号更清晰
。 - 示例:
如果Code snippetint score = 92; if (score >= 90) { write("奖励1000元"); // 条件成立,此句执行 } write("程序结束了"); // 此句总会执行score为 82,则不输出 "奖励1000元"。
- 语法:
-
双分支:
if-else语句- 语法:
Code snippet
if (condition) { // statements_if_true: condition 为真时执行 } else { // statements_if_false: condition 为假时执行 } - 逻辑: 如果
condition为真,执行if后的花括号内的语句;如果condition为假,执行else后的花括号内的语句。if和else的主体语句块是互斥的,只会执行其中一个。 - 关键字:
else(否则)。 - 整体性:
if和else必须连在一起,中间不能插入其他语句。else不能单独存在。 - 示例:
Code snippet
if (score >= 90) { write("奖励1000元"); } else { write("揍你一顿"); // score 为 89 时执行此句 } write("程序结束了"); // 此句总会执行
- 语法:
-
多分支:
if-else if-else语句- 语法:
Code snippet
if (condition1) { // statements_1 } else if (condition2) { // statements_2 } else if (condition3) { // statements_3 } // ... 可以有更多 else if else { // 最后的 else 是可选的 // statements_else } - 逻辑:
- 从上往下依次判断
condition1,condition2,condition3...。 - 一旦遇到第一个为真的条件,就执行其对应的主体语句块,然后立即跳出整个多分支结构,执行后续代码
。 - 如果前面的条件都不为真,才会继续判断下一个
else if的条件。 - 如果所有的
if和else if条件都为假:- 如果有最后的
else,则执行else的主体语句块。 - 如果没有最后的
else,则整个多分支结构什么也不执行。
- 如果有最后的
- 从上往下依次判断
- 互斥性: 多个分支中,最多只会执行一个分支的主体语句
。 else if的隐含条件: 由于是从上往下判断,每个else if的条件实际上隐含了前面所有条件都不满足的前提。因此,在写else if的条件时,通常不需要重复前面已经判断过的边界。- 示例 (成绩评级):
这里Code snippetif (score >= 90) { write("奖励1000元"); } else if (score >= 80) { // 隐含了 score < 90 write("奖励500元"); } else if (score >= 60) { // 隐含了 score < 80 write("奖励100元"); } else { // 隐含了 score < 60 write("揍你一顿"); }score >= 80不需要写成score >= 80 && score < 90。
- 示例 (成绩评级):
- 语法:
四、 三元运算符 (Ternary Operator)
- 目的: 作为
if-else语句的一种简洁替代形式,尤其适用于根据条件为变量赋不同值或选择不同表达式的场景。 - 语法:
condition ? value_if_true : value_if_false - 组成: 由
?和:两个符号组成,需要三个操作数:condition: 条件表达式。value_if_true: 如果condition为真 (非零),整个表达式的结果就是这个值。value_if_false: 如果condition为假 (零),整个表达式的结果就是这个值。
- 返回值: 整个三元运算表达式会计算出一个结果(
value_if_true或value_if_false)。 - 示例:
- 赋值:
char result; result = (score >= 60) ? 'Y' : 'N';// 如果 score>=60,result='Y',否则 result='N'。 - 直接用于输出:
write("是否及格: %c", (score >= 60) ? 'Y' : 'N');。 - 返回较大值:
write("较高分数是: %d", (a >= b) ? a : b);。
- 赋值:
- 注意:
value_if_true和value_if_false的数据类型应兼容或一致。
五、 总结与后续
- 本期学习了 CAPL 中用于实现条件判断和执行路径选择的
if分支结构(单分支、双分支、多分支)以及简洁的三元运算符。 - 理解条件求值(非零即真)和多分支的执行逻辑是关键。
- 下一期将学习另一种分支结构:
switch语句。