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

菱形

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

相关推荐
ShineWinsu11 小时前
对于Linux:内核是如何组织管理IPC资源的解析
linux·服务器·c++·面试·笔试·线程·ipc
少司府12 小时前
C++进阶:红黑树
开发语言·数据结构·c++·b树·二叉树·红黑树
汉克老师12 小时前
GESP6级C++考试语法知识(五十五、动态规划----背包问题(八、混合背包)
c++·动态规划·dp·背包问题·gesp六级·混合背包问题
特种加菲猫12 小时前
哈希表的实现
开发语言·c++
玖釉-12 小时前
nvpro_core2 详解:NVIDIA Vulkan / OpenGL 图形样例背后的现代 C++ 基础库
c++·windows·图形渲染
不会C语言的男孩12 小时前
C++ Primer 第19章:特殊工具与技术
数据结构·c++
不会C语言的男孩12 小时前
C++ Primer 第18章:用于大型程序的工具
开发语言·c++
星恒随风12 小时前
C++ 类和对象入门(三):拷贝构造、赋值运算符重载和深浅拷贝
开发语言·c++·笔记·学习
Cx330❀12 小时前
【MySQL基础】库与表的全面操纵指南
linux·服务器·网络·数据库·c++·mysql
凡人叶枫12 小时前
Effective C++ 条款03:尽可能使用 const
linux·开发语言·c++·嵌入式开发