一、单选题(每题 2 分,共 30 分)
1
、
⼈
们所使用的手机上安装的
App
通常指的是( )。
A.
⼀
款操作系统
B.
⼀
款应用软件
C.
⼀
种通话设备
D.
以上都不对
【答案】B
【考纲知识点】 计算机基础知识
【解析】本题属于考察计算机基础知识。APP是英语单词application的简写,代表应用软件的意思。
2
、下列流程图的输出结果是?
( )
![](https://img-blog.csdnimg.cn/direct/28e9eb0b52794dce889ca82a89978d76.png)
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”
。
![](https://img-blog.csdnimg.cn/direct/508b0039c89e491eb9e5b4c7cefe43ea.png)
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”
。
![](https://img-blog.csdnimg.cn/direct/dc51a013e8b74aebbee178dfc5333154.png)
A. res += array[i];
B. res *= array[i]
C. res = array[i]
D.
以上均不对。
【答案】D
【考纲知识点】 循环语句,复合赋值运算符
【解析】本题属于考察C ++语言的for循环语句和复合赋值运算符知识,简单将 选项A、B、C代入到代码段,都不能达到预期结果。所以前3个选项都不正确,通 过判断,选D。
15、 在下列代码的输出是( )。
![](https://img-blog.csdnimg.cn/direct/6588c5f0efe64190bf94d1aeadecbd27.png)
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;
}