GESP C++ 二级 · 自学讲义 ④(共 4 讲)

程序骨架 · 图形输出 · 模拟 · 题型套路

把前三讲的零件拼成完整程序,再吃透二级编程题的四大题型套路。考前看这一讲收口。

本讲学完你能

一、完整程序骨架(先背下来)

#include <bits/stdc++.h>   // 万能头文件
using namespace std;

int main() {
    int n;
    cin >> n;             // 1. 读入
    // 2. 处理(循环 / 判断 / 计算)
    cout << n << "\n";    // 3. 输出
    return 0;
}
三步法任何题都是这三步:读入 → 处理 → 输出。先把骨架写好,再往“处理”里填循环和判断。
输入输出

二、一维与二维数组

int a[100];          // 一维:a[0]..a[99]
int g[20][20];       // 二维:g[行][列]

for (int i = 0; i < n; i++) cin >> a[i];      // 读一维
for (int i = 0; i < n; i++)                    // 读二维
    for (int j = 0; j < m; j++) cin >> g[i][j];
易错数组下标从 0 开始;开数组要比最大可能稍大一点,别越界。

三、图形输出(二重循环的拿手好戏)

关键:想清楚第 i 行要打印什么、打印几个,把“列数”用 i 表示出来。

例 1:直角三角形

* * * * * * * * * *
for (int i = 1; i <= 4; i++) {     // 第 i 行
    for (int j = 1; j <= i; j++)   // 第 i 行有 i 个星
        cout << "* ";
    cout << "\n";
}

规律:第 i 行星星个数 = i,所以内层 j <= i

例 2:带空格的居中三角形(金字塔)

int n = 4;
for (int i = 1; i <= n; i++) {
    for (int j = 1; j <= n - i; j++) cout << " ";  // 先打空格
    for (int j = 1; j <= 2*i - 1; j++) cout << "*"; // 再打星
    cout << "\n";
}
套路图形题先在草稿纸上数:第 i 行 = 几个空格 + 几个图案,把这两个数用 i 写成公式,再翻译成两段内层循环。

对齐:让数字占固定宽度

#include <iomanip>
cout << setw(3) << x;   // x 右对齐占 3 格(蛇形方阵会用)
// 或者用 printf("%3d", x);

四、模拟:照着题目说的一步步做

“模拟”题不需要巧思,题目怎么说,代码就怎么写,按规则一轮轮执行即可。

例题:冰雹猜想(同 P5727)
long long n; cin >> n;
while (n != 1) {
    if (n % 2 == 1) n = n * 3 + 1;   // 奇数
    else n = n / 2;                  // 偶数
    cout << n << " ";
}

中间值可能很大,用 long long 更稳。

五、二级编程题·四大题型套路

题型怎么认出套路 / 模板
数位处理对一个数的“每一位”做事;数字统计、各位和、回文while(x>0){ ...x%10...; x/=10; }(第 3 讲)
图形输出要打印三角形/方阵/图案二重循环;第 i 行 = 空格数 + 图案数(本讲三)
枚举“在范围里找/数满足条件的”for 遍历 + if 判断(第 3 讲)
模拟题目给一套规则,让你照做把规则翻译成循环,一步步执行(本讲四)
考场四步
  1. 读题:圈出输入是什么、要输出什么。
  2. 识别题型:对照上面四大类,确定用哪个套路。
  3. 先写循环范围(i 从几到几、几重循环),再填里面。
  4. 用样例验证:把样例输入手算一遍,对上了再交。

六、动手练(这 4 道就是冲刺 4 模拟卷)

每道都独立写一遍、跑过样例再看题解。写不出先回到对应那讲复习套路。

七、自测(先想,再点开看答案)

Q1. 打印第 i 行有 i 个星的三角形,内层循环条件怎么写?

看答案for(int j=1;j<=i;j++)

Q2. 二维数组 g[i][j] 里,i 和 j 分别代表什么?

看答案i 是行号,j 是列号。

Q3. 题目说“统计 1~n 里数字 5 出现多少次”,属于哪种题型?

看答案数位处理(对每个数 %10 / /10 拆位数 5)。

Q4. 让数字 x 右对齐占 3 格,用什么?

看答案cout<<setw(3)<<x;(需 #include <iomanip>)或 printf("%3d",x);

Q5. 完整程序的三步是什么?

看答案读入 → 处理 → 输出。

八、速记卡(考前 5 分钟看这个)

四讲看完,把这 4 道题独立写过,二级编程题就有底气了。加油!💪