每周一套 GESP | C++ 一级真题精讲

四季读书网 2 0
每周一套 GESP | C++ 一级真题精讲

每周一套 GESP | C++ 一级真题精讲

跟着真题学编程,稳步拿下考级 | 2024年6月一级真题

周更连载 · 系统攻克少儿C++考级

☀️ 引言:端午飘香,暑期将至

小朋友们,2024年的端午节刚过不久,粽子飘香的季节总是让人心情愉悦。6月,是暑假前的最后冲刺月——期末考试在即,大家都在加紧复习。CCF GESP 编程能力认证也在6月份组织了一场考试,很多同学选择在暑假到来之前挑战一下自己!

这套真题特别经典:单选题涵盖了变量命名、运算优先级、printf格式化、循环结构等C++基础核心知识;编程题更是有趣——第一题帮小杨计算学习时间后的休息时刻(时间转换!),第二题判断一个数是不是"立方数"(像8=2×2×2,27=3×3×3)。这些题目既有深度又接地气,非常考验基本功。

让我们通过这套2024年6月的GESP C++一级真题,在暑假来临之际给自己的编程能力做一次全面体检吧!

💡 本期亮点:单选题聚焦C++核心语法——变量命名中的"非法字符"陷阱、整数除法的优先级组合拳、printf中双百分号的转义秘密、cin读取的"半途而废"特性、i++先后顺序的微妙差异、质数判断的代码分析、完全平方数的循环枚举等高频考点;判断题涉及变量类型与运算结果的关系、printf格式控制符的"假动作"、break与continue的正确搭档、注释符号//的意外效果、逻辑取反!!的布尔陷阱等易错点;编程题用时间单位换算循环枚举判断立方数巩固基础运算与循环+分支结构。一起来挑战吧!

📝 单选题精讲(每题2分,共30分)

1

在C++中,下列不可做变量的是()。

A. five-Star

B. five_star

C. fiveStar

D. _fiveStar

答案:A

解析:考察C++变量名的命名规则。变量名只能由字母、数字、下划线组成,不能以数字开头,不能和关键字重名。 • A:five-Star 包含了减号 -,这是非法字符!减号在C++中是运算符,编译器会把它当成"five 减 Star" ❌ ✓ • B:five_star 全由字母和下划线组成 ✓ • C:fiveStar 驼峰命名法,完全合法 ✓ • D:_fiveStar 下划线开头,合法 ✓🌰 小比喻:变量名就像人的身份证名字——只能用汉字、字母或数字,不能带特殊符号。你总不能叫"小明*"吧?减号 - 就像名字里带了个"×"号,系统可不认!

2

C++表达式 3 - 3 * 3 / 5 的值是()。

A. -1.2

B. 1

C. 0

D. 2

答案:D

解析:考察运算优先级——先乘除,后加减,从左到右! • 第一步:3 * 3 = 9(乘法优先) • 第二步:9 / 5 = 1(整数除法,只取商,不是1.8!) • 第三步:3 - 1 = 2 ✓⚠️ 易错提醒:很多同学会选A(-1.2),那是把除法当成了浮点除法(9÷5=1.8,3-1.8=1.2)。但在C++中,两个整数相除结果是整数(9/5=1,小数部分直接丢弃)。🌰 小比喻:就像数学课上的"先乘除后加减"规则——先做完乘法和除法的作业,再做减法。9块饼干分给5个人,每人只能分到1整块(整数除法),剩下的4块先不管。

3

在C++中,假设N为正整数,则表达式 cout << (N % 3 + N % 7) 可能输出的最大值是()。

A. 6

B. 8

C. 9

D. 10

答案:B

解析:考察取模运算(%)的结果范围 • N % 3 的结果范围是 0、1、2(最大为2) • N % 7 的结果范围是 0、1、2、3、4、5、6(最大为6) • 两个最大值相加:2 + 6 = 8 ✓能不能同时取到最大值呢?当N=2时:2%3=22%7=2,和为4(不够大)。当N=20时:20%3=220%7=6,和为8!达到最大值。🌰 小比喻:想象两个闹钟,一个每3小时响一次(余数最大2),一个每7小时响一次(余数最大6)。当两个闹钟的"距下次响铃时间"都达到最大时,加起来就是2+6=8。

