控制流跳转语句用于改变程序的正常执行流程,实现更灵活的程序控制。东巴文(db-w.cn) 将带你深入理解C语言的控制流跳转语句,掌握程序流程控制的高级技能。
💡 东巴文观点:控制流跳转语句是程序的导航,通过跳转语句,程序可以灵活地改变执行路径。
控制流跳转语句用于无条件地改变程序的执行流程,跳转到指定的代码位置。
东巴文控制流跳转分类:
控制流跳转语句
├── break语句
│ └── 跳出循环或switch语句
├── continue语句
│ └── 跳过本次循环,继续下一次
├── goto语句
│ └── 无条件跳转到标签
└── return语句
└── 从函数返回
东巴文说明:break 语句用于跳出当前的循环或 switch 语句。
#include <stdio.h>
int main() {
printf("=== 东巴文break语句示例 ===\n\n");
// 在for循环中使用break
printf("在for循环中使用break:\n");
for (int i = 1; i <= 10; i++) {
if (i == 5) {
printf("遇到5,跳出循环\n");
break;
}
printf("%d ", i);
}
printf("\n");
// 在while循环中使用break
printf("\n在while循环中使用break:\n");
int i = 1;
while (i <= 10) {
if (i == 5) {
printf("遇到5,跳出循环\n");
break;
}
printf("%d ", i);
i++;
}
printf("\n");
// 在do-while循环中使用break
printf("\n在do-while循环中使用break:\n");
i = 1;
do {
if (i == 5) {
printf("遇到5,跳出循环\n");
break;
}
printf("%d ", i);
i++;
} while (i <= 10);
printf("\n");
return 0;
}
#include <stdio.h>
int main() {
int day = 3;
printf("=== 东巴文break在switch中的应用 ===\n\n");
// 有break的情况
printf("有break:\n");
switch (day) {
case 1:
printf("星期一\n");
break;
case 2:
printf("星期二\n");
break;
case 3:
printf("星期三\n");
break;
case 4:
printf("星期四\n");
break;
case 5:
printf("星期五\n");
break;
default:
printf("周末\n");
break;
}
// 没有break的情况(case穿透)
printf("\n没有break(case穿透):\n");
switch (day) {
case 1:
printf("星期一\n");
case 2:
printf("星期二\n");
case 3:
printf("星期三\n");
case 4:
printf("星期四\n");
case 5:
printf("星期五\n");
default:
printf("周末\n");
}
return 0;
}
#include <stdio.h>
int main() {
printf("=== 东巴文跳出嵌套循环 ===\n\n");
// break只能跳出内层循环
printf("break只能跳出内层循环:\n");
for (int i = 1; i <= 3; i++) {
for (int j = 1; j <= 3; j++) {
if (i == 2 && j == 2) {
printf("跳出内层循环\n");
break;
}
printf("(%d, %d) ", i, j);
}
printf("\n");
}
// 使用标志变量跳出多层循环
printf("\n使用标志变量跳出多层循环:\n");
int found = 0;
for (int i = 1; i <= 3 && !found; i++) {
for (int j = 1; j <= 3 && !found; j++) {
if (i == 2 && j == 2) {
printf("找到目标,跳出所有循环\n");
found = 1;
} else {
printf("(%d, %d) ", i, j);
}
}
printf("\n");
}
return 0;
}
#include <stdio.h>
int main() {
// 查找第一个满足条件的元素
int arr[] = {3, 7, 2, 9, 5, 8, 1, 6, 4, 0};
int target = 5;
int found = 0;
int index = -1;
for (int i = 0; i < 10; i++) {
if (arr[i] == target) {
found = 1;
index = i;
break; // 找到后立即退出
}
}
if (found) {
printf("找到%d,位置:%d\n", target, index);
} else {
printf("未找到%d\n", target);
}
// 判断素数
int num = 17;
int isPrime = 1;
for (int i = 2; i < num; i++) {
if (num % i == 0) {
isPrime = 0;
break; // 找到因子,不是素数
}
}
if (isPrime && num > 1) {
printf("%d是素数\n", num);
} else {
printf("%d不是素数\n", num);
}
return 0;
}
东巴文说明:continue 语句用于跳过本次循环的剩余语句,继续下一次循环。
#include <stdio.h>
int main() {
printf("=== 东巴文continue语句示例 ===\n\n");
// 在for循环中使用continue
printf("在for循环中使用continue:\n");
for (int i = 1; i <= 10; i++) {
if (i == 5) {
printf("跳过5\n");
continue;
}
printf("%d ", i);
}
printf("\n");
// 在while循环中使用continue
printf("\n在while循环中使用continue:\n");
int i = 0;
while (i < 10) {
i++;
if (i == 5) {
printf("跳过5\n");
continue;
}
printf("%d ", i);
}
printf("\n");
// 在do-while循环中使用continue
printf("\n在do-while循环中使用continue:\n");
i = 0;
do {
i++;
if (i == 5) {
printf("跳过5\n");
continue;
}
printf("%d ", i);
} while (i < 10);
printf("\n");
return 0;
}
#include <stdio.h>
int main() {
// 只处理偶数
printf("1到20中的偶数:\n");
for (int i = 1; i <= 20; i++) {
if (i % 2 != 0) {
continue; // 跳过奇数
}
printf("%d ", i);
}
printf("\n");
// 过滤特定数据
printf("\n过滤负数:\n");
int arr[] = {3, -7, 2, -9, 5, -8, 1, 6, -4, 0};
int sum = 0;
for (int i = 0; i < 10; i++) {
if (arr[i] < 0) {
continue; // 跳过负数
}
sum += arr[i];
printf("%d ", arr[i]);
}
printf("\n正数和:%d\n", sum);
// 跳过特定字符
printf("\n过滤空格:\n");
char str[] = "Hello World";
for (int i = 0; str[i] != '\0'; i++) {
if (str[i] == ' ') {
continue; // 跳过空格
}
printf("%c", str[i]);
}
printf("\n");
return 0;
}
#include <stdio.h>
int main() {
printf("=== 东巴文break vs continue ===\n\n");
// break:跳出整个循环
printf("使用break:\n");
for (int i = 1; i <= 10; i++) {
if (i == 5) {
break; // 遇到5就退出循环
}
printf("%d ", i);
}
printf("\n");
// continue:跳过本次循环
printf("\n使用continue:\n");
for (int i = 1; i <= 10; i++) {
if (i == 5) {
continue; // 跳过5,继续下一次
}
printf("%d ", i);
}
printf("\n");
return 0;
}
东巴文对比表:
| 特性 | break | continue | 东巴文说明 |
|---|---|---|---|
| 作用 | 跳出循环 | 跳过本次循环 | break更彻底 |
| 循环次数 | 减少循环次数 | 不改变循环次数 | continue只跳过一次 |
| 使用场景 | 找到目标,提前退出 | 过滤特定数据 | 根据需求选择 |
| switch | 可以使用 | 不能使用 | continue只在循环中有效 |
东巴文说明:goto 语句用于无条件跳转到指定的标签位置。
goto 标签名;
标签名:
// 代码
#include <stdio.h>
int main() {
printf("=== 东巴文goto语句示例 ===\n\n");
// 基本使用
printf("基本使用:\n");
int i = 1;
start:
printf("%d ", i);
i++;
if (i <= 5) {
goto start;
}
printf("\n");
// 跳出多层循环
printf("\n跳出多层循环:\n");
for (int i = 1; i <= 3; i++) {
for (int j = 1; j <= 3; j++) {
if (i == 2 && j == 2) {
printf("跳出所有循环\n");
goto end;
}
printf("(%d, %d) ", i, j);
}
printf("\n");
}
end:
printf("程序结束\n");
return 0;
}
#include <stdio.h>
int main() {
// 错误处理
printf("=== 东巴文错误处理示例 ===\n\n");
int a = 10, b = 0;
if (b == 0) {
printf("错误:除数不能为0\n");
goto error;
}
int result = a / b;
printf("结果:%d\n", result);
goto success;
error:
printf("计算失败\n");
return -1;
success:
printf("计算成功\n");
return 0;
}
#include <stdio.h>
// ❌ 不推荐:过度使用goto,代码难以理解
int main() {
int i = 0;
label1:
i++;
if (i > 10) goto label4;
label2:
printf("%d ", i);
if (i % 2 == 0) goto label3;
goto label1;
label3:
i++;
goto label2;
label4:
printf("\n");
return 0;
}
// ✅ 推荐:使用循环,代码清晰
int main_better() {
for (int i = 1; i <= 10; i++) {
printf("%d ", i);
}
printf("\n");
return 0;
}
东巴文警告:
goto 会破坏程序的结构化goto东巴文说明:return 语句用于从函数返回,可以携带返回值。
return; // 不返回值
return 表达式; // 返回值
#include <stdio.h>
// 无返回值函数
void printMessage() {
printf("东巴文欢迎您!\n");
return; // 可以省略
}
// 有返回值函数
int add(int a, int b) {
return a + b;
}
// 提前返回
int max(int a, int b) {
if (a > b) {
return a;
}
return b;
}
// 错误处理
int divide(int a, int b, int *result) {
if (b == 0) {
return -1; // 返回错误码
}
*result = a / b;
return 0; // 返回成功
}
int main() {
printf("=== 东巴文return语句示例 ===\n\n");
// 调用无返回值函数
printMessage();
// 调用有返回值函数
int sum = add(5, 3);
printf("5 + 3 = %d\n", sum);
// 调用提前返回函数
int m = max(10, 5);
printf("max(10, 5) = %d\n", m);
// 调用错误处理函数
int result;
if (divide(10, 2, &result) == 0) {
printf("10 / 2 = %d\n", result);
} else {
printf("除法失败\n");
}
if (divide(10, 0, &result) == 0) {
printf("10 / 0 = %d\n", result);
} else {
printf("除法失败:除数为0\n");
}
return 0;
}
#include <stdio.h>
// 参数验证
double sqrt_approximate(double n) {
if (n < 0) {
printf("错误:不能对负数开方\n");
return -1; // 返回错误值
}
// 简单的平方根近似算法
double x = n;
for (int i = 0; i < 10; i++) {
x = (x + n / x) / 2;
}
return x;
}
// 查找元素
int findElement(int arr[], int size, int target) {
for (int i = 0; i < size; i++) {
if (arr[i] == target) {
return i; // 找到,返回索引
}
}
return -1; // 未找到,返回-1
}
// 判断素数
int isPrime(int n) {
if (n <= 1) return 0;
if (n <= 3) return 1;
if (n % 2 == 0 || n % 3 == 0) return 0;
for (int i = 5; i * i <= n; i += 6) {
if (n % i == 0 || n % (i + 2) == 0) {
return 0;
}
}
return 1;
}
int main() {
printf("=== 东巴文return应用示例 ===\n\n");
// 平方根
double result = sqrt_approximate(16);
if (result >= 0) {
printf("sqrt(16) ≈ %.2f\n", result);
}
// 查找元素
int arr[] = {3, 7, 2, 9, 5};
int index = findElement(arr, 5, 9);
if (index >= 0) {
printf("找到9,位置:%d\n", index);
} else {
printf("未找到9\n");
}
// 判断素数
int num = 17;
if (isPrime(num)) {
printf("%d是素数\n", num);
} else {
printf("%d不是素数\n", num);
}
return 0;
}
// ✅ 找到目标后立即退出
for (int i = 0; i < size; i++) {
if (arr[i] == target) {
printf("找到目标\n");
break;
}
}
// ✅ 条件满足时退出
while (1) {
// 处理逻辑
if (condition) {
break;
}
}
// ✅ 过滤特定数据
for (int i = 1; i <= 100; i++) {
if (i % 2 != 0) {
continue; // 跳过奇数
}
printf("%d ", i);
}
// ✅ 跳过无效数据
for (int i = 0; i < size; i++) {
if (arr[i] < 0) {
continue; // 跳过负数
}
// 处理有效数据
}
// ❌ 不推荐:使用goto
int main() {
int i = 0;
loop:
printf("%d ", i);
i++;
if (i < 10) goto loop;
return 0;
}
// ✅ 推荐:使用循环
int main() {
for (int i = 0; i < 10; i++) {
printf("%d ", i);
}
return 0;
}
// ✅ 提前返回,减少嵌套
int process(int value) {
if (value < 0) {
return -1; // 错误情况提前返回
}
if (value == 0) {
return 0; // 特殊情况提前返回
}
// 正常处理
return value * 2;
}
// ✅ 错误处理
int readFile(const char *filename) {
FILE *fp = fopen(filename, "r");
if (fp == NULL) {
return -1; // 文件打开失败
}
// 读取文件
fclose(fp);
return 0; // 成功
}
完成本章学习后,请确认:
掌握控制流跳转语句后,你可以继续学习:
如果遇到问题,欢迎访问 东巴文(db-w.cn) 获取帮助!
东巴文(db-w.cn) - 让编程学习更简单
📦 东巴文控制流跳转提示:控制流跳转语句是程序的控制中心,掌握跳转语句是编写灵活程序的关键。在 db-w.cn,我们会通过大量实例帮你掌握控制流跳转语句的使用!