2023 年 9 月 GESPC++三级试卷解析

一、单选题(每题 2 分,共 30 分)
1 们所使用的手机上安装的 App 通常指的是( )。
A. 款操作系统
B. 款应用软件
C. 种通话设备
D. 以上都不对
【答案】B
【考纲知识点】 计算机基础知识
【解析】本题属于考察计算机基础知识。APP是英语单词application的简写,代表应用软件的意思。
  
2 、下列流程图的输出结果是? ( )
A. 60
B. 20
C. 5
D. 1
【答案】B
【考纲知识点】 流程图的概念与描述
【解析】本题属于考察计算机流程图知识,只要满足条件,就执行“是”后面的 语句,是个循环结构。a=5和4的时候执行s=sa,结果是5*4=20。
   
3 、已知 写字符 'A' ASCII 编码的 六进制表 0x41 ,则字符 'L' ASCII编码的 六进制表 ( )
A. 4A
B. 4B
C. 4C
D. 52
【答案】C
【考纲知识点】 计算机字符编码知识
【解析】本题属于考察计算机字符编码知识。‘A’的ASCII值是65,可以推出‘ L’是76,将其转换成二进制,答案是C。
  
4 、 以下哪个不是 C++ 中的运算符? ( )
A. ~
B. ~~
C. <
D. <<
【答案】B
【考纲知识点】C++语言基础
【解析】本题属于考察C++语言基础知识。B运算符不存在。
  
  
5 、如果数组定义为 long long array[] = {3, 5, 7, 2}; ,则数组 array ⽤的字节 数为( )。
A. 32
B. 16
C. 8
D. 4
【答案】A
【考纲知识点】 数组和数据类型
【解析】本题属于考察C ++语言知识,包括数组和数据类型。一维数组中有4个 元素,long long类型每个数字占8个字节,4*8=32。选A。
    
6 个数组定义为 double array[3]; ,则可合理访问这个数组的元素的下标 最 为( )。
A. 2
B. 3
C. 23
D. 24
【答案】A
【考纲知识点】 数组知识
【解析】本题属于考察C ++语言数组知识,数组下标从0开始,3个元素的下标分 别是0/1/2.选A。
     
7 、 以下数组定义 ,符合 C++ 语法的是( )。
A. double a[];
B. double b[] = {1, 2 .0, '3'};
C. double c[3.0];
D. double[] d = new double[3];
【答案】B
【考纲知识点】 数组知识
【解析】本题属于考察C ++语言的数组知识,A的写法需要明确数组大小;C中数 组大小必须是整数;D需要用指针类型指向一个new的数组。选B。
    
  
8、 下列关于进制的叙述 ,正确的是( )。
A. 只有十进制和二进制能够 来表示 数 ,八进制和十六进制不可以。
B. 常用的进制包括二进制、八进制、 进制、十六进制,其他进制在日常 ⽣活中很少使用。
C. 对任意正整数 ,其二进制表示不会 它的 进制表示更短。
D. 正整数的八进制表 中 ,每 位可能出现的最大数字是 8
【答案】C
【考纲知识点】 进制知识
【解析】本题属于考察C ++语言的进制知识,日常生活中,十进制最常用;A中 进制都可以表示小数;D中数字8不能出现,选C。
   
9 、下列关于 C++ ⾔中数组的叙述 ,不正确的是( )。
A. 可以定义 0 个元素的数组。
B. 不能定义 -1 个元素的数组。
C. 数组下标越界访问会产 编译错误。
D. 程序运 时发 数组下标的越界访问 ,程序依然可能正常结束。
【答案】C
【考纲知识点】 数组知识
【解析】本题属于考察C ++语言的数组知识,选择不正确的,在不同编译器下, 数组越界不一定会产生编译错误,选C。
    
10 、 如果 a int 类型的变量 ,下列哪个表达式的值 定为 true ( )
A. a + 1000 - 1000 == a
B. a * 2 / 2 == a
C. (a & 1) == 1
D. (a | 1) == a + 1
【答案】A
【考纲知识点】 表达式及位运算
【解析】本题属于考察C ++语言的计算表达式和位运算知识,A选项中,先计算 a+1000-1000=a,a==a成立;B中a如果导致a*2越界就不成立;C中a是偶数,和1 做与位运算结果是0;D中a是奇数的时候,和1做或运算不等于a+1,选A。
       
11 、 如果 a b 均为 int 类型的变量 ,下列表达式不能正确判断“ a 等于b ” 的是( )。
A. ((a >= b) && (a <= b))
B. ((a >> 1) == (b >> 1))
C. ((a + b) == (a + a))
D. ((a ^ b) == 0)
【答案】B
【考纲知识点】 表达式
【解析】本题属于考察C ++语言的表达式知识,注意是找不能正确判断的条件, B选项中,例如a=4,b=5,(a>>1)是等于(b>>1)的,因此选B
    
