C/C++复习--最易懂的C语言分支与循环语句--详解

C语言–分支与循环语句详解

本文全面解析C语言中的分支语句(ifswitch)和循环语句(whilefordo-while),结合代码示例详细说明其语法、执行流程及常见应用场景,并附实战案例和常见错误分析。


一、分支语句

1. if 语句

if 语句用于根据条件执行不同代码块。其基本语法如下:

单分支结构
#include <stdio.h>
int main() {
    int age = 20;
    if (age >= 18) {
        printf("成年\n");
    }
    return 0;
}
  • 功能:若条件为真(非0),执行代码块;否则跳过。
双分支结构(if-else
#include <stdio.h>
int main() {
    int age = 15;
    if (age >= 18) {
        printf("成年\n");
    } else {
        printf("未成年\n");
    }
    return 0;
}
  • 注意else 总是与最近的 if 匹配。
多分支结构(if-else if-else
#include <stdio.h>
int main() {
    int age = 35;
    if (age < 18) {
        printf("少年\n");
    } else if (age < 30) {
        printf("青年\n");
    } else if (age < 60) {
        printf("中年\n");
    } else {
        printf("老年\n");
    }
    return 0;
}
  • 执行流程:按顺序判断条件,第一个满足条件的分支执行后,后续分支不再检查。

2. switch 语句

switch 适用于多分支选择,需结合 casebreak 使用。

基本语法
#include <stdio.h>
int main() {
    int day = 3;
    switch (day) {
        case 1:
            printf("星期一\n");
            break;
        case 2:
            printf("星期二\n");
            break;
        // ... 其他case
        default:
            printf("输入错误\n");
    }
    return 0;
}
  • 关键点
    • case 后必须是整型常量表达式。
    • break 用于跳出 switch,否则会“穿透”执行后续 case
    • default 处理未匹配的情况,可放在任意位置。
合并多个 case
#include <stdio.h>
int main() {
    int day = 6;
    switch (day) {
        case 1:
        case 2:
        case 3:
        case 4:
        case 5:
            printf("工作日\n");
            break;
        case 6:
        case 7:
            printf("休息日\n");
            break;
    }
    return 0;
}

二、循环语句

1. while 循环

while 循环在条件为真时重复执行代码块。

基本语法
#include <stdio.h>
int main() {
    int i = 1;
    while (i <= 10) {
        printf("%d ", i);
        i++;
    }
    return 0;
}
  • 输出1 2 3 4 5 6 7 8 9 10
breakcontinue
  • break:终止整个循环。
    while (i <= 10) {
        if (i == 5) break;
        printf("%d ", i);  // 输出:1 2 3 4
        i++;
    }
    
  • continue:跳过本次循环剩余代码,进入下一轮判断。
    while (i <= 10) {
        if (i == 5) {
            i++;
            continue;
        }
        printf("%d ", i);  // 输出:1 2 3 4 6 7 8 9 10
        i++;
    }
    

2. for 循环

for 循环将初始化、条件判断和调整部分集中在一行,适合已知循环次数的场景。

基本语法
#include <stdio.h>
int main() {
    for (int i = 1; i <= 10; i++) {
        printf("%d ", i);  // 输出:1 2 3 4 5 6 7 8 9 10
    }
    return 0;
}
  • 执行顺序:初始化 → 条件判断 → 循环体 → 调整部分 → 条件判断…
breakcontinue
for (int i = 1; i <= 10; i++) {
    if (i == 5) break;      // 输出:1 2 3 4
    if (i % 2 == 0) continue; // 跳过偶数,输出:1 3 5 7 9
    printf("%d ", i);
}

3. do-while 循环

do-while 循环至少执行一次循环体,再进行条件判断。

基本语法
#include <stdio.h>
int main() {
    int i = 1;
    do {
        printf("%d ", i);  // 输出:1 2 3 4 6 7 8 9 10
        i++;
    } while (i <= 10);
    return 0;
}

三、实战案例

案例1:计算阶乘和

#include <stdio.h>
int main() {
    int sum = 0;
    for (int n = 1; n <= 10; n++) {
        int factorial = 1;
        for (int i = 1; i <= n; i++) {
            factorial *= i;
        }
        sum += factorial;
    }
    printf("阶乘和为:%d\n", sum);  // 输出:4037913
    return 0;
}

案例2:二分查找

#include <stdio.h>
int main() {
    int arr[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
    int key = 7;
    int left = 0, right = sizeof(arr)/sizeof(arr[0]) - 1;
    while (left <= right) {
        int mid = (left + right) / 2;
        if (arr[mid] < key) {
            left = mid + 1;
        } else if (arr[mid] > key) {
            right = mid - 1;
        } else {
            printf("找到元素,下标为:%d\n", mid);  // 输出:下标6
            break;
        }
    }
    return 0;
}

四、常见错误与注意事项

1. if 语句的悬空 else

if (a == 1)
    if (b == 2)
        printf("hehe\n");
else  // 实际匹配最近的if(b == 2)
    printf("haha\n");
  • 修正:使用花括号明确代码块范围。

2. switch 中遗漏 break

switch (day) {
    case 1:
        printf("星期一");
        // 无break,会继续执行case 2
    case 2:
        printf("星期二");
        break;
}

3. 循环变量修改不当

for (int i = 0; i < 10; i++) {
    if (i == 5) i = 8;  // 可能导致无限循环
}

五、总结

  • 分支语句if 适用于简单条件,switch 适合多分支且条件为整型值的场景。
  • 循环语句while 适合未知循环次数,for 适合已知次数,do-while 确保至少执行一次。
  • 控制关键字break 终止循环,continue 跳过本次循环。

通过结合代码示例和实际应用场景,可以更深入理解分支与循环的逻辑,提升代码编写效率和可读性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值