4

C++语句 printf("5%%2={%d}\n", 5 % 2) 执行后的输出是()。

A. 1={1}

B. 5%2={5%2}

C. 5%2={1}

D. 5 ={1}

答案:C

解析:考察printf中双百分号 %% 的转义规则 • %% 在printf中是特殊写法,表示输出一个 % 字符本身 • %d 是格式说明符,会被后面的参数 5 % 2 = 1 替换 • 其他字符(5={})原样输出 • 最终输出:5%2={1} ✓💡 记忆技巧:printf中,单独一个 % 是格式说明符的开头(后面跟d/f/c等),想要输出 % 本身,必须写两个 %%——就像用"加倍"来"抵消"特殊含义。

5

对整型变量i,执行C++语句 cin >> i; cout << i; 时如果输入 5+2,下述说法正确的是()。

A. 将输出整数7

B. 将输出5

C. 语句执行将报错,输入表达式不能作为输出的参数

D. 语句能执行,但输出内容不确定

答案:B

解析:考察 cin 读取整型数据时的"读到哪停"规则。 • cin >> i 要求读入一个整数 • 输入 5+2 时,cin从第一个字符开始读:  → 读到 5:是数字,收进去  → 读到 +:不是数字,停下来 • 所以 i = 5,输出 5 ✓ • +2 留在了输入缓冲区,没有被处理程序不会报错,cin很"宽容",能读多少读多少。🌰 小比喻:cin就像一个只吃数字的机器人,你喂它 5+2,它吃了5之后碰到 + 号就停了——"这不是我能吃的!"剩下的 +2 还在桌上,它不管了。

6

下面C++代码执行后的输出是()。

float a;a = 101.101;a = 101;printf("a+1={%.0f}", a + 1);

A. 102={102}

B. a+1={a+1}

C. a+1={102}

D. a先被赋值为浮点数,后被赋值为整数,执行将报错

答案:C

解析:这道题有三个考点: • 浮点变量多次赋值:a先被赋值为101.101,又被赋值为101。最终a的值是最后一次赋值的结果:101(虽然是float类型,但值就是101.0) • printf的 %.0f:表示输出浮点数,保留0位小数a+1 = 101+1 = 102,保留0位小数就是 102 • 其他字符原样输出a+1={ 和 } 都是普通字符 • 最终输出:a+1={102} ✓浮点变量可以接收整数值,不会报错!101被存为101.0,完全合法。🌰 小比喻:就像一个大杯子(float类型),你先往里面倒了101.101升水,后来又倒掉换成101升。杯子还是那个杯子,但里面的水量变成了101升。

7

表达式 9/4 - 6 % (6 - 2) * 10 的值是()。

A. -17.75

B. -18

C. -14

D. -12.75

答案:B

解析:这道题考验运算优先级的"综合功力"!按优先级逐步计算:① 先算括号6 - 2 = 4表达式变为:9/4 - 6 % 4 * 10② 再算乘除取模(从左到右): • 9 / 4 = 2(整数除法) • 6 % 4 = 2(取余) • 2 * 10 = 20③ 最后算减法2 - 20 = -18 ✓⚠️ 选项A和D是小数结果,说明有人把 9/4 当成了2.25——但这是整数除法!💡 口诀:括号优先排第一,乘除取模排第二,加减最后来收尾。

8

下面C++代码执行时输入10后,正确的输出是()。

int N;cin >> N;if (N % 3)printf("第5行代码%2d", N % 3);elseprintf("第6行代码%2d", N % 3);

A. 第5行代码1(1前无空格)

B. 第6行代码1

C. 第5行代码 1(1前有空格)

D. 第6行代码 1

答案:C

解析:这道题有两个考点:if条件判断 + printf格式控制① if条件:输入N=10,N % 3 = 10 % 3 = 1 • 在C++中,非零值 = true(真),所以 if(1) 条件成立 • 执行第5行的printf ✓② printf格式printf("第5行代码%2d", 1) • %2d 表示输出整数,占2位宽度 • 数字1只占1位,所以前面会补一个空格 • 输出:第5行代码 1(1前面有一个空格)✓💡 两个陷阱:① if(N%3) 不是判断"等于几",而是判断"是否为非零";② %2d 会自动补空格对齐,别选成A!

