展开菜单
首页 精品内容 本月促销 装机必备 Windows PDF教程 macOS软件 IOS软件 Android AI 专题
全部分类

当前位置:

首页 > 编程开发 > C语言分支与循环语句的完全指南

C语言分支与循环语句的完全指南

C语言程序执行顺序由分支与循环语句控制。分支语句包括if-else和switch-case,用于条件判断与多路选择;循环语句包括while、do-while和for,实现重复执行。break可跳出循环,continue跳过本次剩余代码。掌握这些控制流语句是编写逻辑程序的基础。

学 C 语言的时候,最让人头秃的往往不是指针和内存——而是程序到底在按什么顺序执行。一行一行往下走?还是跳来跳去?还是反复转圈?

答案是:全靠控制流语句。C 语言的执行顺序由两大类语句决定:

1. 分支语句(Branch):根据条件选择走哪条路——if、else、switch

2. 循环语句(Loop):让代码反复执行——while、do-while、for

这篇文章把这两类语句讲透:语法结构是什么、执行流程长什么样、什么时候用哪个、有哪些坑要避。

一、整体概览:C 语言控制流家族

先看一张总图,建立全局印象:

flowchart TD
    A[控制流语句] --> B[分支语句]
    A --> C[循环语句]
    B --> B1[if / else if / else]
    B --> B2[switch / case]
    C --> C1[while]
    C --> C2[do-while]
    C --> C3[for]

C语言分支与循环语句的完全指南

图 1:C 语言控制流语句总览——左侧为分支语句族,右侧为循环语句族

从图中可以看到,分支语句负责"做选择",循环语句负责"重复做"。两者经常配合使用(比如在循环里用 if 判断是否跳出),是编写任何有逻辑的程序的基础。

二、分支语句:让程序学会做判断

2.1 if / else if / else —— 最常用的条件分支

if 是 C 语言中最基本的分支语句。它的逻辑很简单:如果条件成立,就执行某段代码;否则,执行另一段(或什么都不做)。

基本语法:

if (条件表达式) {
    /* 条件为真时执行的代码 */
} else if (另一个条件) {
    /* 上一个条件为假、这个条件为真时执行 */
} else {
    /* 所有条件都为假时执行 */
}

关键规则:

  • 条件表达式必须是标量类型(整数、字符、指针),结果为 0 表示假,非 0 表示真
  • 花括号 {}:如果只有一条语句可以省略,但强烈建议永远不省(避免悬挂 else 等 bug)
  • else 总是与最近的未匹配的 if 配对——这是经典面试题

执行流程如下:

flowchart TD
    S[开始] --> C1{条件1}
    C1 -->|真| A1[执行代码块1]
    C1 -->|假| C2{条件2}
    C2 -->|真| A2[执行代码块2]
    C2 -->|假| C3{条件3}
    C3 -->|真| A3[执行代码块3]
    C3 -->|假| E[执行else代码块]
    A1 --> End[结束]
    A2 --> End
    A3 --> End
    E --> End

C语言分支与循环语句的完全指南

图 2:if-else-if 阶梯式条件判断的完整执行流程。程序从上到下依次检查每个条件,遇到第一个为真的就进入对应分支,之后的所有 else-if 和 else 都被跳过

一个实际例子——成绩等级判定:

int score = 85;

if (score >= 90) {
    printf("优秀n");
} else if (score >= 80) {
    printf("良好n");   /* score=85 走这里 */
} else if (score >= 60) {
    printf("及格n");
} else {
    printf("不及格n");
}

2.2 switch-case —— 多路分支的利器

当你需要根据一个变量的值从很多选项中选一个时,写一长串 if-else if 既难看又低效。这时就该 switch 出场了。

switch (整型表达式) {
    case 常量1:
        语句组1;
        break;    /* 别忘了!*/
    case 常量2:
        语句组2;
        break;
    /* ... 更多 case ... */
    default:
        默认语句组;   /* 所有 case 都不匹配时执行 */
}

核心要点:

  • 表达式必须是整数类型(int、char、枚举),不能用浮点数或字符串
  • case 后面的值必须是编译期常量,不能是变量
  • break 的作用是跳出 switch——漏写会导致"穿透"(fall-through),继续执行下一个 case 的代码
