为 GESP202603 一级伸冤
本文仅代表个人观点。本文仅讨论 C++ 语言,Python 语言及图形化编程不在此文讨论范围内。
GESP 2026 年 3 月第 13 次认证刚刚结束,我是五级考生之一。刚刚在微信公众号和小红书等一些平台上看到了对本次考试一级编程题的批评,故作此文。
一级知识点
首先来了解一下一级的知识点(以下引用块内容来自《CCF 编程能力等级认证 C++&Python 认证标准》C++ 编程一级标准部分“知识点详述”部分:
(1)了解计算机的基本构成(CPU,内存,I/O 设备等),了解 Windows、Linux 等操作系统基本概念和常见操作,了解计算机的历史及在现代社会中的常见应用。
(2)熟悉集成开发环境使用(例如 DevC++):创建文件、编辑文件、保存文件、编译、解释、调试。
(3)掌握基础的 cin 语句、scanf 语句、cout 语句、printf 语句,赋值语句等。
(4)掌握标识符、关键字、常量、变量、表达式的概念。
(5)掌握常量与变量的命名、定义、作用、初始化与赋值以及变量的自加与自减运算。
(6)掌握基础算术表达式:加、减、乘、除、整除、求余。
(7)掌握逻辑运算与(&&)、或(||)、非(!)。
(8)掌握关系运算:大于、大于等于、小于、小于等于、等于、不等于。
(9)掌握基础的数据类型的定义和使用(整型、实数型、字符型、布尔型)。
(10)掌握顺序结构程序的编写。
(11)掌握分支结构程序的编写,掌握 if 语句、if-else 语句、switch 语句,了解三
目运算。
(12)掌握循环结构程序的编写,掌握 for、while、do-while 循环语句的使用以及 continue 语句和 break 语句在循环中的应用。
(13)理解程序的注释和调试的概念。
好了,接下来我们来看两道编程题。
编程题 T1 交朋友
题目大意是在 三个数中找出与 最接近的数。思路是比较绝对值。于是就有人抨击说一级没有学到绝对值函数。但是绝对值函数是完全可以用分支结构替代的:
#include <cmath>
using namespace std;
int d;
// 第一种写法
d = abs(d);
// 等价于 第二种写法
if (d < 0) d = -d;GESP 的参考答案给的也是第二种写法,并且甚至是写了三遍几乎一样的代码。要知道逻辑运算符和分支结构是明确写在一级大纲里的。甚至循环结构也在。也就是,即便是用 for 循环循环三遍输入和比较来写这道题,也是不超纲的。
关于绝对值和负数这两个数学知识点在不在一级范围内,标准中是没有提到的。但是,无论是在《义务教育数学课程标准(2011 年版)》还是《义务教育数学课程标准(2022 年版)》中,都要求在小学高年级了解负数[1]。因此仅对于小学中低(1~4 年级)年级的学生来说,负数属于超纲内容。
编程题 T2 数字替换
题目大意是将数中的 4 全部替换成 8,例如 124 替换为 128,123 中没有 4 所以不替换。参考答案采用的是数位分离的方式,我承认这种方法对于一级考生的年龄段来说可能比较难想,但是其中涉及到的知识点确实不超纲。
虽然数位分离可以看作一种十进制转十进制的算法,但是,其并不应该归作真正的进制转换。进制转换是三级内容,而考纲中并没有明确提到数位分离。请注意:while 循环、赋值运算符、算术运算符均属于一级内容。复合赋值运算符是赋值运算符的一种,也属于变量的赋值。
总结
综上,我认为,GESP 一级编程题包括题目和参考答案在内,都没有超纲,只是一些学生可能学艺不精(请勿对号入座),暂未达到所需的思维能力和学习水平,才导致一些学生认为题目较难。
注释及说明
[1]:《义务教育数学课程标准(2011 年版)》要求在第二学段(4~6 年级)“了解负数的意义”;《义务教育数学课程标准(2022 年版)》要求在第三学段(5~6 年级)“在主题活动和项目学习中了解负数”。本文在本注释出现之后关于数学概念的学龄判定均依据《义务教育数学课程标准(2022 年版)》。