9

下面C++代码执行后输出是()。

int Sum = 0, i = 0;for (; i < 10; )    Sum += i++;cout << i << " " << Sum;

A. 9 45

B. 10 55

C. 10 45

D. 11 55

答案:C

解析:这道题的难点在于 i++后自增)的位置!代码分析: • for循环:初始化在外面(i=0),条件 i < 10,更新也在外面(空) • 循环体:Sum += i++ • i++ 是后自增:先用i的值加到Sum,然后i再+1逐轮追踪: • i=0: Sum+=0(→0), i→1 • i=1: Sum+=1(→1), i→2 • i=2: Sum+=2(→3), i→3 • ... 直到 i=9: Sum+=9(→45), i→10 • i=10: 不满足 i<10,退出最终:i = 10,Sum = 0+1+2+...+9 = 45 ✓🌰 小比喻:i++(后自增)就像"先用后涨"——先把当前的数字放进存钱罐,然后数字本身再涨1。所以0到9都放进去了,Sum=45,但最后i涨到了10。

10

下面C++代码用于判断N是否为质数(只能被1和它本身整除的正整数)。程序执行后,下面有关描述正确的是()。

int N;cin >> N;bool Flag = false;if (N >= 2){    Flag = true;for (int i = 2; i < N; i++)if (N % i == 0){            Flag = false;break;        }}if(Flag)    cout << "是质数";else    cout << "不是质数";

A. 如果输入负整数,可能输出"是质数"

B. 如果输入2,将输出"不是质数",因为此时循环不起作用

C. 如果输入2,将输出"是质数",即便此时循环体没有被执行

D. 如果将if(N>=2)改为if(N>2)将能正确判断N是否质数

答案:C

解析:逐项分析代码逻辑:• 输入负数N >= 2 不成立,Flag保持false → 输出"不是质数"。A说可能输出"是质数" ❌• 输入2N >= 2 成立 → Flag=true → 循环 for(i=2; i<2; ...),条件 2 < 2 不成立,循环不执行 → Flag仍为true → 输出"是质数" ✓• D选项:改为 N > 2 后,输入2时不满足条件,Flag=false → 输出"不是质数",但2确实是质数!反而引入了bug ❌💡 核心逻辑:2是最小的质数,代码先假设"≥2就是质数"(Flag=true),然后循环检查有没有其他因数。2的循环从i=2到i<2,根本不执行,所以Flag保持true——恰好正确!

11

下面的C++代码用于求1~N之间所有奇数之和(如果N为奇数则包括N)。有关描述错误的是()。

int N;cin >> N;int i = 1, Sum = 0;while (i <= N){if (i % 2 == 1)        Sum += i;    i += 1;}cout << i << " " << Sum;

A. 输入10,最后一行输出 11 25

B. 输入5,最后一行输出 6 9

C. 将i+=1移到if(i%2==1)前一行,同样能实现题目要求

D. 删除if(i%2==1),并将i+=1改为i+=2,同样可以实现题目要求

答案:C

解析:注意题目问的是"描述错误的"!逐项验证: • A:N=10,奇数为1,3,5,7,9,Sum=25,循环结束后i=11 → 输出"11 25" ✓ 正确 • B:N=5,奇数为1,3,5,Sum=9,循环结束后i=6 → 输出"6 9" ✓ 正确 • C:将 i+=1 移到if前面:  → i=1: 先i+=1变成2,再判断 2%2==1 → 不成立,不加!  → 这样会漏掉1(起点),而且偶数反而可能被判断 ❌ 描述错误 ✓ • D:从i=1开始,每次加2(1,3,5,7...),全是奇数,不需要if判断 ✓ 正确🌰 小比喻:C选项的问题就像"先过了门禁再检查身份证"——你先让i增加了,再判断奇偶,顺序反了,结果就乱了。正确顺序应该是"先检查再前进"。

12

如果一个整数N能够表示为X*X的形式,那么它就是一个完全平方数。下面C++代码用于判断N是否为完全平方数,在横线处应填入的代码是()。

int N;cin >> N;for(int i = 1; i <= N; i++)if (______){        cout << "是完全平方数";break;    }

A. i == N*N

B. i*10 == N

C. i+i == N

D. i*i == N

