GESP2024年3月认证C++二级
一、单选题(每题2分,共30分)
题号 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
答案 | B | B | B | C | B | C | D | B | C | A | D | A | C | C | C |
1、下列流程图的输出结果是?( )
A.优秀
B.良好
C.不及格
D.没有输出
【答案】B
【考纲知识点】流程图的概念与描述(二级)
【解析】程序开始; cj 被赋值为75 ; 验证cj >= 60 ; 75 >= 60成立进入YES 分支,验证cj >= 90 ;75 >= 90 不成立进入NO 分支;输出 良好 ,程序结束。
2、以下选项中不符合C++变量命名规则的是?( )
A. student
B. 2_from
C. _to
D.Text
【答案】B
【考纲知识点】变量的定义与使用(一级)
【解析】有效的变量名是由大小写字母、数字、下划线组成的任意长度的序列,且第一个字符不能为数字。另外,C++中有一些关键字已被编程语言保留,不能用作变量名。B选项的第一个字符为数字,不符合要求。
3、以下选项中,不能用于表示分支结构的C++保留字是?( )
A. switch
B. return
C. else
D. if
【答案】B
【考纲知识点】分支结构(一级)
【解析】switch是用于多分支选择的保留字,根据条件值执行若干语句。if、else也是用于分支选择的保留字,根据条件真假执行特定语句。return不是表示分支结构的保留字,它用于终止当前函数并返回指定值(如果存在)给调用者。
4、下列说法错误的是?( )
A. while 循环满足循环条件时不断地运行,直到指定的条件不满足为止
B. if 语句通常用于执行条件判断
C.在C++中可以使用foreach 循环
D. break 和continue 语句都可以用在for 循环和while 循环中
【答案】C
【考纲知识点】 分支 / 循环结构(一级)
【解析】C++中也没有直接称为foreach的循环结构。C++11中引入的用于遍历的容器的范围for循环使用的是任然是关键字for。C++中没有foreach关键字。
5、下列4个表达式中,答案不是整数8的是?( )
A.abs(-8)
B.min(max(8, 9), 10)
C.int(8.88)
D.sqrt(64)
【答案】B
【考纲知识点】常用数学函数(二级)
【解析】A选项为绝对值函数,表达式的结果是8;B选项为最值函数首先执行内部的max(8, 9),结果是9,然后执行min(9, 10),结果是9。C选项为函数式强制类型转换,截断取整结果为8。D选项为平方根函数结果为浮点类型的8。
6、下面C++代码执行后的输出是?()
A. 8
B. 14
C. 26
D. 50
【答案】C
【考纲知识点】循环结构(一级)
【解析】n = 3,i的初值为0,当i小于2是会执行循环。因此,循环会执行两次。m的初值为8 ,第一次循环m = 7 * 2 被更新为14;第二次循环m = 13 * 2;被更新为26,最终输出26。
7、下面C++代码执行后的输出是?()
A. 16
B. 36
C. 49
D. 81
【答案】D
【考纲知识点】多层分支/ 循环结构(二级)
【解析】i = 1,n = 81因为while条件满足进入循环,执行i += 1,当i增加到3的时候if 条件成立result被赋值为9;当i增加到9的时候if 条件第二次成立result被赋值为81;当i增加为10时,while条件不成立结束循环输出81。
8、下面C++代码执行后的输出是?()
A. 2
B. 3
C. 4
D. 5
【答案】B
【考纲知识点】多层分支/ 循环结构(二级)
【解析】s = 2,t = 10 第一次进入循环if 条件成立t 被更新为5;第二次进入循环if 条件不成立t被更新为4;第三次进入循环if 条件成立t被更新为2与s相等结束循环;循环执行了3次ans自增了三次最终输出3。
9、下面C++代码执行后的输出是?()
A. 5
B. 6
C. 7
D. 8
【答案】C
【考纲知识点】多层分支/ 循环结构(二级)
【解析】cur = 2,masks = 10,前5次循环if条件不满足,第5次循环后cur = 0,masks = 5;第6次进入循环if条件满足masks先加7后减1被更新为11;第7次进入循环if 条件满足masks被更新为17 与n 相同结束循环。循环执行了7次days自增了7次最终输出7。
10、以下C++代码判断一个正整数N的各个数位是否都是偶数。如果都是,则输出“是”,否则输出“否”。例如 N=2024时输出“是”。则横线处应填入( )。
A. break
B. continue
C. N = N / 10
D. N = N % 10
【答案】A
【考纲知识点】多层分支/ 循环结构(二级)
【解析】在十进制下,一个数的奇偶性由它的个位数字决定。因为,十进制是基于10的倍数来构建的,而10是2的倍数,这意味着除了个位以外的任何位上的数字(十位、百位、千位等)乘以其对应的10的幂次,都将产生一个偶数。本题在循环中使用if语句判断当前N的个位是否为偶数,如果是则通过N /= 10去掉个位继续检查下一位;如果不是则说明已经找到了一个奇数位,没有必要继续检查,使用break立刻结束循环。
11、有句俗话叫“三天打渔,两天晒网”。如果小杨前三天打渔,后两天晒网,一直重复这个过程,以下程序代码 用于判断,第n天小杨是在打鱼还是晒网,横线处应填写?( )
A. i == 0
B. i == 4
C. i == 0 && i == 4
D. i == 0 || i == 4
【答案】D
【考纲知识点】分支结构(一级)
【解析】n为4或5时晒网,当n = 4时i为4 % 5 = 4;当n = 5时5 % 5 = 0。
12、一个数的所有数字倒序排列后这个数的大小保持不变,这个数就是回文数,比如101 与6886 都是回文数, 而 100不是回文数。以下程序代码用于判断一个数是否为回文数,横线处应填写?( )
A. 10 * a + n % 10
B. a + n % 10
C. 10 * a + n / 10
D. a + n / 10
【答案】A
【考纲知识点】分支/ 循环结构(一级)
【解析】要判断一个数是否为回文数,需要将这个数反转。反转的过程中,每一步都需要将已有的反转数a 乘以10(为新的数字位腾出空间),然后加上n 的当前最后一个数字(即n % 10)。所以,横线处的代码应该是:a = 10 * a + n % 10; 这样每次循环都会取出n 的最后一位数字,加到a 的最后,同时n 除以10 去掉最后一位。循环直到n 为0,此时如果a与原始的数字k 相等,那么原始的数字就是回文数。
13、给定两个整数n与k,打印出一个栅栏图形,这个栅栏应该分成n段,段与段之间的间隔为+ , 段内的填充为k个- 。形如n = 5,k = 6时,图形如下:
以下程序代码用于绘制该图形,横线处应填写?( )
A. cout << '+' << endl;
B. cout << '+' << ' ' << endl;
C. cout << '+';
D. cout << '+' << ' ';
【答案】C
【考纲知识点】多层分支/ 循环结构(二级)
【解析】每段的开始打印一个+,然后打印k 个-。因为j 从1 开始,循环会执行k-1 次,所以我们需要在循环外再打印一个- 来确保每段有k 个-。在所有段打印完之后,还需要打印一个额外的+ 来结束栅栏图形。因此,选项C 是正确的,它每段的开始打印一个+,不会造成换行或额外的空格。
14、小杨的父母最近刚刚给他买了一块华为手表,他说手表上跑的是鸿蒙,这个鸿蒙是。( )
A.小程序
B.计时器
C.操作系统
D.神话人物
【答案】C
【考纲知识点】计算机基础(一级)
【解析】鸿蒙HarmonyOS是华为开发的全场景分布式操作系统,支持多种终端设备运行,提供应用开发、设备开发的一站式服务的平台。
15、中国计算机学会(CCF)在2024年1月27日的颁奖典礼上颁布了王选奖,王选先生的重大贡献是( )。
A.制造自动驾驶汽车
B.创立培训学校
C.发明汉字激光照排系统
D.成立方正公司
【答案】C
【考纲知识点】计算机历史(一级)
【解析】王选先生是中国著名的计算机科学家,他的重大贡献是发明了汉字激光照排系统,这一发明极大地推动了中国印刷业的现代化进程。
二、判断题(每题2分,共20分)
题号 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
答案 | × | √ | × | × | × | √ | × | × | √ | √ |
1、如果有以下C++代码:
那么cout << t 的结果为28.5 。( )
【答案】错误
【考纲知识点】数据类型的转换(二级)
【解析】int(s)将double类型的18.5转换为int类型,通过截断取整结果为18再加上10最终输出28。
2、Xyz,xYz ,xyZ 是三个不同的变量。( )
【答案】正确
【考纲知识点】变量的定义与使用(一级)
【解析】在C++中,变量名是区分大小写的,Xyz、xYz和xyZ是三个不同的变量。
3、cout << (8< 9< 10) 的输出结果为true。( )
【答案】错误
【考纲知识点】基本运算(一级)
【解析】程序输出结果为1。
4、for (i = 0; i < 100; i+=2) ; 语句中变量i的取值范围是0到99。( )
【答案】错误
【考纲知识点】循环结构(一级)
【解析】在这个for循环中,变量i从0开始,以2为步长递增,直到它不小于100。因此,i的取值是0, 2, 4, ..., 96, 98。99不在这个范围内,所以它不会取到99。
5、C++中cout << float(2022) 与cout << float('2022') 运行后的输出结果均为2022。( )
【答案】错误
【考纲知识点】数据类型的转换(二级)
【解析】cout << float(2022)将输出浮点数2022。而cout << float('2022')会将int类型的多字符字面量转换成float类型后做输出,输出结果不为2022。
6、已知A的ASCII码值为65,表达式int('C')+abs(-5.8)的值为72.8。( )
【答案】正确
【考纲知识点】 ASCII编码(二级)
【解析】字符'C'的ASCII码值是67。int('C')将字符'C'转换为其ASCII码值,即67。abs(-5.8)计算-5.8的绝对值,结果是5.8。所以表达式int('C') + abs(-5.8)的值是67 + 5.8,等于72.8。
7、bool()函数用于将给定参数或表达式转换为布尔类型。语句bool(-1) 返回的是false 值。( )
【答案】错误
【考纲知识点】数据类型的转换(二级)
【解析】语句bool(-1)返回的是true值,因为在C++中任何非零整数值转换为布尔时都会被视为true。
8、如果变量a的值使得C++表达式sqrt(a)==abs(a),则a的值为0。( )
【答案】错误
【考纲知识点】常用数学函数(二级)
【解析】如果变量 a 的值使得 C++ 表达式 sqrt(a)==abs(a),则 a 的值可以是 0 或1。
9、小杨今年春节回奶奶家了,奶奶家的数字电视要设置ip地址并接入到WIFI盒子才能收看节目,那这个WIFI盒子具有路由器的功能。( )
【答案】正确
【考纲知识点】 计算机网络
【解析】WIFI盒子如果能够为连接的设备分配IP地址,并且提供接入互联网的能力,那么它就具备了路由器的基本功能。
10任何一个for循环都可以转化为等价的while循环。( )
【答案】正确
【考纲知识点】循环结构(一级)
【解析】任何一个 for 循环都可以用 while 循环来表示,反之亦然。
三、编程题(每题25分,共50分)
题号 | 1 | 2 |
答案 |
1、乘法问题
问题描述
小A最近刚刚学习了乘法,为了帮助他练习,我们给他若干个正整数,并要求他将这些数乘起来。对于大部分题目,小A可以精准地算出答案,不过,如果这些数的乘积超过 ,小 A就不会做了。请你写一个程序,告诉我们小A 会如何作答。
输入描述
第一行一个整数 ,表示正整数的个数。
接下来n行,每行一个整数a。小A 需要将所有的a乘起来。
保证n ≤ 50,a ≤ 100 。
输出描述
输出一行,如果乘积超过106,则输出>1000000;否则输出所有数的乘积。
特别提醒
在常规程序中,输入、输出时提供提示是好习惯。但在本场考试中,由于系统限定,请不要在输入、输出中附带任何提示信息。
样例输入1
样例输出1
样例输入2
样例输出2
样例输入3
样例输出3
【题目大意】输入n个数,对这些数求积,检查乘积是否超过106。
【考纲知识点】 基本数据类型(一级)、多层分支 /循环结构(二级)
【解题思路】
1.首先,读取整数n,表示正整数的个数。
2.初始化长整型变量product 为1,用于存储n个数的积。
3.接下来,使用 for循环来读取n个数,并且在每次循环中将读取的数与product 相乘。
4.在每次乘法之前,我们检查product 与当前读取的数相乘后是否会超过106。如果超过,输出">1000000" 并且立即结束程序。
5.如果循环没有中途结束,证明乘积没有超过106,直接输出product 的值。
注意:在乘法之前进行了是否超过106的检查,这是为了防止不必要的计算,一旦超过就立即结束程序。如果不提前检查乘积是否超过106在极端情况会出现溢出错误。
【参考程序】
2、小杨的日字矩阵
问题描述
小杨想要构造一个N×N的日字矩阵(N为奇数),具体来说,这个矩阵共有N行,每行N个字符,其中最左列、最右列都是|,而第一行、最后一行、以及中间一行(即第
行)的第2 ~ N - 1个字符都是-,其余所有字符都是半角小写字母x。例如,一个N = 5的日字矩阵如下:
请你帮小杨根据给定的N打印出对应的“日字矩阵”。
输入描述
一行一个整数N(5 ≤ N ≤ 49,保证N为奇数)。
输出描述
输出对应的“日字矩阵”。
请严格按格式要求输出,不要擅自添加任何空格、标点、空行等任何符号。你应该恰好输出N行,每行除了换行符外恰好包含N个字符,这些字符要么是-,要么是|,要么是x。你的输出必须和标准答案完全一致才能得分,请在提交前仔细检查。
特别提醒
在常规程序中,输⼊、输出时提供提⽰是好习惯。但在本场考试中,由于系统限定,请不要在输⼊、输出中附带任何提⽰信息。
样例输入1
样例输出1
样例输入2
样例输出2
【题目大意】
输出N × N的字符矩阵,最左列、最右列为字符'|',对于除最左最右列外的每一列:第一行、最后一行以及中间行为字符'-',其余行为字符'x'。
【考纲知识点】 多层循环结构(二级)
【解题思路】
1.首先,读取整数n,表示矩阵的N行N列。
2.使用双重循环遍历矩阵的每一个位置,循环变量i为矩阵的行号,j为矩阵的列号。
3.依次检查列号、行号,根据规则输出相应字符。
【参考程序】