GESP2024年6月认证C++二级真题解析

一、单选题(每题2分,共30分)

题号

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

答案

C

B

A

A

A

C

D

B

C

C

D

D

A

B

D

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

A. 1

B. 2

C. 3

D. 4

【答案】C

【考纲知识点】了解高级语言

【解析】本题考察GESP等级的认证语言,包括c++、python和图形化编程三种语言

2、下⾯流程图在yr输⼊2024时 ,可以判定yr代表闰年 ,并输出 2月是29天 ,则图中菱形框中应该填⼊(  )。

图片

A. (yr%400==0) || (yr%4==0)

B. (yr%400==0) || (yr%4==0 && yr%100 !=0)

C. (yr%400==0) && (yr%4==0)

D. (yr%400==0) && (yr%4==0 && yr%100 !=0)

【答案】B

【考纲知识点】 分支结构中的if条件语句

【解析】本题通过流程图体现分支结构,条件判断框中填写闰年的判定条件:年份是4的倍数时,该年是闰年。当年份是100的倍数时,当且仅当年份是400的倍数时才是闰年

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

A. five-Star

B. five_star

C. fiveStar

D._fiveStar

【答案】A

【考纲知识点】掌握变量的命名规则

【解析】本题考察c++中变量的命名由数字、字母、下划线组成,没有短横线,并且只能由字母或下划线开头

4、在C++中 ,与 for(int i=0; i<10; i++) 效果相同的是(     )。

A. for(int i=0; i<10; i+=1)

B. for(int i=1; i<=10; i++)  

C. for(int i=10; i>0; i--)  

D. for(int i=10; i<1; i++)

【答案】A

【考纲知识点】赋值运算符

【解析】本题考察c++中的加赋值运算符,i+=1的含义是i=i+1,也就是实现了i++的操作

5、在C++中, cout << (5 % 2 && 5 % 3) 的输出是(       )。

A. 1

B. 2

C. true  

D. false

【答案】A

【考纲知识点】掌握%、&&和布尔值的含义

【解析】5%2的结果非0,为1;5%3的结果非0,为1;二者进行&&与运算,结果仍为1,通过cout进行输出

6、执⾏下⾯的C++代码时输⼊1,则输出是(      )。

图片

A. Jan

B. Mar

C. Jan Mar

D.以上均不对

【答案】C

【考纲知识点】掌握分支结构switch-case语句

【解析】本题考察对于switch语句的理解,当没有使用break将各种分支情况隔离开时,会执行所有分支情况的语句

7、执行下面C++代码后 ,有关说法错误的是(    )。

图片

A.如果先后输⼊1和1,则将输出1

B.如果先后输⼊0和1或者1和0,则将输出3

C.如果先后输⼊0和0,则将输出2

D.如果先后输⼊0和0,则将输出4

【答案】D

【考纲知识点】if-else条件语句

【解析】本题考察对于if-else条件语句的理解。当if括号内的语句为真,会执行if代码块中的语句,否则跳转至else if或者else。当a=0、b=0时,a||b的结果为0,所以!(a||b)的结果为1,输出2

8、某货币由5元 ,2元和1元组成 。输入金额(假设为正整数) ,计算出最少数量 。为实现其功能 ,横线处应填 ⼊代码是(    )。

图片

 A. 第1横线处应填⼊:N / 2

      第2横线处应填⼊:N - M5 - M2

 B. 第1横线处应填⼊: (N - M5 * 5) / 2    

      第2横线处应填⼊:N - M5 * 5 - M2 * 2

 C. 第1横线处应填⼊:N - M5 * 5 / 2

      第2横线处应填⼊:N - M5 * 5 - M2 * 2

 D. 第1横线处应填⼊: (N - M5 * 5) / 2

      第2横线处应填⼊:N - M5  - M2

【答案】B

【考纲知识点】数学逻辑、格式化输出

【解析】本题考察对题干中逻辑的理解,其中M5、M2、M1分别代表5元、2元、1元货币的个数。需要货币总数尽可能少,因此尽可能使用面额更高的货币。首先由N/5计算出5元货币的个数,这个结果将会取得整数。剩余无法用5元来表示的金额,则 是N - M5 * 5,用(N - M5 * 5) / 2 计算出2元货币的个数,剩余金额(N - M5 * 5 - M2 * 2)/1得到1元货币的个数

9、下⾯C++代码执⾏后的输出是(   )。

图片

A. 55

B. 45

C. 36

D. 28

【答案】C

【考纲知识点】双重for循环

【解析】本题考察对于循环嵌套以及赋值运算符的理解。使用loopcount变量记录内层循环总次数,当i=2时,内层循环执行1次,当i=3时,内层循环执行2次......当i=9时,内层循环执行8次.因此总次数为(1+8)*8/2=36

10、下⾯C++代码执⾏后的输出是(    )。

图片

A. 25

B.16

C.10

D.9

【答案】C

【考纲知识点】双重for循环和break终止语句

