10.31学习
一、while循环语句
在 C 语言中, while 循环语句是一种基本的控制流语句,用于在满足特定条件时重复执行一段代码。 while 循环的一般形式如下:
while (条件表达式) {
// 循环体
// 这里是在条件为真时需要执行的代码块
}
条件表达式:这是一个布尔表达式,它在每次循环开始前被评估。如果条件表达式的结果为真(非零值),则执行循环体内的代码块。如果条件表达式的结果为假(零值),则不执行循环体内的代码块,程序继续执行循环之后的代码。
示例 1:基本的 while 循环
#include <stdio.h>
int main() {
int i = 0;
while (i < 5) {
printf("%d ", i);
i++; // 增加 i 的值,以避免无限循环
}
return 0;
}
在这个示例中, while 循环将打印从 0 到 4 的数字。只要 i 小于 5,循环就会继续执行。
示例 2:使用 while 循环读取用户输入
#include <stdio.h>
int main() {
char ch;
printf("Enter characters, enter '#' to stop: ");
while ((ch = getchar()) != '#') {
putchar(ch); // 回显输入的字符
}
return 0;
}
在这个示例中,程序使用 while 循环读取用户输入的字符,直到用户输入 # 为止。每次读取一个字符,如果字符不是 # ,则将其打印出来。
注意事项
1. 避免无限循环:确保循环体中包含改变条件表达式结果的语句,否则可能会形成无限循环。
2. 初始化和更新:在循环开始前初始化循环控制变量,并在循环体中更新它。
3. 条件检查: while 循环仅在条件为真时执行循环体,因此确保条件表达式正确设置。
while 循环是实现迭代和重复操作的强大工具,适用于那些需要在满足特定条件时重复执行代码的场景。
二、数组
在 C 语言中,数组是一种基本的数据结构,用于存储相同类型的多个元素。
定义数组
数组定义的一般形式如下:
类型名 数组名[数组大小];
类型名:数组中元素的数据类型,如 int 、 float 、 char 等。
数组名:数组的标识符,用于访问数组中的元素。
数组大小:数组可以存储的元素数量,必须是常量表达式。
例如,定义一个包含 10 个整数的数组:
int numbers[10];
初始化数组
数组可以在定义时进行初始化:
int numbers[] = {1, 2, 3, 4, 5};
如果已知数组的大小,也可以指定大小:
int numbers[5] = {1, 2, 3, 4, 5};
访问数组元素
数组元素通过索引访问,索引从 0 开始:
int firstElement = numbers[0];
遍历数组
使用循环结构遍历数组:
for (int i = 0; i < sizeof(numbers) / sizeof(numbers[0]); i++) {
printf("%d ", numbers[i]);
}
数组的大小
数组的大小可以用 sizeof 运算符获取:
int size = sizeof(numbers) / sizeof(numbers[0]);
多维数组
C 语言支持多维数组,定义形式如下:
int matrix[3][2]; // 3x2 的二维数组
指针和数组
数组名本身可以作为指向数组首元素的指针使用:
int *ptr = numbers; // ptr 指向数组 numbers 的第一个元素
字符串和字符数组
字符数组常用于处理字符串:
char str[] = "Hello, World!";
动态内存分配
可以使用 malloc 或 calloc 动态分配数组:
int *dynamicArray = (int *)malloc(sizeof(int) * 10);
使用动态分配的数组时,需要手动释放内存:
free(dynamicArray);
注意事项
1. 数组越界:访问数组时,确保索引在有效范围内,避免越界。
2. 内存泄漏:使用动态内存分配时,记得释放内存。
3. 性能:访问数组元素的时间复杂度为 O(1),但遍历数组可能需要 O(n) 的时间。
数组是 C 语言中处理同类数据集合的重要工具,掌握数组的使用对于编程至关重要。
三、for语句
for 循环是 C 语言中常用的循环控制结构之一,它非常适合于那些需要执行固定次数的循环场景。
基本语法
for 循环的基本语法如下:
for (初始化表达式; 条件表达式; 更新表达式) {
// 循环体
}
初始化表达式:在循环开始前执行,通常用于设置循环控制变量的初始值。
条件表达式:在每次循环迭代前评估,如果结果为真(非零),则执行循环体;如果结果为假(零),则退出循环。
更新表达式:在每次循环迭代后执行,通常用于更新循环控制变量的值。
示例
for (int i = 0; i < 10; i++) {
printf("%d ", i);
}
这个示例打印从 0 到 9 的数字。
省略成分
在 for 循环中,初始化表达式、条件表达式和更新表达式都可以省略:
int i = 0;
for (; i < 10; ) {
printf("%d ", i++);
}
这个示例与前面的示例等效,但它省略了初始化表达式,并且将更新表达式放在了循环体内部。
多变量操作
可以在 for 循环的初始化表达式或更新表达式中执行多个操作:
for (int i = 0, j = 10; i < 10; i++, j--) {
printf("i = %d, j = %d\n", i, j);
}
无限循环
通过提供一个始终为真的条件表达式, for 循环可以被用作无限循环:
for (;;) {
// 无限执行的代码
}
嵌套循环
for 循环可以嵌套使用,创建多维循环:
for (int i = 0; i < 5; i++) {
for (int j = 0; j < 5; j++) {
printf("i = %d, j = %d\n", i, j);
}
}
for 循环和数组
for 循环经常与数组一起使用来遍历数组元素:
int array[] = {1, 2, 3, 4, 5};
for (int i = 0; i < sizeof(array) / sizeof(array[0]); i++) {
printf("%d ", array[i]);
}
注意事项
1. 避免在循环体内修改循环控制变量:这可能会导致不可预测的行为。
2. 确保循环有退出条件:避免创建无限循环。
3. 初始化和更新表达式的顺序:它们通常按照从左到右的顺序执行。