CCF编程能力等级认证GESP—C++1级—20231209

该博客包含C++考试的单选题、判断题及编程题。单选题考查变量名、表达式求值等知识;判断题涉及C++表达式结果判断;编程题有推算考试星期和报数跳过倍数问题,帮助读者巩固C++基础和算法应用。

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

1、以下C++不可以作为变量的名称的是( )。

A. CCF GESP
B. ccfGESP
C. CCFgesp
D. CCF_GESP

正确答案:A
在C++中,变量名是由一系列字符组成的,这些字符可以是字母、数字或下划线。但是,变量名不能包含空格。

2、 C++表达式 10 - 3 * (2 + 1) % 10 的值是( )。

A. 0
B. 1
C. 2
D. 3

正确答案:B
10 − 3 ∗ ( 2 + 1 ) % 10 10 - 3 * (2 + 1) \% 10 103(2+1)%10
= 10 − 3 ∗ 3 % 10 =10 - 3 * 3 \% 10 =1033%10
= 10 − 9 % 10 = 10 - 9 \% 10 =109%10
= 10 − 9 = 10 - 9 =109
= 1 = 1 =1

3、假设现在是上午十点,求出N小时(正整数)后是第几天几时,如输入20小时则为第2天6点,如N输入4则为今天14点。为实现相应功能,应在横线处填写代码是( )。

int N, dayX, hourX;
cin >> N;
dayX = ____, hourX = ____;
if (dayX == 0)
	cout << "今天" << hourX << "点";
else
	cout << "第" << (dayX + 1) << "天" << hourX << "点";
A. (10 + N) % 24 , (10 + N) / 24
B. (10 + N) / 24 , (10 + N) % 24
C. N % 24 , N / 24
D. 10 / 24 , 10 % 24

正确答案:B
首先通过除以24来找出天数,然后通过模24来找出剩余的小时数。注意,这里我们不需要考虑日期的实际天数(例如2月可能只有28或29天),因为我们只关心小时数如何影响天数,并且这个计算是基于24小时制的。

4、下面的程序用于判断N是否为偶数,横线处应填写代码是( )。

cin >> N;
if (____)
	cout << "偶数";
else
	cout << "奇数"; 
A. N % 2 == 0
B. N % 2 = 0
C. N % 2
D. N % 2 != 0

正确答案:A
要判断一个整数N是否为偶数,我们可以通过检查N除以2的余数是否为0来实现。
在C++中,我们使用模运算符%来获取余数,并使用==来比较两个值是否相等。

5、下面对C++代码执行后输出的描述,正确的是( )。

cin >> N;
cnt = 0;
for (int i = 1; i < N; i++)
	cnt += 1;
cout << cnt;
A. 如果输⼊的N是⼩于等于2整数,第5⾏将输出0。
B. 如果输⼊的N是⼤于等于2整数,第5⾏将输出N-1。
C. 如果输⼊的N是⼤于等于2整数,第5⾏将输出N。
D. 以上说法均不正确。

正确答案:B
A选项:这个选项是不正确的。因为当N大于等于2时,循环至少会执行一次(当i等于1时),所以cnt至少会被加1,因此输出不会是0。
B选项:这个选项是正确的。因为循环从1迭代到N-1,所以cnt会被加N-1次(从i=1到i=N-1),因此输出将是N-1。
C选项:这个选项是不正确的。如之前所述,cnt只会被加N-1次,所以输出不会是N。
D选项:由于B选项是正确的,所以这个选项也是不正确的。

6、下面C++代码执行后的输出是( )。

cnt = 0;
for (int i = 1; i < 10; i++){
	cnt += 1;
	i += 2;
}
cout << cnt;
A. 10
B. 9
C. 3
D. 1

正确答案:C

i < 10cnti += 2i++
true134
true267
true3910
false

7、下面C++代码执行后的输出是( )。

	cnt = 0;
	for (int i = 1; i < 20; i++){
		if (i % 2)
			continue;
		else if (i % 3 == 0 && i % 5 == 0)
			break;
		cnt += i;
	}
	cout << cnt;
A. 90
B. 44
C. 20
D. 10

正确答案:A

