嵌套的 if 语句

在 if 语句的代码块内部,可以再包含另一个 if 语句(或 if-else 语句),这种结构称为嵌套 if 语句。它用于处理多层条件判断的场景。

1. 生活逻辑与代码映射

场景描述:

  • 如果天气很好 → 到院子去
    • 如果天气很冷 → 坐在太阳下
    • 否则 → 坐在树荫下
  • 否则(天气不好) → 待在屋内,喝柠檬水

对应代码结构:

if(天气很好)
{
    到院子去;
    if(天气很冷)
        坐在太阳下;
    else
        坐在树荫下;
}
else
    待在屋内,喝柠檬水;Code language: JavaScript (javascript)

2. 语法结构

if(表达式1)
{
    语句A;
    if(表达式2)
        语句B;
    else
        语句C;    
}
else
    语句D;
其它语句 E;Code language: JavaScript (javascript)

执行流程:

  1. 先判断 表达式1
  2. 若为真 → 执行 语句A,再判断 表达式2:
    • 若为真 → 执行 语句B
    • 若为假 → 执行 语句C
  3. 若为假 → 执行 语句D
  4. 无论走哪条路径,最终都执行 其它语句 E

流程图解析(图 3-3 映射):

步骤判断/操作走向
①判断 Expression1 == True?真→②,假→④
②执行 Statement A向下
③判断 Expression2 == True?真→执行 Statement B→⑤,假→执行 Statement C→⑤
④执行 Statement D向下
⑤执行 Next Statement(其它语句 E)结束

3. 综合练习:分析数字的奇偶性与半数奇偶性

需求:输入一个整数,判断是偶数还是奇数;若为偶数,再判断该数的一半是否仍为偶数。

#include <stdio.h>
#include <limits.h>    /* 提供 LONG_MAX */

int main(void)
{
  long test = 0L;      /* 保存要测试的整数 */

  printf("请输入一个小于%ld的整数:", LONG_MAX);
  scanf(" %ld", &test);

  /* 外层判断:测试奇数还是偶数 */
  if(test % 2L == 0L)
  {
    printf("这个数 %ld 是偶数\n", test);

    /* 内层嵌套判断:检查一半是否仍为偶数 */
    if((test / 2L) % 2L == 0L)
    {
      printf("\n这个数 %ld 的一半仍然是偶数", test);
      printf("\n这是不是很有趣?\n");
    }
  }
  else
    printf("这个数 %ld 是奇数\n", test);

  return 0;
}Code language: PHP (php)

运行示例:

输入外层判断 test % 2内层判断 (test/2) % 2输出结果
80(偶数)(8/2)=4, 4%2=0(偶数)“8是偶数” + “一半仍然是偶数” + “有趣”
60(偶数)(6/2)=3, 3%2=1(奇数)“6是偶数”(无内层输出)
71(奇数)不执行内层“7是奇数”

经典陷阱示例:

// 歧义代码:else 到底属于哪个 if?
if(a > 0)
    if(b > 0)
        printf("a>0 and b>0");
else
    printf("a <= 0");

// 实际配对:else 与内层 if 结合(最近原则)
// 修正:用大括号明确意图
if(a > 0)
{
    if(b > 0)
        printf("a>0 and b>0");
}
else
    printf("a <= 0");Code language: JavaScript (javascript)

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注