读入一张表并求和
今天学完,你就能做成这件事: 读入行数 n、列数 m,再读入一张 n 行 m 列的整数表,打印这张表所有数的和。
输入:
2 3
1 2 3
4 5 6
窗口里应出现 21。
昨天是一排。今天是一张表。下面按顺序做。
事情 1:先铺好一张够大的表
int n, m;
int a[100][100];
cin >> n >> m;
[100][100] 是最多 100 行、100 列。这次真正用几行几列,用 n、m 记。先写行,再写列。

Python 可以先 a = [] 再一行一行 append。C++ 的表不会自己长出新行,格子要事先铺好。
取格子:先行,再列
a[i][j] 是第 i 行、第 j 列。和 Python 嵌套 list 的写法一样。

蓝带是整行,橙带是整列,交叉那一格是 a[1][2]。不要把行列写反。
座位表第 0 行是 7 2 9 4,第 1 行是 3 8 1 6,第 2 行是 5 0 7 2。a[1][2] 是多少?
事情 2:倒进去,再全部加起来
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
cin >> a[i][j];
}
}
int s = 0;
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
s = s + a[i][j];
}
}
cout << s << endl;
外圈换行,内圈走完这一行。读入和求和是同一套走法。
编译、运行,按篇首那样输入,得到 21,主任务做成了。

n 行 m 列,走遍每一个格子:
for (int i = 0; i < ; i++) {
for (int j = 0; j < ; j++) {
事情 3:把你熟悉的 Python 整段翻过来
这段你写得出:
n, m = [int(x) for x in input().strip().split()]
a = []
for i in range(n):
row = [int(x) for x in input().strip().split()]
a.append(row)
s = 0
for i in range(n):
for j in range(m):
s = s + a[i][j]
print(s)
按四步翻,不要先看答案:
- 昨天的骨架:
main、分号、大括号 - 先声明盒子:
n、m、一张够大的表、s cin对照input;表不能append,两层循环倒进去- 求和的两层循环,想法不变
想完再看下一张。
同一道题,左边是一行一行 list,右边是事先铺好的盒子。

#include <iostream>
using namespace std;
int main() {
int n, m;
int a[100][100];
cin >> n >> m;
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
cin >> a[i][j];
}
}
int s = 0;
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
s = s + a[i][j];
}
}
cout << s << endl;
return 0;
}
对照:n, m = ... 变成两只盒子再 cin;append 变成 int a[100][100] 再两层 cin;range 变成 i < n、j < m。
a = [[0] * 4 for _ in range(3)] 对应的 C++ 声明是 int a[][];(先写行,再写列)。
把这段 Python 翻成 C++。哪一段在声明、数组、循环上都对?
n, m = [int(x) for x in input().strip().split()]
a = []
for i in range(n):
row = [int(x) for x in input().strip().split()]
a.append(row)
for i in range(n):
s = 0
for j in range(m):
s = s + a[i][j]
print(s)
五天做成了什么
- 写出并跑通第一个 C++ 程序
- 读两个数,算出结果,做出判断
- 让程序重复加、重复打印
- 装下一串数
- 装下一张表
进班以后老师写的数组,就是你今天这张表。不会的时候先问自己:我现在要做成哪一件事,再去写盒子和循环。