不是VIP会员,不能显示答案,请在后台“我的信息” 在线升级 VIP

一、单项选择题(共15题,每题2分,共计30分;每题有且仅有一个正确选项)

1. 大多数计算机病毒会主要造成计算机()的损坏。

  • A.软件和数据
  • B.硬件和数据
  • C.硬件、软件和数据
  • D.硬件和软件

2. 假设今年中秋有253个月饼,把它们装到15个盒子里面,那么数量最多的一盒至少装几 个月饼?( )

  • A.16
  • B.23
  • C.15
  • D.17

3. ASCII编码是由美国国家标准委员会指定的一种包括数字、字母、通用字符和控制符号在内的字符编码集,它是一种( )位二进制编码。

  • A.8
  • B.7
  • C.4
  • D.32

4. 计算机的硬件主要包括控制器、( )、存储器、输入设备、输出设备。

  • A.运算器
  • B.操作系统
  • C.计算机语言
  • D.磁盘

5. 字符“a”的ASCII码是97,写出下面程序的输出结果:char c='a'+4;cout<<c<<","<< (int)c+3<<endl;( )

  • A.e,h
  • B.101,104
  • C.e,104
  • D.101,h

6. 操作系统是对( )进行管理的软件。

  • A.计算机资源
  • B.软件
  • C.硬件
  • D.应用程序

7. 以下选项中( )不是一个操作系统环境。

  • A.Linux
  • B.Windows CE
  • C.Solaris
  • D.Celeron

8. 以下关于 C++ 语言注释的说法正确的是( )。

  • A.写C++语言程序时必须书写注释,否则会对程序的功能造版影响
  • B.C++语言的注释将参与编译器编译,并形成指令
  • C.可以采用/*……*/的形式书写多行注释,其中的注释内容可以是任何字符
  • D.//注释表示从//开始直到本行末尾的所有字符均是注释内容

9. 要使用putchar 函数实现向显示器输出字符“A”,则可以使用( )。

  • A.putchar(65)
  • B.putchar(A)
  • C.putchar('\65')
  • D.putchar("A")

10. 两个指针( )。

  • A.可在一定条件下相加
  • B.如果同时指而一个变量,则此后就不能再指向其他变量了
  • C.任何时候都不能相减
  • D.可在一定条件下进行相等或不等的比较运算

11. 下列属于B类IP的是( )。

  • A.27.33.119.2
  • B.134.300.12.4
  • C.133.201.189.32
  • D.192.97.32.121

12. 现有变量 a,b,c,d ,取值范用均为[0,15],假设每个值出现的概率相同,则表达式 a⊕b⊕c⊕d的值能被3整除的概率()。(⊕为计算机中的异或运算符,结果用分数形式表达)

  • A.3/8
  • B.1/2
  • C.1/4
  • D.1/8

13. 假设以S和X分别表示进钱和出栈操作,则对输入序列a,b,c,d,e进行一系列栈操作SSXSXSSXXX 之后,得到的输出序列为()

  • A.baced
  • B.bceda
  • C.cbaed
  • D.edcba

14. 某递归算法的执行时间的递推关系如下: 当n=1时,T(n)=1; 当n>1时,T(n)=2*T(n/2)+1。则该算法的时间复杂度为( )

  • A.O(1)
  • B.O(log2n)
  • C.O(n)
  • D.O(n*log2n)

15. 一棵完全二叉树有501个叶子节点,则至少有( )个节点。

  • A.501
  • B.502
  • C.1001
  • D.1002

二、阅读程序(程序输入不超过数组或字符串定义的范围;除特殊说明外,判断题1.5分,选择题4分,共计40分)

1.

#include <iostream>
using namespace std;

const int maxn=100001;

int N,M,K;
int x[maxn], y[maxn],d[maxn];
int c[maxn];
int *a[maxn];

