4、C 语言控制流总结

涉及分支结构、循环结构、跳转语句及 const 修饰符等方面, C 语言控制流的核心知识点,涵盖语法、特性、示例及注意事项

C 语言控制流核心知识点总结

一、分支结构

1. 二路分支(if/if-else)

语法与逻辑
  • if 语句:满足条件时执行代码块,不满足则跳过。

if (条件) {

    语句块;  // 条件为真(非0)时执行

}

  • if-else 语句:二选一执行,满足条件执行 if 块,否则执行 else 块。

if (条件) {

    语句块1;  // 条件为真时执行

} else {

    语句块2;  // 条件为假(0)时执行

}

关键特性
  • 代码块必须用大括号:若省略{},仅首句受条件控制(易出错,推荐始终加括号)。
  • else 与最近的 if 匹配:避免嵌套时的逻辑混淆。
  • 避免多余分号if(条件);会导致无论条件真假,后续代码块都无条件执行。

2. 多路分支(if...else if...else/switch)

if...else if...else 语句
  • 语法:多条件判断,依次检查条件,满足则执行对应块,均不满足则执行 else 块。

if (条件1) {

    语句块1;

} else if (条件2) {

    语句块2;

} else {

    语句块3;  // 所有条件均不满足时执行

}

  • 注意:if 与 else if 之间不能插入其他语句,否则会打断分支连续性。
switch 语句
  • 语法:基于整型表达式的值匹配 case 常量,执行对应代码块。

switch (整型表达式) {

    case 常量1:

        语句块1;

        break;  // 跳出switch结构

    case 常量2:

        语句块2;

        break;

    default:

        语句块3;  // 无匹配时执行(可选)

        break;

}

  • 核心要点
    • 表达式必须为整型:包括 int、char(本质单字节整型)、枚举等。
    • case 后必须是整型常量:不能是变量或 const 修饰的变量(const 变量非编译期常量)。
    • break 的作用:缺少 break 会导致 “穿透”—— 执行当前 case 后继续执行下一个 case,直到遇到 break 或结束。
    • default 的位置:通常放最后(无需 break),但可放任意位置(需加 break 避免穿透)。
  • 实际应用:适合多状态场景(如状态机、菜单选择),示例:

// 模拟指纹识别流程

int finger_flag = 1;

switch (finger_flag) {

    case 1:

        printf("请按指纹\n");

        finger_flag = 2;  // 切换到下一步

        break;

    case 2:

        printf("指纹验证中\n");

        finger_flag = 3;

        break;

    // 其他状态...

    default:

        printf("退出系统\n");

}

二、const 修饰符(基础)

  • 功能:使变量只读(不可修改),增强代码安全性。
  • 语法

const int num = 100;  // 两种写法等价

int const num = 100;

  • 注意
    • const 变量初始化后不可赋值(如num = 200;会报错)。
    • switch 的 case 标签不能使用 const 变量(case 需编译期确定的常量)。

三、循环结构

1. while 循环

  • 逻辑:先判断条件,条件为真则执行循环体,否则退出(可能一次不执行)。
  • 语法

while (条件) {

    循环体;  // 条件为真时重复执行

}

  • 特性
    • 适合 “条件控制” 的循环(如用户输入退出指令前持续运行)。
    • 可通过while(1)创建无限循环,配合break手动退出:

int flag = 0;

while (1) {

    flag++;

    if (flag > 5) {

        break;  // 循环执行5次后退出

    }

}

  • 实际应用:多层循环实现界面跳转(外层循环控制主界面,内层循环控制子界面)。

2. do-while 循环

  • 逻辑:先执行循环体,再判断条件(至少执行一次)。
  • 语法

do {

    循环体;

} while (条件);  // 注意末尾分号

  • 特性
    • 适合 “先执行后判断” 的场景(如用户输入验证:至少输入一次,无效则重新输入)。
    • 与 while 的区别:do-while 保证循环体至少运行一次。

3. for 循环

  • 逻辑:将初始化、条件判断、更新变量集中在循环头,结构紧凑,适合 “次数固定” 的循环。
  • 语法

for (表达式1; 表达式2; 表达式3) {

    循环体;

}

// 表达式1:初始化循环变量(如int i=0)

// 表达式2:循环条件(如i<10)

// 表达式3:更新循环变量(如i++)

  • 特性
    • 三个表达式均可省略,但分号不可省:for(;;)等价于while(1)(无限循环)。
    • 可在表达式中使用逗号分隔多个操作:

for (int i=0, j=10; i<j; i++, j--) {

    printf("i=%d, j=%d\n", i, j);

}

    • 与 while 的转换:for 循环可改写为 while 循环(初始化→条件→循环体→更新变量)。

四、跳转语句(break/continue/goto)

1. break

  • 功能
    1. 跳出当前 switch 语句。
    2. 跳出当前层循环(不影响外层循环)。
  • 示例

// 跳出循环

for (int i=0; i<100; i++) {

    if (i == 10) {

        break;  // i=10时退出循环

    }

}

2. continue

  • 功能:结束当前次循环,直接进入下一次循环(跳过循环体剩余语句)。
  • 示例

// 跳过7的倍数

for (int i=0; i<100; i++) {

    if (i%7 == 0) {

        continue;  // i是7的倍数时,不执行后续打印

    }

    printf("%d\n", i);

}

3. goto

  • 功能:无条件跳转到同一代码块内的标签处(标签为标识符:)。
  • 语法

label:  // 标签

    语句;

// ...

goto label;  // 跳转到label处

  • 适用场景
    • 错误处理:多层循环或嵌套中快速跳转到统一的错误处理逻辑。
    • 调试:跳过复杂代码块,直接执行后续逻辑。
  • 注意
    • 不推荐频繁使用(破坏程序结构化,降低可读性)。
    • 跳转逻辑应保持一致(如均向下跳转),避免混乱。

五、控制流选择策略

场景

推荐语句

原因分析

二选一判断

if-else

逻辑简单,直观易懂

多条件判断(离散值)

switch

效率高于 if...else if(直接匹配)

多条件判断(范围值)

if...else if...else

适合连续范围判断(如 x>10 && x<20)

次数固定的循环

for

初始化、条件、更新集中,结构清晰

条件控制的循环

while

适合未知循环次数,依赖条件退出

至少执行一次的循环

do-while

保证循环体至少运行一次

跳出多层循环 / 错误处理

goto(谨慎使用)

比 break 嵌套更简洁(仅限必要时)

六、常见错误与注意事项

  1. 分支结构
    • 遗漏大括号导致逻辑错误(如if(条件) a++; b++;中 b++ 不受条件控制)。
    • 混淆===(if (a=5) 始终为真,应为 if (a==5))。
  1. 循环结构
    • for 循环中修改循环变量导致死循环(如for(i=0;i<5;i++) i++;实际循环 3 次)。
    • do-while 末尾遗漏分号(语法错误)。
  1. 跳转语句
    • switch 中遗漏 break 导致穿透(执行多个 case)。
    • continue 误用为 break(错误退出循环 vs 跳过本次循环)。
  1. const 使用
    • 试图修改 const 变量(编译报错)。

              2.在 switch 的 case 中使用 const 变量(case 需常量表达式)。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

長琹

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值