C语言分支与循环语句

C语言分支与循环语句

一、if-else 分支

if-else 是最基本的条件判断语句,根据表达式的真假决定执行哪段代码。

c 复制代码
#include <stdio.h>

int main() {
    int score = 78;

    if (score >= 90) {
        printf("优秀\n");
    } else if (score >= 80) {
        printf("良好\n");
    } else if (score >= 60) {
        printf("及格\n");
    } else {
        printf("不及格\n");
    }

    return 0;
}

输出:及格

if 后面的括号里放的是判断条件,条件为真(非0)就执行对应的代码块。else if 可以加多个,else 是兜底的,前面都不满足就走这里。


二、switch 语句

switch 适合对一个变量的多个固定值做判断,比一长串 if-else 看着清爽。

c 复制代码
#include <stdio.h>

int main() {
    int day = 3;

    switch (day) {
        case 1:
            printf("星期一\n");
            break;
        case 2:
            printf("星期二\n");
            break;
        case 3:
            printf("星期三\n");
            break;
        case 4:
            printf("星期四\n");
            break;
        default:
            printf("其他\n");
            break;
    }

    return 0;
}

输出:星期三

注意每个 case 后面要加 break,不然会"穿透"继续往下执行。比如去掉上面 case 3 的 break,程序会把 case 4 也打印出来。default 相当于 else,前面都没匹配上就走这里。


三、for 循环

for 循环用得最多,一般当你明确知道要循环几次的时候用它。

c 复制代码
#include <stdio.h>

int main() {
    for (int i = 0; i < 5; i++) {
        printf("第 %d 次循环\n", i);
    }

    return 0;
}

输出:

第 0 次循环

第 1 次循环

第 2 次循环

第 3 次循环

第 4 次循环

for 括号里分三部分:初始化; 条件; 更新。i 从 0 开始,每次加 1,到 i 等于 5 的时候条件不成立,循环结束。


四、while 循环

while 循环适合不知道要循环几次,只关心条件是否满足的场景。

c 复制代码
#include <stdio.h>

int main() {
    int num = 1;

    while (num <= 100) {
        printf("%d ", num);
        num *= 2;
    }

    return 0;
}

输出:1 2 4 8 16 32 64

每次循环判断 num 是否小于等于 100,是就继续。一旦条件不满足就跳出。

还有一种 do-while,不管条件成不成立,先执行一次再说:

c 复制代码
#include <stdio.h>

int main() {
    int i = 10;

    do {
        printf("%d ", i);
        i--;
    } while (i > 0);

    return 0;
}

输出:10 9 8 7 6 5 4 3 2 1


五、break 和 continue

这两个关键字用来控制循环的执行流程。

break:直接跳出循环

执行到 break 的时候,不管循环条件还成不成立,直接结束整个循环。

c 复制代码
#include <stdio.h>

int main() {
    for (int i = 0; i < 10; i++) {
        if (i == 5) {
            break;
        }
        printf("%d ", i);
    }

    return 0;
}

输出:0 1 2 3 4

本来要循环 10 次,但 i 等于 5 的时候 break 了,后面的 5、6、7、8、9 全跳过了。

continue:跳过本次,继续下一次

continue 不会结束整个循环,只是跳过当前这一次的剩余代码,直接进入下一次循环。

c 复制代码
#include <stdio.h>

int main() {
    for (int i = 0; i < 10; i++) {
        if (i % 2 == 0) {
            continue;
        }
        printf("%d ", i);
    }

    return 0;
}

输出:1 3 5 7 9

偶数的时候 continue 了,后面那行 printf 没执行,直接跳到 i++ 然后下一轮。所以最后只打印了奇数。

在嵌套循环中

break 只能跳出它所在的那层循环,外面那层照常跑:

c 复制代码
#include <stdio.h>

int main() {
    for (int i = 0; i < 3; i++) {
        for (int j = 0; j < 5; j++) {
            if (j == 3) {
                break;  // 只跳出内层循环
            }
            printf("(%d,%d) ", i, j);
        }
        printf("\n");
    }

    return 0;
}

输出:

(0,0) (0,1) (0,2)

(1,0) (1,1) (1,2)

(2,0) (2,1) (2,2)

每次内层循环到 j==3 就 break,但外层循环不受影响,照常进入下一轮。


六、实际用法举例

找到第一个能被 7 整除的数

c 复制代码
#include <stdio.h>

int main() {
    int arr[] = {12, 35, 8, 49, 21, 63};
    int len = sizeof(arr) / sizeof(arr[0]);

    for (int i = 0; i < len; i++) {
        if (arr[i] % 7 == 0) {
            printf("第一个能被7整除的数是 %d,下标是 %d\n", arr[i], i);
            break;
        }
    }

    return 0;
}

跳过负数,只处理正数

c 复制代码
#include <stdio.h>

int main() {
    int nums[] = {3, -1, 7, -4, 9, 0, 2};
    int len = sizeof(nums) / sizeof(nums[0]);

    for (int i = 0; i < len; i++) {
        if (nums[i] <= 0) {
            continue;
        }
        printf("%d ", nums[i]);
    }

    return 0;
}

输出:3 7 9 2


总结

语句 用途
if-else 条件分支,二选一或多选一
switch 值匹配,适合固定枚举值判断
for 明确循环次数时使用
while 只关心条件,不确定次数时使用
break 立刻终止当前循环
continue 跳过本次,进入下一次循环
相关推荐
破茧蝴蝶7 小时前
Python分布式爬虫完整教程
开发语言·python
狗凯之家源码网7 小时前
全新 PHP 轻量客服聊天室源码深度评测
开发语言·php·聊天室系统
远离UE47 小时前
UE5 Substrate Thin Film 源码拆析
开发语言·javascript·ue5
keyipatience7 小时前
JavaScript学习(1)书写位置,变量、数据类型、运算符
开发语言·前端·javascript·css·学习
hanlin038 小时前
刷题笔记:力扣第32题-最长有效括号
笔记·算法·leetcode
All for pursuit.8 小时前
【动态规划-21】312.戳气球
数据结构·c++·算法·leetcode·动态规划
栈帧之外8 小时前
【C++】STL之set
开发语言·c++
catchadmin9 小时前
免费可商用 PHP 管理后台 CatchAdmin V5.4.1 发布,新增 MCP 支持
开发语言·php
jimy110 小时前
c++的 Type Traits (二、更详细版本)
开发语言·c++
碧海银沙音频科技研究院10 小时前
基于炬芯ATS3089X自研AEC声学回声消除算法
算法