1. 一维数组
1.1 一维数组的定义和初始化
定义:
- 一维数组是一组相同类型的元素的集合,这些元素在内存中是连续存储的。
语法:
数据类型 数组名[数组长度];
初始化:
可以在定义时初始化数组。
也可以先定义后初始化。
示例:
int ages[3] = {1, 3, 5}; // 定义并初始化 int ages[3]; // 先定义 ages[0] = 1; // 后初始化 ages[1] = 3; ages[2] = 5;
1.2 一维数组的遍历
遍历:
- 遍历的意思就是有序地查看数组的每一个元素。
示例:
int ages[4] = {1, 3, 5, 7};
for (int i = 0; i < 4; i++) {
printf("ages[%d] = %d\n", i, ages[i]);
}输出:
ages[0] = 1
ages[1] = 3
ages[2] = 5
ages[3] = 7
1.3 输入 5 个数,求和以及最值
- 示例:cpp
#include <stdio.h>
int main() {
int nums[5];
int sum = 0;
int max = nums[0];
int min = nums[0];
printf("请输入 5 个整数:\n");
for (int i = 0; i < 5; i++) {
scanf("%d", &nums[i]);
sum += nums[i];
if (i == 0) {
max = nums[i];
min = nums[i];
} else {
if (nums[i] > max) {
max = nums[i];
}
if (nums[i] < min) {
min = nums[i];
}
}
}
printf("总和: %d\n", sum);
printf("最大值: %d\n", max);
printf("最小值: %d\n", min);
return 0;
} ```
2. 二维数组
2.1 二维数组的定义和初始化
定义:
- 二维数组是一个数组的数组,每个元素也是一个数组。
语法:
数据类型 数组名[行数][列数];
初始化:
可以在定义时完全初始化。
也可以部分初始化。
可以省略第一维的长度,但不能省略第二维的长度。
示例:
cppint a[2][3] = {{80, 75, 92}, {61, 65, 71}}; // 完全初始化 int a[2][3]; // 先定义 a[0][0] = 80; a[0][1] = 75; a[0][2] = 92; a[1][0] = 61; a[1][1] = 65; a[1][2] = 71; // 后初始化 int a[2][3] = {80, 75, 92, 61, 65, 71}; // 按行连续赋值 int a[][3] = {{1, 2, 3}, {4, 5, 6}}; // 省略第一维的长度 int a[][3] = {1, 2, 3, 4, 5, 6}; // 省略第一维的长度
#### **2.2 二维数组的访问**
- **通过下标(索引)访问**:
- 使用 `数组名[行下标][列下标]` 的方式访问二维数组中的元素。
- **示例**:
```cpp
int ages[2][3] = {1, 2, 3, 4, 5, 6};
printf("ages[0][2] = %d\n", ages[0][2]); // 输出 3
ages[1][1] = 10;
printf("ages[1][1] = %d\n", ages[1][1]); // 输出 10
2.3 二维数组的遍历
遍历:
二维数组可以分解为多个一维数组,每个一维数组都有固定数量的元素。
例如,二维数组
a[3][4]可以分解为三个一维数组a[0],a[1],a[2],每个一维数组都有 4 个元素。
示例:
cppnt a[3][4] = {{1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12}}; for (int i = 0; i < 3; i++) { for (int j = 0; j < 4; j++) { printf("a[%d][%d] = %d\n", i, j, a[i][j]); } } //输出: a[0][0] = 1 a[0][1] = 2 a[0][2] = 3 a[0][3] = 4 a[1][0] = 5 a[1][1] = 6 a[1][2] = 7 a[1][3] = 8 a[2][0] = 9 a[2][1] = 10 a[2][2] = 11 a[2][3] = 12
i
---
### **3. 二维数组的特殊情况**
- **省略行数**:
- 可以省略第一维的长度,但不能省略第二维的长度。
- 示例:
int a[][3] = {{1, 2, 3}, {4, 5, 6}}; // 正确
int a[2][] = {1, 2, 3, 4, 5, 6}; // 错误
- 解释:
- 如果省略了第一维的长度,编译器会根据初始化的数据自动计算出第一维的长度。
- 如果省略了第二维的长度,编译器无法确定每行有多少个元素,因此会导致错误。
---
### **4. 示例代码解析**
- **示例代码**:
```cpp
map[cur_row - 1][cur_col] = 'O';
map[cur_row][cur_col] = ' ';
cur_row--;- 这段代码的作用是将当前行的前一行的某个位置设置为 `'O'`,并将当前行的该位置设置为空格 `' '`,然后将当前行减 1。
- 类似的代码还有:
```cpp
case 's':
if (cur_row + 1 < 6) {
if (map[cur_row + 1][cur_col] == ' ') {
map[cur_row + 1][cur_col] = 'O';
map[cur_row][cur_col] = ' ';
cur_row++;
}
} else {
printf("成功出去\n");
success = 1;
return 0;
}
break;
case 'a':
if (cur_col - 1 >= 0) {
if (map[cur_row][cur_col - 1] == ' ') {
map[cur_row][cur_col - 1] = 'O';
map[cur_row][cur_col] = ' ';
cur_col--;
}
} else {
printf("成功出去\n");
success = 1;
return 0;
}
break;
- 这些代码用于在一个二维数组 `map` 中移动一个标记 `'O'`,并处理边界情况。
---
### **总结**
1. **一维数组**:
- 定义和初始化:`数据类型 数组名[数组长度]`。
- 遍历:使用 `for` 循环。
- 示例:输入 5 个数,求和及最值。
2. **二维数组**:
- 定义和初始化:`数据类型 数组名[行数][列数]`。
- 访问:`数组名[行下标][列下标]`。
- 遍历:使用嵌套的 `for` 循环。
- 特殊情况:可以省略第一维的长度,但不能省略第二维的长度。
3. **示例代码**:
- 解析了如何在二维数组中移动标记,并处理边界情况。