news 2026/7/20 16:10:19

C 语言分支与循环语句深度详解

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
C 语言分支与循环语句深度详解

一、前置核心概念

语句:分号;结尾的代码单元;代码块(复合语句){ }包裹,逻辑上视为一条语句,分支 / 循环后多条代码必须加大括号;逻辑真假:C 语言没有布尔类型,0代表假,非 0 任意数字都代表真。

第一部分:分支语句(选择结构)

1. if 分支

1.1 单 if

语法:

c

运行

if(表达式) 语句; // 只有一条可省略{}

执行逻辑:表达式结果非 0 → 执行内部代码,否则跳过。 易错坑:不加{}时,if 仅控制紧跟的第一条语句

c

运行

// 错误示范 if(1>0) printf("1"); printf("2"); // 这条永远执行,不受if控制 // 正确多语句写法 if(1>0){ printf("1"); printf("2"); }

1.2 if else 二选一

c

运行

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

互斥:表达式为真执行 if,假执行 else,只能走一条

1.3 if else if 多分支(互斥判断)

c

运行

if(a < 60){ printf("不及格"); }else if(a < 80){ printf("中等"); }else if(a < 90){ printf("良好"); }else{ printf("优秀"); }

执行规则:从上到下依次判断,找到第一个成立条件直接执行,剩余分支全部跳过

1.4 悬空 else(高频易错难点)

else 永远匹配离它最近、未配对的 if,和缩进无关!

c

运行

int a=0, b=1; if(a == 1) if(b == 1) printf("yes"); else printf("no");

肉眼看 else 想匹配外层 if,实际匹配内层 if; 解决:用大括号明确划分代码块。

2. switch 分支(整型多条件匹配)

基础语法

c

运行