ii < 20i % 2i % 3 == 0 && i % 5 == 0cnt备注
1truetruei为奇数时均continue
2truefalsefalse2
4truefalsei为偶数时,该条件不可能成立6
6truefalsefalse12
8truefalsefalse20
10truefalsefalse30
12truefalsefalse42
14truefalsefalse56
16truefalsefalse72
18truefalsefalse90
20false

8、下面C++代码执行后的输出是( )。

	N = 10;
	cnt = 0;
	while (1){
		if (N == 0) break;
		cnt += 1;
		N -= 2;
	}
	cout << cnt;
A. 11
B. 10
C. 5
D. 4

正确答案:C

N == 0cntN
false18
false26
false34
false42
false50
true

9、下面C++代码用于判断一个数是否为质数(素数),在横线处应填入代码是( )。

cin >> N;
cnt = 0;
for (int i = 1; i < N + 1; i++)
	if (N % i == 0)
		____;
	if (cnt == 2)
		cout << N << "是质数。";
	else
		cout << N << "不是质数。";
A. cnt = 1
B. cnt = 2
C. cnt =+ 1
D. cnt += 1

正确答案:D
在C++代码中,要判断一个数是否为质数,我们需要遍历从2到该数(不包括该数本身)的所有整数,并检查它们是否能被该数整除。如果能被整除,那么该数就不是质数。在本题遍历的过程中,我们用一个计数器cnt来记录能整除该数的整数的个数。如果cnt等于2(即该数只能被1和它本身整除),那么该数是质数;否则,不是质数。

10、对下面的代码,描述正确的是( )。

#include <stdlib.h>

using namespace std;

int main(){
	int arr[] = {2, 6, 3, 5, 4, 8, 1, 0, 9, 10};
	for (int i = 0; i < 10; i++)
		cout << arr[i] << " ";
	cout << i << endl;
	cout << endl;
	return 0;
}
A. 输出 2 6 3 5 4 8 1 0 9 10 10
B. 输出 2 6 3 5 4 8 1 0 9 9
C. 输出 2 6 3 5 4 8 1 0 9 10
D. 提示有编译错误

正确答案:D

11、执行下面C++代码后输出是( )。

cnt = 0;
for (i = 10; i > 3; i -= 3)
	cnt = cnt + i;
cout << cnt;
A. 3
B. 21
C. 27
D. 49

正确答案:B

i > 3cnti
true107
true174
true211
false

12、定义变量 char c ,下面对 c 赋值的语句,不符合语法的是( )。

A. c = (char)66;
B. c = (char)(66);
C. c = char(66);
D. c = char 66;

正确答案:D
强制类型转换的三种方法:
1)(数据类型) 变量名/操作数
2)(数据类型) (变量名/操作数)
3)数据类型 (变量名/操作数)

13、以下C++代码对大写字母 ‘A’ 到 ‘Z’ 分组,对每个字母输出所属的组号,那么输入 ‘C’ 时将输出的组号是?( )。

	char c;
	while (1){
		cin >> c;
		if (c == 'q') break;
		switch(c){
			case 'A': cout << "1 "; break;
			case 'B': cout << "3 "; 
			case 'C': cout << "3 "; 
			case 'D': cout << "5 "; break;
			case 'E': cout << "5 "; break;
			default: cout << "9 ";
		}
		cout << endl;
	}
A. 3
B. 3 5
C. 3 5 9
D. 以上都不对

正确答案:B
当输入字符’C’时,代码将执行switch语句,并匹配到case ‘C’:。然而,在case ‘C’:后面并没有break;语句,这会导致代码继续执行下一个case,即case ‘D’:。因此,对于字符’C’,代码会输出"3 "(对应case ‘C’:)然后继续执行到case ‘D’:输出"5 "(虽然实际上并没有匹配到’D’)。

14、某公司新出了一款无人驾驶的小汽车,通过声控智能驾驶系统,乘客只要告诉汽车目的地,车子就能自动选择一条优化路线,告诉乘客后驶达那里。请问下面哪项不是驾驶系统完成选路所必须的。( )

A. 麦克风
B. 扬声器
C. 油量表
D. 传感器

