前言
C语言程序默认按照从上到下的顺序执行,但是单纯顺序执行无法实现复杂逻辑。分支语句实现选择性执行,循环语句实现重复执行,二者是构建程序逻辑的基础。本文结合代码实例,梳理if、switch、for、while、do while语句用法与常见坑点。
一、分支语句(选择结构)
分支语句根据条件真假,选择执行不同代码块。
1. if语句
基础语法:
if(条件){语句;}elseif(条件){语句;}else{语句;}- 条件为非0,判定为真;条件为0,判定为假。
- 若大括号省略,if仅控制紧随其后第一条语句,建议永远带上大括号避免逻辑错误。
- 悬空else规则:else匹配离它最近、未配对的if。
示例:三角形类型判断
if((a+b>c)&&(a+c>b)&&(b+c>a)){if(a==b&&b==c)printf("Equilateral triangle!\n");elseif(a==b||a==c||b==c)printf("Isosceles triangle!\n");elseprintf("Ordinary triangle!\n");}else{printf("Not a triangle!\n");}2. switch语句
适合多分支常量判断场景,替代冗长的else if。
switch(整型表达式){case常量1:语句;break;case常量2:语句;break;default:语句;break;}⚠️重点:
- switch括号内只能是整型(char/short/int),不能使用浮点、字符串;
- case后必须是常量,不能写变量;
break用来跳出switch,缺少break会发生穿透现象;- default处理所有case都不匹配的情况,位置不限。
二、循环语句(重复结构)
循环可以重复执行一段代码,由循环条件控制何时退出。
1. while循环
while(条件){循环体;}执行逻辑:先判断条件,条件成立才执行循环体;有可能一次都不执行。
典型用途:持续读取输入while(scanf("%d",&x)!=EOF)。
2. for循环(使用频率最高)
for(初始化;判断条件;更新){循环体;}执行顺序:初始化 → 判断条件 → 循环体 → 更新,循环往复。
适合已知循环次数场景,例如输出100~200素数、分数累加求和。
示例:交替分数求和作业代码
for(i=1;i<=100;i++){sum=sum+flag*1.0/i;flag=-flag;}3. do while循环
do{循环体;}while(条件);先执行循环体,再判断条件;循环体至少执行1次。适合需要先运行一次再判断的场景。
三、循环控制关键字
break:直接终止当前循环,跳出循环;continue:结束本次循环,立刻进入下一轮条件判断,不会跳出循环。
四、嵌套结构
分支内部可以嵌套循环,循环内部也可以嵌套分支,多层循环也允许互相嵌套。
素数判断就是典型嵌套:外层遍历数字,内层循环判断能否整除。
五、常见易错点总结
- 整数除法陷阱:
1/2结果为0,浮点运算必须写1.0/2; - 死循环:循环条件永远为真,忘记更新循环变量;
- if不带大括号造成作用域错误;
- switch忘记break引发case穿透;
- 循环边界写错(例如
i<100和i<=100混淆)。
结语
分支与循环是所有编程语言通用基础逻辑。熟练掌握三种循环、两类分支,才能实现筛选、迭代、查找等功能。后续复杂算法(最大公约数、素数筛选等)全部建立在控制语句之上。