
点击上方蓝字·关注我们




CCF编程能力等级认证,英文名Grade Examination of Software Programming(以下简称GESP),由中国计算机学会发起并主办,是为青少年计算机和编程学习者提供学业能力验证的平台。GESP覆盖中小学全学段,符合条件的青少年均可参加认证。GESP旨在提升青少年计算机和编程教育水平,推广和普及青少年计算机和编程教育。
GESP考察语言为图形化编程、Python编程及C++编程,主要考察学生掌握相关编程知识和操作能力,熟悉编程各项基础知识和理论框架,通过设定不同等级的考试目标,让学生具备编程从简单的程序到复杂程序设计的编程能力,为后期专业化编程学习打下良好基础。
本次为大家带来的是2024年9月份C++三级认证真题解析。
一、单选题(每题3分,共30分)
|
题号 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
|
答案 |
B |
C |
A |
D |
C |
B |
C |
C |
A |
D |
D |
C |
D |
C |
B |
下列代码中 ,输出结果是( )。

A. Equal
B. Not equal
C. 程序不能正确执行
D. 没有输出
【答案】B
【题目解析】考察浮点数知识题目,浮点数在计算机中是以二进制形式存储的,而某些十进制小数无法精确表示成二进制小数。因此,在进行浮点数运算时可能会出现微小的舍入误差。例如,0.9和0.1都无法在二进制下精确表示,这可能导致b - a的结果不完全等于0.1,因此选择B选项。
2、关于计算机中的编码 ,下列说法中正确的是( )
A. 机器数的形式值和真值是一致的
B. 原码就是符号位加上真值
C. 机器数是带符号的
D. [-1]=[1000 0001]原=[1111 1111]反
【答案】C
【题目解析】计算机基础知识题目,对于正数形式值和真值相等,如果是负数有符号位的区别并不一致,原码应是符号位加上形式值,-1的原码表示正确,但是反码应该是1111 1110,因此选择C选项。
3、8进制数3703转换成16进制数是( )
A.7C3
B.7A3
C.7B3
D.7D3
【答案】A
【题目解析】进制转换知识题目,可以采用常规方法,先将八进制3703转换成十进制,再转换为十六进制,也可采用快捷方法利用一分三的技巧将3703转二进制,再利用四合一技巧转换为十六进制,最终结果是7C3,因此选择A选项。
4、0.8125变成⼆进制是(D)
A. 0.1110
B. 0.1 1111 1011 1101
C. 0.1 1111 1011 1100
D. 0.1101
【答案】D
【题目解析】考察浮点数进制转换知识题目,将十进制小数转换为二进制小数可以采用不断的乘以2并且记录每次乘积的整数部分来完成,0.8125*2=1.625整数部分为1,0.625*2=1.25整数部分为1,0.25*2=0.5整数部分为0,0.5*2=1整数部分为1,最终是0.1101,因此选择D选项。
5、下⾯说法正确的是 ( )
A. (22&01)==(22&&01)成立
B. (23 |11)==30
C.(23 |10)==31
D. (23 |01)==31
【答案】C
【题目解析】考察位运算知识题目,a选项计算后左侧为false右侧为true所以是不成立的,b选项计算结果应为31即(10111)|(1011),c选项正确,d选项计算结果应为0,因此选择C选项。
6、下列说法正确的是 ( )
A. 2>>1和1>>1的值是一样的
B. (2>>2)和(1>>1)的值是一样的
C. (11^00)和(1^0)的值是一样的
D. (~0的输出值是1)
【答案】B
【题目解析】考察位运算知识题目,a选项计算结果是1和0选项错误,b选项计算结果都为0选项正确,从选项计算结果是11和1选项错误,d选项按位取反,不同类型的输出也不同,对于有符号整数int输出的是-1,因为补码形式是1111 1111,因此选择B选项。
7、下列代码实现的是 ( )

A.a和b的异或
B.a和b的同或
C.a和b的值交换
D.a和b的高低位互换
【答案】C
【题目解析】考察位运算知识题目,最终实现效果就是a和b的值互换,此题可以采用举出具体实例的方式求解,可以设置a=2,b=3即a为0010,b为0011,第一步后a为0001,第二步骤后b为0010,第三步骤后a为0011,因此选择C选项。
8、a&~1运算实现的是( )。
A.使a的最低位为1
B.使a的最高位为1
C.使a的最低位为8
D.使a的最高位为8
【答案】C
【题目解析】考察位运算知识题目,变量a和~1做按位与操作,常规32位整数下1的最低位是1,取反后最低位为0,a变量最低位无论是1还是0计算结果都会是使最低位为0,因此选择C选项。
9、a=1010 1110,a<<2,下面关于这个说法正确的是 ( )。
A. a的值变为1011 1000
B. a的值变为1011 1010
C. a的值变为0101 1101
D. a的值变为0101 1100
【答案】A
【题目解析】考察位运算知识题目,此题目直接移动即可,整体左移两位低位补0,最终结果是1011 1000,因此选择A选项。
下列程序中 , result和result2输出分别是 ( )