正确答案:C
在无人驾驶小汽车的声控智能驾驶系统中,麦克风用于接收乘客的语音指令,扬声器用于向乘客提供信息(如选择的路线或到达目的地的通知等),传感器(如GPS、雷达、摄像头等)用于环境感知和定位,以便选择优化路线并安全驾驶。而油量表是显示车辆燃油剩余量的装置,它并不是驾驶系统完成选路所必须的。

15、现代计算机是指电子计算机,它所基于的是( )体系结构。

A. 艾伦·图灵
B. 冯·诺依曼
C. 阿塔纳索夫
D. 埃克特-莫克利

正确答案:B
现代计算机,也就是电子计算机,主要是基于冯·诺依曼体系结构进行设计的。冯·诺依曼提出了计算机制造的三个基本原则,即采用二进制逻辑、程序存储执行以及计算机由五个部分组成(运算器、控制器、存储器、输入设备、输出设备),这套理论被称为冯·诺依曼体系结构。

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

1、C++表达式 int(3.14) 的值为3。( )

正确答案:正确
在C++中,使用int()对浮点数进行强制类型转换会去掉小数部分,只保留整数部分。因此,int(3.14)的值确实是3。

2、C++语句 cout << (2 * 3, 3 % 10, 2+3) 的输出为 6,3,5 。 ( )

正确答案:错误
在C++中,逗号运算符,会计算其左侧的表达式,然后丢弃结果,接着计算右侧的表达式并返回其结果。因此,cout << (2 * 3, 3 % 10, 2+3)只会输出2+3的结果,即5。

3、for(int i = 1; i < 10; i += 3;) ; 表示i从1开始到10结束间隔为3,相当于1、4、7、10。( )

正确答案:错误
这个for循环的确是从1开始,并且每次增加3,但循环条件i < 10意味着循环会在i变成10之前停止。因此,它实际上只会遍历1、4、7,并不会遍历到10。

4、C++表达式010+100+001的值为111。( )

正确答案:错误
在C++中,以0开头的整数字面量是八进制数。因此,010是八进制的10,即十进制的8;100是十进制的100;001是八进制的1,即十进制的1。所以,010+100+001的值是109,不是111。

5、if 语句中的条件表达式的结果可以为 int 类型。

正确答案:正确
在C++中,if语句的条件表达式必须能够转换为布尔类型(bool)。任何非零整数在转换为布尔类型时都为true,而零为false。因此,if语句中的条件表达式确实可以是int类型。

6、 在下面的C++代码 while(1) continue; 中,由于循环中的 continue 是无条件被执行,因此将导致死循环。( )

正确答案:正确
while(1)创建了一个无限循环,因为条件始终为真。在循环体中,continue语句会立即跳过当前迭代的剩余部分,并开始下一次迭代。由于没有退出循环的条件或语句,这会导致一个死循环。

7、C++表达式 ( ‘1’ + ‘1’ == ‘2’ ? flag = 1 : flag = 2) 的结果值和表达式 (flag==2) 的相同。( )

正确答案:错误
字符在C++中是以其ASCII值存储的。'1’的ASCII值是49,'2’的ASCII值是50。因此,‘1’ + '1’等于98,不等于’2’的ASCII值50。因此,条件运算符? :的结果是flag = 2,即2(赋值表达式的结果是被赋的值)。这与flag==2(其结果是布尔值)不同。

8、 在C++的程序中,不能用 scanf 作为变量名。( )

正确答案:错误

9、 小杨最近在准备考GESP,他用的Dev C++来练习和运行程序,所以Dev C++也是一个小型操作系统。( )

正确答案:错误
Dev-C++是一个集成开发环境(IDE),用于编写、编译和运行C++程序。它不是一个操作系统。操作系统是计算机上的一个基础软件层,负责管理硬件资源,为其他软件提供运行环境。Dev-C++只是在这个操作系统上运行的一个应用程序。

10、任何一个 while 循环都可以转化为等价的 for 循环( )。

正确答案:正确

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

小杨的考试