答案:D

解析:完全平方数的定义:N = X * X,即某个整数的平方等于N。代码逻辑:遍历i从1到N,检查是否存在某个i使得 i * i == N • A:i == N*N —— 这判断的是i是否等于N的平方,方向反了 ❌ • B:i*10 == N —— 判断N是否是10的倍数 ❌ • C:i+i == N —— 判断N是否是偶数 ❌ • D:i*i == N —— 完美匹配完全平方数的定义 ✓💡 小贴士:这道题的编程思路——"遍历+逐个检查",和编程题2(立方数判断)如出一辙!掌握了这个模式,举一反三。

13

执行下面C++代码后输出的cnt的值是()。

int cnt = 0;for(int i = 0; i * i < 64; i += 2)    cnt++;

A. 8

B. 7

C. 4

D. 1

答案:C

解析:注意循环条件是 i * i < 64,不是 i < 64逐轮追踪: • i=0: 0*0=0 < 64 ✓ → cnt=1,i+=2→i=2 • i=2: 2*2=4 < 64 ✓ → cnt=2,i+=2→i=4 • i=4: 4*4=16 < 64 ✓ → cnt=3,i+=2→i=6 • i=6: 6*6=36 < 64 ✓ → cnt=4,i+=2→i=8 • i=8: 8*8=64 < 64✗ 不成立,退出循环执行了 4 次,cnt = 4 ✓🌰 小比喻:循环条件就像"你的影子的平方要小于64才能进门"。i=0,2,4,6时影子够小(0,4,16,36都小于64),但i=8时影子太大(64不小于64),就被拦住了。

14

小杨父母带他到某培训机构给他报名参加CCF组织的GESP认证考试的第1级,那他可以选择的认证语言有几种?()

A. 1

B. 2

C. 3

D. 4

答案:C

解析:GESP(Grade Examination of Software Programming)是CCF中国计算机学会组织的编程能力等级认证。一级可选择的认证语言有3种 • Scratch:图形化编程,适合最入门的小朋友 • Python:代码简洁,人工智能领域的主流语言 • C++:性能强大,信息学竞赛的标配语言🌰 小比喻:GESP一级就像"编程三选一"考试——Scratch是画笔画画,Python是写英语作文,C++是造精密机器。三种方式都能编程,但难度和风格各不同。

15

ENIAC于1946年投入运行,是世界上第一台真正意义上的计算机,它的主要部件都是()组成的。

A. 感应线圈

B. 电子管

C. 晶体管

D. 集成电路

答案:B

解析:这是一道计算机发展史的常识题!计算机主要部件的发展历程: • 第一代(1946~1958):电子管 ← ENIAC就是这个时代 • 第二代(1958~1964):晶体管 • 第三代(1964~1971):集成电路 • 第四代(1971~至今):大规模/超大规模集成电路ENIAC诞生于1946年,是第一代计算机的代表,使用电子管作为主要部件。它体积庞大,占地170平方米,重达30吨,耗电量惊人!🌰 小比喻:电子管就像"灯泡"一样——用真空玻璃管中的电流来表示0和1。ENIAC用了大约18000个电子管!想象一下,一个房间里放满了18000个灯泡,那就是世界上第一台电脑。

✅ 判断题精讲(每题2分,共20分)

1
在C++代码中变量X被赋值为16.44,则 cout << X / 10 执行后输出的一定是1。( )

✗ 正确答案:错(×)

解析:题目只说"变量X被赋值为16.44",但没有指定X的数据类型 • 如果X是 int 类型:16.44会被截断为16,16/10 = 1(整数除法)→ 输出1 • 如果X是 float/double 类型:X=16.44,16.44/10 = 1.644 → 输出1.644由于类型不确定,输出不一定是1。🌰 小比喻:就像"把16.44个苹果分给10个人"——如果你只算整数(每人1个),答案是1;但如果允许切分,每人得1.644个。答案取决于你用什么"方式"来分。

2
N是C++中的整型变量且N=10,则表达式N/4、N%4、N/4.0三者的值相同。( )

✗ 正确答案:错(×)

