2023-06 GESP三级真题
题数:27
分数:100
测试时长:90min
一、选择题(每题2分,共30分)
1.高级语言编写的程序需要经过以下()操作,可以生成在计算机上运行的可执行代码。(D)(2分)
A.编辑
B.保存
C.调试
D.编译
2.二进制数11.01在进制下是(D)。(2分)
A.3.01
B.3.05
C.3.125
D.3.25
3.已知大写字符'A'的ASCII编码的十六进制表示为0x41,则字符的ASCII编码的十六进制表示为(A)。(2分)
A.46
B.47
C.48
D.49
4.以下哪个不是C++语言中的运算符?(D)(2分)
A.&
B.&&
C.*
D.**
5. 如果字符串定义为charstr[]="He11o"; ,则字符数组str的长度为(C)。(2分)
A.0
B.5
C.6
D.7
6. 一个数组定义为double array[3]; ,则这个数组占用内存的大小为(A)。(2分)
A.24
B.12
C.6
D.3
7.以下数组定义,符合C++语言语法的是(B)。(2分)
A.int a[];
B.int b['3'];
C.int c[3.0];
D.int[3] d;
8.下列关于进制的叙述,不正确的是(B)。(2分)
A.正整数的二进制表示中只会出现0和1。
B.10不是2的整数次幂,所以十进制数无法转换为二进制数。
C.从二进制转换为8进制时,可以很方便地由低到高将每3位二进制位转换为对应的一位8进制位。
D.从二进制转换为16进制时,可以很方便地由低到高将每4位二进制位转换为对应的一位16进制位。
9. 下列关于C++语言中数组的叙述,不正确的是(C)。(2分)
A.数组必须先定义后使用。
B.数组的所有元素在内存中是连续存放的。
C.除了字符数组,在定义数组时内必须有常数。
D.不能对数组赋值,但可以对数组的每个基础类型的元素赋值。
10. 一个int类型的值,做以下哪个操作,一定会变回原来的值?(D)(2分)
A.左移3位,再右移3位。
B.右移3位,再左移3位。
C.按位或7,再按位与-8。
D.按位异或7,再按位异或7。
11. 如果a和b均为int类型的变量,下列表达式能正确判断“a等于b”的是(C)。(2分)
A.((a/b) == 1)
B.((a&b) == a)
C.((a“b) == 0)
D.((a|b) == b)
12.如果a为int类型的变量,下列哪个表达式可以正确求出满足"小于等于a且是4的倍数"的整数中最大的?(A)(2分)
A.(a &(~3))
B.((a << 2) >> 2)
C.(a^3)
D.((a-1)| 3) +1
13.在下列代码的横线处填写(),可以使得输出是“24 12”。(B)(2分)
#include
using namespace std;
int main() {
int a=12,b=24;
___________//在此处填入代码 ;
a = a ^ b;
b = a ^ b;
cout << a << " " << b << endl;
return 0;
}
A.a = a ^ b
B.b = a ^ b
C.a = a + b
D.b = a + b
14. 在下列代码的横线处填写(),可以使得输出是“2”。(D)(2分)
int array[5] = {3,7,5,2,4};
int min = 0;
for (int i = 0; i < 5; i++)
if(___)// 在此处填写代码
min=array[i];
cout<< min << endl;
return 0;
}
A.min > array[i]
B.min < array[i]
C.min = array[i]
D.以上均不对
15.在下列代码的横线处埴写(),可以使得输出不是“31”。(B)(2分)
#include
using namespace std;
int main() {
int array[5] ={1,2,4,8,16};
int res = 0;
for (int i = 0; i < 5; i++)
_____________//在此处填写代码
cout << res <
A.res = res + array[i]
B.res = res & array[i]
C.res = res | array[i]
D.res = res ^ array[i]
二、判断题(每题2分,共20分)
1. 一个算法可以用不同的形式来描述,但要求描述比较规范,因此不能用自然语言描述。(错)
2. 域名是由一串用点分隔的名字来标识互联网上一个计算机或计算机组的名称,CCF编程能力等级认证官方网站的域名是gesp.ccf.org.cn,其中顶级域名是gesp。(错)
3. 数据编码方式只有原码、反码、补码三种。(错)
4. 在C++语言中,长度为n的数组,合理的下标范围是从0到n,包括0和n。(错)
5. 字符常量'\0'常用来表示字符申结束,它和字符常量'0'是不同的。(对)
6. 在C++语言中,可以使用字符(如'0')作为数组下标。(错)
7. 在C++语言中,数组被定义时,它的大小就确定了。(对)
8. 计算机中存储的数据都是二进制形式。因此,在使用C++语言编写程序时,将所有十进制数改写为相同数值的二进制数,会使得程序运行效率更高。(错)
9. 在C++语言中,表达式(0xf == 015)的值为true。(错)
10. 如果a为int类型的变量,且表达式((a|3)==3)的值为true,则说明a在从0到3之间(可能为0、可能为3)。(对)
三、编程题
1.春游
【问题描述】
老师带领同学们春游。已知班上有N位同学,每位同学有从0到N-1的唯一编号。
了集合时间,老师确认是否所有同学都到达了集合地点,就让同学们报出自己的编号。
到达的同学都会报出的编号,不会报出别人的编号,但有的同学很顽皮,会多次报出。
你能帮老师找出有哪些同学没有到达吗?
【输入描述】
输入包含2行。第一行包含两个整数N和M,表示班级有N位同学,同学们共有M次报出编号。
约定2<=N,M<=1000 第二行包含M个整数,分别为M次报出的编号。
约定所有编号都在合理范围内。
【输出描述】
输出一行。如果所有同学都到达,则输出N;否则由小到大输出所有未到达的同学编号,空格分隔。
【样例输入1】
3 3
0 2 1
【样例输出1】
3
【样例输入2】
3 5
0 0 0 0 0
【样例输出2】
1 2
参考程序:
#include
using namespace std;
bool arrive[1000];
int main(){
int n=0,m=0;
cin >> n >> m;
//初始化arrive数组为所有的同学均未报到
for(int i=0;i> code;
arrive[code] = true;
}
//依次检查n位同学是否到达
bool all = true;
for(int i=0;i
2.密码合规
【问题描述】
网站注册需要有用户名和密码,编写程序以检查用户输入密码的有效性。合规的密码应满足以下要求:
1、只能由a-z之间26个小写字母 A-Z之间26个大写字母 0-9之间10个数字以
及!@#$四个特殊字符构成。
2、密码最短长度:6个字符,密码最大长度:12个字符。
3、大写字母,小写字母和数字必须至少有其中两种,以及至少有四个特殊字符中的一个。
【输入描述】
输入一行不含空格的字符串。约定长度不超过100。该字符串被英文逗号分隔为多
段,作为多组被检测密码。
【输出描述】
输出若干行,每行输出一组合规的密码。
输出顺序以输入先后为序,即先输入则先输出。
【样例输入1】
seHJ12!@sjdkffH$123,sdf!@&12HDHa!,123&^YUhg@!
【样例输出1】
seHJ12!@
sjdkffH$123
【样例解释1】输入被英文逗号分为了四组被检测密码:"seHJ12!@"、"sjdkffH$123"、"sdf!@&12HDHa!"、"123&^YUhg@!"。
其中"sdf!@&12HDHa!"长度超过12个字符,不合规;
"123&^YUhg@!"包含四个特殊字符之外的字符不合规;
参考程序:
#include
using namespace std;
char line{101};
char pwd{101};
// 检查从 str 开始、长度为 1的密码是否合规
bool check(char * str, int 1){
if(1< 6 1 > 12)
return false;
bool hasC = false, hasL = false, hasD = false, hasS = false;
for (int i =0; str{i} != '\0'; i++){
if ('A' <= str{i} && str{i} <='z') {
hasC = true;
} else if ('a' <= str{i} && str{i} <= 'z'){
hasL = true;
} else if ('g' <= str{i} && str{i} <= 'g') {
hasD = true;
} else if (str{i} =='!' || str{i} == '@' || str{i} =='#' || str{i} =='$') {
hasS = true;
}else
return false;
}
if (!hass)
return false;
if (hasC + hasL + hasD < 2)
return false;return true;
}
int main(){
cin >> line;// 按逗号对输入进行切分,并依次判断
int len = 9;
for (int i = ; line{i} != '\0'; i++) {
if (line{i} != ',') {
pwd[len] = line[i];
len++;
}else{
pwd{len} = '\0';
if (check(pwd,len))
cout << pwd << endl;
len = 0;
}
}
if (len > 0) {
pwdr[len] = '\0'
if (check(pwd, len))
cout << pwd << endl;
}
return 0;
}