【解析】本题考察对于循环嵌套以及break终止语句的理解。当i=1时,j=0,i*j%2的结果是0;当i=2时,j=0/1,结果都是0;当i=3时,j=0/1/2,结果分别是0/1/0......当结果为1时,执行break语句终止内层循环,进入下一轮的外层循环。使用loopcount变量记录结果为0的次数。实际上loopCount计数不受内层循环影响,执行了10次加1操作。

11、假设下⾯C++代码执行过程中仅输入正负整数或0,有关说法错误的是(   )。

图片

A.执行上面代码如果输入0,将终止循环

B.执行上面代码能实现所有非0整数的求和  

C.执行上面代码第⼀次输入0,最后将输出0

D.执行上面代码将陷入死循环 ,可将 while (N) 改为while (N==0)

【答案】D

【考纲知识点】while循环的条件

【解析】该代码不会陷入死循环,N的值随机,D选项的改动后执行意义都变了,只能输出0

12、执行下面的C++代码 ,有关说法正确的是(   )【质数是指仅能被1和它本身整除的正整数】 。

图片

A.如果输⼊正整数 ,上面代码能正确判断N是否为质数

B.如果输⼊整数 ,上面代码能正确判断N是否为质数

C.如果输⼊⼤于等于0的整数 ,上⾯代码能正确判断N是否质数

D.如将Flag = true 修改为Flag = N>=2? true:false 则能判断所有整数包括负整数、0、正整数是否为质 数

【答案】D

【考纲知识点】for循环、条件判断、对质数的理解

【解析】原代码没有考虑N=1的情况,将输出1为质数,由此排除ABC。D选项的改动规避了N<2的情况,正确

13、下⾯C++代码⽤于实现如下图所⽰的效果 ,其有关说法正确的是( )。

图片

A.当前代码能实现预期效果 ,无需调整代码

B.如果cout << endl; 移到循环L2内部 ,则可实现预期效果  

C.如果cout << endl; 移到循环L1外部 ,则可实现预期效果

D.删除cout << endl; ⾏ ,则可实现预期效果

【答案】A

【考纲知识点】双重for循环

【解析】i=1,j=1,输出1后换行;i=2,j=1/2,输出2 4后换行;以此类推得到的输出结果与题干相符

14、下⾯C++代码执行后 ,输出是(    )。

图片

  1. 5 2

  B. 5 0

  C. 0 2

  D. 0 0

【答案】B

【考纲知识】for循环和if-else条件判断语句

【解析】i的取值范围从0遍历到9,使用cnt1变量记录满足i%2==1的个数,使用cnt2变量记录满足i%3==0的个数,分别是i=1、3、5、7、9。通过观察if-else结构可知,只有当i%2==1且i%2!=1时才会执行else if判断,这显然互相矛盾,因此else if之后的语句不会执行,cnt2保持初始值0

15、在下面的C++代码中,N必须是小于10大于1的整数 ,M为正整数(大于0) 。如果M被N整除则M为幸运数 ,如果M中含有N且能被N整除 ,则为超级幸运数 ,否则不是幸运数 。程序用于判断M是否为幸运数或超级幸运数 或非幸运数 。阅读下面代码 ,有关说法正确的是(  )。

图片

A. 如果N输⼊3 ,M输⼊36则将输出:36是3的超级幸运数!

B.如果N输⼊7,M输⼊21则将输出:21是7的幸运数!

C.如果N输⼊8,M输⼊36则将输出:36非8的超级幸运数!

D.如果N输⼊3,M输⼊63则将输出:63是3的超级幸运数!

【答案】D

【考纲知识点】程序阅读能力

【解析】本题需要注意当M的个位与N不相同时,M会不断除以10即发生变化,而且没有变量存储原M值。因此A、B、C选项中最终会输出的M都不是最开始的输入值。

二、判断题(每题2分,共20分)

题号

1

2

3

4

5

6

7

8

9

10

答案

×

×

×

×

×

×

1、执⾏C++代码cout << '9 '+ '1 '; 的输出为10。(    )

【答案】错误

【考纲知识点】cout语句

【解析】使用单引号代表这是一个字符,本条cout语句会输出数字字符9和数字字符1的ascII码之和106

2、C++表达式-12 % 10 的值为2。(        )

【答案】错误

【考纲知识点】运算符%

【解析】c++中对于负数的取模运算,就是正常取余后保留负号

3、C++表达式int(12.56)的值为13。 ( )

【答案】错误

【考纲知识点】int()强制类型转换

【解析】在c++中使用int()对浮点数做强制类型转换,会舍弃小数部分,保留为整数12

4、C++的整型变量N被赋值为10,则语句cout << N / 3 << "-" << N % 3 执⾏后输出是3-1。(  )

【答案】正确

【考纲知识点】运算符/和%的含义

【解析】本题考察c++中运算符/和%。/表示整数除法,返回的值是做整数除法,取除法的商。因此10/3 =3,10%3=1。