解析:三个表达式的计算结果各不相同! • N / 4:整数除法,10 / 4 = 2(取商) • N % 4:取余运算,10 % 4 = 2(取余数) • N / 4.0:浮点除法,10 / 4.0 = 2.5(注意4.0是浮点数!)虽然N/4和N%4碰巧结果相同(都是2),但N/4.0的结果是2.5,三者并不相同。💡 关键区分:4 和 4.0 看似相同,但在C++中一个是整数,一个是浮点数。除以浮点数时,C++会自动进行浮点运算,结果保留小数!

3
定义C++的float型变量N,则语句 cin >> N; cout << int(float(N)); 可以输入正负整数和浮点数,并将其转换为整数后输出。( )

✓ 正确答案:对(√)

解析:逐步分析这行代码: • cin >> N:N是float类型,可以接收正整数(如5)、负整数(如-3)和浮点数(如3.14) • float(N):N本身已经是float,这里再转一次还是float • int(...):强制类型转换,把浮点数截断为整数  → 输入5.7 → 输出5;输入-3.9 → 输出-3整个过程确实能接收各种数值并转为整数输出。💡 类型转换链:float → float → int,关键的截断发生在最后一步。int() 是"直接砍掉小数部分"(向零取整),不是四舍五入!

4
C++的整型N被赋值为5,语句 printf("%d*2", N) 执行后将输出10。( )

✗ 正确答案:错(×)

解析:printf中,双引号内的内容分为两类: • %d:格式说明符,会被N的值(5)替换 • *2:普通字符,原样输出,不参与任何运算!所以实际输出是:5*2(而不是10)printf的格式化字符串中,只有 %d%f 这样的格式说明符才会被替换,其他字符都是"打印什么就显示什么"。🌰 小比喻:printf就像一个"填字游戏"——%d是需要填的空,*2是已经印好的字。它只会把空填上(5),不会帮你把 5*2 算出来!

5
在C++中,break语句用于终止当前层次的循环,循环可以是for循环,也可以是while循环。( )

✓ 正确答案:对(√)

解析:break语句的功能就是提前终止当前层的循环,无论是哪种循环结构: • for 循环中用break:提前跳出 ✓ • while 循环中用break:提前跳出 ✓ • do-while 循环中用break:也能提前跳出 ✓ • switch 语句中用break:防止穿透到下一个case ✓💡 注意:break只能终止最内层的那层循环。如果有嵌套循环,外层循环不受影响。

6
在C++中,continue语句通常与if语句配合使用。( )

✓ 正确答案:对(√)

