8 第7章:数组——一个名字管一大堆数据
🗄️
一个名字管一大堆数据
数组就像一排编好号的抽屉,一个名字就能管住几十个、几百个数据!
🏫 生活比喻:教室座位
教室里有一排座位:
座位0、座位1、座位2……
老师说"请座位3的同学回答问题",
不用记住那个同学叫什么名字,
只要知道几号座位就行了!
座位0、座位1、座位2……
老师说"请座位3的同学回答问题",
不用记住那个同学叫什么名字,
只要知道几号座位就行了!
💻 程序中的数组
程序里有一堆同类型数据:
score[0]、score[1]、score[2]……
不用取50个不同的变量名,
只要一个名字 score,
加上编号(下标)就能找到任何一个!
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];
int a[10];
float b[20];
char c[50];
访问元素
数组名[下标]
a[0] = 100;
x = a[3];
a[i] = a[i] + 1;
a[0] = 100;
x = a[3];
a[i] = a[i] + 1;
⚠️ 注意事项
下标从 0 开始
不能越界访问
(a[10] 不存在!)
数组不能整体赋值
不能越界访问
(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循环
下标:0 ~ 9
访问:a[0]、a[i]
遍历:for循环
📊 二维数组
int a[3][4];
行:0 ~ 2
列:0 ~ 3
访问:a[1][2]
行:0 ~ 2
列:0 ~ 3
访问:a[1][2]
⚠️ 常见错误
下标越界
(a[10]不存在)
下标从0开始
不能整体赋值
(a[10]不存在)
下标从0开始
不能整体赋值
🔗 和字符串的关系
字符串 = 字符数组
char s[20];
(下一章详细讲!)
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],像一张表格
• 数组不能整体赋值,不能越界访问
• 字符串其实就是字符数组,下一章详细讲!
• 数组下标从 0 开始,这点非常重要!
• 一维数组:int a[10],用for循环遍历
• 二维数组:int a[3][4],像一张表格
• 数组不能整体赋值,不能越界访问
• 字符串其实就是字符数组,下一章详细讲!
💡 下一章预告:学会了数组,接下来学"字符串"——字符串就是字符数组,让程序会处理文字信息!
```