C语言控制结构
Update history
Date | Version | Author | Update content |
---|---|---|---|
2024-12-07 | 1.0.0 | 老怪鸽 | 更新了基本文档 |
顺序结构
顺序结构是最基本的程序结构,它按照代码的书写顺序依次执行。
语句与表达式
语句
- 语句是程序执行的基本单元,每个语句以分号 ; 结尾。
- C语言中的语句包括声明语句、赋值语句、控制语句等。
表达式
- 表达式是由运算符和操作数组成的计算序列,它能够被计算出一个值。
- 表达式可以分为简单表达式和复杂表达式。
输入与输出函数
在C语言中,标准输入输出库 <stdio.h>
提供了输入输出函数,用于与用户进行交互。
输出函数
printf()
:用于格式化输出数据到标准输出(通常是屏幕)。
输入函数
scanf()
:用于从标准输入(通常是键盘)读取格式化的数据。
格式化输入输出
格式化输出
使用 printf()
函数,可以按照指定的格式输出数据。
格式化字符串包含普通字符和格式说明符,格式说明符用于指定数据的类型和输出格式。
示例
printf("整数:%d,浮点数:%f\n", 10, 3.14); // 输出整数和浮点数
格式说明符:
- %d:整数
- %ld:长整数
- %f:浮点数
- %s:字符串
- %c:字符
- %x:以十六进制显示的数
- %e:根据数据格式与类型自动显示
等等…
格式化输入
使用 scanf() 函数,可以按照指定的格式读取用户输入的数据。
需要提供格式字符串和对应变量的地址。
示例
int number;
scanf("%d", &number); // 读取一个整数到变量number中
分支结构
分支结构用于根据条件执行不同的代码路径。
if语句
- 基本语法:
if (条件表达式) {
// 条件为真时执行的代码
}
- if-else语法:
if (条件表达式) {
// 条件为真时执行的代码
} else {
// 条件为假时执行的代码
}
- if-else if-else链:
if (条件表达式1) {
// 条件1为真时执行的代码
} else if (条件表达式2) {
// 条件2为真时执行的代码
} else {
// 以上条件都不为真时执行的代码
}
switch语句
- 基本语法:
switch (表达式) {
case 常量表达式1:
// 执行代码块1
break;
case 常量表达式2:
// 执行代码块2
break;
...
default:
// 以上case都不匹配时执行的代码
break;
}
循环结构
循环结构用于重复执行一段代码。
for循环
- 基本语法:
for (初始化表达式; 循环条件; 步进表达式) {
// 循环体
}
while循环
- 基本语法:
while (循环条件) {
// 循环体
}
do-while循环
- 基本语法:
do {
// 循环体
} while (循环条件);
break与continue语句
在C语言中,关键字 break
和 continue
语句用于控制循环的流程。它们可以用于 for
、while
和 do-while
循环中。
break 语句
break
语句用于立即退出当前循环,不再执行循环中剩余的代码,也不管循环的条件是否满足。当 break
语句执行后,程序将继续执行循环之后的代码。
以下是一个使用 break 语句的例子:
#include <stdio.h>
int main() {
for (int i = 1; i <= 10; i++) {
if (i == 5) {
break; // 当 i 等于 5 时,退出循环
}
printf("%d ", i); // 打印 1 到 4
}
printf("\n循环结束\n");
return 0;
}
在这个例子中,循环会在 i 等于 5 时中断,所以输出结果将是 1 2 3 4,然后打印 “循环结束”。
continue 语句
continue
语句用于跳过当前循环迭代中剩余的代码,并立即开始下一次循环迭代。与 break
不同,continue
不会退出循环,而是继续执行下一次循环。
以下是一个使用 continue
语句的例子:
#include <stdio.h>
int main() {
for (int i = 1; i <= 10; i++) {
if (i == 5) {
continue; // 当 i 等于 5 时,跳过当前迭代
}
printf("%d ", i); // 打印 1 到 10,但不包括 5
}
printf("\n循环结束\n");
return 0;
}
在这个例子中,当 i 等于 5 时,continue
语句会跳过当前的迭代,不打印 5,输出结果将是 1 2 3 4 6 7 8 9 10,然后打印 “循环结束”。
注意事项
break
和continue
语句通常与if
语句一起使用,以便在满足特定条件时改变循环的行为。在多层循环嵌套中,break
和continue
只影响它们所在的最内层循环。- 如果要在多层嵌套循环中跳出所有循环,可能需要使用额外的标记或条件变量,或者使用 goto 语句(但这通常不推荐,因为它可能导致代码难以理解和维护)。
循环嵌套
循环嵌套是指在循环语句内部再嵌套一个或多个循环语句。以下是一些常见的循环嵌套示例:
for 循环嵌套
//代码将输出一个 5x5 的星号矩阵。
#include <stdio.h>
int main() {
int i, j;
for (i = 0; i < 5; i++) { // 外层循环
for (j = 0; j < 5; j++) { // 内层循环
printf("* "); // 输出星号和空格
}
printf("\n"); // 每完成内层循环一次,换行
}
return 0;
}
while 循环嵌套
//代码将输出一个 5x5 的星号矩阵。
#include <stdio.h>
int main() {
int i = 0, j;
while (i < 5) { // 外层循环
j = 0;
while (j < 5) { // 内层循环
printf("* ");
j++;
}
printf("\n");
i++;
}
return 0;
}
循环嵌套在处理矩阵、多维数组或需要重复执行的操作时非常有用。通过改变循环的条件和循环体内部的代码,可以实现各种复杂的逻辑和数据处理任务。
作业
编写一个C语言程序,实现以下功能:
- 程序开始时,提示用户输入一个整数。
- 使用if-else结构判断该整数是正数、负数还是零,并输出相应的信息。
- 如果输入的整数是正数,使用for循环计算从1到该整数的所有整数的和,并输出结果。
- 如果输入的整数是负数,使用while循环计算从该整数到-1的所有整数的和,并输出结果。
- 如果输入的整数是零,输出“输入的数是零”。
答案代码
#include <stdio.h>
int main() {
int number;
int sum = 0;
// 获取用户输入
printf("请输入一个整数:");
scanf("%d", &number);
// 使用if-else结构判断并输出信息
if (number > 0) {
// 使用for循环计算正数和
for (int i = 1; i <= number; i++) {
sum += i;
}
printf("从1到%d的所有整数的和是:%d\n", number, sum);
} else if (number < 0) {
// 使用while循环计算负数和
while (number < 0) {
sum += number;
number++;
}
printf("从%d到-1的所有整数的和是:%d\n", number, sum);
} else {
// 输出零的信息
printf("输入的数是零。\n");
}
return 0;
}