一维数组
概念讲解
什么是数组?
数组是一组相同类型的数据的集合,可以通过下标访问。
声明与初始化
12345678910// 声明
int a[100];
// 初始化
int b[5] = {1, 2, 3, 4, 5};
int c[5] = {1, 2}; // 其余为 0
int d[5] = {0}; // 全部为 0
// 自动推断大小
int e[] = {1, 2, 3, 4, 5};访问元素
1234int a[5] = {10, 20, 30, 40, 50};
cout << a[0] << endl; // 10
cout << a[4] << endl; // 50
a[0] = 100; // 修改元素遍历数组
1234int a[5] = {10, 20, 30, 40, 50};
for (int i = 0; i < 5; i++) {
cout << a[i] << " ";
}常见应用
1. 计数
123456int cnt[100] = {0};
for (int i = 0; i < n; i++) {
int x;
cin >> x;
cnt[x]++;
}2. 标记
1234567bool visited[100] = {false};
for (int i = 0; i < n; i++) {
if (!visited[i]) {
visited[i] = true;
// 处理
}
}3. 桶排序
1234567891011int bucket[100] = {0};
for (int i = 0; i < n; i++) {
int x;
cin >> x;
bucket[x]++;
}
for (int i = 0; i < 100; i++) {
for (int j = 0; j < bucket[i]; j++) {
cout << i << " ";
}
}考点分析
初赛考查方式
- 选择题: 数组操作
- 程序阅读: 数组处理
- 填空题: 数组下标
常见题型
- 数组遍历
- 数组统计
- 桶排序
例题精讲
例题 1:求数组最大值
题目: 求数组中的最大值。
解答:
123456int maxVal = a[0];
for (int i = 1; i < n; i++) {
if (a[i] > maxVal) {
maxVal = a[i];
}
}例题 2:数组逆序
题目: 将数组逆序输出。
解答:
123for (int i = n - 1; i >= 0; i--) {
cout << a[i] << " ";
}练习题
- 求数组的平均值。
查看答案
123456int sum = 0;
for (int i = 0; i < n; i++) {
sum += a[i];
}
double avg = (double)sum / n;
cout << avg << endl;- 统计数组中正数的个数。
查看答案
1234567int count = 0;
for (int i = 0; i < n; i++) {
if (a[i] > 0) {
count++;
}
}
cout << count << endl;- 将数组中的偶数放在前面,奇数放在后面。
查看答案
12345678910int left = 0, right = n - 1;
while (left < right) {
while (left < right && a[left] % 2 == 0) left++;
while (left < right && a[right] % 2 == 1) right--;
if (left < right) {
swap(a[left], a[right]);
left++;
right--;
}
}易错点
⚠️ 注意:
- 数组下标从 0 开始
- 注意数组越界问题
- 数组要初始化
- 注意数组大小限制