DAY4-预习
2026-07-14 20:45:51
发布于:广东
📦 C++ 数组 · 课前预习笔记
明天要学 “数组” ——就是让程序一次性存一堆数据,就像你有n个朋友,直接叫“朋友1号”……“朋友n号”。
一、先搞懂:为什么要有数组?
假如存5个同学的年龄:
int age1 = 15;
int age2 = 16;
int age3 = 14;
int age4 = 15;
int age5 = 17;
如果存100个人呢?起100个变量名?手会断! 😭
用数组就爽了:
int age[5] = {15, 16, 14, 15, 17};
// 一个变量 age 搞定5个数!
💡 数组就是一组相同类型的变量,用同一个名字,用编号来区分它们。
二、C++数组的下标到底从几开始?
C++规定:数组下标从 0 开始。
比如 int a[5]; 有5个元素,下标是 0, 1, 2, 3, 4,没有 a[5]!
⚠️ 但很多初学者觉得从1开始更自然(第1个、第2个……)。
我们的课堂统一这样做:定义数组时多留一个位置,下标从 1 开始使用。
比如要存n个数,我们直接定义一个足够大的固定数组,比如int a[1005];,然后只用a[1]~a[n],a[0]直接不用。
三、数组怎么定义
标准写法
int a[1005]; // 直接写一个足够大的固定数字,不用 const,也不变长
💡 为什么这么写?因为很多比赛和题目会给出数据范围(比如 n ≤ 1000),我们直接开一个比范围大一点点的数组,保证够用就行。
例子
int score[1005]; // 存最多1000个分数,用 score[1]~score[1000]
double height[1005]; // 存最多1000个身高
char grade[1005]; // 存最多1000个等级
四、数组的初始化和赋值
1. 定义时全部初始化为0(推荐)
int a[1005] = {0}; // 所有元素都是0,包括a[0]~a[1004]
2. 用循环输入(最常用!)
int n;
cin >> n; // 先读入实际个数
int a[1005] = {0}; // 开好数组并清零
for (int i = 1; i <= n; i++) {
cin >> a[i]; // 用户输入n个数,存到a[1]~a[n]
}
3. 用循环赋值
int n = 5;
int a[1005] = {0};
for (int i = 1; i <= n; i++) {
a[i] = i * 10; // a[1]=10, a[2]=20, a[3]=30, a[4]=40, a[5]=50
}
五、遍历数组
遍历 = 把每个元素都访问一遍。
用 for 循环输出
int n = 5;
int a[1005] = {0, 10, 20, 30, 40, 50}; // a[1]~a[5]有值
for (int i = 1; i <= n; i++) {
cout << a[i] << " "; // 输出:10 20 30 40 50
}
用 for 循环输入n个数
int n;
cin >> n;
int a[1005] = {0};
for (int i = 1; i <= n; i++) {
cin >> a[i]; // 输入n个数,存到a[1]~a[n]
}
⚠️ 记住:循环从
1开始,条件i <= n,不要写成i < n或从0开始。
六、常见数组操作
1. 求和
int n;
cin >> n;
int a[1005] = {0};
for (int i = 1; i <= n; i++) cin >> a[i];
int sum = 0;
for (int i = 1; i <= n; i++) {
sum += a[i];
}
cout << "总和 = " << sum;
2. 求平均数
int sum = 0;
for (int i = 1; i <= n; i++) sum += a[i];
double avg = 1.0 * sum / n; // 用1.0转小数
cout << "平均 = " << avg;
3. 找最大值
int max = a[1]; // 先假设第一个是最大
for (int i = 2; i <= n; i++) {
if (a[i] > max) {
max = a[i];
}
}
cout << "最大值 = " << max;
4. 找最大值和它的位置(下标)
int max = a[1];
int pos = 1; // 记录最大值的位置
for (int i = 2; i <= n; i++) {
if (a[i] > max) {
max = a[i];
pos = i;
}
}
cout << "最大值是 a[" << pos << "] = " << max;
5. 找最小值
int min = a[1];
for (int i = 2; i <= n; i++) {
if (a[i] < min) {
min = a[i];
}
}
cout << "最小值 = " << min;
6. 统计满足条件的个数
// 统计有多少个数大于30
int cnt = 0;
for (int i = 1; i <= n; i++) {
if (a[i] > 30) {
cnt++;
}
}
cout << "大于30的有 " << cnt << " 个";
7. 反向输出
for (int i = n; i >= 1; i--) {
cout << a[i] << " ";
}
// 输入:10 20 30 40 50
// 输出:50 40 30 20 10
七、完整代码模板
#include <iostream>
using namespace std;
int main() {
// 1. 读入n
int n;
cin >> n;
// 2. 定义数组(固定大小,比n大就行)
int a[1005] = {0}; // 全部初始化为0
// 3. 读入n个数据到 a[1] ~ a[n]
for (int i = 1; i <= n; i++) {
cin >> a[i];
}
// 4. 处理数据(求和)
int sum = 0;
for (int i = 1; i <= n; i++) {
sum += a[i];
}
cout << "总和 = " << sum << endl;
// 5. 输出所有数据
for (int i = 1; i <= n; i++) {
cout << a[i] << " ";
}
return 0;
}
八、数组注意事项(⚠️ 全是重点!)
1. 数组开多大?
我们直接写一个固定大小,比如 int a[1005];。
前提:要保证题目给的 n 不超过 1000(或者小于1005),这样用 a[1]~a[n] 就不会越界。
实际比赛一般会给数据范围,我们根据范围开大一点就行。
2. 下标范围:0 ~ 长度-1
但我们不用0,所以实际可用下标是 1 ~ 长度-1。
例如 int a[1005]; 有效下标是 0~1004,我们只用 1~1004。
如果 n=1000,用 a[1000] 没问题;如果 n=1004,用 a[1004] 也没问题;但 a[1005] 就越界了。
3. 千万不要越界!
int a[1005]; // 有效下标 0~1004
a[1] = 10; // ✅
a[n] = 50; // ✅ 只要 n <= 1004
a[1005] = 60; // ❌ 越界!程序可能崩溃
4. 只能存同类型数据
int a[1005];
a[1] = 10; // ✅
a[2] = 3.14; // ⚠️ 能编译但会变成3(小数被切掉)
5. 局部数组记得初始化
int main() {
int a[1005] = {0}; // 写在 main 里面,要手动初始化成0
// 如果不初始化,里面的值是随机的(垃圾值)
}
6. 如果数组定义在 main 外面(全局),默认就是0
int a[1005]; // 写在所有函数外面,自动初始化为0
int main() {
// 这里可以直接用 a[1]~a[1004],不需要再初始化
}
但为了保险,我们统一在 main 里面写
int a[1005] = {0};
九、常见错误对照表
| ❌ 错误写法 | ✅ 正确写法 | 原因 |
|---|---|---|
a[n] 但数组长度是1005,n=1005 |
保证 n <= 1004 | 下标最大是1004 |
| 没初始化直接用 | int a[1005] = {0}; |
避免随机值 |
📝 快速记忆卡
| 概念 | 一句话总结 |
|---|---|
| 下标从几开始 | 我们约定从1开始,0号不用 |
| 遍历循环 | for (int i = 1; i <= n; i++) |
| 最大安全下标 | 数组长度 - 1,比如1004 |
| 初始化 | int a[1005] = {0}; 全部清零 |
🔥 预习小任务
- 如果题目说 n ≤ 1000,你应该定义数组为
int a[____];? - 如果定义
int a[1005];,n=1000,能用a[1000]吗?能用a[1005]吗? - 下面的代码哪里错了?
(提示:数组没初始化,但只给输入的部分赋值,其他不影响,这个其实没错,但为了安全建议初始化。真正要注意的是n不能超过1004)int n; cin >> n; int a[1005]; for (int i = 1; i <= n; i++) cin >> a[i];
明天上课带着问题来,效果翻倍!🚀
全部评论 1
天黑了



昨天 来自 广东
5















有帮助,赞一个