2024-03 GESP C++ 二级试题及答案
单选题(每题 2 分,共 30 分)
第 1 题
下列流程图的输出结果是?( )
A. 优秀
B. 良好
C. 不及格
D. 没有输出
第 2 题
以下选项中不符合 C++变量命名规则的是?( )
A. student
B. 2_from
C. _to
D. Text
第 3 题
以下选项中,不能用于表示分支结构的C++保留字是?( )
A. switch
B. return
C. else
D. if
第 4 题
下列说法错误的是?( )
A. while 循环满足循环条件时不断地运行,直到指定的条件不满足为止
B. if 语句通常用于执行条件判断
C. 在C++中可以使用 foreach 循环
D. break 和continue 语句都可以用在for 循环和while 循环中
第 5 题
下列4个表达式中,答案不是整数8的是?( )
A. abs(-8)
B. min(max(8, 9), 10)
C. int(8.88)
D. sqrt(64)
第 6 题
下面C++代码执行后的输出是?()
int n, a, m, i;
n = 3, a = 5;
m = (a - 1) * 2;
for (i = 0; i < n - 1; i++)
m = (m - 1) * 2;
cout << m;
A. 8
B. 14
C. 26
D. 50
第 7 题
下面C++代码执行后的输出是?()
int n, i, result;
n = 81;
i = 1, result = 1;
while (i * i <= n)
{
if (n % (i * i) == 0)
result = i * i;
i += 1;
}
cout << result;
A. 16
B. 36
C. 49
D. 81
第 8 题
下面C++代码执行后的输出是?()
int s, t, ans;
s = 2, t = 10;
ans = 0;
while (s != t)
{
if (t % 2 == 0 && t / 2 >= s)
t /= 2;
else
t -= 1;
ans += 1;
}
cout << ans;
A. 2
B. 3
C. 4
D. 5
第 9 题
下面C++代码执行后的输出是?()
int n, masks, days, cur;
n = 17, masks = 10, days = 0;
cur = 2;
while (masks != n)
{
if (cur == 0 || cur == 1)
masks += 7;
masks -= 1;
days += 1;
cur = (cur + 1) % 7;
}
cout << days;
A. 5
B. 6
C. 7
D. 8
第 10 题
以下C++代码判断一个正整数N的各个数位是否都是偶数。如果都是,则输出“是”,否则输出“否”。例如,N=2024时输出“是”。则横线处应填入( )。
int N, Flag;
cin >> N;
Flag = true;
while (N != 0){
if (N % 2 != 0){
Flag = false;
_____________
}
else
N /= 10;
}
if (Flag == true)
cout << "是";
else
cout << "否";
A. break
B. continue
C. N = N / 10
D. N = N % 10
第 11 题
有句俗话叫“三天打渔,两天晒网”。如果小杨前三天打渔,后两天晒网,一直重复这个过程,以下程序代码用于判断,第n天小杨是在打鱼还是晒网,横线处应填写?( )
int n, i;
cin >> n;
i = n % 5;
if (__________________) // 在此处填写代码
cout << "晒网";
else
cout << "打鱼";
A. i == 0
B. i == 4
C. i == 0 && i == 4
D. i == 0 || i == 4
第 12 题
一个数的所有数字倒序排列后这个数的大小保持不变,这个数就是回文数,比如 101 与 6886 都是回文数,而 100 不是回文数。以下程序代码用于判断一个数是否为回文数,横线处应填写?( )
int n, a, k;
cin >> n;
a = 0;
k = n;
while (n > 0){
a = __________; // 在此处填写代码
n /= 10;
}
if (a == k)
cout << "是回文数";
else
cout << "不是回文数";
A. 10 * a + n % 10
B. a + n % 10
C. 10 * a + n / 10
D. a + n / 10
第 13 题
给定两个整数n与k,打印出一个栅栏图形,这个栅栏应该分成n段,段与段之间的间隔为 + , 段内的填充为k个 - 。形如n=5,k=6时,图形如下:
以下程序代码用于绘制该图形,横线处应填写?( )
int n, k, i, j;
n = 5, k = 6;
for (i = 0; i < n; i++){
__________ // 在此处填写代码
for (j = 1; j < k; j++)
cout
<< '-';
}
cout << '+';
A. cout << '+' << endl;
B. cout << '+' << ' ' << endl;
C. cout << '+';
D. cout << '+' << ' ';
第 14 题
小杨的父母最近刚刚给他买了一块华为手表,他说手表上跑的是鸿蒙,这个鸿蒙是。( )
A. 小程序
B. 计时器
C. 操作系统
D. 神话人物
第 15 题
中国计算机学会(CCF)在2024年1月27日的颁奖典礼上颁布了王选奖,王选先生的重大贡献是( )。
A. 制造自动驾驶汽车
B. 创立培训学校
C. 发明汉字激光照排系统
D. 成立方正公司
判断题(每题 2 分,共 20 分)
第 1 题
如果有以下C++代码:
double s;
int t;
s = 18.5;
t = int(s) + 10;
那么cout << t 的结果为 28.5 。( )
第 2 题
Xyz , xYz , xyZ 是三个不同的变量。( )
第 3 题
cout << (8< 9< 10) 的输出结果为true 。( )
第 4 题
for (i = 0; i < 100; i+=2) ; 语句中变量i的取值范围是0到99。( )
第 5 题
C++中cout << float(2022) 与 cout << float('2022') 运行后的输出结果均为2022。( )
第 6 题
已知A 的ASCII码值为65,表达式int('C')+abs(-5.8) 的值为72.8。( )
第 7 题
bool() 函数用于将给定参数或表达式转换为布尔类型。语句 bool(-1) 返回的是 false 值。( )
第 8 题
如果变量a的值使得C++表达式sqrt(a)==abs(a) ,则a 的值为0。( )
第 9 题
小杨今年春节回奶奶家了,奶奶家的数字电视要设置ip地址并接入到WIFI盒子才能收看节目,那这个WIFI盒子具有路由器的功能。( )
第 10 题
任何一个for 循环都可以转化为等价的while 循环( )。
编程题(每题 25 分,共 50 分)
编程题 1
试题名称:乘法问题
问题描述
小 A 最近刚刚学习了乘法,为了帮助他练习,我们给他若干个正整数,并要求他将这些数乘起来。对于大部分题目,小 A 可以精准地算出答案,不过,如果这些数的乘积超过10^6,小 A 就不会做了。请你写一个程序,告诉我们小 A 会如何作答。
输入描述
第一行一个整数 ,表示正整数的个数。
接下来n行,每行一个整数 。小 A 需要将所有的a乘起来。
保证 n<=50,a<=100 。
输出描述
输出一行,如果乘积超过10^6,则输出 >1000000 ;否则输出所有数的乘积。
特别提醒
在常规程序中,输入、输出时提供提示是好习惯。但在本场考试中,由于系统限定,请不要在输入、输出中附带任何提示信息。
样例输入 1
2
3
5
样例输出 1
15
样例输入 2
3
100
100
100
样例输出 2
1000000
样例输入 3
4
100
100
100
2
样例输出 3
>1000000
编程题 2
试题名称:小杨的日字矩阵
问题描述
小杨想要构造一个N*N的日字矩阵(N为奇数),具体来说,这个矩阵共有N行,每行N个字符,其中最左列、最右列都是 | ,而第一行、最后一行、以及中间一行(即第(N+1)/2行)的第2~N-1个字符都是 - ,其余所有字符都是半角小写字母 x 。例如,一个N=5的日字矩阵如下:
请你帮小杨根据给定的N打印出对应的“日字矩阵”。
输入描述
一行一个整数N(5<=N<=49 ,保证N为奇数)。
输出描述
输出对应的“日字矩阵”。
请严格按格式要求输出,不要擅自添加任何空格、标点、空行等任何符号。你应该恰好输出N行,每行除了换行符外恰好包含N个字符,这些字符要么是 - ,要么是 | ,要么是 x 。你的输出必须和标准答案完全一致才能得分,请在提交前仔细检查。
特别提醒
在常规程序中,输入、输出时提供提示是好习惯。但在本场考试中,由于系统限定,请不要在输入、输出中附带任何提示信息。
样例输入 1
5
样例输出 1
样例输入 2
7
样例输出 2
_____________________________________________________________________________
参考答案:
单选
1、B 2、B 3、B 4、C 5、B
6、C 7、D 8、B 9、C 10、A
11、D 12、A 13、C 14、C 15、C
判断
1、错 2、对 3、对 4、错 5、错
6、对 7、错 8、错 9、对 10、对
编程题
// 1. 参考代码
#include<iostream>
#include<cstdio>
using namespace std;
int main()
{
int n,m;
cin>>n;
long long ans=1;
for(int i=1;i<=n;i++){
cin>>m;
ans*=m;
if(ans>1000000){
cout<<">1000000"<<endl;
return 0;
}
}
cout<<ans<<endl;
return 0;
}
// 2. 参考代码
#include<iostream>
#include<cstdio>
using namespace std;
int main()
{
int n;
cin>>n;
for(int i=1;i<=n;++i)
{
cout<<'|';
if(i==1||i==n||i==(n/2+1)){
for(int j=1;j<=n-2;j++) cout<<'-';
}else{
for(int j=1;j<=n-2;j++) cout<<'x';
}
cout<<'|'<<endl;
}
return 0;
}