flowchart TD
    S[计算表达式] --> C1{匹配case1?}
    C1 -->|是| A1[执行语句组1] --> B1{有break?}
    B1 -->|有| End[结束]
    B1 -->|无| A2[执行语句组2]
    C1 -->|否| C2{匹配case2?}
    C2 -->|是| A2 --> B2{有break?}
    B2 -->|有| End
    B2 -->|无| A3[继续穿透...]
    C2 -->|否| More{匹配更多case...}
    More -->|不匹配| Default[执行default] --> End

C语言分支与循环语句的完全指南

图 3:switch-case 多分支选择语句的执行流程。计算表达式的值后,跳转到匹配的 case 标签;break 负责跳出,缺少 break 会穿透到下一个 case

穿透(fall-through)有时是有意为之的技巧:

int day = 5;
switch (day) {
    case 1: case 2: case 3: case 4: case 5:
        printf("工作日n");
        break;
    case 6: case 7:
        printf("周末n");
        break;
}

但更多时候它是 bug 的来源。建议:每个 case 都写 break,除非你明确需要穿透行为。

三、循环语句:让代码重复干活

3.1 while 循环 —— 先判断,后执行

while 是最简单的循环:只要条件为真,就反复执行循环体。

while (条件表达式) {
    /* 循环体:条件为真时重复执行 */
}
flowchart TD
    S[开始] --> C{条件为真?}
    C -->|是| B[执行循环体] --> C
    C -->|否| E[结束]

C语言分支与循环语句的完全指南

图 4:while 循环的执行流程。每次迭代都先检查条件,条件为真才进入循环体,条件为假立即退出

注意它的特点:条件一开始就是假的 → 循环体一次都不执行。这和 do-while 形成鲜明对比。

典型用法——计数循环:

int i = 0;
while (i < 5) {
    printf("i = %dn", i);
    i++;   /* 别忘了更新循环变量!否则死循环 */
}
/* 输出:i = 0, 1, 2, 3, 4 */

3.2 do-while 循环 —— 先执行,后判断

do-while 和 while 几乎一样,只有一个关键区别:它至少执行一次循环体,然后再去判断条件。

do {
    /* 循环体:至少执行一次 */
} while (条件表达式);   /* 注意末尾的分号!*/
flowchart TD
    subgraph while循环
        W1[开始] --> W2{条件?}
        W2 -->|真| W3[执行循环体] --> W2
        W2 -->|假| W4[结束]
    end
    subgraph do-while循环
        D1[开始] --> D2[执行循环体]
        D2 --> D3{条件?}
        D3 -->|真| D2
        D3 -->|假| D4[结束]
    end

C语言分支与循环语句的完全指南

图 5:do-while 与 while 的对比。左:while 先判断再执行(可能 0 次);右:do-while 先执行再判断(至少 1 次)。这是两者唯一但本质的区别

什么时候用 do-while?

  • 菜单循环:先显示菜单,再问用户要不要继续
  • 输入校验:先读取输入,再判断是否合法,不合法就重新输入
int choice;
do {
    printf("===== 主菜单 =====n");
    printf("1. 新建文件n");
    printf("2. 打开文件n");
    printf("3. 退出n");
    printf("请选择:");
    scanf("%d", &choice);
} while (choice < 1 || choice > 3);   /* 输入不合法就重新显示菜单 */

3.3 for 循环 —— 最强大的循环

for 循环把"初始化、条件判断、更新"三件事写在同一行,是 C 语言中使用频率最高的循环。

for (初始化表达式; 条件表达式; 更新表达式) {
    /* 循环体 */
}
flowchart TD
    Init[初始化表达式] --> Cond{条件表达式}
    Cond -->|真| Body[执行循环体]
    Body --> Update[更新表达式]
    Update --> Cond
    Cond -->|假| End[结束]

C语言分支与循环语句的完全指南

图 6:for 循环的四部分结构解剖。①初始化只执行一次 → ②判断条件 → ③执行循环体 → ④执行更新表达式 → 回到②。三个表达式都可以省略(分号不能省)

