5. 流程控制语句

发布于:2025-07-27 ⋅ 阅读:(16) ⋅ 点赞:(0)

一、条件判断语句(if 语句)

1. if 语句

用于根据条件执行某段代码。

语法:
if (条件表达式) {
    // 条件为真时执行的代码
}
示例:
int age = 20;
if (age >= 18) {
    printf("你已成年。\n");
}

2. if-else 语句

根据条件判断,选择执行两个不同的代码块。

语法:
if (条件表达式) {
    // 条件为真时执行的代码
} else {
    // 条件为假时执行的代码
}
示例:
int score = 65;
if (score >= 60) {
    printf("及格。\n");
} else {
    printf("不及格。\n");
}

3. if-else if-else 多条件判断

用于多个条件判断的情况。

if (条件1) {
    // 条件1为真时执行
} else if (条件2) {
    // 条件2为真时执行
} else {
    // 所有条件都不满足时执行
}
示例:
int score = 85;
if (score >= 90) {
    printf("A\n");
} else if (score >= 80) {
    printf("B\n");
} else if (score >= 70) {
    printf("C\n");
} else {
    printf("D\n");
}

二、分支语句(switch-case)

用于根据一个变量的值进行多分支选择。

语法:
switch (表达式) {
    case 值1:
        // 匹配值1时执行
        break;
    case 值2:
        // 匹配值2时执行
        break;
    ...
    default:
        // 没有匹配时执行
}

⚠️ 注意:每个 case 分支后面最好加上 break,否则会继续执行下一个 case,称为“穿透”(fall-through)。

示例:
int day = 3;
switch (day) {
    case 1:
        printf("星期一\n");
        break;
    case 2:
        printf("星期二\n");
        break;
    case 3:
        printf("星期三\n");
        break;
    default:
        printf("无效的日期\n");
}

三、循环语句

循环语句用于重复执行某段代码。


1. for 循环

适用于已知循环次数的情况。

语法:
for (初始化; 条件判断; 更新表达式) {
    // 循环体
}
示例:
for (int i = 1; i <= 5; i++) {
    printf("%d ", i);
}
// 输出:1 2 3 4 5

2. while 循环

适用于不知道循环次数,但知道循环条件的情况。

语法:
while (条件表达式) {
    // 循环体
}
示例:
int i = 1;
while (i <= 5) {
    printf("%d ", i);
    i++;
}
// 输出:1 2 3 4 5

3. do-while 循环

while 类似,但先执行一次循环体,再判断条件。

语法:
do {
    // 循环体
} while (条件表达式);
示例:
int i = 1;
do {
    printf("%d ", i);
    i++;
} while (i <= 5);
// 输出:1 2 3 4 5

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

1. break 语句

用于跳出当前循环或 switch 语句。

示例:
for (int i = 1; i <= 10; i++) {
    if (i == 5)
        break;
    printf("%d ", i);
}
// 输出:1 2 3 4

2. continue 语句

跳过当前循环的剩余部分,进入下一轮循环。

示例:
for (int i = 1; i <= 5; i++) {
    if (i == 3)
        continue;
    printf("%d ", i);
}
// 输出:1 2 4 5

3. goto 语句(不推荐使用)

用于无条件跳转到程序中的某个标签位置。

示例:
int i = 1;
loop:
if (i <= 5) {
    printf("%d ", i);
    i++;
    goto loop;
}
// 输出:1 2 3 4 5

⚠️ goto 会使程序结构混乱,建议尽量避免使用。


五、总结对比表

控制结构 用途 是否需要条件 是否循环
if 单条件判断
if-else 二选一
if-else if-else 多条件判断
switch-case 多分支选择 ✅(整型)
for 已知次数的循环
while 条件驱动的循环
do-while 至少执行一次的循环
break 跳出循环或 switch
continue 跳过当前循环体继续下一轮
goto 无条件跳转(不推荐)

示例:嵌套循环打印星号三角形

#include <stdio.h>

int main() {
    int i, j, rows;

    printf("请输入要打印的行数:");
    scanf("%d", &rows);

    // 外层循环控制行数
    for (i = 1; i <= rows; i++) {
        // 内层循环控制每行打印的星号个数
        for (j = 1; j <= i; j++) {
            printf("* ");
        }
        // 每行打印完后换行
        printf("\n");
    }

    return 0;
}

 示例说明:

  • 外层 for 循环(i)控制总共有多少行。
  • 内层 for 循环(j)控制每一行打印多少个 *
  • 每打印完一行就换行(printf("\n"))。

 示例输出(假设用户输入 5):

*
* *
* * *
* * * *
* * * * *
使用标志变量的例子:
#include <stdio.h>

int main() {
    int shouldBreak = 0;
    for (int i = 1; i <= 3 && !shouldBreak; i++) {
        printf("外层循环: %d\n", i);
        for (int j = 1; j <= 3; j++) {
            if (j == 2) {
                printf("准备跳出所有循环。\n");
                shouldBreak = 1;
                break;
            }
            printf("内层循环: %d\n", j);
        }
    }
    return 0;
}

这个例子中,我们引入了一个名为 shouldBreak 的标志变量,在需要跳出所有循环时将其设为 1,并在外层循环条件中检查该变量的值。

 


网站公告

今日签到

点亮在社区的每一天
去签到