ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

C 语言分支与循环的介绍

C 语言分支与循环的介绍

1. 为什么学分支与循环

程序默认从上到下逐行执行,而分支让我们按条件选择执行哪段代码,循环让我们重复执行某段代码。掌握这两者,就能写出"会判断、会重复"的程序。

本文面向零基础读者,用最直观的例子讲清if、switch、for、while、do-while以及break、continue。

2. 分支结构:让程序学会"选择"

2.1 if 语句:最基础的条件判断

if的语法非常接近自然语言:“如果……就……”。

#include<stdio.h>intmain(void){intscore=85;if(score>=60){printf("及格了\n");}return0;}

要点:

  • 条件写在圆括号里,结果为"真"(非 0)就执行大括号内的语句。
  • C 语言中0 表示假,非 0 表示真,这一点和很多语言不同。
  • 即使只有一条语句,也建议保留大括号,避免后续加代码时出错。

2.2 if-else:二选一

if(score>=60){printf("及格\n");}else{printf("不及格\n");}

2.3 else if:多分支判断

if(score>=90){printf("优秀\n");}elseif(score>=75){printf("良好\n");}elseif(score>=60){printf("及格\n");}else{printf("不及格\n");}

注意判断顺序:else if从上往下依次匹配,一旦命中就不再往下判断。所以条件要从严格到宽松排列,否则会出现逻辑错误。

2.4 常见坑:= 与 ==

inta=5;if(a=0){/* 错误:这是赋值,不是比较 */printf("不会执行\n");}if(a==0){/* 正确:比较 */printf("a 等于 0\n");}

a = 0会把 0 赋给a,表达式结果为 0(假),所以分支不执行,但a的值已经被悄悄改掉了。这类 bug 很难查,写代码时务必小心。

2.5 switch 语句:等值多分支

当判断的是"某个变量等于几个固定值中的哪一个"时,switch比一长串else if更清晰。

#include<stdio.h>intmain(void){intday=3;switch(day){case1:printf("星期一\n");break;case2:printf("星期二\n");break;case3:printf("星期三\n");break;default:printf("其他\n");break;}return0;}

关键点:

  • case后面必须是整型常量表达式,不能是浮点数或变量。
  • break用于跳出switch;漏写会"贯穿"到下一个case,有时是特性,多数时候是 bug。
  • default处理所有未匹配的情况,建议总是写上。

3. 循环结构:让程序学会"重复"

3.1 for 循环:次数明确时首选

#include<stdio.h>intmain(void){for(inti=1;i<=5;i++){printf("第 %d 次循环\n",i);}return0;}

for (初始化; 条件; 更新)的执行顺序:

  1. 执行初始化(只执行一次)
  2. 判断条件,为真则执行循环体
  3. 执行更新表达式
  4. 回到第 2 步

3.2 while 循环:条件驱动

intn=5;while(n>0){printf("%d\n",n);n--;}

while先判断后执行,条件一开始就不成立时,循环体一次都不会执行。

3.3 do-while 循环:至少执行一次

intn=0;do{printf("至少执行一次\n");n++;}while(n<0);

do-while先执行后判断,适合"先做一次,再决定要不要继续"的场景,比如菜单交互。

3.4 三种循环怎么选

场景推荐写法
循环次数已知for
循环次数未知,靠条件结束while
至少执行一次do-while

4. break 与 continue:控制循环的"刹车"和"跳过"

#include<stdio.h>intmain(void){for(inti=1;i<=10;i++){if(i==3){continue;/* 跳过本次,进入下一次 */}if(i==8){break;/* 直接结束整个循环 */}printf("%d ",i);}printf("\n");return0;}

输出结果为:1 2 4 5 6 7。

  • continue:结束本次循环,直接进入下一次。
  • break:结束整个循环(在switch中则是跳出switch)。

5. 嵌套:分支与循环的组合

#include<stdio.h>intmain(void){for(inti=1;i<=5;i++){for(intj=1;j<=i;j++){printf("*");}printf("\n");}return0;}

这段代码打印一个直角三角形。嵌套时要注意:break和continue只作用于最内层的那一层循环。

6. 初学者最容易踩的 5 个坑

  1. 死循环:while里忘记更新条件变量,程序会卡住。
  2. 分号误用:if (x > 0);后面多一个分号,分支体变成空语句。
  3. =与==混用:见 2.4 节。
  4. switch漏写break:导致意外贯穿。
  5. 浮点数做等值判断:if (f == 0.1)往往不成立,应改用误差范围比较。

7. 小结

  • 分支解决"选哪条路":if/if-else/else if/switch。
  • 循环解决"重复做":for/while/do-while。
  • break跳出,continue跳过。
  • 写循环时先想清楚初始值、终止条件、更新方式这三要素,能避免绝大多数问题。

建议把文中的例子逐个敲进编辑器跑一遍,再尝试改造:比如把成绩判断改成百分制转等级、把三角形改成倒三角。动手改代码,是掌握控制流程最快的方式。

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进