CCF GESP2023年6月认证 C++ 3级真题及答案
GESP C ++三级试卷
(满分: 100 分
学校:
考试时间: 90 分钟)
姓名:
题目 | 一 | 二 | 三 | 总分 |
得分 | | | | |
一、单选题 (每题 2 分, 共 30 分)
题号 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
答案 | D | D | A | D | C | A | B | B | C | D | C | A | B | D | B |
1. 高级语言编写的程序需要经过以下 ( ) 操作,可以生成在计算机上运行的
可执行代码。
A. 编辑
B. 保存
C. 调试
D. 编译
2. 二进制数 11.01 在十进制下是 ( ) 。
A. 3.01
B. 3.05
C. 3.125
3. 已知大写字符'A'的 ASCII 编码的十六进制表示为 0x41,则字符'F'的 ASCII 编码的十六进制表示为 ( ) 。
A. 46
B. 47
C. 48
D. 49
4. 以下哪个不是 C++语言中的运算符? ( )
A. &
B. &&
C. *
D. **
5. 如果字符串定义为 char str[] = "Hello";,则字符数组 str 的长度为( )。
A. 0
B. 5
C. 6
D. 7
6. 一个数组定义为 double array[3];,则这个数组占用内存的大小为 ( ) 。
A. 24
B. 12
C. 6
D. 3
7. 以下数组定义,符合 C++语言语法的是 ( ) 。
A. int a[];
B. int b[ '3 '];
C. int c[3.0];
D. int[3] d;
8. 下列关于进制的叙述,不正确的是 ( ) 。
A. 正整数的二进制表示中只会出现 0 和 1。
B. 10 不是 2 的整数次幂,所以十进制数无法转换为二进制数。
C. 从二进制转换为 8 进制时,可以很方便地由低到高将每 3 位二进制位转换为 对应的一位 8 进制位。
D. 从二进制转换为 16 进制时,可以很方便地由低到高将每 4 位二进制位转换 为对应的一位 16 进制位。
9. 下列关于 C++语言中数组的叙述,不正确的是 ( ) 。
A. 数组必须先定义后使用。
B. 数组的所有元素在内存中是连续存放的。
C. 除了字符数组,在定义数组时“ []” 内必须有常数。
D. 不能对数组赋值,但可以对数组的每个基础类型的元素赋值。
10. 一个 int类型的值,做以下哪个操作,一定会变回原来的值? ( )
A. 左移 3 位,再右移 3 位。
B. 右移 3 位,再左移 3 位。
C. 按位或 7,再按位与-8。
D. 按位异或 7,再按位异或 7。
11. 如果 a 和 b 均为 int类型的变量,下列表达式能正确判断“a 等于 b ”的是 ( ) 。
A. ((a / b) == 1)
B. ((a & b) == a)
C. ((a ^ b) == 0)
D. ((a | b) == b)
12. 如果 a 为 int类型的变量,下列哪个表达式可以正确求出满足“小于等于 a 且是 4 的倍数”的整数中最大的? ( )
A. (a & (~3))
B. ((a << 2) >> 2)
C. (a ^ 3)
D. ((a - 1) | 3) + 1
13. 在下列代码的横线处填写 ( ) ,可以使得输出是“24 12”。
A. a = a ^ b
B. b = a ^ b
C. a = a + b
14. 在下列代码的横线处填写 ( ) ,可以使得输出是“2”。
A. min > array[i]
B. min < array[i]
C. min = array[i]
D. 以上均不对。
15. 在下列代码的横线处填写 ( ) ,可以使得输出不是“31”。
A. res = res + array[i]
B. res = res & array[i]
C. res = res | array[i]
D. res = res ^ array[i]
二、判断题 (每题 2 分, 共 20 分)
题号 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
答案 | × | × | × | × | √ | √ | √ | × | × | √ |
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) 。
三、编程题 (每题 25 分, 共 50 分)
题号 | 1 | 2 |
答案 | | |
1. 春游
【问题描述】
老师带领同学们春游。已知班上有N位同学,每位同学有从 0 到N− 1 的唯
一编号。到了集合时间,老师确认是否所有同学都到达了集合地点,就让同学们 报出自己的编号。到达的同学都会报出的编号,不会报出别人的编号,但有的同 学很顽皮,会多次报出。你能帮老师找出有哪些同学没有到达吗?
【输入描述】
输入包含 2 行。第一行包含两个整数N和M ,表示班级有N位同学,同学们 共有M次报出编号。约定 2 ≤ N, M ≤ 1000。
第二行包含M个整数,分别为M次报出的编号。约定所有编号都在合理范围 内。
【输出描述】
输出一行。如果所有同学都到达,则输出N;否则由小到大输出所有未到达 的同学编号,空格分隔。
【样例输入 】
3 3 0 2 1 |
【样例输出 1】
3 |
【样例输入 2】
3 5 0 0 0 0 0 |
【样例输出 2】
1 2 |
【参考程序】
#include <iostream> using namespace std; bool arrive[1000]; int main() { int n = 0, m = 0; cin >> n >> m; // 初始化 arrive 数组为所有同学均未报到 for (int i = 0; i < n; i++) arrive[i] = false; // 依次报到 m 次 for (int i = 0; i < m; i++) { int code = 0; cin >> code; arrive[code] = true; } // 依次检查 n 位同学是否到达 bool all = true; for (int i = 0; i < n; i++) { if (!arrive[i]) { if (all) { cout << i; all = false; } else { cout << " " << i; } } } // 处理全部到达的特殊情况 if (all) cout << n; cout << endl; return 0; } |
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 <iostream> using namespace std; |
char line[101]; char pwd[101]; // 检查从 str 开始、长度为 l 的密码是否合规 bool check(char * str, int l) { if (l < 6 | | l > 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 ( '0' <= str[i] && str[i] <= '9') { 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 = 0; for (int i = 0; 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) { pwd[len] = '\0'; if (check(pwd, len)) cout << pwd << endl; } return 0; } |

添加 家长论坛微信
全部 0条评论