C 语言奇幻之旅 - 第06篇:C 语言控制流语句

目录

    • 引言
    • [1. 条件语句](#1. 条件语句)
      • [1.1 `if`、`else if`、`else`](#1.1 ifelse ifelse)
        • [1.1.1 语法解释](#1.1.1 语法解释)
        • [1.1.2 执行流程](#1.1.2 执行流程)
        • [1.1.3 示例代码](#1.1.3 示例代码)
        • [1.1.4 实际开发场景](#1.1.4 实际开发场景)
      • [1.2 `switch` 语句](#1.2 switch 语句)
        • [1.2.1 语法解释](#1.2.1 语法解释)
        • [1.2.2 执行流程](#1.2.2 执行流程)
        • [1.2.3 示例代码](#1.2.3 示例代码)
        • [1.2.4 实际开发场景](#1.2.4 实际开发场景)
    • [2. 循环语句](#2. 循环语句)
      • [2.1 `for` 循环](#2.1 for 循环)
        • [2.1.1 语法解释](#2.1.1 语法解释)
        • [2.1.2 执行流程](#2.1.2 执行流程)
        • [2.1.3 示例代码](#2.1.3 示例代码)
        • [2.1.4 实际开发场景](#2.1.4 实际开发场景)
      • [2.2 `while` 循环](#2.2 while 循环)
        • [2.2.1 语法解释](#2.2.1 语法解释)
        • [2.2.2 执行流程](#2.2.2 执行流程)
        • [2.2.3 示例代码](#2.2.3 示例代码)
        • [2.2.4 实际开发场景](#2.2.4 实际开发场景)
      • [2.3 `do-while` 循环](#2.3 do-while 循环)
        • [2.3.1 语法解释](#2.3.1 语法解释)
        • [2.3.2 执行流程](#2.3.2 执行流程)
        • [2.3.3 示例代码](#2.3.3 示例代码)
        • [2.3.4 实际开发场景](#2.3.4 实际开发场景)
    • [3. 跳转语句](#3. 跳转语句)
      • [3.1 `break` 语句](#3.1 break 语句)
        • [3.1.1 语法解释](#3.1.1 语法解释)
        • [3.1.2 执行流程](#3.1.2 执行流程)
        • [3.1.3 示例代码](#3.1.3 示例代码)
        • [3.1.4 实际开发场景](#3.1.4 实际开发场景)
      • [3.2 `continue` 语句](#3.2 continue 语句)
        • [3.2.1 语法解释](#3.2.1 语法解释)
        • [3.2.2 执行流程](#3.2.2 执行流程)
        • [3.2.3 示例代码](#3.2.3 示例代码)
        • [3.2.4 实际开发场景](#3.2.4 实际开发场景)
      • [3.3 `goto` 语句](#3.3 goto 语句)
        • [3.3.1 语法解释](#3.3.1 语法解释)
        • [3.3.2 执行流程](#3.3.2 执行流程)
        • [3.3.3 示例代码](#3.3.3 示例代码)
        • [3.3.4 实际开发场景](#3.3.4 实际开发场景)
    • [4. 控制流语句对比](#4. 控制流语句对比)
    • 结语

引言

亲爱的各位朋友,大家好!我是 凌云,欢迎来到 C 语言奇幻之旅的第 6 篇!在这一篇中,我们将深入探讨 C 语言中的控制流语句。编程的世界中,控制流语句就像是魔法师手中的魔杖,能够指挥程序按照我们的意愿执行不同的任务。无论是简单的条件判断,还是复杂的循环操作,控制流语句都是我们编写高效、灵活代码的基石。今天,我们将深入探讨 C 语言中的控制流语句,揭开它们的神秘面纱。

1. 条件语句

1.1 ifelse ifelse

1.1.1 语法解释

if 语句是 C 语言中最基本的条件语句,用于根据条件的真假来执行不同的代码块。它的基本语法如下:

c 复制代码
if (condition) {
    // 当 condition 为真时执行的代码
} else if (another_condition) {
    // 当 another_condition 为真时执行的代码
} else {
    // 当所有条件都为假时执行的代码
}
1.1.2 执行流程
  1. 首先,程序会评估 if 语句中的 condition
  2. 如果 condition 为真,则执行 if 代码块中的语句,并跳过 else ifelse 部分。
  3. 如果 condition 为假,程序会继续评估 else if 语句中的 another_condition
  4. 如果 another_condition 为真,则执行 else if 代码块中的语句,并跳过 else 部分。
  5. 如果所有条件都为假,则执行 else 代码块中的语句。
1.1.3 示例代码
c 复制代码
#include <stdio.h>

int main() {
    int score = 85;

    if (score >= 90) {
        printf("Grade: A\n");
    } else if (score >= 80) {
        printf("Grade: B\n");
    } else if (score >= 70) {
        printf("Grade: C\n");
    } else {
        printf("Grade: D\n");
    }

    return 0;
}

结果为: Grade: B

1.1.4 实际开发场景

在实际开发中,if 语句常用于用户输入验证、状态检查等场景。例如,检查用户输入的年龄是否合法:

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

int main() {
    int age;

    printf("请输入你的年龄: ");
    scanf("%d", &age);

    if (age < 0) {
        printf("年龄不能为负数!\n");
    } else if (age < 18) {
        printf("你未成年,禁止访问!\n");
    } else {
        printf("欢迎访问!\n");
    }

    return 0;
}

结果为: 根据输入的年龄输出相应的提示信息。

1.2 switch 语句

1.2.1 语法解释

switch 语句用于根据变量的值执行不同的代码块。它的基本语法如下:

c 复制代码
switch (expression) {
    case constant1:
        // 当 expression 等于 constant1 时执行的代码
        break;
    case constant2:
        // 当 expression 等于 constant2 时执行的代码
        break;
    default:
        // 当 expression 不等于任何 case 时执行的代码
}
1.2.2 执行流程
  1. 首先,程序会计算 switch 语句中的 expression
  2. 然后,程序会依次比较 expression 的值与每个 case 后的常量。
  3. 如果找到匹配的 case,则执行该 case 后的代码块,直到遇到 break 语句或 switch 语句结束。
  4. 如果没有找到匹配的 case,则执行 default 后的代码块(如果有)。
1.2.3 示例代码
c 复制代码
#include <stdio.h>

int main() {
    int day = 3;

    switch (day) {
        case 1:
            printf("Monday\n");
            break;
        case 2:
            printf("Tuesday\n");
            break;
        case 3:
            printf("Wednesday\n");
            break;
        default:
            printf("Invalid day\n");
    }

    return 0;
}

结果为: Wednesday

1.2.4 实际开发场景

在实际开发中,switch 语句常用于菜单选择、状态机等场景。例如,实现一个简单的计算器:

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

int main() {
    char operator;
    double num1, num2;

    printf("请输入运算符 (+, -, *, /): ");
    scanf(" %c", &operator);

    printf("请输入两个操作数: ");
    scanf("%lf %lf", &num1, &num2);

    switch (operator) {
        case '+':
            printf("%.2lf + %.2lf = %.2lf\n", num1, num2, num1 + num2);
            break;
        case '-':
            printf("%.2lf - %.2lf = %.2lf\n", num1, num2, num1 - num2);
            break;
        case '*':
            printf("%.2lf * %.2lf = %.2lf\n", num1, num2, num1 * num2);
            break;
        case '/':
            if (num2 != 0) {
                printf("%.2lf / %.2lf = %.2lf\n", num1, num2, num1 / num2);
            } else {
                printf("除数不能为零!\n");
            }
            break;
        default:
            printf("无效的运算符!\n");
    }

    return 0;
}

结果为: 根据输入的运算符和操作数输出相应的计算结果。

2. 循环语句

2.1 for 循环

2.1.1 语法解释

for 循环用于重复执行一段代码,直到满足指定的条件。它的基本语法如下:

c 复制代码
for (initialization; condition; increment) {
    // 循环体
}
2.1.2 执行流程
  1. 首先,执行 initialization 语句,通常用于初始化循环变量。
  2. 然后,评估 condition,如果为真,则执行循环体。
  3. 执行完循环体后,执行 increment 语句,通常用于更新循环变量。
  4. 重复步骤 2 和 3,直到 condition 为假。
2.1.3 示例代码
c 复制代码
#include <stdio.h>

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

    return 0;
}

结果为:

0
1
2
3
4
2.1.4 实际开发场景

在实际开发中,for 循环常用于遍历数组、处理集合数据等场景。例如,计算数组中所有元素的和:

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

int main() {
    int arr[] = {1, 2, 3, 4, 5};
    int sum = 0;

    for (int i = 0; i < 5; i++) {
        sum += arr[i];
    }

    printf("数组元素的和为: %d\n", sum);

    return 0;
}

结果为: 数组元素的和为: 15

2.2 while 循环

2.2.1 语法解释

while 循环用于在条件为真时重复执行一段代码。它的基本语法如下:

c 复制代码
while (condition) {
    // 循环体
}
2.2.2 执行流程
  1. 首先,评估 condition,如果为真,则执行循环体。
  2. 执行完循环体后,再次评估 condition
  3. 重复步骤 1 和 2,直到 condition 为假。
2.2.3 示例代码
c 复制代码
#include <stdio.h>

int main() {
    int i = 0;

    while (i < 5) {
        printf("%d\n", i);
        i++;
    }

    return 0;
}

结果为:

0
1
2
3
4
2.2.4 实际开发场景

在实际开发中,while 循环常用于处理不确定次数的循环,例如读取文件直到文件结束:

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

int main() {
    int num;

    printf("请输入一个正整数 (输入0结束): ");
    scanf("%d", &num);

    while (num != 0) {
        printf("你输入的数字是: %d\n", num);
        printf("请输入一个正整数 (输入0结束): ");
        scanf("%d", &num);
    }

    printf("程序结束。\n");

    return 0;
}

结果为: 根据输入的数字输出相应的提示信息,直到输入 0 结束程序。

2.3 do-while 循环

2.3.1 语法解释

do-while 循环与 while 循环类似,但它会先执行循环体,然后再评估条件。它的基本语法如下:

c 复制代码
do {
    // 循环体
} while (condition);
2.3.2 执行流程
  1. 首先,执行循环体。
  2. 然后,评估 condition,如果为真,则重复执行循环体。
  3. 重复步骤 1 和 2,直到 condition 为假。
2.3.3 示例代码
c 复制代码
#include <stdio.h>

int main() {
    int i = 0;

    do {
        printf("%d\n", i);
        i++;
    } while (i < 5);

    return 0;
}

结果为:

0
1
2
3
4
2.3.4 实际开发场景

在实际开发中,do-while 循环常用于至少需要执行一次循环的场景,例如用户菜单选择:

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

int main() {
    char choice;

    do {
        printf("请选择一个选项 (a/b/c): ");
        scanf(" %c", &choice);

        switch (choice) {
            case 'a':
                printf("你选择了选项 a\n");
                break;
            case 'b':
                printf("你选择了选项 b\n");
                break;
            case 'c':
                printf("你选择了选项 c\n");
                break;
            default:
                printf("无效的选项!\n");
        }
    } while (choice != 'c');

    printf("程序结束。\n");

    return 0;
}

结果为: 根据输入的选项输出相应的提示信息,直到选择 c 结束程序。

3. 跳转语句

3.1 break 语句

3.1.1 语法解释

break 语句用于立即终止循环或 switch 语句的执行。它的基本语法如下:

c 复制代码
break;
3.1.2 执行流程
  1. 当程序执行到 break 语句时,立即退出当前循环或 switch 语句。
  2. 程序继续执行循环或 switch 语句之后的代码。
3.1.3 示例代码
c 复制代码
#include <stdio.h>

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

    return 0;
}

结果为:

0
1
2
3
4
3.1.4 实际开发场景

在实际开发中,break 语句常用于在满足某个条件时提前退出循环。例如,查找数组中的某个元素:

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

int main() {
    int arr[] = {1, 2, 3, 4, 5};
    int target = 3;
    int found = 0;

    for (int i = 0; i < 5; i++) {
        if (arr[i] == target) {
            found = 1;
            break;
        }
    }

    if (found) {
        printf("找到目标元素 %d\n", target);
    } else {
        printf("未找到目标元素 %d\n", target);
    }

    return 0;
}

结果为: 找到目标元素 3

3.2 continue 语句

3.2.1 语法解释

continue 语句用于跳过当前循环的剩余部分,直接进入下一次循环。它的基本语法如下:

c 复制代码
continue;
3.2.2 执行流程
  1. 当程序执行到 continue 语句时,立即跳过当前循环的剩余部分。
  2. 程序继续执行下一次循环的迭代。
3.2.3 示例代码
c 复制代码
#include <stdio.h>

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

    return 0;
}

结果为:

1
3
5
7
9
3.2.4 实际开发场景

在实际开发中,continue 语句常用于跳过某些不需要处理的元素。例如,打印数组中的奇数元素:

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

int main() {
    int arr[] = {1, 2, 3, 4, 5};

    for (int i = 0; i < 5; i++) {
        if (arr[i] % 2 == 0) {
            continue;
        }
        printf("%d\n", arr[i]);
    }

    return 0;
}

结果为:

1
3
5

3.3 goto 语句

3.3.1 语法解释

goto 语句用于无条件跳转到程序中的指定标签处。它的基本语法如下:

c 复制代码
goto label;
...
label:
    // 代码
3.3.2 执行流程
  1. 当程序执行到 goto 语句时,立即跳转到指定的 label 处。
  2. 程序继续执行 label 后的代码。
3.3.3 示例代码
c 复制代码
#include <stdio.h>

int main() {
    int i = 0;

    start:
    if (i >= 5) {
        goto end;
    }
    printf("%d\n", i);
    i++;
    goto start;

    end:
    return 0;
}

结果为:

0
1
2
3
4
3.3.4 实际开发场景

在实际开发中,goto 语句应谨慎使用,因为它可能导致代码难以维护。但在某些情况下,goto 语句可以简化错误处理流程。例如,处理文件打开错误:

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

int main() {
    FILE *file = fopen("nonexistent.txt", "r");

    if (file == NULL) {
        printf("文件打开失败!\n");
        goto cleanup;
    }

    // 文件操作代码

    cleanup:
    if (file != NULL) {
        fclose(file);
    }

    return 0;
}

结果为: 文件打开失败!

4. 控制流语句对比

语句类型 语法结构 适用场景 注意事项
if if (condition) { ... } 单一条件判断
else if else if (condition) { ... } 多重条件判断
else else { ... } 默认情况
switch switch (expression) { ... } 多分支选择 每个 case 后需加 break
for for (init; condition; inc) { ... } 已知循环次数
while while (condition) { ... } 条件为真时循环 注意避免无限循环
do-while do { ... } while (condition); 至少执行一次循环 注意避免无限循环
break break; 退出循环或 switch
continue continue; 跳过当前循环
goto goto label; 无条件跳转 慎用,可能导致代码难以维护

结语

通过本文的学习,我们深入了解了 C 语言中的控制流语句,包括条件语句、循环语句和跳转语句。这些语句是编写高效、灵活代码的基础,掌握它们将极大地提升你的编程能力。希望你能在实际开发中灵活运用这些知识,编写出更加优雅、高效的代码。


希望这篇博客能为你提供有价值的信息,并激发你对 C 语言学习的兴趣。如果有任何问题或建议,欢迎随时告诉我!😊

相关推荐
隔壁老登6 分钟前
查询hive指定数据库下所有表的建表语句并生成数据字典
数据库·hive·hadoop
爱丫爱18 分钟前
Python中常见库 PyTorch和Pydantic 讲解
开发语言·pytorch·python
Ryan_Gosling19 分钟前
C++-构造函数-接口
开发语言·c++
sekaii23 分钟前
ReDistribution plan细节
linux·服务器·数据库
ceffans28 分钟前
PDF文档中文本解析
c++·windows·pdf
SummerGao.35 分钟前
Windows 快速搭建C++开发环境,安装C++、CMake、QT、Visual Studio、Setup Factory
c++·windows·qt·cmake·visual studio·setup factory
仟濹39 分钟前
【二分搜索 C/C++】洛谷 P1873 EKO / 砍树
c语言·c++·算法
焱焱枫1 小时前
自适应SQL计划管理(Adaptive SQL Plan Management)在Oracle 12c中的应用
数据库·sql·oracle
2301_793069821 小时前
Spring Boot +SQL项目优化策略,GraphQL和SQL 区别,Spring JDBC 等原理辨析(万字长文+代码)
java·数据库·spring boot·sql·jdbc·orm
服务端相声演员1 小时前
Oracle JDK、Open JDK zulu下载地址
java·开发语言