5、在C++代码中 ,不可以将变量命名为scanf, 因为scanf是C++语⾔的关键字 。  ( )

【答案】错误

【考纲知识点】对于scanf的理解

【解析】scanf()是c++中的库函数,用于标准输入,而不是关键字。

6、下⾯C++代码执⾏后将导致死循环 。  ( )

图片

【答案】错误

【考纲知识点】for循环和continue语句

【解析】执行continue语句后,会跳过当前循环的剩余语句不执行转而进入下一轮循环。题干中i=0,此时执行continue回到for语句,i自增为1,继续执行continue回到for语句,i自增为2;依次循环直到i=10不再执行。因此总循环数为10次,并不会出现死循环。

7、下⾯C++代码执行后将输出10。 ( )

图片

【答案】错误

【考纲知识点】双重for循环、赋值运算符

【解析】本题使用cnt变量记录第二层循环执行的次数,当i=0时,内层循环执行0次;当i=1时,内层循环执行1次,当i=2时,内层循环执行2次......当i=9时,内层循环执行9次.因此总次数为(1+9)*9/2=45

8、下面C++代码执行后 ,将输出5。 ( )

图片

【答案】正确

【考纲知识点】双重for循环和if语句

【解析】当i=1时,j=1/2/3/4,此时i*j%2的结果为1/0/1/0,结果为0时满足if条件判断则执行cnt的自增语句;当i=2时,j=2/4,此时i*j%2的结果为0/0;当i=3时,j=3,此时i*j%2的结果为1;当i=4时,j=4,此时i*j%2的结果为0;

9、下面C++代码能实现正整数各位数字之和 。  ( )

图片

【答案】正确

【考纲知识点】运算符%、赋值运算符+=和/=

【解析】本题考察对两种运算符的认识,通过N%10取得N的个位数,用sum变量保存,再通过N/=10去掉N的个位数,下一次取得的实际上是N的十位数。循环往复,直到N=0循环结束,此时已将N的所有位数加到sum中

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

【答案】正确

【考纲知识点】对GESP的认识

【解析】本题考察对GESP的认识,GESP测试是对认证者的编程能力进行等级认证, 同⼀级别的能力基本上与编程语言无关

三、编程题(每题25分,共50分)

题号

1

2

答案

1、平方之和                                

题面描述

⼩杨有n个正整数a1, a2, · · · , an,他想知道对于所有的i ( 1 ≤ i ≤ n) ,是否存在两个正整数x和y 满⾜x*x + y*y = ai。

输入格式                                

第一行包含⼀个正整数n,代表正整数数量。之后n⾏ ,每⾏包含⼀个正整数 ,代表 ai。

输出格式

对于每个正整数ai,如果存在两个正整数x和y满⾜x*x + y*y = ai,输出Yes,否则输出No。

样例1

图片

样例解释

对于第⼀个正整数 ,存在 1 x 1 + 2 x 2 = 5 , 因此答案为 Yes。

数据范围

对于全部数据 ,保证有 1 ≤ n ≤ 10 , 1 ≤ ai≤ 106。

【题目大意】

给定n,一共输入n个正整数a1~an。判断ai能否表示为两个正整数x和y的平方之和。

【考纲知识点】

开方运算、输入输出语句、循环

【解题思路】

1、按题目要求定义好需要的变量,并实现输入

2、通过while循环n次单独接收每次的数据ai,定义f1变量表示结果

3、在1~根号ai之间遍历数字i,此时i就是x

4、调用check()函数计算ai,剩余的数为ai-i*i,判断它能否被开方5、如果可以则f1=1,输出Yes,否则输出No

【参考程序】

图片

2、计数

题面描述                                

⼩杨认为⾃⼰的幸运数是正整数k(注:保证1 ≤ k ≤ 9) 。⼩杨想知道 ,对于从 1到n的所有正整数中 ,k出现了多少次。

输入格式                                

第⼀⾏包含⼀个正整数n。 第⼆⾏包含⼀个正整数 k。

输出格式                                

输出从1到n的所有正整数中 ,k出现的次数。

样例1                                                                                               

图片

样例解释

从1到25中 ,2出现的正整数有2, 12, 20, 21 , 22, 23, 24, 25 ,⼀共出现了9次。

数据范围

对于全部数据 ,保证有 1 ≤ n ≤ 1000, 1 ≤ k ≤ 9。

【题目大意】

给定正整数n和k,要计算k这个数在1~n中出现了多少次

【考纲知识点】

取模和除运算、输入输出语句、循环

【解题思路】

1、按题目要求定义好需要的变量,并实现输入

2、通过for循环遍历1~n中的每个数i,调用check()函数计算该数中k出现多少次

3、定义check()函数,传入参数i和k,通过i%10得到i的个位,与k比较,如果相同则cnt+1.再通过i/10去掉i的个位。通过循环重复上述步骤,将i的每一位都与k作对比

4、定义ans变量累计每次cnt的结果,得到最终答案

【参考程序】

图片

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值