一、分支结构(选择结构)
1、if 语句
** 单分支**
if(条件)
{
语句;
}
双分支
if(条件)
{
成立执行;
}
else
{
不成立执行;
}
多分支
if(条件1)
{}
else if(条件2)
{}
else
{}
if 超级重点易错点
易错1:= 和 == 分不清
- == 判断相等
- = 赋值
if(a=1) // 恒真!永远成立,
if(a==1) // 正确判断
易错2:if 不带大括号只控制下一行
if(a>0)
printf(“ok”);
printf(“我不受if控制,一定执行!”);
易错3:逻辑与 &&、逻辑或 ||
A && B:两边都真才真(并且)
A || B:一个真就真(或者)
易错4:短路特性
-A && B:A假 →直接不执行B
A || B:A真 →直接不执行B
2、switch 多分支语句
适合固定整数、固定字符匹配场景,不适合区间判断。
基本语法
switch(变量)
{
case 常量1:
语句;
break;
case 常量2:
语句;
break;
default:
都不匹配执行;
break;
}
switch 五大铁律
- 括号内只能是整数/字符,不能是小数、区间
- case 后面必须常量,不能写变量
- 不加 break 会穿透执行(最大考点!)
- default 可选,放最后
- 匹配成功后从当前case开始向下执行,不是只执行本行
经典穿透错题解析
int func(int a)
{
int b;
switch (a)
{
case 1: b = 30;
case 2: b = 20;
case 3: b = 16;
default: b = 0;
}
return b;
}
所有 case 无 break → 全部穿透到 default → 结果永远为 0
三、循环结构(重复执行)
1、while 循环(先判断、后执行)
语法
while(条件)
{
循环体;
}
特点
- 条件不成立,一次都不执行
- 适合不确定循环次数场景
易错点
- 必须在循环内改变条件变量,否则死循环
- 不要把赋值 = 当成判断 ==
2、for 循环
语法:
for(初始化; 判断条件; 更新)
{
循环体;
}
执行顺序
- 初始化(只执行一次)
- 判断条件
- 成立 → 循环体
- 更新变量
- 回到第二步
优势
结构紧凑、边界清晰、已知循环次数首选
易错点
for 括号内用两个分号!!
3、do-while 循环(先执行、后判断)
do
{
循环体;
}while(条件);
特点
- 至少执行一次
- 末尾必须加分号
四、三种循环对比总结
- while:先判后执,可能0次
- do-while:先执后判,最少1次
- for:结构最规范,已知次数首选
五、break 和 continue 区别
break
直接跳出整个循环/switch
彻底结束
continue
结束本次循环,直接进入下一次
不跳出循环
六、全篇终极易错点汇总
- if 判断千万别写 = ,必须 ==
- if/while 不加大括号只控制第一行
- switch 不加 break 会穿透执行
- switch 不能判断小数、区间
- do-while 结尾必须有分号
- && || 存在短路运算
- 循环必须能退出,避免死循环