等价的 while 写法:

/* for 版本 */
for (int i = 0; i < 10; i++) {
    printf("%d ", i);
}

/* 等价 while 版本 */
int i = 0;           /* 对应初始化 */
while (i < 10) {     /* 对应条件 */
    printf("%d ", i);
    i++;             /* 对应更新 */
}

for 的灵活之处在于三个表达式都可以省略:

  • 省略全部三个 → for(;;) = 无限循环(需要 break 退出)
  • 省略条件 = 条件永远为真 = 无限循环
  • 省略初始化 = 变量在外部已经定义好

常见模式速查:

模式写法用途
计数循环for(i=0; i遍历固定次数
倒序循环for(i=n-1; i>=0; i--)反向遍历
步进循环for(i=0; i每次步进 2
无限循环for(;;)事件监听/服务器

四、控制语句:break 与 continue

在循环内部,我们常常需要改变正常的执行流程。两个关键字承担了这个职责:

4.1 break —— 立即跳出

break 的作用是立即终止当前所在的循环或 switch,跳到后面的代码继续执行。

flowchart TD
    subgraph break
        B1[循环执行中] --> B2{break?}
        B2 -->|是| B3[跳出循环]
        B2 -->|否| B4[继续执行]
    end
    subgraph continue
        C1[循环执行中] --> C2{continue?}
        C2 -->|是| C3[跳过本次剩余代码]
        C3 --> C4[回到条件判断]
        C2 -->|否| C5[继续执行]
    end

C语言分支与循环语句的完全指南

图 7:break 与 continue 在循环中的行为对比。左:break 直接跳出整个循环,后续代码不再执行;右:continue 只跳过本次迭代的剩余部分,回到条件判断准备下一轮

/* 找到第一个能被 7 整除的数就停止 */
for (int i = 1; i <= 100; i++) {
    if (i % 7 == 0) {
        printf("找到:%dn", i);  /* 输出 7 */
        break;              /* 立刻退出循环 */
    }
}
/* 循环结束后从这里继续 */

4.2 continue —— 跳过本轮

continue 不退出循环,它只是跳过本次迭代中剩下的代码,直接回到循环的条件判断处,准备下一轮。

/* 打印 1~10 中所有奇数 */
for (int i = 1; i <= 10; i++) {
    if (i % 2 == 0) {
        continue;   /* 偶数跳过,不打印 */
    }
    printf("%d ", i);  /* 只有奇数能到这里 */
}
/* 输出:1 3 5 7 9 */

记忆口诀:break 是"我不干了",continue 是"这次不算,下次再来"。

五、嵌套循环:外层走一步,内层跑一圈

当一个循环的循环体里又包含另一个循环时,就叫嵌套循环(nested loop)。这是打印九九乘法表、矩阵运算、图案输出等场景的核心技术。

flowchart TD
    Outer[外层循环开始] --> OuterCond{外层条件}
    OuterCond -->|真| Inner[内层循环开始]
    Inner --> InnerCond{内层条件}
    InnerCond -->|真| InnerBody[执行内层循环体]
    InnerBody --> InnerUpdate[内层更新] --> InnerCond
    InnerCond -->|假| OuterUpdate[外层更新] --> OuterCond
    OuterCond -->|假| End[结束]

C语言分支与循环语句的完全指南

图 8:嵌套循环的执行顺序。外层每推进一轮,内层都要从头到尾完整执行一遍。总执行次数 = 外层迭代次数 × 内层迭代次数

经典案例——九九乘法表:

for (int i = 1; i <= 9; i++) {         /* 外层:行 1~9 */
    for (int j = 1; j <= i; j++) {     /* 内层:列 1~i */
        printf("%dx%d=%-4d", j, i, i * j);
    }
    printf("n");                       /* 每行结束后换行 */
}

输出:

1x1=1
1x2=2   2x2=4
1x3=3   2x3=6   3x3=9
...(共 9 行,第 n 行有 n 个式子)

嵌套循环的性能注意点:

  • 双层嵌套的时间复杂度通常是 O(n²),数据量大时要警惕
  • 能用单层循环解决的问题不要用嵌套(比如把二维数组展平成一维)
  • break 只跳出最近的一层循环,不会同时跳出所有层

六、实战练习:综合运用

下面是一个结合了分支、循环和控制语句的完整示例——猜数字游戏:

#include 
#include 
#include 

int main() {
    srand((unsigned int)time(NULL));
    int secret = rand() % 100 + 1;   /* 1~100 的随机数 */
    int guess, count = 0;

    printf("=== 猜数字游戏 ===n");
    printf("我想了一个 1~100 之间的数字,你来猜!nn");

    do {
        printf("请输入你的猜测(1~100):");
        scanf("%d", &guess);
        count++;

        if (guess < 1 || guess > 100) {
            printf("范围不对!请输入 1~100 之间的数。nn");
            continue;   /* 跳过,重新输入 */
        }

        if (guess > secret) {
            printf("太大了!再试试。nn");
        } else if (guess < secret) {
            printf("太小了!再试试。nn");
        } else {
            printf("n恭喜你猜对了!答案就是 %dn", secret);
            printf("你一共猜了 %d 次。n", count);
            break;     /* 猜对了,退出循环 */
        }

        if (count >= 10) {
            printf("你已经猜了 10 次,游戏结束。n");
            printf("正确答案是 %dn", secret);
            break;
        }
    } while (1);   /* 无限循环,靠 break 退出 */

    return 0;
}

这个小程序用到了本文讲到的所有知识点:

  • do-while:保证至少运行一次
  • if / else if / else:多路分支判断大小关系
  • continue:跳过非法输入
  • break:两种退出方式(猜对 / 超过次数)
  • rand() + %:生成随机数

七、总结与注意事项

语句类型核心特点典型场景
if / else分支先判断后执行,可嵌套条件判断、范围检查
switch / case分支整数值多路跳转菜单选择、状态机
while循环先判断后执行,可能 0 次不确定次数的循环
do-while循环先执行后判断,至少 1 次菜单循环、输入校验
for循环三合一(初始/条件/更新)固定次数遍历
break控制跳出整个循环/switch找到目标后退出
continue控制跳过本次剩余代码过滤不需要的数据

新手最容易犯的错:

  1. if (x = 5) —— 赋值号写成比较号(应该 ==),永远为真
  2. switch 里忘记写 break —— 导致意外的穿透
  3. do-while 忘记末尾分号 —— 编译错误
  4. 循环体内忘记更新循环变量 —— 死循环
  5. for 循环的三个表达式之间用逗号而不是分号 —— 语法错误

掌握了分支和循环,你就掌握了 C 语言程序的"骨架"。接下来可以挑战更复杂的组合应用:用嵌套循环打印各种图案、用 switch 实现简单计算器、用 break + 标签实现多层跳出。多写代码、多画流程图,这些概念很快就会变成你的肌肉记忆。

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系bd@zhengruan.com
作者最新文章
编程开发 C语言
相关文章 更多
精品专题 更多
装机必备

正软商城装机必备专区,精选办公、浏览器、安全防护、影音播放、压缩解压、设计创作和系统工具等电脑常用正版软件,帮助用户快速完成新电脑软件配置。

Windows

正软商城Windows软件专区,汇集适用于Windows电脑的办公、设计、安全防护、影音播放、开发工具和系统优化软件,提供软件介绍、系统要求、正版授权及购买下载服务。

PDF教程

正软商城PDF教程频道提供PDF编辑、转换、合并、拆分、压缩及格式处理方法,同时介绍常用PDF软件和工具的使用技巧。

macOS软件

正软商城macOS软件专区,精选适用于Mac电脑的办公、设计、影音、效率、开发和系统工具,提供软件功能介绍、macOS兼容版本、正版授权及购买下载服务。

IOS软件

正软商城iOS软件专区,精选适用于iPhone和iPad的办公、学习、影音、设计、效率及AI应用,提供功能介绍、适用设备、系统要求和正版获取方式等信息。

AI

正软商城AI软件专区,汇集AI写作、AI绘画、AI视频、AI办公、AI编程、AI翻译、智能客服和数据分析等人工智能工具,提供功能介绍、适用平台、收费方式及正版购买信息。

Mac软件 更多
WPS Office macOS版
WPS Office macOS版

WPS Office是一款面向macOS用户的综合办公套件,将文字处理、电子表格、演示文稿、PDF工具、模板与云协作整合在同一应用中。它兼容常见Microsoft Office格式,支持Intel及Apple芯片Mac,基础功能可免费使用,

Shapr3D macOS版
Shapr3D macOS版

Shapr3D是一款面向工业设计、机械工程、建筑概念和三维打印工作流的CAD软件。Mac版采用Parasolid建模内核,支持草图约束、实体建模、工程图、可视化渲染及常见CAD格式交换,并可通过账户在多台设备之间同步项目。

REAPER macOS版
REAPER macOS版

REAPER是Cockos开发的数字音频工作站,提供多轨音频与MIDI录制、剪辑、处理、混音和母带制作工具。Mac版兼容Intel与Apple芯片,支持AU、VST、VST3、CLAP等插件格式,并提供高度可定制的工作流程。

Ableton Live macOS版
Ableton Live macOS版

Ableton Live 是面向音乐制作人与现场表演者的数字音频工作站,提供编曲视图、独具特色的现场视图、音频录制、MIDI创作、实时变速、乐器及效果器。Mac版原生支持Apple芯片,并可连接音频接口、MIDI控制器和第三方插件。

Adobe After Effects macOS版
Adobe After Effects macOS版

Adobe After Effects 是面向动态图形、影视特效与视频合成的专业创作软件。它提供关键帧动画、遮罩抠像、运动跟踪、三维空间、文字动画和表达式等工具,并可与 Premiere Pro、Photoshop、Illustrator

Adobe Audition macOS版
Adobe Audition macOS版

Adobe Audition 是面向播客、影视后期、音乐制作及内容创作者的专业音频工作站,提供波形精修、多轨录制与混音、频谱编辑、降噪修复、响度匹配和效果处理工具,并可与 Adobe Premiere 协同完成视频声音制作。

Adobe Bridge macOS版
Adobe Bridge macOS版

Adobe Bridge 是面向摄影师、设计师及内容团队的免费数字资产管理工具,可集中预览照片、视频和 Adobe 项目文件,并利用评级、标签、关键词、元数据、筛选与收藏集完成分类检索。它还支持批量重命名、格式导出、相机导入及 Camera

Adobe Illustrator macOS版
Adobe Illustrator macOS版

Adobe Illustrator 是 Adobe 推出的专业矢量图形设计软件,适合在 Mac 上制作标志、图标、插画、包装、信息图及印刷版面。它以路径和锚点构建可无损缩放的图形,并提供钢笔、形状、文字、图像描摹、渐变、画板及生成式功能。

Adobe InDesign macOS版
Adobe InDesign macOS版

Adobe InDesign 是面向印刷品与数字出版物的专业版面设计软件,可在 Mac 上制作书籍、杂志、宣传册、海报、报告及交互式文档。它提供精细的文字样式、网格、母版、长文档管理和印前输出能力。

Adobe Lightroom Classic macOS版
Adobe Lightroom Classic macOS版

Adobe Lightroom Classic 是面向桌面摄影工作流的照片管理与后期处理软件,可将原始照片保存在本地硬盘,通过目录、关键词、评分和收藏夹高效整理图库,并提供 RAW 冲印、蒙版、镜头校正、批量同步及多格式导出等功能。

Adobe Media Encoder macOS版
Adobe Media Encoder macOS版

Adobe Media Encoder 是 Adobe 推出的专业音视频编码与转码工具,可通过队列、预设和监视文件夹批量完成格式转换、代理文件创建及多平台成片输出,并与 Premiere Pro、After Effects 等软件紧密协作。

Adobe Photoshop macOS版
Adobe Photoshop macOS版

Adobe Photoshop 是面向摄影师、设计师和内容创作者的专业图像处理软件,提供图层、蒙版、选区、修复、调色、文字排版、智能对象及生成式编辑等能力。Mac 版支持 Intel 与 Apple Silicon 处理器。

WINDOWS 更多
Adobe Acrobat Pro Windows版
Adobe Acrobat Pro Windows版

Adobe Acrobat Pro 是面向专业 PDF 工作的综合解决方案,可在 Windows 中创建、编辑、转换、比较、整理和保护文档,并支持表单、电子签名、扫描件文字识别及敏感信息永久遮盖。订阅还包含网页、移动服务和云端协作能力,

Adobe After Effects Windows版
Adobe After Effects Windows版

Adobe After Effects 是面向动态图形、动画与影视视觉特效制作的专业工具,可完成关键帧动画、图层合成、遮罩跟踪、抠像、文字动画和二维三维元素整合。Windows 版通过 Adobe Creative Cloud 安装及更新,

DaVinci Resolve Windows版
DaVinci Resolve Windows版

DaVinci Resolve是Blackmagic Design推出的一体化影视后期工具,将素材管理、非线性剪辑、专业调色、Fusion视觉特效、Fairlight音频处理和成片交付整合在统一工程中。免费版已覆盖多数个人创作需求,

Adobe Media Encoder Windows版
Adobe Media Encoder Windows版

Adobe Media Encoder 是 Adobe 面向视频与音频制作流程提供的专业编码和转码工具,可批量处理媒体文件、创建代理、套用输出预设并监控文件夹自动执行任务。它与 Premiere、After Effects、Audition

Cinema 4D Windows版
Cinema 4D Windows版

Cinema 4D是Maxon推出的专业三维创作软件,将建模、动画、MoGraph动态图形、粒子与动力学模拟、材质灯光及Redshift渲染整合在统一工作环境中,适用于广告包装、影视特效、产品和建筑可视化、游戏素材等制作场景。

Blender Windows版
Blender Windows版

Blender 是免费开源的三维创作套件,在 Windows 上提供建模、雕刻、材质、动画、物理模拟、合成、跟踪、视频剪辑及 Cycles、EEVEE 渲染工具。它适合个人创作者、学生和小型工作室,

Autodesk Maya Windows版
Autodesk Maya Windows版

Autodesk Maya 是面向影视、电视、动画和游戏行业的专业三维制作软件,集多边形与 NURBS 建模、角色绑定、关键帧和动作捕捉动画、Bifrost 特效模拟、材质开发及 Arnold 渲染于一体,

AutoCAD Windows版
AutoCAD Windows版

AutoCAD 是 Autodesk 推出的专业计算机辅助设计软件,Windows 版支持精确二维绘图、三维实体与曲面建模、图纸标注、布局发布和任务自动化,并包含多套行业专业化工具组合,适用于建筑、机械、电气、工程建设及制造设计人员。

SketchUp Pro Windows版
SketchUp Pro Windows版

SketchUp Pro 是面向建筑、室内、景观、施工和产品设计等专业场景的三维建模工具,提供桌面建模、LayOut 二维文档、模型资源库、扩展程序及云端协作能力。其操作逻辑直观,适合从概念推敲、空间规划到图纸表达和方案汇报的完整工作流程。

AutoCAD LT Windows版
AutoCAD LT Windows版

AutoCAD LT 是 Autodesk 推出的专业二维 CAD 软件,适合建筑师、工程师、施工人员和设计师完成精确绘图、标注及文档编制。它支持 DWG 工作流、智能块、图形比较、计数、表格和 AutoLISP 自动化,

Rhino 3D Windows版
Rhino 3D Windows版

Rhino 3D 是 McNeel 推出的专业三维建模工具,可创建、编辑和分析 NURBS 曲线曲面、实体、网格、SubD 与点云。Windows 版支持精确造型、工程制图、渲染、文件转换及 Grasshopper 参数化设计,

Autodesk Fusion Windows版
Autodesk Fusion Windows版

Autodesk Fusion 是面向产品设计与制造的云连接开发平台,在统一环境中整合三维 CAD、CAM、CAE、PCB、工程图、数据管理和团队协作功能,适合产品设计师、机械工程师、电子工程师及加工制造团队完成从概念建模、验证分析到生产交