A. 123 -1
B. 123 -123
C. 1 -1
D. 1 -123
【答案】D
【题目解析】考察位运算知识题目,首先是a和b做按位与运算,(0111 1011)&(0000 0001)最终结果是1,第二组是a2和b2按位与运算,(0111 1011)&(1111 1111)结果是0111 1011也就是123,因为a2是-123最高位是1,b2是无符号int即所有位数位1的最大值,最高位也为1,相当于符号位计算后也为1,最终是-123,所以选择D选项。
11、陈A歹种植一批农作物,第一天需要浇水一次,随后的两天(第2、第3天),每天需要浇水2次,再随后的3天(第4、第5、第6天),需要每天浇水3次,这样持续下去,随后的n天,每天需要浇水n次。请问在100天里,总共浇了多少次水( )
A. 994
B. 996
C. 995
D. 945
【答案】D
【题目解析】考察逻辑运算题目,按照题面描述分阶段第一天浇水次数是1*1次,第二天浇水次数是2*2次...以此类推到所有阶段累加的天数到100天,最终是累加到13的平方和共91天总次数819次,剩余9天第14阶段每天14次再加9*14次共819+126=945次,因此选择D选项。
12、关于一维数组,下列程序能够正确执行的是( )。
A. 
【答案】C
【题目解析】考察一维数组知识题目,题目中明显的错误比较容易发现其中ABD三个选项中循环都超范围,设置长度为10数组位置共10个但是下标是0~9不存在a[10]三个选项中都是i<=10,因此选择C选项。
13、下面的程序中,会输出( )。

A. 1
B. 0
C. 10
D. 不确定的值
【答案】D
【题目解析】考察一维数组知识题目,设置长度为10数组位置共10个但是下标是0~9不存在a[10],会输出不确定的值,因此选择D选项。
14、有ABCD4个人,其中一个是小偷,每个人说一句话,只有小偷说的是假话,其中A说:不是我。B说:是C。C说:是D。D说:C瞎说,请问谁是小偷( )。
A. A
B. B
C. C
D. D
【答案】C
【题目解析】考察逻辑推理知识题目,此题可以采用假设法分别假设四人中的一人是小偷,也就是说的是假话,看是否与另外三人说的话相悖,如果是则排除,如果都不相悖就是小偷,或者其他合理推理方法均可,因此选择C选项。
15、下列程序输出的是()

A. 9
B. 8
C. 7
D. 6
【答案】B
【题目解析】考察字符串汉字字节数知识题目,find函数返回的是字符A的位置,但是前面是一个汉字占用两字节,输出显示的位置会是8并不是7,因此选择B选项。
二、判断题(每题2分,共20分)
|
题号 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
|
答案 |
√ |
√ |
√ |
√ |
× |
√ |
× |
√ |
√ |
× |
1、+1和-1的原码进行1+(-1)计算的结果是-2 (对)
【答案】正确
【题目解析】考察编码知识题目,最高位符号位是0+1=1为负数,低位的1+1结果为2,因此题目说法正确。
2、~1的输出值是-2。 (对)
【答案】正确
【题目解析】考察编码知识题目,~1可以理解为对0000 0001进行取反1111 1110,这个编码恰好是-2的补码,程序中用补码表示,所以输出值是-2,因此题目说法正确。
3、~1 = 1111 1110 。 (对)
【答案】正确
【题目解析】考察编码知识题目,与第二题相同,~1是对0000 0001按位进行取反1111 1110,因此题目说法正确。
4、取X的低四位,可以⽤Y = 0000 1111,⽤X&Y获取X的低四位。(对)
【答案】正确
【题目解析】考察位运算知识题目,y = 0000 1111,最低位是四个1,可以通过和1做&运算的结果来判断出x的低四位分别是什么,因此题目说法正确。
5、下列程序输出的是A。 (错)

【答案】错误
【题目解析】题面给定的程序中char类型变量x为65,加1后为66由于类型是char类型,输出的内容是字符B并不是A,因此题目说法错误。
6、下列程序输出的是3 。 (对)

【答案】正确
【题目解析】考察编码字符串知识,下标从0开始汉字两个字节,所以字符A下标是2,字符D下标是3,题面中的size_t通常是无符号整数类型,此处当作int理解即可,不影响题目判断,因此题目说法正确。
7、 下列程序将输出 1。 (错)