12 、 如果 a char 类型的变量 ,下列哪个表达式可以正确判断“ a 写字
母”? ( )
A. a - 'A' <= 26
B. 'A' <= a <= 'Z'
C. 'A' <= 'a' <= 'Z'
D. ('A' <= a) && (a <= 'Z')
【答案】D
【考纲知识点】 字符知识
【解析】本题属于考察C ++语言的字符知识,大写字符是从‘A’到‘Z’,在这 个区间内,就是大写字符。注意B选项,如果a=‘b’,根据ASCII码,’A’<=a 成立,返回值是1,1<=’Z’,所以B选项不正确,通过判断,选D。
 
13、 在下列代码的横线处填写( ) ,可以使得输出是“ 20 10”
A. a = a >> 8; b = a & 0xff
B. b = a >> 8; a = a & 0xff;
C. a = b; b = a & 0xff;
D. b = a; a = b;
【答案】B
【考纲知识点】 基本运算
【解析】本题属于考察C ++语言的运算知识,程序的目的是实现a和b的数据交换 ,用a的低8位保留b的值,原来的数值保存在a的高八位,因此b=a>>8即得到a原 来的值。将a的高8位清空,与0xff做与运算即可,0xff的高八位是0,得到b之前 的结果,选B。
       
14、 在下列代码的横线处填写( ) ,可以使得输出是“ 120”
A. res += array[i];
B. res *= array[i]
C. res = array[i]
D. 以上均不对。
【答案】D
【考纲知识点】 循环语句,复合赋值运算符
【解析】本题属于考察C ++语言的for循环语句和复合赋值运算符知识,简单将 选项A、B、C代入到代码段,都不能达到预期结果。所以前3个选项都不正确,通 过判断,选D。
     
15、 在下列代码的输出是( )。
A. 15
B. 28
C. 45
D. 55
【答案】B
【考纲知识点】 多层循环结构,数组
【解析】本题属于考察C ++语言的数组知识,array数组赋值分别是0到9,然后 注意里面的双重循环。p是从2到9,对array数组重新赋值。例如,p=2时, array[2]=2,条件成立,进入第2重循环,n的范围是2到9,注意步长是2,对每个 数组元素重新赋值,数组重新变为0 1 1 3 2 5 3 7 4 9。一直到循环完成,累 加array数组,结果是B。
      
二、判断题(每题 2 分,共 20 分)
1 、二进制数 101.101 进制下是 5.005
【答案】错误
【考纲知识点】 进制转换
【解析】本题是计算机二进制和转换十进制的知识,整数部分是5,小数部分是 0.625。
      
2 、在 C++ ⾔中,位运算符也有类似“先乘除、后加减”的优先级规则。因此, 使 时应注意合理使 括号。
【答案】正确
【考纲知识点】 位运算符知识
【解析】本题是计算机运算符的知识。
   
3 、字符常量 '3' 的值和 int 类型常量 3 的值是相同的,只是占 的字节数不同。
【答案】错误
【考纲知识点】 计算机字符
【解析】本题是计算机字符和数字的知识,字符‘3’用整数51表示,不等于3。
   
     
4 、 在 C++ 中,长度为 的数组,访问下标为 的元素会引起编译错误。
【答案】错误
【考纲知识点】 数组
【解析】本题是计算机数组知识,不会引起编译错误,使用时可能会产生错误。
   
   
5 、在 C++ 中,所有 int 类型的值,经过若 次左移操作( <<)后,它们的值 总会变为 0
【答案】正确
【考纲知识点】 位运算
【解析】本题是计算机位运算知识,左移后,后面的位数用0补充,所以移动若 干次,都会变成0。
    
6 、 在 C++ 中,数组下标的 ⼤⼩决定元素在逻辑上的先后顺序,与元素在内 存中位置的先后顺序 关。
【答案】错误
【考纲知识点】 数组
【解析】本题是计算机数组知识,下标的大小和两者都有关系。
      
7 、 在 C++ 中,定义数组时, [] 中必须指定元素个数。
【答案】错误
【考纲知识点】 数组的定义
【解析】本题是计算机数组知识,数组定义方式有很多,正确的也包括: int d[]={1,2,3};这种格式。
    
    
8 、著名的哥德巴赫猜想:任 ⼀⼤ 2的偶数都可写成两个素数之和。我们可以通 过枚举法来证明它。
【答案】错误
【考纲知识点】 枚举算法
【解析】本题是计算机算法知识,枚举法是枚举所有的可能,枚举不出所有的偶 数,所以不能用枚举法证明哥德巴赫猜想。
     
9 、 在 C++ 中,表达式 (0xff == 255) 的值为 true
【答案】正确
【考纲知识点】 进制和比较运算符
【解析】本题是计算机十六进制和比较运算符的知识,0xff的十进制是255。
       
10 、 如果 a int 类型的变量,且表达式 ((a & 1) == 0) 的值为 true ,则说明 a 是偶数。
【答案】正确
【考纲知识点】 位运算和比较运算符
【解析】本题是计算机位运算和比较运算符知识,a是整数,只有是偶数和1做与 运算的结果才等于0。
三、编程题(每题 25 分,共 50 分)
    
