GESP2026年3月认证C++二级( 第三部分编程题(2)画画 )


这道题是在考察一个非常重要的能力:

二维坐标思维(i 行 j 列)

这是很多编程题(图形打印、棋盘、地图、迷宫)都会用到的基础。


一、故事:小画家画正方形

1、有一天,小画家 Bob 想画一个正方形框。


2、他准备了四种"画笔":

符号 用途
+ 四个角
- 上下边
| 左右边
* 内部填充

3、例如输入

复制代码
5

4、画出的图是:

复制代码
+---+
|***|
|***|
|***|
+---+

二、观察图形规律

我们先看看这个 5×5 图。

给它标上 行号 i列号 j

复制代码
(0,0) (0,1) (0,2) (0,3) (0,4)
(1,0) (1,1) (1,2) (1,3) (1,4)
(2,0) (2,1) (2,2) (2,3) (2,4)
(3,0) (3,1) (3,2) (3,3) (3,4)
(4,0) (4,1) (4,2) (4,3) (4,4)

三、四个角的位置

1、四个角是:

复制代码
(0,0)
(0,n-1)
(n-1,0)
(n-1,n-1)

2、例如 n=5:

复制代码
(0,0) (0,4)
(4,0) (4,4)

这些位置输出:

复制代码
+

四、上下边

1、第一行和最后一行:

复制代码
i == 0
i == n-1

2、但是 角已经画了

所以剩下的位置画:

复制代码
-

3、画完是:

复制代码
+---+

五、左右边

1、第一列和最后一列:

复制代码
j == 0
j == n-1

2、但不是角的位置。

画:

复制代码
|

3、画完是:

复制代码
+
|
|
|
+

六、内部区域

1、剩下的地方:

复制代码
*

2、画完是:

复制代码
|***|

七、完整逻辑

1、我们要检查每个位置:

复制代码
(i , j)

2、按顺序判断:


(1)第1种:角

复制代码
(i==0 || i==n-1)
AND
(j==0 || j==n-1)

输出:

复制代码
+

(2)第2种:上下边

复制代码
i==0 || i==n-1

输出:

复制代码
-

(3)第3种:左右边

复制代码
j==0 || j==n-1

输出:

复制代码
|

(4)第4种:内部

输出:

复制代码
*

八、程序结构

因为是 n 行 n 列

所以必须用:

复制代码
双重循环

for(i)
    for(j)

九、完整程序

复制代码
#include <iostream>
using namespace std;

int main()
{
    int n;
    cin>>n;

    for(int i=0;i<n;i++)
    {
        for(int j=0;j<n;j++)
        {
            if(j==0 || j==n-1)
            {
                if(i==0 || i==n-1)
                    cout<<'+';
                else
                    cout<<'|';
            }
            else
            {
                if(i==0 || i==n-1)
                    cout<<'-';
                else
                    cout<<'*';
            }
        }

        if(i!=n-1)
            cout<<endl;
    }

    return 0;
}

十、程序运行示例

1、输入:

复制代码
4

2、程序运行:

i j 输出
0 0 +
0 1 -
0 2 -
0 3 +

3、结果:

复制代码
+--+
|**|
|**|
+--+

十一、理解口诀

这道题记住四句话:

口诀1

四个角就填:

复制代码
+

口诀2

上下边就填:

复制代码
-

口诀3

左右边就填:

复制代码
|

口诀4

中间就填:

复制代码
*

十二、考试最常见错误

错误1

忘记写 双重循环

必须:

复制代码
for i
    for j

错误2

角和边顺序写错。

如果先判断:

复制代码
i==0

就会把角也当成边。


十三、这题真正考什么

这题是 GESP 二级很重要的图形题模型

坐标判断模型

复制代码
i 行
j 列

判断:

复制代码
边界
内部
角

十四、课后练习

练习1

打印空心矩形

复制代码
*****
*   *
*   *
*****

练习2

棋盘

复制代码
#.#.
.#.#
#.#.
.#.#

练习3

菱形

复制代码
   *
  ***
 *****
*******
 *****
  ***
   *

相关推荐
故以往之不谏2 小时前
快慢双指针算法--数组删除目标元素--LeetCode27
开发语言·数据结构·c++·算法·leetcode·学习方法·数组
御承扬2 小时前
鸿蒙NDK UI 之文本输入框监听
c++·harmonyos·ndk ui
minji...2 小时前
Linux 进程控制(四)自主Shell命令行解释器.
linux·运维·服务器·数据结构·c++
历程里程碑2 小时前
Linux 38 网络协议:从独立主机到全球互通
java·linux·运维·服务器·网络·c++·职场和发展
qq_404265832 小时前
C++中的代理模式实战
开发语言·c++·算法
xiaoye-duck2 小时前
C++多态入门(上):从概念本质、语法规则到虚函数重写,结合实战代码的全方位指南
开发语言·c++
liuyao_xianhui2 小时前
动态规划_最大子数组和_C++
java·开发语言·数据结构·c++·算法·链表·动态规划
liulilittle2 小时前
C++实现广播地址计算
开发语言·c++
追烽少年x2 小时前
VC++中使用GDI+自定义绘制信号灯
c++