C.循环函数基础
循环函数基础
- 1. 循环函数基础
- 1.1 循环的定义与作用
- 1.1.1 `for` 循环
- 语法
- 示例
- 1.1.2 `while` 循环
- 语法
- 示例
- 1.1.3 `do-while` 循环
- 语法
- 示例
- 1.1.4 循环的比较
- 1.1.5 循环的应用场景
- 2.1 for 循环
- 语法结构
- 执行流程
- 示例
- 应用场景
- 优点
- 缺点
- 2.2 while 循环
- 语法结构
- 执行流程
- 示例
- 应用场景
- 优点
- 缺点
- 2.3 do-while 循环
- 语法结构
- 执行流程
- 示例
- 应用场景
- 优点
- 缺点
- 3.1 if 条件判断
- 语法结构
- 执行流程
- 示例
- 应用场景
- 优点
- 缺点
- 3.2 switch 多分支判断
- 语法结构
- 执行流程
- 示例
- 应用场景
- 优点
- 缺点
- 4.1 循环中使用 if 判断条件执行不同操作
- 示例 1:在 `for` 循环中使用 `if` 判断
- 示例 2:在 `while` 循环中使用 `if` 判断
- 示例 3:在 `do-while` 循环中使用 `if` 判断
- 应用场景
- 4.2 循环中使用 switch 判断执行不同分支
- 示例 1:在 `for` 循环中使用 `switch` 判断
- 示例 2:在 `while` 循环中使用 `switch` 判断
- 示例 3:在 `do-while` 循环中使用 `switch` 判断
- 应用场景
- 5.1 break 跳出循环
- 语法结构
- 执行流程
- 示例 1:在 `for` 循环中使用 `break`
- 示例 2:在 `while` 循环中使用 `break`
- 示例 3:在 `do-while` 循环中使用 `break`
- 应用场景
- 5.2 continue 跳过当前循环迭代
- 语法结构
- 执行流程
- 示例 1:在 `for` 循环中使用 `continue`
- 示例 2:在 `while` 循环中使用 `continue`
- 示例 3:在 `do-while` 循环中使用 `continue`
- 应用场景
- 6.1 多层循环嵌套结构
- 语法结构
- 执行流程
- 示例
- 应用场景
- 优点
- 缺点
- 6.2 嵌套循环中的判断与控制
- 示例 1:嵌套循环中使用 `if` 判断
- 示例 2:嵌套循环中使用 `break` 和 `continue`
- 示例 3:嵌套循环中使用 `switch` 判断
- 应用场景
- 7.1 使用循环和判断实现数据筛选
- 示例 1:筛选数组中的正数
- 示例 2:筛选用户输入的合法数据
- 示例 3:筛选矩阵中的特定元素
- 7.2 使用循环和判断实现复杂逻辑处理
- 示例 1:实现一个简单的计算器
- 示例 2:实现一个简单的成绩管理系统
1. 循环函数基础
1.1 循环的定义与作用
循环是编程中一种重要的控制结构,它允许程序重复执行一段代码,直到满足特定条件为止。循环的主要作用是减少代码冗余,提高代码的可读性和可维护性,同时能够高效地处理重复性任务。
在 C 语言中,循环结构主要有三种类型:for
循环、while
循环和 do-while
循环。每种循环都有其独特的语法和适用场景。
1.1.1 for
循环
for
循环是最常用的循环结构之一,它在循环开始时初始化一个循环变量,每次循环迭代后更新该变量,并在每次迭代前检查一个条件是否成立。如果条件为真,则继续执行循环体;如果条件为假,则退出循环。
语法
for (初始化表达式; 条件表达式; 更新表达式) {// 循环体
}
示例
// 打印 1 到 10 的数字
for (int i = 1; i <= 10; i++) {printf("%d\n", i);
}
1.1.2 while
循环
while
循环在每次迭代前检查条件表达式,只有当条件为真时,才会执行循环体。如果条件为假,则直接跳过循环体,继续执行后续代码。
语法
while (条件表达式) {// 循环体
}
示例
// 打印 1 到 10 的数字
int i = 1;
while (i <= 10) {printf("%d\n", i);i++;
}
1.1.3 do-while
循环
do-while
循环与 while
循环类似,但它会在每次迭代后检查条件表达式,因此循环体至少会执行一次,即使条件为假。
语法
do {// 循环体
} while (条件表达式);
示例
// 打印 1 到 10 的数字
int i = 1;
do {printf("%d\n", i);i++;
} while (i <= 10);
1.1.4 循环的比较
for
循环:适用于循环次数已知或需要在循环中初始化和更新循环变量的场景。while
循环:适用于循环次数未知,但需要在每次迭代前检查条件的场景。do-while
循环:适用于循环体至少需要执行一次的场景。
1.1.5 循环的应用场景
循环在编程中有着广泛的应用,以下是一些常见的应用场景:
- 数据处理:对数组或集合中的每个元素进行操作。
- 重复任务:执行重复的任务,如打印、计算等。
- 用户交互:等待用户输入,直到满足特定条件为止。
- 算法实现:实现各种算法,如排序、搜索等。
通过合理使用循环结构,可以显著提高代码的效率和可读性,使程序更加简洁和易于维护。# 2. 循环结构分类
2.1 for 循环
for
循环是一种结构化的循环方式,特别适合于循环次数已知或需要在循环中初始化和更新循环变量的场景。它的语法结构使得循环的初始化、条件判断和变量更新都集中在一个语句中,代码更加清晰易读。
语法结构
for (初始化表达式; 条件表达式; 更新表达式) {// 循环体
}
执行流程
- 初始化表达式:在循环开始时执行一次,通常用于初始化循环变量。
- 条件表达式:在每次循环迭代前进行判断。如果条件为真,则执行循环体;如果条件为假,则退出循环。
- 更新表达式:在每次循环迭代后执行,通常用于更新循环变量的值。
示例
// 打印 1 到 10 的数字
for (int i = 1; i <= 10; i++) {printf("%d\n", i);
}
应用场景
- 遍历数组:对数组中的每个元素进行操作。
int arr[] = {1, 2, 3, 4, 5}; int size = sizeof(arr) / sizeof(arr[0]); for (int i = 0; i < size; i++) {printf("%d\n", arr[i]); }
- 重复任务:执行固定次数的任务。
for (int i = 0; i < 5; i++) {printf("Hello, World!\n"); }
优点
- 代码集中:初始化、条件判断和变量更新都在一个语句中,代码更加紧凑。
- 易于理解:结构清晰,便于阅读和维护。
缺点
- 灵活性较低:如果循环逻辑较为复杂,
for
循环可能不够灵活。
2.2 while 循环
while
循环是一种条件控制的循环方式,适用于循环次数未知,但需要在每次迭代前检查条件的场景。它在每次循环迭代前都会检查条件表达式,只有当条件为真时,才会执行循环体。
语法结构
while (条件表达式) {// 循环体
}
执行流程
- 条件表达式:在每次循环迭代前进行判断。如果条件为真,则执行循环体;如果条件为假,则退出循环。
- 循环体:在条件为真的情况下执行。
示例
// 打印 1 到 10 的数字
int i = 1;
while (i <= 10) {printf("%d\n", i);i++;
}
应用场景
- 用户交互:等待用户输入,直到满足特定条件为止。
char input[100]; printf("请输入 'exit' 退出程序:\n"); while (1) {scanf("%s", input);if (strcmp(input, "exit") == 0) {break;} }
- 条件未知的任务:执行条件未知的任务,如读取文件内容。
FILE *file = fopen("data.txt", "r"); if (file) {char line[100];while (fgets(line, sizeof(line), file)) {printf("%s", line);}fclose(file); }
优点
- 灵活性高:条件判断在循环体之前,适合条件未知的场景。
- 易于实现:语法简单,容易理解和使用。
缺点
- 可能不执行:如果条件初始值为假,循环体可能一次也不执行。
2.3 do-while 循环
do-while
循环是一种至少执行一次的循环方式,适用于循环体至少需要执行一次的场景。它在每次循环迭代后检查条件表达式,因此循环体至少会执行一次。
语法结构
do {// 循环体
} while (条件表达式);
执行流程
- 循环体:先执行一次循环体。
- 条件表达式:在每次循环迭代后进行判断。如果条件为真,则继续执行循环体;如果条件为假,则退出循环。
示例
// 打印 1 到 10 的数字
int i = 1;
do {printf("%d\n", i);i++;
} while (i <= 10);
应用场景
- 至少执行一次的任务:确保循环体至少执行一次,如用户输入验证。
int num; do {printf("请输入一个正整数:");scanf("%d", &num); } while (num <= 0);
- 菜单驱动程序:用户至少需要选择一次菜单选项。
int choice; do {printf("请选择一个选项(1-继续,0-退出):");scanf("%d", &choice);if (choice == 1) {printf("继续执行...\n");} } while (choice != 0);
优点
- 至少执行一次:确保循环体至少执行一次,适合某些必须执行一次的场景。
- 条件判断灵活:条件判断在循环体之后,适合条件未知的场景。
缺点
- 至少执行一次:即使条件初始值为假,循环体也会执行一次,可能不符合某些场景的需求。# 3. 判断语句
3.1 if 条件判断
if
条件判断是编程中用于根据条件执行不同代码块的基本结构。它允许程序根据条件的真假选择执行特定的代码路径,从而实现逻辑分支。
语法结构
if (条件表达式) {// 条件为真时执行的代码块
} else {// 条件为假时执行的代码块
}
执行流程
- 条件表达式:在执行
if
语句时,首先计算条件表达式的值。如果条件表达式的值为真(非零),则执行if
代码块;如果条件表达式的值为假(零),则执行else
代码块(如果存在)。 - 代码块:根据条件表达式的值,执行相应的代码块。
示例
int num;
printf("请输入一个整数:");
scanf("%d", &num);if (num > 0) {printf("输入的数字是正数。\n");
} else if (num < 0) {printf("输入的数字是负数。\n");
} else {printf("输入的数字是零。\n");
}
应用场景
- 条件选择:根据条件选择执行不同的代码路径。
- 数据验证:验证输入数据是否满足特定条件。
- 流程控制:控制程序的执行流程,根据条件跳过某些代码块。
优点
- 简单易用:语法简单,容易理解和使用。
- 灵活性高:可以通过嵌套
if-else
语句实现复杂的逻辑判断。
缺点
- 嵌套过多:当逻辑过于复杂时,嵌套过多的
if-else
语句可能导致代码难以阅读和维护。
3.2 switch 多分支判断
switch
多分支判断是一种用于处理多个分支选择的