目录
-
- 引言
- [1. 条件语句](#1. 条件语句)
-
- [1.1 `if`、`else if`、`else`](#1.1
if
、else if
、else
) -
- [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 实际开发场景)
- [1.1 `if`、`else if`、`else`](#1.1
- [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 实际开发场景)
- [2.1 `for` 循环](#2.1
- [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 实际开发场景)
- [3.1 `break` 语句](#3.1
- [4. 控制流语句对比](#4. 控制流语句对比)
- 结语
引言
亲爱的各位朋友,大家好!我是 凌云,欢迎来到 C 语言奇幻之旅的第 6 篇!在这一篇中,我们将深入探讨 C 语言中的控制流语句。编程的世界中,控制流语句就像是魔法师手中的魔杖,能够指挥程序按照我们的意愿执行不同的任务。无论是简单的条件判断,还是复杂的循环操作,控制流语句都是我们编写高效、灵活代码的基石。今天,我们将深入探讨 C 语言中的控制流语句,揭开它们的神秘面纱。
1. 条件语句
1.1 if
、else if
、else
1.1.1 语法解释
if
语句是 C 语言中最基本的条件语句,用于根据条件的真假来执行不同的代码块。它的基本语法如下:
c
if (condition) {
// 当 condition 为真时执行的代码
} else if (another_condition) {
// 当 another_condition 为真时执行的代码
} else {
// 当所有条件都为假时执行的代码
}
1.1.2 执行流程
- 首先,程序会评估
if
语句中的condition
。 - 如果
condition
为真,则执行if
代码块中的语句,并跳过else if
和else
部分。 - 如果
condition
为假,程序会继续评估else if
语句中的another_condition
。 - 如果
another_condition
为真,则执行else if
代码块中的语句,并跳过else
部分。 - 如果所有条件都为假,则执行
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 执行流程
- 首先,程序会计算
switch
语句中的expression
。 - 然后,程序会依次比较
expression
的值与每个case
后的常量。 - 如果找到匹配的
case
,则执行该case
后的代码块,直到遇到break
语句或switch
语句结束。 - 如果没有找到匹配的
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 执行流程
- 首先,执行
initialization
语句,通常用于初始化循环变量。 - 然后,评估
condition
,如果为真,则执行循环体。 - 执行完循环体后,执行
increment
语句,通常用于更新循环变量。 - 重复步骤 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 执行流程
- 首先,评估
condition
,如果为真,则执行循环体。 - 执行完循环体后,再次评估
condition
。 - 重复步骤 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 执行流程
- 首先,执行循环体。
- 然后,评估
condition
,如果为真,则重复执行循环体。 - 重复步骤 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 执行流程
- 当程序执行到
break
语句时,立即退出当前循环或switch
语句。 - 程序继续执行循环或
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 执行流程
- 当程序执行到
continue
语句时,立即跳过当前循环的剩余部分。 - 程序继续执行下一次循环的迭代。
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 执行流程
- 当程序执行到
goto
语句时,立即跳转到指定的label
处。 - 程序继续执行
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 语言学习的兴趣。如果有任何问题或建议,欢迎随时告诉我!😊