int main() {
cin>>N>>M>>K;
for (int i=0; i<K; ++i) {
cin >>x[i]>>y[i]>>d[i];//表示第x[i]行第y[i]列的值为d[i]
c[y[i]]++;
}
for (int i=1; i<=M; ++i)
a[i]=new int[c[i]];
for (int i= 0; i<K; ++i) {
*a[y[i]]=d[i];
a[y[i]]++;
}

for (int i=1; i<=M; ++i) {
a[i]=a[i]-c[i];
for (int j=0; j<c[i]; ++j,++a[i])
cout <<*a[i]<<" ";
}
return 0;
}


判断题

1) 程序第9行定义了一个指针数组,a[i]表示第i列的指针。( )
2) 第20行代码改成a[y[i][0]=d[i]不影响运算结果。( )
3) 第15行中,数组c用来统计每行中的数据个数。( )
4) 本程序中,采用动态数组以优化空间的利用,每一列数组长度可能不同。

选择题

5) 该程序的时间复杂度为( )。
6) 该程序的空间复杂度为( )。

2.

#include <iostream>
#include <iomanip>
using namespace std;

int m[101][101];

int main() {
int a;
cin>> a;

int c=a*a, i=1, k=(a+1)/2;
for (int j=1; j<=c; j++) {
m[i][k] = j;
if (j%a==0) {
if (i==a)
i=1;
else
i++;
} else {
if (i==1)
i=a;
else
i--;

if (k==a)
k=1;
else
k++;
}
}
for (int i=1; i<=a; i++) {
for (int j=1; j<=a; j++)
cout<<setw(5) << m[i][j];
cout<<endl;
}
return 0;
}

判断题

1) 从程序可以看出,i为被填数,j和k为填数位置。
2) 填数结束后,数组m中的元素互不相同。

选择题

3) 当j%a==0且i!=a,下一步填入的量( )
4) 当j%a!=0, i!=1且k==a时,下一步填入的是( )
5) 填数后,每行每列及对角线的和均为( )

3.

#include <iostream>
using namespace std;

int a[101],d[101];

int main() {
int n=5;
a[1]=d[1]=1;
for (int i=1; i<=n; ++i) {
int s=i+1,x=0;
for (int j=1; j<=n+1-i; ++j){
int k=s+x;
x++;

a[j+1]=a[j]+k;
cout<<a[j]<<' ';
}
cout<<"..."<<endl;
a[1]=d[i+1]=d[i]+i;
}
return 0;
}


判断题

1) 该题有两重循环构成,外循环i控制列的变化,内循环j是控制行的变化。()
2) 这段代码的运行结果是(左图) 。()

选择题

3) 本题在输出时,每行为 ( ) 个a[j]数组的值。
4) 这题代码的运行结果是输出( )行。

三、完善程序(单选题,每题3分,共计30分)

1. 形如2^p-1的素数称为麦森数,这时P一定也是个素数。但反过来不一定,即如果P是个素数,2^p-1不一定是素数。到1998年底,人们已找到了37个麦森数。最大的一个是p=321377,它有90952位。麦森数有许多重要应用,它与完全数密切相关。
你的任务:输入P(1000<P<3100000),计算2^p-1的位数和最后500位数字(用十进制高精度数表示)。
输人数据:
只包含一个整数P(1000<P<3100000)。
输出要求:
第1行:十进制高精度数2^p-1位数。第第2~11行:十进制高精度数2^p-1的最后500位数字。(每行输出50位,共输出10行,不足500位时高位补0)

# include <cstdio>
# include <memory>
# include <cmnth>
#define LEN 125

void Mutiply(int *a, int *b) {
int i, i;
int nCarry;
int nTmp;
int c[LEN];

memset(c, 0, sieof(int)*LEN);
for(i=0; i<LEN; i++) {
nCarry = 0;
for (j=0; ___(1)___; j++) {
nTmp=c[i+j]+ a[j]*b[i] + nCarry;
e[i+ j]=nTmp % 10000;
nCarry=nTmp /10000;
}
}
memcpy(a,c, LEN*sizeof(int));
}