【答案】错误
【题目解析】考察数组知识,题面中这种数组初始化方式,是将a[0]设置为1,其余位置都是0填充,所以应该是输出0而不是1,因此题目说法错误。
8、下列程序将输出A。 (对)

【答案】正确
【题目解析】考察数据类型转换知识,题目中的65转换成字符char类型,对应ASCII码关系,对应字符A,因此题目说法正确。
9、16进制数 AB,表⽰成2进制数是10101011 (对)
【答案】正确
【题目解析】考察进制转换知识,将十六进制数字转换成二进制可以采用一分四的方式,A对应1010,B对应1011,因此题目说法正确
10、def (⼗六进制) = 103231 (五进制) 。 (错)
【答案】错误
【题目解析】考察进制转换知识,def转换为十六进制可以先将十六进制转换为十进制,再将十进制转换成五进制,def分别对应13、14、15,转为十进制是13*16²+14*16+15*1=3567,转为五进制后是103232,题目中103231最后一位书写错误,因此题目说法错误。
三、编程题(每题25分,共50分)
|
题号 |
1 |
2 |
|
答案 |
1、平衡序列
题面描述
小杨有一个包含n个正整数的序列a,他认为一个序列是平衡的当且仅当存在一个正整数i(1≤ i<n)使得序列第1个到第i个数字的总和等于第i+1个到第n个数字的总和。
小杨想请你判断序列a是否是平衡的。
输入格式
第一行包含一个正整数t,代表测试用例组数。
接下来是t组测试用例。对于每组测试用例,一共两行。
第一行包含一个正整数n,代表序列长度。
第二行包含n个正整数,代表序列a。
输出格式
对于每组测试用例,如果序列a是否是平衡的,输出Yes,否则输出No。
样例1

对于第一组测试用例,令i=2,则有1+2=3,因此序列是平衡的;
对于第二组测试用例,令i=2,则有2+3=1+4,因此序列是平衡的;
对于第三组测试用例,不存在满足要求的i。
对于全部数据,保证有1 ≤ t ≤ 100,1 ≤ n,ai≤ 10000。
【题目解析】
根据题面描述的要求,先按着数据组数设置好循环次数,即t次。每组数据正常输入且输入过程中累加求出总和,接下来从第1个位置到第n-1个位置遍历,如果累加中tot变量等于了数组总和得一半,则剩下的一定就是另一半了,这也是为什么遍历到n-1位置的原因,至少保留一个作为平衡的另一半,最后每组数据对应一个输出(Yes/No)配合换行格式即可。
【参考程序】

2、回文拼接
题面描述
一个字符串是回文串,当且仅当该字符串从前往后读和从后往前读是一样的,例如,aabaa和ceddcc都是回文串,但abcd不是。
小杨有n个仅包含小写字母的字符串,他想请你编写程序判断每个字符串是否由两个长度至少为2的回文串前后拼接而成。
输入格式
第一行包含一个正整数n,代表字符串数量。
之后n行每行一个仅包含小写字母的字符串。
输出格式
对于每个字符串输出一行,如果该字符串由两个长度至少为2的回文串前后拼接而成则输出Yes,否则输出No。
样例1

对于第1,3,4个字符串,都不是由两个长度至少为2的回文串前后拼接而成。
第2个字符串由回文串aa和bbb前后拼接而成,并且两个回文串长度都至少为2。
对于全部数据,保证有1 ≤ n ≤ 10,并且每个字符串的长度不超过100。
【题目解析】
首先需要清楚回文格式这样一个小概念,题面描述要求是整个字符串是否为连个回文格式的子串拼接而成的,所以可以使用循环从中间切开,分成前后很多组尝试,检测前后两个字串是否都是回文格式,题目是多组输入数据,所以循环n次,每次一个输入是,对应一个输出(Yes/No)。由于题目要求长度至少为2,所以对于每个string s,测量长度后从2开始循环到m-2位置,这样变量j刚好用于strsub函数中的位置和长度,求得两个字串s1和s2后使用两个关于k的循环分别反向拼接形成两个反向的串t1和t2,如果t1==s1 && t2==s2证明前后两个字符串都是回文格式的,标记fl = 1,根据fl的状态分支判断,输出答案即可。
【参考程序】

技术支持:马长明
策划:GESP技术委员会副主席 刘晓庆


1. GESP微信:关注“CCF GESP”公众号,点击“GESP小助手”即可交流。
2. GESP邮箱:gesp@ccf.org.cn
注:请在邮件中详细描述咨询的问题并留下考生的联系方式及姓名、身份证号,以便及时有效处理。
3. GESP电话:0512-67656856
咨询时间:周一至周五(法定节假日除外)上午 8:30-12:00;下午 13:00-17:30

扫码关注GESP公众号,了解更多资讯


点击此处 “阅读原文” 查看更多内容