1、 杨的储蓄
问题描述
杨共有 N个储蓄罐,编号从0到N-1。从第1天开始, ⼩杨每天都会往存钱罐里 存钱。具体来说,第i天他会挑选一个存钱罐 ɑ i ,并存 ⼊i元钱。过了D天后,他 已经忘记每个储蓄罐里都存了多少钱了,你能帮帮他吗?
   
  
输入描述
2 ,第一行两个整数N,D;第二行D个整数,其中第i个整数为 ɑ i( 保证0≤ ɑ i≤ N-1)。
的各个整数之间 单个空格分隔。
保证1≤N≤1000 ;1≤D≤1000
      
  
输出描述
输出N个用单个空格隔开的整数,其中第i个整数表示编号为i-1的存钱罐中有多 少钱(i = 1,...,N)。
   
   
样例输入1
2 3
0 1 0
样例输出1
4 2
样例解释1
小杨在第1天、第2天、第3天分别向0号、1号、0号存钱罐存了1元钱、2元钱、 3 元钱,因此0号存钱罐有1+3=4元钱,而1号存钱罐有2元钱。
样例输入2
3 5
0 0 0 2 0
样例输出2
11 0 4
      
【题目大意】
1.小杨有n个存钱罐,存钱罐的编号是0~n-1。例如他有5天,每天向某个存钱罐 存放i元钱,即:第1天,i=1;第2天,i=2,依次类推。
   
【考纲知识点】
1.基本运算、输入输出语句、一维数组的知识。
       
【解题思路】
1.按题目要求定义好需要的变量,并实现输入;
2.根据题意,最多有1000个存钱罐,建立存钱数组,数组大小大于等于1000即可 。要存d天,存的元数分别是1~d元,循环范围最好写成i=1;i<=d;
3.每次存钱前,先读入要存的存钱罐编号,然后将i累加到该存钱罐中;
4.最后,输出每个存钱罐中的元数。注意存钱罐的编号是0~n-1。
     
【参考程序】
#include <iostream>
using namespace std;
int f[1010]; 
int main() {
	int n,d;
	cin>>n>>d;
	for(int i=1;i<=d;i++){
		int a;
		cin>>a;
		f[a]+=i;
	}
	cout<<f[0];
	for(int i=1;i<n;i++){
		cout<<" "<<f[i];
	}
	return 0;
}

2、进制判断
   
问题描述
N进制数指的是逢N进一的计数制。例如,人们日常生活中大多使用十进制计数, 而计算机底层则一般使用二进制。除此之外,八进制和十六进制在一些场合也是 常用的计数制(十六进制中,一般使用字母A至F表示十至十五)。
现在有N个数,请你分别判断他们是否可能是二进制、八进制、十进制、十六进 制。例如,15A6F就只可能是十六进制,而1011则是四种进制皆有可能。
    
输入描述
输入的第一行为一个十进制表示的整数N。接下来 N行,每行一个字符串,表示需要判断的数。保证所有字符串均由数字和大写字母组成,且不以 0 开头。保 证不会出现空行。
保证 1≤N≤1000,保证所有字符串长度不超过10。
     
输出描述
输出N行,每行4个数,用空格隔开,分别表示给定的字符串是否可能表示一个二 进制数、八进制数、十进制数十六进制数。使用 1 表示可能,使用 0 表示不可 能。
例如,对于只可能是十六进制数的 15A6F,就需要输出0001;而对于四者皆有可 能的 1011,则需要输出1111。
样例输入1
2
15A6F
1011
样例输出1
0 0 0 1
1 1 1 1
样例输入2
4
1234567
12345678
FF
GG
样例输出2
0 1 1 1
0 0 1 1
0 0 0 1
0 0 0 0
【题目大意】
1.输入多个字符串,每个字符串包括09、‘A’‘Z’这些字符构成,判断能否可 能是二进制、八进制、十进制和十六进制,有可能哪个进制都不是。
    
【考纲知识点】
1.多层循环结构、基本运算、输入输出语句、字符。
    
【解题思路】
1.根据进制知识,二进制由0和1,构成;八进制由07构成;十进制由09构成;十 六进制由09和AF构成。如果字符中有大于1的字符,肯定不能用二进制表示;大 于7的,不能用二进制和八进制表示;大于9的,不能用二进制、八进制和十进制 表示;大于F的,不能用二进制、八进制、十进制和十六进制表示;
2.找出字符串中最大的那个字符,分别和1,8,9,F比较,如果小于等于,就可 以用二进制、八进制、十进制或十六进制表示,否则不能表示。
      
【参考程序】
#include <iostream>
using namespace std; 
int main() {
	int n;
	cin>>n;
	for(int i=0;i<n;i++){
		char str[11];
		cin>>str;
		char maxn='0';
		for(int i=0;str[i]!='\0';i++){
			if(str[i]>=maxn)
				maxn=str[i];
		}
		cout<<(maxn<='1')<<" "<<(maxn<='7')<<" "<<(maxn<='9')<<" "<<(maxn<='F') <<endl;
	}
	return 0;
}

  • 17
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值