int main() {
int i;
int p;
int anPOW[LEN];
int aResult[LEN];

scanf("%d", &p);
print("%d\n", (int)(p*log10(2))+1);
anPow[0]=2;
aResult[0]=1;
for(i=1; i<LEN; i++) {
anPow[i]=0;
aResult[i]=0;
}
while(___(2)___) {
if( ___(3)___)
Multiply(aResult,anPow);
p>>=1;
Muliply(anPow,anPow);
}
aResult[0]--;
for(i=LEN-1; i>= 0; i--) {
if(___(4)___)
printf("%02d\n%02d",aResult[i]/100, aResult[i]%100);
else {
printf("%04d",aResult[i]);
if(i%25==0)
printf("\n");
}
}
return 0;
}


选择题

1) ①处应填( )
2) ②处应填( )
3) ③处应填( )
4) ④处应填( )

2. 在通远的国家佛罗布尼亚,嫌犯是否有罪须由陪审团决定。陪审团是由法官从公众中挑选的。先随机挑选个人作为陪审团的候选人,然后再从这n个人中选m人组成陪审团。选m人的办法:
控方和辩方会根据对候选人的喜欢程度给所有候选人打分,分值从0到20。为了公平起见,法官选出陪审团的原则是选出的m个人,必须满足辩方总分和控方总分的差的绝对值最小。如果有多种选择方案的解方总分和控方总分之差的绝对值相同,那么选辩控双方总分之和最大的方案即可。最终选出的方案称为陪审团方案。
输入数据:
输入包含多组数据。每组数据的第一行是两个整数n和m,n是候选人数目,m是陪审团人数。注意,1≤n≤200, 1≤m≤20,而且m≤n。接下来的n行,每行表示一个候选人的信息,它包含2个整数,先后是控方和辩方对该候选人的打分。候选人按出现的先后从1开始编号。两组有效数据之间以空行分隔,最后一组数据n=m=0。
输出要求:
对每组数据:先输出一行,表示答案所属的组号, 如“lury #1”, “lury #2”,等。接下来的一行要象例子那样输出陪审团的控方总分和辨方总分。再下来一种要以长序输出陪审团里每个成员的编号,两个成员编号之间用空格分隔。每组输出出数据须以一个空行结束。

#include <cstdio>
#include <cstdlib>
#include <memory>
#include <algorithm>

int f[30][1000];
int Path[30][1000];
int P[300];
int D[300];
int Answer[30];

int main() {
int i,j,k;
int t1,t2;
int n,m;
int nMinP_D;
int nCaseNo;
nCaseNo=0;

scanf("%d%d",&n,&m);
while(n+m) {
nCaseNo++;
for(i=1; i<=n; i++)
scanf("%d%d",&P[i],&D[i]);
memset(f,-1,sizeof(f));
memset(Path,0,sizeof(Path));
nMinP_D=___(1)___;
___(2)___;
for(j=0; j<m; j++) {
for(k=0; ___(3)___; k++)
if (___(4)___) {
for (i=1; i<=n; i++)
if (___(5)___) {
t1=j;
t2=k;
while(t1>0&&Path[t1][t2]!=j) {
t2-=P[Path[t1][t2]]-D[Path[t1][t2]];
t1--;
}
if (t1==0) {
f[j+1][k+P[i]-D[i]]=f[j][j]+P[i]+D[i];
Path[j+1][k+P[i]-D[i]]=i;
}
}
}
}
i=nMinP_D;
j=0;
while (f[m][i+j]<0 && f[m][i-j]<0) j++;
if(f[m][i+j]>f[m][i-j])
k=i+j;
else
k=i-j;
printf("Jury #%d\n", nCaseNo);
printf("Best jury has value %d for prosccution and value %d for delencen:\n",(k-nMinP_D + f[m][k]) /2, (f[m][k]-k + nMinP_D) / 2);
for(i=1; i<=m; i++) {
___(6)___;
k =- P[Answer[i]] - D[Answer[i]];
}
std::sort(Answer + 1, Answer + m + 1);
for(i= 1; i<= m; i++) printf(" %d", Answer[i]);
printf("\n");
printf("\n");
scanf("%d%d", &n, &m);
}
return 0;
}


选择题

1) ①处应填( )
2) ②处应填( )
3) ③处应填( )
4) ④处应填( )
5) ⑤处应填( )
6) ⑥处应填( )