C语言选择语句实战:if...else、三目运算符与switch详解

周予安
周予安
发布时间:2026-10-15 | 7人浏览过
原创

C语言的选择语句是实现程序逻辑分支的关键。本文详解 if...else、三目运算符(:?) 和 switch...case 的结构特点与运行机制,并通过成绩判定的实例展示其实际编码方式,解析真假判断、default 位置及 break 遗漏风险等核心细节。

if...else 选择语句详解

第1步:理解执行流程与图示含义

if...else 用于处理两种对立情况。当“表达式”结果为真时,执行语句块1;若为假,则跳过该部分继续向下执行。直观的执行流向可通过以下流程图理解:

第2步:掌握真假判定标准

在 C 语言中,表达式的真假遵循以下规则:

  • 真:表达式的计算结果不为 0(即任意非零值)。
  • 假:表达式的计算结果恰好为 0。

这一原则贯穿所有条件判断语句。基本语法结构如下:

if (表达式)
{
    语句块1;
}
else
{
    语句块2;
}

第3步:应用三种常见分支场景

根据需求不同,if 语句主要有以下三种形态:

单一判断 (if)

仅包含 if 块。当表达式为真时执行语句块1;若为假,则直接忽略整个 if 块内容,程序顺延执行后续代码。

if (表达式)
{
    语句块1;
}

双向分支 (if...else)

包含完整的 if-else 配对。表达式为真执行语句块1,为假则强制进入 else 块执行语句块2。两者必居其一。

if (表达式)
{
    语句块1;
}
else
{
    语句块2;
}

多向分支 (if...else if...else)

处理复杂的区间或状态判断。系统自上而下依次评估,一旦某表达式为真,立即执行对应语句块并终止其余检查;仅当所有前置表达式均为假时,才执行最后的 else 块。

if (表达式1)
{
    语句块1;
}
else if(表达式2)
{
    语句块2;
}
else
{
    语句块3;
}
#include <stdio.h>
int main()
{
    int scores = 0;
    printf("Please enter student scores: ");
    scanf("%d", &scores);
    
    if (scores < 0) {
        printf("input error\n");  
    } else if (scores < 60) {
       printf("Underachievement!\n");
    } else if (scores < 80) {
        printf("academically qualified!\n");
    } else if (scores <= 100) {
        printf("perfect grade!\n");
    } else {
        printf("input error\n");
    }
    return 0;
}

注意:else 必须依附于 if,不可单独存在。编译器采用“就近匹配”原则,else 总是与离它最近的尚未匹配的 if 配对。

三目运算符 (? :) 详解

第4步:条件简化书写

当只需要在两个选项中选择一个结果赋给变量时,三目运算符是比 if...else 更简洁的选择。其语法结构为:表达式1 ? 表达式2 : 表达式3。

  • 若 表达式1 为真,整个运算的结果取 表达式2 的值。
  • 若 表达式1 为假,整个运算的结果取 表达式3 的值。
#include <stdio.h>
int main()
{
    int a = 0, b = 0, max = 0;
    printf("请输入两个数: ");
    scanf("%d%d", &a, &b);
    
    // 使用三目运算符求较大值
    max = a > b ? a : b;
    
    printf("两数中较大的数是: %d", max);
    return 0;
}

switch...case 选择语句详解

第5步:掌握多分支匹配流程

当需要依据一个表达式的结果(通常是整型或字符常量),在多个固定选项中选择执行路径时,switch 语句最为适用。其执行逻辑示意如下:

当外层表达式的值与某个 case 后的常量匹配成功时,程序从该点开始执行对应的语句块。若无匹配项,则进入 default 分支(若存在)。

第6步:构建结构与规避陷阱

switch 的标准骨架通常包含以下要素:

switch(表达式1)
{
    case 常量2:
        语句块2;
        break;
    case 常量3:
        语句块3;
        break;
    default:
        语句块n;
        break;
}
  1. 穿透效应 (Fall-through): 如果某个 case 语句块末尾省略了 break,程序执行完该块后不会退出 switch,而是继续顺序执行下一个 case 乃至 default 的内容,直到遇到下一个 break 或到达 switch 结束大括号。这在某些合并业务场景中可用,但常规判断中极易造成逻辑错误。
  2. Default 位置灵活: default 不必写在最后。由于它是作为“兜底”选项存在的,无论写在哪里,都只有在所有 case 均不匹配时才会被触发。但在笔试面试中,若 default 出现在中间且未加 break,可能导致意外的执行流跳转。

第7步:综合代码示例

以下代码结合了条件输入校验与 switch 多分支判定,展示了 score 分数段如何映射为具体的等级信息:

#include <stdio.h>
int main()
{
    int scores = 0;
    char grade = 'Z';
    printf("Please enter student scores: ");
    scanf("%d", &scores);
    
    // 初步过滤有效分值范围
    if (scores < 0) {
        printf("input error\n");  
    } else if (scores < 60) {
        grade = 'C';
    } else if (scores < 80) {
        grade = 'B';
    } else if (scores <= 100) {
        grade = 'A';
    } else {
        printf("input error\n");
    }
    
    // 基于等级标记进行具体输出切换
    switch(grade)
    {
        case 'A':
            printf("perfect grade!\n");
            break;
        case 'B':
            printf("academically qualified!\n");
            break;
        case 'C':
            printf("Underachievement!\n");
            break;
        default:
            printf("input error\n");
            break;
    }
    return 0;
}
以上就是C语言实例讲解选择语句的使用的详细内容,更多关于C语言选择语句内容的资料请关注本站其它相关文章!
相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表