解析:continue的作用是跳过本次循环的剩余部分,直接进入下一次循环。它通常和if搭配使用,用来"有条件地跳过":for(int i=0; i<10; i++) {  if(i % 2 == 0) continue; // 偶数就跳过  cout << i; // 只输出奇数}如果没有if判断就直接continue,那每次循环都会被跳过,循环就失去意义了。所以continue确实"通常与if语句配合使用"。🌰 小比喻:continue就像课堂上的"跳过"——老师说"偶数号的同学请闭眼"(if判断),然后跳过他们继续点名(continue)。if是"条件",continue是"动作",两个搭档才有效果。

7
在C++代码中,不可以将变量命名为printf,因为printf是C++语言的关键字。( )

✗ 正确答案:错(×)

解析:题目说法前半句建议正确,后半句理由错误• printf 确实不是C++的关键字。它是C标准库提供的一个函数名,定义在 <cstdio> 头文件中 • C++的关键字包括:intforifwhilereturn 等语言内置的保留字 • 从技术上讲,你可以把变量命名为printf(虽然这样做非常不推荐,会覆盖函数名导致混乱)题目说"printf是关键字"这个理由本身就是错误的。💡 区分:关键字是语言"内置保留"的名字(如int、for),函数名是库提供的(如printf、cout),两者不是一回事。

8
在C++中有整型变量N,则表达式 N += 8/4//2 相当于 N += 8/(4/2)。( )

✗ 正确答案:错(×)

解析:这道题有一个"隐藏陷阱"——双斜线 // 在C++中是注释符号!所以 N += 8/4//2 实际等价于: • N += 8/4//2 被当成注释,完全忽略) • N += 2(8÷4=2)而 N += 8/(4/2) • 4/2 = 28/2 = 4 • N += 4一个是N加2,一个是N加4,完全不等价!🌰 小比喻:// 后面的内容就像被"橡皮擦"擦掉了——编译器根本看不到。你以为写的是除法,其实后面的部分已经被注释"吃掉"了。

9
C++中定义变量 int N,则表达式 (!!N) 的值也是N的值。( )

✗ 正确答案:错(×)

解析:! 是逻辑取反运算符,把非零变成0,把0变成1。举个例子: • N = 5:!5 = 0(5非零,取反为0),!0 = 1 → !!5 = 1,不是5 ❌ • N = 0:!0 = 1!1 = 0 → !!0 = 0 ✓(碰巧相等) • N = 100:!!100 = 1,不是100 ❌!!N 的本质是"把任何非零数变成1,0还是0"——它只能得到0或1两个值,不可能等于N的原始值(除非N恰好是0或1)。💡 实用技巧:!!N 常用来把任意数值"标准化"为布尔值(0或1),判断"N是否为非零"。

10
GESP认证是对认证者的编程能力进行等级认证,同一级别的能力基本上与编程语言无关。( )

✓ 正确答案:对(√)

解析:GESP(Grade Examination of Software Programming)的全称就告诉我们:它认证的是"软件编程"的能力,而不是某个具体语言的知识。同一级别考察的核心能力是通用的 • 变量、数据类型、运算 • 分支结构(if-else) • 循环结构(for、while) • 输入输出 • 基本的程序设计思维无论你选择Scratch、Python还是C++参加考试,一级考的"能力内核"是相同的,只是用不同的语言来表达而已。🌰 小比喻:就像学游泳——自由泳、蛙泳、仰泳姿势不同(编程语言不同),但"能游50米"的能力标准是一样的(同一级别)。GESP考的是"你会不会编程",不是"你背了多少C++语法"。

💻 编程题精讲(每题25分,共50分)

1
休息时间

📋 题目描述

小杨计划在某个时刻开始学习,并决定在学习 k 秒后开始休息。

小杨想知道自己开始休息的时刻是多少。

输入格式:

前三行每行包含一个整数,分别表示小杨开始学习时刻的时 h、分 m、秒 s(1≤h≤12, 0≤m≤59, 0≤s≤59)。

第四行包含一个整数 k,表示小杨学习的总秒数(1≤k≤3600)。

输出格式:输出一行,包含三个整数,分别表示小杨开始休息时刻的时、分、秒。

样例输入:12 / 59 / 59 / 10

样例输出:13 0 9

样例说明:小杨在时刻 12:59:59 开始学习,学习10秒后开始休息,即在 13:0:9 时刻开始休息。

🧠 解题思路

这道题就像一个"时间计算器"!核心思路是:统一单位→相加→再拆分

① 把开始时间统一转换为"总秒数":总秒数 = h×3600 + m×60 + s

② 加上学习时长k:总秒数 += k

③ 把总秒数"拆回"时、分、秒:

  → 小时 = 总秒数 / 3600

  → 分钟 = (总秒数 % 3600) / 60

  → 秒 = 总秒数 % 60

📝 参考代码

#include<iostream>using namespace std;intmain() {// 第一步:读入开始学习的时刻(时、分、秒)int h, m, s;    cin >> h >> m >> s;// 第二步:读入学习的总秒数kint k;    cin >> k;// 第三步:把开始时间转换为总秒数// 1小时=3600秒,1分钟=60秒int total = h * 3600 + m * 60 + s;// 第四步:加上学习时长    total += k;// 第五步:把总秒数拆回时、分、秒int hh = total / 3600;          // 小时 = 总秒数 ÷ 3600int mm = (total % 3600) / 60;  // 分钟 = 去掉小时后 ÷ 60int ss = total % 60;           // 秒 = 总秒数 % 60// 第六步:输出结果    cout << hh << " " << mm << " " << ss << endl;return0;}

💡 小贴士:这道题的核心思想是"统一单位再计算"——就像把所有长度都换算成厘米再相加一样。把时间统一成秒后,加法就不会出现"60进位"的麻烦。最后再用除法(/)和取模(%)把秒数"翻译"回时分秒。这个方法在时间计算题中非常通用,一定要掌握!

2
立方数

📋 题目描述

小杨有一个正整数 n,他想知道 n 是否是一个立方数

一个正整数 n 是立方数当且仅当存在一个正整数 x 满足 x × x × x = n

输入格式:第一行包含一个正整数 n。

输出格式:如果 n 是立方数,输出 Yes,否则输出 No

样例1:输入 8 → 输出 Yes(因为 2×2×2 = 8)

样例2:输入 9 → 输出 No(不存在正整数x使x×x×x=9)

数据范围:1 ≤ n ≤ 1000

🧠 解题思路

这道题就像一个"寻找立方根"的游戏!

• 立方数的定义:存在正整数 x,使得 x × x × x = n

• 常见的立方数:1(1³), 8(2³), 27(3³), 64(4³), 125(5³), 216(6³), 343(7³), 512(8³), 729(9³), 1000(10³)

• 因为 n ≤ 1000,所以 x 最大就是10(10³=1000)

算法:用循环从 x=1 开始,逐个计算 x³,看是否等于n。找到了就输出Yes,找完了都没有就输出No。

💡 和单选题12(完全平方数)对比:思路完全一样!只不过一个检查 x*x==n,一个检查 x*x*x==n。

📝 参考代码

#include<iostream>using namespace std;intmain() {// 第一步:读入要判断的正整数nint n;    cin >> n;// 第二步:准备一个标记变量,记录是否找到了立方根int found = 0;  // 0表示还没找到// 第三步:从1开始逐个尝试,看哪个数的立方等于n// 因为 n ≤ 1000,所以 x 最大不超过10(10³=1000)for (int x = 1; x <= n; x++) {if (x * x * x == n) {  // x的立方等于n?            found = 1;         // 找到了!标记为1break;              // 不用再找了,跳出循环        }    }// 第四步:根据标记输出结果if (found)        cout << "Yes" << endl;   // 是立方数else        cout << "No" << endl;    // 不是立方数return0;}

💡 小贴士:这道题用了经典的"枚举+判断"模式——从1开始逐个尝试,看能不能找到满足条件的x。这种思路和单选题第12题(完全平方数)完全一致!掌握了"循环枚举+条件判断",你就解锁了一类题型的解题模板。另外注意输出是 Yes 和 No(首字母大写),大小写错了就不给分哦!

🎯 总结与备考建议

恭喜小朋友们完成了2024年6月GESP C++一级真题的全部精讲!🎉 这是我们的第9期真题解析,让我们回顾一下这期的重要知识点:

📌 单选题核心考点:

① 变量命名规则:只能有字母/数字/下划线,不能含减号(第1题)

② 运算优先级与整数除法:先乘除后加减、整数除法截断小数(第2、7题)

③ 取模运算结果范围分析:N%3最大2,N%7最大6(第3题)

④ printf格式化:%%转义输出%、%2d占位补空格(第4、8题)

⑤ cin读取规则:遇到非数字字符自动停止(第5题)

⑥ 浮点变量赋值与%.0f输出(第6题)

⑦ i++后自增的"先用后加"特性(第9题)

⑧ 质数判断代码分析:边界条件N=2的特殊处理(第10题)

⑨ 完全平方数与循环枚举:x*x==N的遍历判断(第12题)

⑩ 循环条件中i*i<64的边界分析(第13题)

📌 判断题核心考点:

变量类型决定运算结果(整型vs浮点型除法)、printf格式字符不计算、浮点类型转换链、break适用于所有循环、continue搭档if、printf不是关键字、//注释符号的意外效果、!!N的布尔标准化、GESP能力与语言无关

📌 编程题核心技能:

① 休息时间:时间单位统一换算(→总秒数)再拆分回去,掌握"/和%"的组合应用

② 立方数:循环枚举+条件判断的"模板",和完全平方数思路一致

📌 答案速查表:

单选:A D B C B C B C C C C D C C B

判断:× × ✓ × ✓ ✓ × × × ✓

这是我们GESP一级真题精讲的第9期!从2026年3月到现在,我们已经走过了9套真题。每套真题都是一次全面的"知识体检",帮大家发现薄弱环节、巩固核心技能。下一期我们将回到2024年3月,继续探索更多有趣的题目。坚持就是胜利,继续加油!💪

跟着真题学编程,稳步拿下考级

周更连载 | 系统攻克少儿C++考级

抱歉,评论功能暂时关闭!