8  第7章:数组——一个名字管一大堆数据

🗄️

一个名字管一大堆数据

数组就像一排编好号的抽屉,一个名字就能管住几十个、几百个数据!

## 🗄️ 什么是数组? ```{=html}
🏫 生活比喻:教室座位
教室里有一排座位:
座位0、座位1、座位2……

老师说"请座位3的同学回答问题",
不用记住那个同学叫什么名字,
只要知道几号座位就行了!
💻 程序中的数组
程序里有一堆同类型数据:
score[0]score[1]score[2]……

不用取50个不同的变量名,
只要一个名字 score
加上编号(下标)就能找到任何一个!

8.1 📊 数组的内存样子

💾 内存中的 int score[5](5个整数)
下标
[0]
[1]
[2]
[3]
[4]
85
92
78
96
88
内存地址(相邻,每个差4字节)
⚠️ 重要:C语言数组下标从 0 开始,不是从1开始!score[5] 的下标是 0、1、2、3、4(共5个)。

8.2 📝 数组的定义和使用

// 定义一个有5个整数的数组
int score[5];

// 给每个元素赋值
score[0] = 85;
score[1] = 92;
score[2] = 78;
score[3] = 96;
score[4] = 88;

// 读取数组元素
printf("第1个同学的分数:%d\n", score[0]);  // 输出:85
printf("第4个同学的分数:%d\n", score[3]);  // 输出:96
定义格式
类型 数组名[长度];
int a[10];
float b[20];
char c[50];
访问元素
数组名[下标]
a[0] = 100;
x = a[3];
a[i] = a[i] + 1;
⚠️ 注意事项
下标从 0 开始
不能越界访问
(a[10] 不存在!)
数组不能整体赋值

8.3 🎮 互动:数组成绩计算器

🎮 输入5个成绩,计算总分和平均分

8.4 🔄 用循环遍历数组

遍历数组是数组最常见的用法,配合 for 循环简直完美!

int score[5] = {85, 92, 78, 96, 88};
int sum = 0;

// 遍历数组,计算总分
for(int i = 0; i < 5; i++){
    sum = sum + score[i];
}

printf("总分:%d\n", sum);        // 输出:439
printf("平均分:%.1f\n", sum/5.0); // 输出:87.8
💡 遍历数组的标准写法
for(int i = 0; i < 长度; i++){
// 处理 array[i]
}
为什么 i < 长度 而不是 i <= 长度?因为下标从0开始,最后一个元素下标是"长度-1"!

8.5 🎮 互动:数组元素查找器

🎮 查找数组中的最大值和最小值

8.6 📚 二维数组:数组的数组

二维数组就像一张表格,有”行”和”列”两个下标。

// 定义一个3行4列的二维数组(3个学生,4门课成绩)
int score[3][4];

// 给第0个学生(第0行)的4门课赋值
score[0][0] = 85;  // 学生0,课程0
score[0][1] = 92;  // 学生0,课程1
score[0][2] = 78;
score[0][3] = 96;
📊 二维数组 int table[3][4] 的内存布局
[0] [1] [2] [3]
[0] 85 92 78 96
[1] 76 88 95 83
[2] 90 87 91 79
行下标 [0~2] × 列下标 [0~3]

8.7 📝 知识小结

🗄️ 一维数组
int a[10];
下标:0 ~ 9
访问:a[0]、a[i]
遍历:for循环
📊 二维数组
int a[3][4];
行:0 ~ 2
列:0 ~ 3
访问:a[1][2]
⚠️ 常见错误
下标越界
(a[10]不存在)
下标从0开始
不能整体赋值
🔗 和字符串的关系
字符串 = 字符数组
char s[20];
(下一章详细讲!)

8.8 ✏️ 练一练

📝 第1题
int a[10]; 这个数组的下标范围是多少?
📝 第2题
以下哪个语句能正确给数组所有元素赋值为0?
📝 第3题
int s[5]={10,20,30,40,50}; 则 s[2] 的值是多少?

8.9 📝 本章总结

✅ 你已经学会了:
• 数组是一组相同类型的数据,用一个名字+下标来访问 🗄️
• 数组下标从 0 开始,这点非常重要!
• 一维数组:int a[10],用for循环遍历
• 二维数组:int a[3][4],像一张表格
• 数组不能整体赋值,不能越界访问
• 字符串其实就是字符数组,下一章详细讲!
💡 下一章预告:学会了数组,接下来学"字符串"——字符串就是字符数组,让程序会处理文字信息!

```