C 语言是结构化程序设计语言,核心包含顺序、选择、循环三大结构,分支与循环是编程入门最核心的知识点,我结合ai一起梳理if/switch分支、while/for/do-while循环、操作符、break/continue/goto等内容。如果我有哪里说错的欢迎大家评论区指正。


一、分支结构(选择结构)

分支结构用于根据条件执行不同代码,C 语言提供ifswitch两种实现方式。

1.1 if 语句

1.1.1 基础语法

c

运行

// 单分支
if(表达式)
    语句;

// 双分支
if(表达式)
    语句1;
else
    语句2;

// 多分支/嵌套
if(表达式1)
    语句1;
else if(表达式2)
    语句2;
else
    语句3;
  • C 语言中:0 为假,非 0 为真
  • 分支默认只控制一条语句,多条语句必须用{}包裹(复合语句)//新手常在这里犯错误总是给出一条语句后,想要打印出内容或者想跳出循环,就忽略的这一点。
1.1.2 悬空 else 问题

核心规则:else 总是和离它最近的未匹配 if匹配,和代码缩进无关!

c

运行

// 错误写法(缩进误导)
int a=0,b=2;
if(a==1)
    if(b==2)
        printf("hehe\n");
else
    printf("haha\n"); // 实际匹配内层if,程序无输出

// 正确写法(加{}明确逻辑)
if(a==1)
{
    if(b==2)
        printf("hehe\n");
}
else
{
    printf("haha\n");
}

1.2 关系操作符

用于比较大小 / 相等,共 6 种:> 、< 、>= 、<= 、== 、!=

  • 关系表达式结果:真返回 1,假返回 0
  • 严禁连续使用18<=age<=36 逻辑错误,应写为 age>=18 && age<=36

1.3 逻辑操作符

表格

操作符 含义 规则
&& 逻辑与(并且) 全真为真,一假即假
|| 逻辑或(或者 一真即真,全假为假
! 逻辑非(取反) 真变假,假变真

短路特性

  • && 左边为假,右边不执行
  • || 左边为真,右边不执行

1.4 条件操作符(三目运算符)

语法:表达式1 ? 表达式2 : 表达式3

  • 表达式 1 为真 → 执行表达式 2
  • 表达式 1 为假 → 执行表达式 3

c

运行

// 求两数最大值
int max = a>b ? a : b;

1.5 switch 语句

适合多分支定值判断,语法:

c

运行

switch(整型表达式)
{
    case 整型常量:
        语句;
        break; // 跳出switch
    default:
        语句;
        break;
}
  • switch 后必须是整型表达式,case 后必须是整型常量
  • break会发生case 穿透,可利用穿透简化代码   //比较常用的例子就是周一到周五是工作日,周六周天是休息日,就可以利用穿透

二、循环结构

循环用于重复执行代码,C 语言提供while/for/do-while三种循环。

2.1 while 循环

c

运行

while(表达式)
{
    循环体;
}
  • 先判断,后执行;条件不满足直接退出
  • 适合循环次数不确定的场景

2.2 for 循环(最常用)

c

运行

for(初始化; 判断条件; 调整变量)
{
    循环体;
}
  • 初始化只执行 1 次,判断→循环→调整循环执行
  • 三部分集中,代码可读性最高,优先使用

2.3 do-while 循环

c

运行

do
{
    循环体;
}while(表达式);
  • 先执行,后判断,循环体至少执行 1 次
  • 适合需要先运行一次的场景

2.4 break 与 continue

表格

关键字 作用
break 永久终止当前层循环 /switch
continue 跳过本次循环剩余代码,直接进入下一次判断

注意while 中 continue 易导致死循环(跳过变量调整),for 循环相对安全。

2.5 循环嵌套

外层循环控制次数,内层循环处理细节,例如:找 100~200 素数。

2.6 goto 语句

  • 作用:函数内跳转到指定标号处
  • 优点:多层循环快速退出  
  • 缺点:滥用打乱流程,尽量不用

三、随机数与猜数字游戏(综合实战)

3.1 随机数生成三步曲

  1. srand((unsigned int)time(NULL)); → 设置随机种子(程序仅调用 1 次)
  2. rand(); → 生成伪随机数
  3. 控制范围:a + rand()%(b-a+1) → 生成 [a,b] 随机数

3.2 猜数字核心逻辑

  • 生成 1~100 随机数
  • 循环猜数字,提示大 / 小,限制次数
  • 菜单 + switch 实现游戏控制

四、新手高频易错点(血泪总结)

1. 分支相关错误

  1. == 写成 =:赋值代替相等判断,导致条件恒真
  2. 分支多条语句不加 {}:逻辑失控
  3. 悬空 else:缩进误导,匹配错误
  4. 关系运算符连用:18<=age<=36 逻辑错误

2. 循环相关错误

  1. while 循环中 continue 跳过变量调整,死循环
  2. for 循环三部分写乱,初始化 / 判断 / 调整顺序错误
  3. switch 忘记写 break,导致 case 穿透
  4. 循环条件写错,无限循环或一次不执行

3. 操作符错误

  1. 混淆&&||逻辑
  2. 不理解短路特性,右侧代码不执行导致 bug
  3. 三目运算符嵌套过多,可读性极差

4. 随机数错误

  1. srand写在循环内,导致随机数重复
  2. 随机数范围计算错误

五、总结

  1. 分支:if适合范围判断,switch适合定值判断
  2. 循环:优先for,次数不定用while,至少执行一次用do-while
  3. 核心:条件写对、括号加对、break/continue 用对
  4. 新手先练基础语法,再写综合案例,避开上述坑点!

写在最后:这一部分虽然理解上简单,但是很多题目都是在考数学思维逻辑以及优化代码的能力,暴力解法在某些条件下可能会使程序跑崩。

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