【问题描述】
今天是星期X,小杨还有N天就要考试了,你能推算出小杨考试那天是星期几吗?(本题中使用7表示星期日)
【输入描述】
输入 2 行,第一行一个整数X(1<= X <= 7);第二行一个整数N(1 <= N <= 364)。
【输出描述】
输出一个整数,表示小杨考试那天是星期几。
【特别提醒】
在常规程序中,输入、输出时提供提示是好习惯。但在本场考试中,由于系统限定,请不要在输入、输出中附带任何提示信息。
【样例输入 1】
1
6
【样例输出 1】
7
【样例解释 1】
今天是星期 1,那么 6 天后就是星期日,星期日在本题中用7表示。
【样例输入 2】
5
3
【样例输出 2】
1
【样例解释 2】
今天是星期 5,那么 3 天后就是星期 1。

#include <iostream>

using namespace std;

int main(){
    int x, n;
    cin >> x >> n;
    int ans = (x + n) % 7;
    if (ans == 0){
        cout << 7 << endl;
    }else{
        cout << ans << endl;
    }
    return 0;
}

小杨报数

【问题描述】
小杨需要从1到N报数。再报数过程中,小杨希望跳过M的倍数。例如,如果N=5,M=2,那么小杨就需要依次报出1、3、5。
现在,请你依次输出小杨报的数。
【输入描述】
输入 2 行,第一行一个整数N(1 <= N <= 1,000);第二行一个整数M(2 <= M <= 100)。
【输出描述】
输出若干行,依次表示小杨报的数。
【特别提醒】
在常规程序中,输入、输出时提供提示是好习惯。但在本场考试中,由于系统限定,请不要在输入、输出中附带任何提示信息。
【样例输入 1】
5
2
【样例输出 1】
1
3
5
【样例输入 2】
10
3
【样例输出 2】
1
2
4
5
7
8
10

#include <iostream>

using namespace std;

int main(){
    int n, m;
    cin >> n >> m;
    for (int i = 1; i <= n; i++){
        if (i % m == 0)
            continue;
        cout << i << endl;
    }
    return 0;
}
### 关于CCF GESP C++ 5编程能力等级认证模拟题解析 #### 模拟题目一:多态机制的理解与应用 当定义基类指针指向派生类对象并调用虚函数时,实际会调用派生类中的版本。因此,在给定的代码片段中创建了一个`base`类型的指针`b`以及一个`derived`实例`d`,接着让`b`指向`d`,最后通过`b->show()`来触发成员方法调用。由于存在继承关系且`show`被声明为虚拟函数,所以最终输出将是“derived class”[^1]。 ```cpp #include <iostream> using namespace std; class base { public: virtual void show() { cout << "base class" << endl; } }; class derived : public base { public: void show() override { cout << "derived class" << endl; } }; int main() { base* b; derived d; b = &d; b->show(); return 0; } ``` #### 模拟题目二:数组越界访问风险分析 对于第二个例子而言,程序试图打印字符数组`geSP`中位于索引位置等于整型数组`x`大小处的那个元素。考虑到`sizeof(x)`返回的是整个数组占用字节数而非元素数量,并且假设每个整形占四个字节,则该表达式的计算结果应为16(即4 * sizeof(int)),这显然超出了字符串的实际长度范围。这种情况下可能会导致未定义行为的发生,具体表现为可能显示随机内存内容或引发异常终止等问题[^2]。 ```cpp int main() { int x[] = {2, 0, 2, 4}; char geSP[] = "Grade Examination of SP"; cout << geSP[sizeof(x)] << endl; cout << endl; return 0; } ``` #### 模拟题目三:不常见调试技巧的选择 面对复杂逻辑错误或者难以定位的问题时,通常建议采用多种方式相结合来进行排查工作。选项A至C均属于较为常规有效的做法;然而D项涉及到了汇编层面的操作,除非开发者具备深厚底层知识背景并且确实有必要深入探究指令集细节外,一般不会作为首选方案考虑。故而最不可能成为常用解决办法的就是跟踪汇编码[^3]。 #### 模拟题目四:位运算符特性考察 针对给出的选择题,可以逐一验证各个选项: - `2>>1=1`, `1>>1=0`: 不相同; - `(2>>2)=0`, `(1>>1)=0`: 相同; - `(11^00)=(11)_bin=(3)_dec`, `(1^0)=1`: 不相同; - `~0=-1`(补码表示法下),不是正数1。 综上所述,只有B选项描述成立[(2>>2)和(1>>1)的结果相等][^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

青岛少儿编程-王老师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值