Skip to content

14. 数组实战:与 for 循环的完美配合

前置学习:一维数组

单独使用数组其实很笨拙,数组真正的灵魂伴侣是 for 循环。 因为数组的下标是连续的数字(0, 1, 2, 3...),而 for 循环最擅长生成连续的数字。它们结合在一起,就能发挥出极其强大的“批量处理”能力。

1. 批量输入与输出

这是每一道信奥赛数组题的标准起手式。 题目要求: 先输入一个整数 $n$,代表接下来有 $n$ 个数字。请将这 $n$ 个数字存入数组,然后再原样打印出来。

cpp
#include <bits/stdc++.h>
using namespace std;

int main() {
    // 💡 竞赛习惯:稍微开大一点点容量,防止越界。题目说最多 100 个,我们就开 105 个
    int a[105] = {0}; 
    int n;
    
    cin >> n; // 读取到底有几个数字
    
    // 1. 批量输入:让 i 从 0 变到 n-1,刚好对应数组的 n 个下标
    for (int i = 0; i < n; i++) {
        cin >> a[i]; 
    }
    
    // 2. 批量输出
    for (int i = 0; i < n; i++) {
        cout << a[i] << " ";
    }
    
    return 0;
}

2. 经典算法:打擂台找最大值

场景: 数组里存了 5 个人的身高,怎么找出最高的那个人? 核心思想: 假设第一个人就是最高的,让他站在擂台上。然后让后面的人挨个上台挑战,谁比擂主高,谁就一脚把擂主踢下去,自己当新擂主。全部比完后,留在擂台上的就是最高的人!

cpp
int h[5] = {165, 180, 172, 190, 158};

// 1. 假设第 0 个人是目前的最高(擂主)
int max_h = h[0]; 

// 2. 从第 1 个人开始,挨个上台挑战
for (int i = 1; i < 5; i++) {
    // 如果挑战者的身高 > 目前擂主的身高
    if (h[i] > max_h) {
        max_h = h[i]; // 挑战成功!更新擂主记录
    }
}

cout << "最高的身高是:" << max_h << endl;

举一反三:如果你想找最小值,只需要把打擂台的条件改成 if (h[i] < min_h) 即可。

3. 动手实践

md
1. 打开左下角的代码沙盒。
2. 试着编写一个“班级平均分计算器”:
   - 首先利用 `cin` 读入 5 个学生的成绩,存入数组。
   - 利用 `for` 循环遍历这个数组,把所有成绩累加到一个叫做 `sum` 的变量中。
   - 最后输出 `sum / 5.0`(注意除以 5.0 是为了保留小数)。
3. 在左下角抽屉的“标准输入”框中粘贴测试数据:`80 90 85 95 88`,运行看看结果对不对。
💻 运行代码

C++ 在线评测沙盒

📥 标准输入 (cin):
📤 终端输出 (cout):