Skip to content

C 判断语句

决策(Decision Making)允许程序根据特定条件是真(true)还是假(false)来执行不同的代码块。这使得程序能够根据不同的输入或情况做出动态反应。

核心思想是评估一个条件(一个表达式),并根据结果选择执行路径。如果条件为真,则执行一组语句;如果为假,则可能执行另一组语句(或不执行任何语句)。

与一些具有专门布尔类型的语言不同,C 语言传统上使用整数来表示条件表达式中的真和假:

  • 假 (False): 整数值 0 被认为是假的。
  • 真 (True): 任何非零的整数值(正数或负数)都被认为是真的。

关系运算符(<, >, <=, >=)和相等运算符(==, !=)的结果是 1(真)或 0(假)。逻辑运算符(&&, ||, !)也使用这些基于整数的真/假值。

自 C99 标准以来,C 语言包含了 <stdbool.h> 头文件,它定义了:

  • 一个 bool 类型(通常是 _Bool 的别名)。
  • 常量 true(通常展开为 1)和 false(通常展开为 0)。

使用 <stdbool.h> 可以使代码更清晰易读,但基本原理(0 为假,非零为真)仍然是基础。

C 语言提供了以下决策语句:

语句描述
if 语句仅在指定条件评估为真(非零)时执行一个代码块。
if...else 语句如果条件为真,则执行一个代码块;如果条件为假(零),则执行另一个不同的代码块。
nested if 语句(嵌套 if)一个 if 或 else 块可以包含另一个 if 或 if...else 语句,从而实现更复杂的逻辑分支。
if...else if...else 梯形结构使用嵌套 if 语句的一种常见模式,用于按顺序测试一系列条件。执行与第一个为真条件关联的代码块。
switch 语句允许将一个变量与一系列常量整数或字符值(case)进行比较测试。对于特定的相等性检查,它提供了一种替代冗长 if...else if 梯形结构的有效方法。
nested switch 语句(嵌套 switch)一个 switch 语句内的 case 或 default 块可以包含另一个 switch 语句。

C 语言还提供了一种使用三元运算符 ? : 的简写条件表达式。它常用于简单的条件赋值或表达式。

condition ? expression_if_true : expression_if_false;
  1. 首先评估 condition。
  2. 如果 condition 为真(非零),则评估 expression_if_true,其值成为整个三元表达式的结果。
  3. 如果 condition 为假(零),则评估 expression_if_false,其值成为整个三元表达式的结果。

示例:

#include <stdio.h>
#include <stdlib.h> // For EXIT_SUCCESS
// 包含标准库头文件,用于 EXIT_SUCCESS
int main(void) {
int a = 10, b = 20;
int max_val;
// Use ternary operator to find the maximum value
// 使用三元运算符查找最大值
max_val = (a > b) ? a : b;
printf("Maximum value is: %d\n", max_val);
return EXIT_SUCCESS;
}

这等效于:

if (a > b) {
max_val = a;
} else {
max_val = b;
}

虽然简洁,但过度使用复杂或嵌套的三元运算符可能会降低代码的可读性,不如标准的 if...else 语句清晰。