一、 单项选择题(共15
题,每题2
分,共计30
分;每题有且仅有一个正确选项)
1
. 中国的国家顶级域名是( )
A、. cn
B、 ,ch
C、 .chn
D、 . china
2
. 二进制数11 1011 1001 0111
和01 0110 1110 1011
进行逻辑与运算的结果 是( )。
A、 01 0010 1000 1011
B、 01 0010 1001 0011
C、01 0010 1000 0001
D、 01 0010 1000 0011
3
. 一个32
位整型变量占用( )个字节。
A、 32
B、 128
C、 4
D、 8
4
. 若有如下程序段,其中s、a、b、c
均已定义为整型变量,且a、c
均已赋值(c
大于0
),则与下述程序段功能等价的赋值语句是( )
代码语言:javascript复制s = a;
for(b = 1; b <= c; b )s = s - 1;
A、s = a - c;
B、 s = a - b;
C、 s = s - c;
D、 s = b - c;
5
.设有100
个己排好序的数据元素,采用折半查找时,最大比较次数为( )
A、 7
B、 10
C、 6
D、 8
6
.链表不具有的特点是( )
A、插入删除不需要移动元素 B、不必事先估计存储空间
C、所需空间与线性表长度成正比 D、可随机访问任一元素
7
. 把8
个同样的球放在5
个同样的袋子里,允许有的袋子空着不放,问共有多少种不同的分法?( )提示:如果8
个球都放在一个袋子里,无论是哪个袋子,都只算同一种分法。
A.、22 B、24 C、 18 D、 20
8
. 一棵二叉树如图所示,若采用顺序存储结构,即用一维数组元素存储该二叉树中的结点(根结点的下标为1
,若某结点的下标为i
,则其左孩子位于下标2i
处、右孩子位于下标2i 1
处),则该数组的最大下标至少为( )。
1
A、6
B、10
C、15
D、12
9
. 100
以内最大的素数是( )。
A、89
B、97
C、91
D、93
10
. 319
和377
的最大公约数是( )。
A、27
B、 33
C、29
D、 31
11
. 新学期开学了,小胖想减肥,健身教练给小胖制定了两个训练方案。方案一:每次连续跑3
公里可以消耗300
千卡(耗时半小时):方案二:每次连续跑 5
公里可以消耗600
千卡(耗时1
小时)。小胖,每周周一到周四能抽出半小时跑步,周五到周日能抽出一小时跑步。另外,教练建议小胖每周最多跑21
公里,否则会损伤膝盖。请问如果小胖想严格执行教练的训练方案,并且不想损伤膝盖,每周最多通过跑步消耗多少千卡?( )
A、 3000
B、 2500
C、 2400
D、 2520
12
. 一副纸牌除掉大小王有52
张牌,四种花色,每种花色13
张。假设从这52
张 牌中随机抽取13
张纸牌,则至少( )张牌的花色一致。
A. 4
B. 2
C. 3
D. 5
13
.一些数字可以颠倒过来看,例如0、1、8
颠倒过来还是本身,6
颠倒过来是9
,9
颠倒过来看还是6
,其他数字颠倒过来都不构成数字。类似的,一些多位数也可以颠倒过来看,比如106
颠倒过来是901
。假设某个城市的车牌只由5
位数字组成,每一位都可以取0
到9
。请问这个城市最多有多少个车牌倒过来恰好还是原来的车牌?( )
A、60
B、 125
C. 75
D. 100
14
.假设一棵二叉树的后序遍历序列为DGJHEBIFCA
,中序遍历序列为DBGEHJACIF
, 则其前序遍历序列为( )。
A. ABCDEFGIIIJ
B. ABDEGHJCFI
C. ABDEGJHCFI
D. ABDEGHJFIC
15
.以下哪个奖项是计算机科学领域的最高奖?( )
A.图灵奖 B.鲁班奖 C.诺贝尔奖 D.普利策奖
二、阅读程序(程序输入不超过数组或字符串定义的范围;判断题正确填√
,错误填×
;除特殊说明外,判断题1.5
分,选择题4
分,共计40
分)
程序一:
代码语言:javascript复制1 #include <cstdio>
2 #include <cstring>
3 using namespace std;
4 char st[100];
5 int main() {
6 scanf("%s", st);
7 int n=strlen(st);
8 for(int i =1;i <= n; i) {
9 if(n % i== 0) {
10 char c=st[i-1];
11 if(c >= 'a')
12 st[i-1]=c-'a' 'A';
13 }
14 }
15 printf(st);
16 return 0;
17 }
判断题
- 输入的字符串只能由小写字母或大写字母组成( )
- 若将第
8
行的i = 1
改为i =0
,程序运行时会发生错误。( ) - 若将第
8
行的i <= n
改为i * i <= n
,程序运行结果不会改 变。( ) - 若输入的字符串全部由大写字母组成,那么输出的字符串就跟输入的字符串一样。( )
选择题
- 若输入的字符串长度为
18
,那么输入的字符串跟输出的字符串相比,至多有( )个字符不同。 - 若输入的字符串长度为( ),那么输入的字符串跟输出的字符串相比,至多有
36
个字符不同。
A. 36
B. 100000
C. 1
D. 128
程序二:
代码语言:javascript复制#include <cstdio>
using namespace std;
int n,m;
int a[100],b[100];
int main() {
scanf("%d%d",&n,&m);
for(int i=1; i<=n; i) {
a[i]=b[i]=0;
}
for(int i=1; i<=m; i ) {
int x,y;
scanf("%d%d",&x,&y);
if( a[x]<y && b[y]<x ) {
if( a[x]>0 )
b[a[x]]=0;
if( b[y]>0 )
a[b[y]]=0;
a[x]=y;
b[y]=x;
}
}
int ans=0;
for(int i=1;i<=n;i ){
if(a[i]==0 ) ans;
if(b[i]==0) ans;
}
printf("%dn",ans);
return 0;
}
判断题
- 当
m>0
时,输出的值一定小于2n
。( ) - 执行完第
27
行的ans
时,ans
—定是偶数。( ) a[i]
和b[i]
不可能同时大于0
。( )- 若程序执行到第
13
行时,x
总是小于y
,那么第15
行不会被执行。
选择题
- 若
m
个x
两两不同,且m
个y
两两不同,则输岀的值为( )
A. 2n-2m
B. 2n 2
C. 2n-2
D. 2n
- 若
m
个x
两两不同,且m
个y
都相等,则输出的值为( )
A. 2n-2 B. 2n
C. 2m
D, 2n-2m
程序三:
代码语言:javascript复制#include<iostream>
#include<stdlib.h>
#include <time.h>
using namespace std;
const int maxn=10000;
int n;
int a[maxn];
int b[maxn];
int f(int l,int r ,int depth) {
if(l>r)return 0;
int min=maxn,mink;
for( int i=l; i<=r; i ) {
if(min>a[i]) { //12行
min=a[i];
mink=i;
}
}
int lres=f(l,mink-1,depth 1);
int rres=f(mink 1,r,depth 1);
return lres rres depth*b[mink];
}
int main() {
cin>>n;
for(int i=0; i<n; i) {
cin>>a[i];
}
for(int i=0; i<n; i) {
cin>>b[i];
}
cout<<f(0,n-1,1)<<endl;
return 0;
}
判断题
- 如果
a
数组有重复的数字,则程序运行时会发生错误。( ) - 如果
b
数组全为0
,则输出为0
。( )
选择题
- 当
n=100
时,最坏情况下,与第12
行的比较运算执行的次数最接近的是:( )。
A. 5000
B. 600
C. 6
D. 100
- 当
n=100
时,最好情况下,与第12
行的比较运算执行的次数最接近的是:( )。
A、 100
B. 6
C. 5000
D. 600
- 当
n=10
时,若b
数组满足,对任意0 ≤ i < n
。都有b[i] = i 1
,那么输出最大为( )。
A. 386
B. 383
C. 384
D. 385
- (4分)当
n=100
时,若b
数组满足,对任意0 ≤ i < n
,都有b[i]=
1`,那么输出最小为( )。
A. 582
B. 580
C. 579
D. 581
三、完善程序(单选题,每题3分,共计30分)
程序一:
- (矩阵变幻)有一个奇幻的矩阵,在不停的变幻,其变幻方式为:数字
0
变成矩阵[0 0 ]
[0 1]
数字1
变成矩阵[1 1]
[1 0]
最初该知阵只有一个元素0
变幻n
次后,矩阵会变成什么样?例如: 矩阵最初为:[0]
; 矩阵变幻1
次后:[0 0]
[0 1]
矩阵变幻2
次后:[0 0 0 0]
[0 1 0 1]
[0 0 1 1]
[0 1 1 0]
输入一行一个不超过10
的正整数n
。输出变幻n
次后的矩阵。试补全程序。 提示:<<
表示二进制左移运算符,例如(11)
2<<2=(1100)
2; 而^
表示二进制异或运算符,它将两个参与运算的数中的每个对应的二进制位一一进行比较,若两个二进制位相同,则运算结果的对应二进制位为0
,反之为1
。
# include <cstdio>
2 using namespace std;
3 int n;
4 const int max_size= 1<< 10;
6 int res[max_size][max_size];
7
8 void recursive(int x,int y,int n,int t){
9 if(n==0) {
10 res[x][y]= ①;
11 return;
12 }
13 int step=1<<(n-1);
14 recursive(②,n-1,t);
15 recursive(x,y step,n-1,t);
16 recursive(x step,y,n-1,t);
17 recursive(③,n-1,!t);
18 }
19
20 int main() {
21 scanf("%d",&n);
22 recursive(0,0,④);
23 int size=⑤ ;
24 for (int i=0;i<size; i){
25 for (int j=0; j<size; j)
26 printf("%d", res[i][j]);
27 puts("");
28 }
29 return 0;
30 }
- ①处应填( )
A. n % 2
B. 0
C. t
D. 1
- ②处应填( )
A. x – step , y – step
B. x,y - step
C. x – step , y
D. x, y
- ③处应填( )
A. x - step, y - step
B. x step, y step
C. x - step, y
D. x, y – step
- ④处应填( )
A. n - 1, n % 2
B. n, 0
C. n, n % 2
D. n - 1, 0
- ⑤处应填()
A. 1 << (n 1)
B. 1 << n
C. n 1
D. 1 <<(n - 1)
程序二
- (计数排序)计数排序是一个广泛使用的排序方法。下面的程序使用双关键字计数排序,将
n
对10000
以内的整数,从小到大排序。例如有三对整数(3,4)、(2,4)、(3,3)
,那么排序之后应该是(2,4)、(3,3)、(3.4)
。输入第一行为n
接下来n
行,第i
行有两个数a[i]
和b[i]
分别表示第i
对整数的第一关键字和第二关键字。从小到大排序后输出。数据范围1
≤n
≤107,1≤a[i],b[i]≤10
4。提示:应先对第二关键字排序,再对第一关键字排序。数组ord[]
存储第二关键字排序的结果,数组res[]
存储双关键字排序的结果,e 试补全程序。
1 #include <cstdio>
2 #include <cstring>
3 using namespace std;
4 const int maxn=10000000;
5 const int maxs=10000;
6
7 int n;
8 unsigned a[maxn],b[maxn],res[maxn],ord[maxn];
9 unsigned cnt[maxs 1];
10
11 int main(){
12 scanf("%d", &n);
13 for(int i=0;i<n; i)
14 scanf("%d%d",&a[i],&b[i]);
15 memset(cnt,0,sizeof(cnt));
16 for (int i = 0; i <n; i)
17 ①;//利用cnt数组统计数量
18 for (int i=0;i<maxs; i)
19 cnt[i 1] = cnt[i];
20 for (inti=0;i<n; i)←
21 ②;//记录初步排序结果e
22 memset(cnt,0,sizeof(cnt));<
23 for(int i= 0; i<n; i)
24 ③;//利用cnt数组统计数量<
25 for(int i=0;i<maxs; i)
26 cnt[i 1] = cnt[i];
27 for(int i=n-1;i>=0;--i)
28 ④;//记录最终排序结果e
29 for(inti=0;i<n; i)←
30 printf("%d %dn",⑤);
31 return ;
- ①处应填( )
A. cnt[i]
B. cnt[b[i]]
C. cnt[a[i] * maxs b[i]]
D. cnt[a[i]]
- ②处应填( )
A. ord[--cnt[a[i]]] = i
B. ord[--cnt[b[i]]] = a[i]
C. ord[--cnt[a[i]]] = b[i]
D. ord[--cnt[b[i]]] = i
- ③处应填( )
A. cnt[b[i]]
B. cnt[a[i] * maxs b[i]]
C. cnt[a[i]]
D. cnt [i]
- ④处应填()
A. res[--cnt[a[ord[i]]]] = ord[i]
B. res[--cnt[b[ord[i]]]] = ord[i]
C. res[--cnt[b[i]]] = ord[i]
D. res[--cnt[a[i]]] = ord[i]
- ⑤处应填()
A. a[i], b[i]
B. a[res[i]], b[res[i]]
C. a[ord[res[i]]] , b[ord[res[i]]]
D. a[res[ord[i]]] , b[res[ord[i]]]