当前位置: 首页 > news >正文

CCF-GESP 等级考试 2023年12月认证C++一级真题解析

2023年12月真题

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

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

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

正确答案:A
解析

  • A: 变量名不能包含空格,因此 “CCF GESP” 是不合法的。
  • B: “ccfGESP” 是合法的,合符变量命名规则,使用了大小写字母。
  • C: “CCFgesp” 同样是合法的,使用了大小写字母,符合命名规则。
  • D: “CCF_GESP” 使用了下划线和大写字母,这也是合法的。

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

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

正确答案:B
解析

  • A: 0 不正确,实际计算得1。
  • B: 正确答案,按照操作符优先级计算得1。
  • C: 2 不正确,实际计算得1。
  • D: 3 不正确,实际计算得1。

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

int N, dayX, hourX;
cin >> N;
dayX = ______, hourX = _______;
if(dayX == 0)cout << "今天" << hourX << "点";
elsecout << "第" << (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
解析

  • A: 不正确,计算顺序颠倒,会导致天数和小时数错误。
  • B: 正确的计算方式,正确处理小时数和天数的换算。
  • C: 不正确,没有加上当前的时间10点。
  • D: 不正确,10 / 24 结果为0,10 % 24 结果为10,无法正确计算时间。

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

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

正确答案:A
解析

  • A: 正确,判断条件符合偶数的定义。
  • B: 语法错误,应为比较操作 == 而非赋值操作 =
  • C: 不正确,因为该条件判断奇数,而非偶数。
  • D: 不正确,因为该条件判断奇数,而非偶数。

第 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的整数,第5行将输出0:不正确,对于N=2,输出为1。
  • B: 如果输入的N是大于等于2的整数,第5行将输出N-1:正确,循环从1到N-1,共计N-1次。
  • C: 如果输入的N是大于等于2的整数,第5行将输出N:不正确,输出应为N-1。
  • 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
解析

  • A: 不正确,循环执行次数少于10。
  • B: 不正确,循环执行次数少于9。
  • C: 正确,i从1开始,每次增加3,共执行3次。
  • D: 不正确,循环执行次数多于1次。

第 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
解析

  • A: 正确,总和为90。
  • B: 不正确,总和达到90。
  • C: 不正确,总和超过20。
  • D: 不正确,总和超过10。

第 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
解析

  • A: 不正确,循环执行次数少于11。
  • B: 不正确,循环执行次数少于10。
  • C: 正确,N从10开始,每次减2,共执行5次。
  • D: 不正确,循环执行次数多于4次。

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

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

正确答案:D
解析

  • A: 不正确,只会在第一次满足条件时计数,错误。
  • B: 不正确,只会在第一次和第二次满足条件时计数,错误。
  • C: 语法错误,应为cnt += 1
  • D: 正确,计数器在每次满足条件时自增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
解析

  • A: 不正确,代码有错误。
  • B: 不正确,代码有错误。
  • C: 不正确,代码有错误。
  • D: 正确,代码中访问未定义的变量i

第 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
解析

  • A: 不正确,计算错误。
  • B: 正确,10 + 7 + 4 = 21。
  • C: 不正确,计算错误。
  • D: 不正确,计算错误。

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

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

正确答案:D
解析

  • A: 正确,合法的类型转换和赋值。
  • B: 正确,合法的类型转换和赋值。
  • C: 正确,合法的类型转换和赋值。
  • D: 不正确,缺少括号,语法错误。

第 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"; break;case 'C' : cout << "3"; break;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
解析

  • A: 不正确,输入’C’的输出为3。
  • B: 正确,根据switch语句,输入’C’的输出为3,'E’的输出为5。
  • C: 不正确,输入’C’的输出为3。
  • D: 不正确,选项B是正确的。

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

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

正确答案:C
解析

  • A: 不正确,麦克风用于接收语音指令,是必须的。
  • B: 不正确,扬声器用于提供语音反馈,是必须的。
  • C: 正确,油量表仅用于显示油量,不直接影响选路。
  • D: 不正确,传感器用于感知环境,是必须的。

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

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

正确答案:B
解析

  • A: 不正确,图灵是计算机科学的奠基人之一,但现代计算机体系结构主要基于冯·诺依曼的设计。
  • B: 正确,冯·诺依曼体系结构是现代计算机的基础设计。
  • C: 不正确,阿塔纳索夫设计了早期的电子计算机,但其结构未广泛应用于现代计算机。
  • D: 不正确,尽管他们是ENIAC计算机的设计者,但现代计算机体系结构主要基于冯·诺依曼的设计。

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

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

正确答案:√

解析:

  • C++中的 int(3.14) 会将浮点数3.14转换为整数3。

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

正确答案:×

解析:

  • 逗号运算符返回最后一个表达式的值,所以 cout << (2 * 3, 3 % 10, 2 + 3) 实际输出为5。

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

正确答案:×

解析:

  • i 的值依次为1、4、7,当 i 达到10时不满足 i < 10,循环结束,所以 i 的值不会达到10。

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

正确答案:×

解析:

  • 前导0表示八进制,所以 010 为八进制的10,即十进制的8,001 为八进制的1,所以表达式的值为8 + 100 + 1 = 109。

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

正确答案:√

解析:

  • 在C++中,if语句的条件表达式可以是int类型,非零值为真,零为假。

第 6 题 在下⾯的C++代码while(1) continue;中,由于循环中的continue是⽆条件被执⾏,因此将导致死循环。( )

正确答案:√

解析:

  • while(1) 是一个无限循环,continue 语句会使得控制流直接回到循环的开头,因此会导致死循环。

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

正确答案:×

解析:

  • '1'+'1' 的ASCII值相加等于98,不等于字符’2’的ASCII值50,因此表达式 ('1'+'1'=='2'? flag=1:flag=2) 的结果是 flag=2,与 flag==2 的结果不同。

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

正确答案:×

解析:

  • scanf 不是C++的关键字,可以用作变量名,尽管不建议这样做以避免混淆。

第 9 题 ⼩杨最近在准备考GESP,他⽤的Dev C++来练习和运⾏程序,所以Dev C++也是⼀个⼩型操作系统。( )

正确答案:×

解析:

  • Dev C++ 是一个集成开发环境(IDE),不是操作系统。

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

正确答案:√

解析:

  • 所有的 while 循环都可以通过 for 循环的初始化、条件和递增部分来实现,因此可以相互转换。

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

3.1 编程题 1 (小杨的考试)

3.1.1 问题描述

今天是星期 X,小杨还有 N 天就要考试了,你能推算出小杨考试那天是星期几吗?(本题中使用 7 表示星期日)

3.1.2 输入描述

输入 2 行,第 1 行一个整数 X(1 ≤ X ≤ 7);第 2 行一个整数 N(1 ≤ N ≤ 364)。

3.1.3 输出描述

输出一个整数,表示小杨考试那天是星期几。

3.1.4 特别提醒

在常规程序中,输入、输出时提供提示是好习惯。但在本场考试中,由于系统限定,请不要在输入、输出中附带任何提示信息。

3.1.5 样例输入 1
1
6
3.1.6 样例输出 1
7
3.1.7 样例解释 1

今天是星期 1,那么 6 天后就是星期日,星期日在本题中用 7 表示。

3.1.8 样例输入 2
5
3
3.1.9 样例输出 2
1
3.1.10 样例解释 2

今天是星期 5,那么 3 天后就是星期 1。

3.1.11 参考程序
#include <stdio.h>
int main(int argc, char **argv) {int x, n;// 从标准输入读取两个整数,表示今天是星期几和还有几天考试scanf("%d%d", &x, &n);// 计算考试那天是星期几,并输出结果printf("%d\n", (x - 1 + n % 7) % 7 + 1);return 0;
}

解释:

  1. 读取输入:

    • 程序从标准输入读取两个整数,分别是 XNX 表示今天是星期几,N 表示还有多少天就是考试日。
  2. 公式推导:

    • 由于一周有 7 天,我们可以利用模运算来简化计算。例如,今天是星期 X,再过 N 天的情况可以用 (X + N) 来表示星期几。
    • 但是直接用 (X + N) 可能会超出 7,因此需要取模 (X + N) % 7 来将值保持在 1 到 7 之间。
    • 具体公式为 (X - 1 + N % 7) % 7 + 1,其中:
      • X - 1 是将 X 转换为从 0 开始的索引(即 X 为 1 时,代表第 0 天)。
      • N % 7 是计算 N 天后是几天内的第几天(避免超过一周)。
      • (X - 1 + N % 7) % 7 计算从 0 开始的索引,得到一个在 0 到 6 范围内的值。
      • 最后再加 1 将索引转换回从 1 开始的星期几表示。
  3. 输出结果:

    • 将计算结果输出,即考试当天是星期几。

详细解释计算过程:

  • 如果今天是星期 X,距离考试还有 N 天,那么我们可以通过 X + N 计算出考试日的星期几。
  • 例如,今天是星期 1,距离考试还有 6 天,则 1 + 6 = 7,即星期日(7 表示星期日)。
  • 由于一周只有 7 天,所以需要对总天数取模运算以确保结果在 1 到 7 之间。
  • 公式 (X - 1 + N % 7) % 7 + 1 通过转换和取模确保结果在正确范围内。
    通过这种方式,程序能够准确地计算出小杨考试当天是星期几,并输出结果。

3.2 编程题 2 (小杨报数)

3.2.1 问题描述

小杨需要从 1 到 n 报数。在报数过程中,小杨希望跳过 m 的倍数。例如,如果 n 为 5,m 为 2,那么小杨就需要依次报出 1、3、5。
现在,请你依次输出小杨报的数。

3.2.2 输入描述

输入 2 行,第 1 行一个整数 n(1 ≤ n ≤ 100);第 2 行一个整数 m(1 ≤ m ≤ 10)。

3.2.3 输出描述

输出若干行,依次表示小杨报的数。

3.2.4 特别提醒

在常规程序中,输入、输出时提供提示是好习惯。但在本场考试中,由于系统限定,请不要在输入、输出中附带任何提示信息。

3.2.5 样例输入 1
5
2
3.2.6 样例输出 1
1
3
5
3.2.7 样例输入 2
10
3
3.2.8 样例输出 2
1
2
4
5
7
8
10
3.2.9 参考程序
#include <stdio.h>int main(int argc, char **argv) {int n, m, i;// 从标准输入读取两个整数,表示报数的范围和需要跳过的倍数scanf("%d%d", &n, &m);// 从1到n进行循环for(i = 1; i <= n; i++) {// 如果i不是m的倍数,输出iif(i % m != 0) {printf("%d\n", i);}}return 0;
}