switch(整型表达式){ // 只能int/char/short,不能浮点、字符串 case 常量1: 语句; break; // 跳出switch case 常量2: 语句; break; default: // 所有case都不匹配才执行 语句; }

关键特性 1:穿透性(无 break 会顺序执行后续 case)

c

运行

int n=2; switch(n){ case 1: printf("1"); case 2: printf("2"); case 3: printf("3"); } // 输出:23

适用场景:多条件执行同一套逻辑,利用穿透简化代码。

关键特性 2:case 必须是常量,不能放变量

c

运行

int x=5; case x: // 编译报错!case后只能写数字、字符常量

关键特性 3:default 位置任意

default 可以写在最前面、中间、最后,不影响逻辑,习惯放末尾。

3. 三目运算符(极简分支)

条件 ? 表达式1 : 表达式2逻辑:条件为真执行 1,否则执行 2,有返回值

c

运行

int max = a > b ? a : b;

等价于:

c

运行

int max; if(a>b) max=a; else max=b;

第二部分:循环语句(重复结构)

循环四要素:初始化、循环条件、循环体、更新变量

1. while 循环(先判断,后执行,可能一次都不跑)

语法:

c

运行

while(判断表达式) { 循环体; 更新变量; }

执行流程:

  1. 计算表达式;
  2. 真 → 执行循环体,回到步骤 1;
  3. 假 → 直接跳出循环。

示例:打印 1~10

c

运行

int i=1; while(i<=10){ printf("%d ",i); i++; // 必须更新,否则死循环 }

坑:忘记更新循环变量,条件永久成立 → 死循环。

2. do while 循环(先执行,后判断,至少执行 1 次)

语法:

c

运行

do{ 循环体; 更新变量; }while(表达式); // 末尾分号不能丢!

区别 while:无论条件真假,循环体一定会先跑一遍。 适用场景:菜单输入、至少执行一次交互逻辑。

3. for 循环(结构最清晰,分三段)

c

运行

for(初始化; 判断条件; 更新表达式) { 循环体; }

执行顺序(固定不变):

  1. 初始化(仅执行 1 次)
  2. 判断条件
    • 假:循环结束
    • 真:执行循环体 → 执行更新表达式 → 回到步骤 2

三段全部可省略

c

运行

for(;;) // 等价while(1),无限死循环

for 循环优势

初始化、更新集中写在一行,适合已知循环次数场景;

c

运行

// 打印1~10,标准写法 for(int i=1; i<=10; i++){ printf("%d ",i); }

第三部分:循环控制关键字 break /continue

1. break

  1. switch 中:跳出 switch 分支;
  2. 循环中:直接终止当前整个循环,跳到循环外代码。

c

运行

for(int i=1;i<=10;i++){ if(i==5) break; printf("%d ",i); } // 输出:1 2 3 4

2. continue

仅终止本次循环,直接进入下一次判断,不跳出整体循环。

c

运行

for(int i=1;i<=5;i++){ if(i==3) continue; printf("%d ",i); } // 输出:1 2 4 5 // i=3时跳过打印,直接i++进入下一轮

第四部分:嵌套分支 + 嵌套循环深度理解

1. 分支嵌套

if 内部套 if、switch 套 if 都合法,核心依靠{}划分层级,解决悬空 else 问题。

2. 循环嵌套(多层循环)

break/continue仅控制自身所在的一层循环,不影响外层。 例:九九乘法表(外层行,内层列)

c

运行

for(int i=1;i<=9;i++){ for(int j=1;j<=i;j++){ printf("%d*%d=%d ",j,i,i*j); } printf("\n"); }

跳出多层循环方案:标记 goto(C 语言唯一推荐使用场景)

c

运行

for(int i=1;i<10;i++){ for(int j=1;j<10;j++){ if(i*j == 30) goto end_loop; // 直接跳到标记处 } } end_loop: ; // 标记

第五部分:高频底层易错点

1. 判断表达式常见错误

(1)赋值=和等于==混淆

c

运行

if(a=5) // 永远为真,等价if(5) if(a==5) // 判断a是否等于5

(2)浮点数不能直接 == 判断

浮点存储有精度误差,不能写if(f == 1.0),改用差值极小范围判断。

2. 死循环产生场景

  1. while/for 忘记更新循环变量;
  2. while(1)/for(;;)无限循环;
  3. 条件永远为真:while(i>0)且 i 只递增。

3. 分号陷阱

c

运行

// 循环后多了分号,循环体为空语句,后面代码脱离循环 for(int i=0;i<5;i++); { printf("test"); // 只执行一次 } // do while 末尾必须带分号,丢失会编译报错 do{}while(i<10);

第六部分:三大循环使用场景总结

  1. for:循环次数明确(遍历数组、固定次数打印);
  2. while:循环次数未知,先判断再执行(读取文件直到末尾);
  3. do while:必须先执行一次(用户输入菜单,至少展示一次界面)。

第七部分:综合实战例题(巩固)

例题 1:分支判断成绩等级

c

运行

#include <stdio.h> int main() { int score; scanf("%d", &score); if(score < 0 || score > 100){ printf("成绩非法"); }else if(score < 60){ printf("不及格"); }else if(score < 80){ printf("中等"); }else if(score < 90){ printf("良好"); }else{ printf("优秀"); } return 0; }

例题 2:循环求 1~100 偶数和

c

运行

#include <stdio.h> int main() { int sum=0; for(int i=1;i<=100;i++){ if(i%2 != 0) continue; // 奇数跳过 sum += i; } printf("%d", sum); return 0; }

例题 3:菜单 do-while 循环

c

运行

#include <stdio.h> int main() { int op; do{ printf("1.功能1 2.功能2 0.退出\n"); scanf("%d", &op); switch(op){ case 1: printf("执行功能1\n"); break; case 2: printf("执行功能2\n"); break; case 0: printf("退出程序\n"); break; default: printf("输入错误\n"); } }while(op != 0); return 0; }
谢谢
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/20 16:05:26

Cap:3个神奇功能让屏幕录制变得如此简单有趣

Cap&#xff1a;3个神奇功能让屏幕录制变得如此简单有趣 【免费下载链接】Cap Open source Loom alternative. Beautiful, shareable screen recordings. 项目地址: https://gitcode.com/GitHub_Trending/cap1/Cap 想象一下&#xff0c;你正在为团队演示一个新功能&…

作者头像 李华
网站建设 2026/7/20 16:02:56

告别手动安装:3步打造你的专属Arch Linux系统

告别手动安装&#xff1a;3步打造你的专属Arch Linux系统 【免费下载链接】alis Arch Linux Install Script (or alis, also known as the Arch Linux executable installation guide and wiki) installs an unattended, automated and customized Arch Linux system. 项目地…

作者头像 李华
网站建设 2026/7/20 16:02:26

Windows平板选购指南:性价比区间全解析

1. Windows平板选购指南&#xff1a;从入门到高端全价位解析最近帮朋友挑选Windows平板时&#xff0c;发现市面上从几百元到上万元的产品琳琅满目&#xff0c;价格跨度之大令人咋舌。作为一个用过7台不同价位Windows平板的"老司机"&#xff0c;今天就来聊聊299元到19…

作者头像 李华
网站建设 2026/7/20 16:00:54

集成Librosa优化音频处理:Python音频分析库的技术部署指南

集成Librosa优化音频处理&#xff1a;Python音频分析库的技术部署指南 【免费下载链接】librosa Python library for audio and music analysis 项目地址: https://gitcode.com/gh_mirrors/li/librosa Librosa作为Python音频处理领域的核心技术库&#xff0c;为音频分析…

作者头像 李华
网站建设 2026/7/20 15:59:50

学历普通也能拿 offer,普通院校学生的春招突围策略

直面学历门槛&#xff0c;寻找差异化破局点春招季&#xff0c;对于非名校背景的求职者来说&#xff0c;往往伴随着一种无形的焦虑。不得不承认&#xff0c;在简历筛选的初始阶段&#xff0c;学历确实是一道客观存在的门槛。许多互联网大厂在面对海量投递时&#xff0c;会设置自…

作者头像 李华
网站建设 2026/7/20 15:59:36

OpenDR社区贡献指南:如何参与这个开源机器人项目

OpenDR社区贡献指南&#xff1a;如何参与这个开源机器人项目 【免费下载链接】opendr A modular, open and non-proprietary toolkit for core robotic functionalities by harnessing deep learning 项目地址: https://gitcode.com/gh_mirrors/opend/opendr OpenDR是一…

作者头像 李华