CAPL 编程系列教程 - 第十一期:分支结构之 if 语句

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),即条件不成立
    • 示例:
      • if (9): 条件为真 (9 非零)
      • if (-3): 条件为真 (-3 非零)
      • if (0): 条件为假
      • if (3.5): 条件为真 (3.5 非零)
      • if ('A'): 条件为真 ('A' 的 ASCII 码非零)
      • if ('\0'): 条件为假 (空字符 \0 的值为 0)
      • if (' '): 条件为真 (空格字符 ASCII 码非零)
  • 推荐用法: 虽然任何表达式都可作为条件,但通常使用关系或逻辑表达式作条件,这样代码更符合自然语言逻辑,可读性更好

三、 if 语句的三种形式

  1. 单分支:if 语句

    • 语法:
      Code snippet
      if (condition) {
          // statements to execute if condition is true
      }
      
    • 逻辑: 如果 condition 为真 (非零),则执行花括号 {} 内的主体语句;如果 condition 为假 (零),则跳过花括号,执行 if 语句之后的代码
    • 主体语句: 花括号 {} 括起来的部分。
    • 花括号省略: 如果主体部分只有一条语句,花括号可以省略,但不推荐,保留花括号更清晰
    • 示例:
      Code snippet
      int score = 92;
      if (score >= 90) {
          write("奖励1000元"); // 条件成立,此句执行
      }
      write("程序结束了"); // 此句总会执行
      
      如果 score 为 82,则不输出 "奖励1000元"
  2. 双分支:if-else 语句

    • 语法:
      Code snippet
      if (condition) {
          // statements_if_true: condition 为真时执行
      } else {
          // statements_if_false: condition 为假时执行
      }
      
    • 逻辑: 如果 condition 为真,执行 if 后的花括号内的语句;如果 condition 为假,执行 else 后的花括号内的语句。ifelse 的主体语句块是互斥的,只会执行其中一个
    • 关键字: else (否则)。
    • 整体性: ifelse 必须连在一起,中间不能插入其他语句。else 不能单独存在
    • 示例:
      Code snippet
      if (score >= 90) {
          write("奖励1000元");
      } else {
          write("揍你一顿"); // score 为 89 时执行此句
      }
      write("程序结束了"); // 此句总会执行
      
  3. 多分支: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 的条件
      • 如果所有的 ifelse if 条件都为假:
        • 如果有最后的 else,则执行 else 的主体语句块
        • 如果没有最后的 else,则整个多分支结构什么也不执行
    • 互斥性: 多个分支中,最多只会执行一个分支的主体语句
    • else if 的隐含条件: 由于是从上往下判断,每个 else if 的条件实际上隐含了前面所有条件都不满足的前提。因此,在写 else if 的条件时,通常不需要重复前面已经判断过的边界。
      • 示例 (成绩评级):
        Code snippet
        if (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
  • 组成: 由 ?: 两个符号组成,需要三个操作数:
    1. condition: 条件表达式。
    2. value_if_true: 如果 condition 为真 (非零),整个表达式的结果就是这个值。
    3. value_if_false: 如果 condition 为假 (零),整个表达式的结果就是这个值。
  • 返回值: 整个三元运算表达式会计算出一个结果(value_if_truevalue_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_truevalue_if_false 的数据类型应兼容或一致

五、 总结与后续

  • 本期学习了 CAPL 中用于实现条件判断和执行路径选择的 if 分支结构(单分支、双分支、多分支)以及简洁的三元运算符。
  • 理解条件求值(非零即真)和多分支的执行逻辑是关键。
  • 下一期将学习另一种分支结构:switch 语句