解释:

  1. 读取输入:

    • 程序从标准输入读取两个整数,分别是 nmn 表示报数的范围,m 表示需要跳过的倍数。
  2. 循环处理:

    • 使用一个 for 循环从 1 到 n 进行遍历。
    • 在循环中,使用 if 条件判断 i 是否是 m 的倍数,即 i % m != 0。如果 i 不是 m 的倍数,则输出 i
  3. 输出结果:

    • 将所有满足条件的数逐行输出,即小杨报的数。

详细解释计算过程:

  • 例如,输入 n = 5m = 2 时:

    • 循环从 1 开始到 5:
      • 1 % 2 != 0,输出 1。
      • 2 % 2 == 0,跳过 2。
      • 3 % 2 != 0,输出 3。
      • 4 % 2 == 0,跳过 4。
      • 5 % 2 != 0,输出 5。
    • 输出结果为 1, 3, 5。
  • 通过这种方式,程序能够准确地输出小杨报的数,跳过指定倍数的数。

相关文章:

  • itext5生成pdf demo应用
  • 清空了电脑回收站,之前的文件还能否恢复?
  • 番外篇 | YOLOv5更换主干网络之Conformer:首个CNN + Transformer的backbone模型
  • 15:00面试,15:08出来,面试问的有点变态。。。。
  • 04. Redis 配置文件
  • 计算电磁学:FDFD算法总结
  • sklearn监督学习--k近邻算法
  • 什么是安全左移如何实现安全左移
  • 工地升降机AI人数识别系统
  • 键盘盲打是练出来的
  • Steam致富:玩免费游戏Banana获得可交易道具
  • 15:00面试,15:08就出来了,问的问题有点变态。。。
  • 数据仓库实验四:聚类分析实验
  • springboot项目中图片上传之后需要重启工程才能看到图片?
  • 给大家分享一套非常棒的python机器学习课程
  • 「前端早读君006」移动开发必备:那些玩转H5的小技巧
  • HTTP中的ETag在移动客户端的应用
  • Java新版本的开发已正式进入轨道,版本号18.3
  • Laravel 菜鸟晋级之路
  • Laravel5.4 Queues队列学习
  • maya建模与骨骼动画快速实现人工鱼
  • python_bomb----数据类型总结
  • Ruby 2.x 源代码分析:扩展 概述
  • Shadow DOM 内部构造及如何构建独立组件
  • Spring声明式事务管理之一:五大属性分析
  • Transformer-XL: Unleashing the Potential of Attention Models
  • 安卓应用性能调试和优化经验分享
  • 番外篇1:在Windows环境下安装JDK
  • 给初学者:JavaScript 中数组操作注意点
  • 和 || 运算
  • 你不可错过的前端面试题(一)
  • 使用Swoole加速Laravel(正式环境中)
  • 提升用户体验的利器——使用Vue-Occupy实现占位效果
  • 为视图添加丝滑的水波纹
  • 阿里云重庆大学大数据训练营落地分享
  • 长三角G60科创走廊智能驾驶产业联盟揭牌成立,近80家企业助力智能驾驶行业发展 ...
  • ​LeetCode解法汇总1276. 不浪费原料的汉堡制作方案
  • # Redis 入门到精通(七)-- redis 删除策略
  • #Datawhale X 李宏毅苹果书 AI夏令营#3.13.2局部极小值与鞍点批量和动量
  • (13)Hive调优——动态分区导致的小文件问题
  • (145)光线追踪距离场柔和阴影
  • (Mac上)使用Python进行matplotlib 画图时,中文显示不出来
  • (Matlab)遗传算法优化的BP神经网络实现回归预测
  • (创新)基于VMD-CNN-BiLSTM的电力负荷预测—代码+数据
  • (附源码)spring boot车辆管理系统 毕业设计 031034
  • (附源码)ssm捐赠救助系统 毕业设计 060945
  • (附源码)计算机毕业设计高校学生选课系统
  • (介绍与使用)物联网NodeMCUESP8266(ESP-12F)连接新版onenet mqtt协议实现上传数据(温湿度)和下发指令(控制LED灯)
  • (一)ClickHouse 中的 `MaterializedMySQL` 数据库引擎的使用方法、设置、特性和限制。
  • (一)Neo4j下载安装以及初次使用
  • (原创)Stanford Machine Learning (by Andrew NG) --- (week 9) Anomaly DetectionRecommender Systems...
  • .net core 6 使用注解自动注入实例,无需构造注入 autowrite4net
  • .Net中wcf服务生成及调用
  • :class的用法及应用
  • @antv/x6 利用interacting方法来设置禁止结点移动的方法实现。