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

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

1. cout<<011+11;的计算结果是( )。

  • A.6
  • B.14
  • C.20
  • D.22

2. 在程序中用到的一个常数2e-3在内存中占( )空间。

  • A.4B
  • B.4b
  • C.6B
  • D.8B

3. 某同学家里装一条宽带进行上网,运营商的说是200M。他需要下载一个软件的大小是2GB,极限最快大约需要( )秒。

  • A.1
  • B.10
  • C.100
  • D.1000

4. 学校机房的一台计算机IP地址为10.20.220.22,子网掩码为255.255.192.0,那么学校机房的网络号是( )

  • A.255.255.192.0
  • B.10.20.192.0
  • C.10.20.220.0
  • D.255.255.220.0

5. char('A'+' '),当大写字母‘A’的ASCII码和空格的ASCII码之和的结果是字母‘a’的ASCII码。请问空格的ASCII是( )。

  • A.30
  • B.31
  • C.32
  • D.22

6. 排序相关STL中,属于稳定排序的是( ) 。

  • A.sort( )
  • B.qsort()
  • C.stable_sort()
  • D.partial_sort()

7. 下列( )不是STL序列式容器。

  • A.set
  • B.list
  • C.vector
  • D.deque

8. cin、cout属于下面哪一种? ( )。

  • A.类
  • B.结构体
  • C.函数
  • D.变量

9. 同一个小数,用double变量存和用float 变量存相比,下面哪种说明是对的? ( )。

  • A.大
  • B.小
  • C.相等
  • D.不确定

10. 一个程序员在main函数中用malloc( )函数开辟了一个数组空间,请问这个空间是在内存中的( )区域。

  • A.栈内存
  • B.堆内存
  • C.全局区(静态区)
  • D.都有可能

11. 希尔排序的平均时间复杂度为( )。

  • A.0(n^1.25)
  • B.0(nlogn)
  • C.0(n)
  • D.0(n^2)

12. 4个人过河,过河所需要的时间分别是1,2,5,10,每次过两人,速度由慢者决定,已过河中的一人回,速度由这个人决定,问过河所需最短时间( )。

  • A.19
  • B.18
  • C.17
  • D.16

13. 康托展开可以求解一个排列的序号,比如:12345序号为0,12354序号为1,按字典序增加编号递增,依次类推。康托展开的公式: $x=a_n(n-1)! + a_{n-1}(n-2)! +... +a_1*0!$ ai表示:从右往左数第i位这个数在所有出现过的数中排第几(序号从0开始)。12345的康托展开值,也就是:0*4!+0*3!+0*2!+0*1!+0*0!=0, 52413该序列展开后的值是( )。

  • A.105
  • B.106
  • C.107
  • D.108

14. 有物不知其数,三三数之剩二,五五数之剩三,七七数之剩二。问物几何?————《孙子算经》这是著名的中国剩余定理请问第5个被3,5,7除的时候,余数为2,3,2的数( )。

  • A.233
  • B.443
  • C.653
  • D.758

15. 下面哪位科学家的研究,基本上完成了量子计算机的理论基础。( )。

  • A.图灵
  • B.冯诺依曼
  • C.杨振宁
  • D.姚期智

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

1.

#include <bits/stdc++.h>
using namespace std;
int n,x,y;
char op,a[1000],b[1000];
int deal () {
switch(op) {
case '+':return x+y;
case '-':return x-y;
case '*':return x*y;
}
}
int main() {
scanf ("%d\n",&n) ;
while(n--) {
gets(a) ;
switch(a[0]) {
case 'a':op='+';sscanf(a+2, "%d%d", &x, &y);break;
case 'b':op='-';sscanf(a+2, "%d%d", &x, &y);break;
case 'c':op='*';sscanf(a+2, "%d%d", &x, &y);break;
default :sscanf (a, "%d%d",&x,&y) ;
}
sprintf(b, "%d%c%d=%d",x,op,y,deal());
puts(b);
printf("%d\n",strlen(b));
}
return 0;
}

假设输入一个整数n(1≤n≤50)。接着的n行为需要输入的算式,每行可能有三个数据或两个数据。若该行为三个数据则第一个数据表示运算类型,a表示加法运算,b表示减法运算,c表示乘法运算,接着的两个数据x,y表示参加运算的运算数。若下一行为两个数据x,y,则表示本题的运算类型与上一题的运算类型相同,而这两个数据为运算数。
数据保证第一个算式有三个数据。完成下面的判断题和选择题:

注:↓ 为回车符

判断题

1) sscanf与scanf 类似,都是用于输入的,只是后者以键盘(stdin)为输入源,前者以固定字符数组为输入源。( )
2) 第13行scanf("%d\n",&n);改成scanf("%d" ,&n) ;程序运行结果不变。( )
3) 第15行gets(a) ;改成geline(cin,a);程序运行结果不变。( )
4) 第23行put(b);改成cout<<b;程序运行结果不变。( )


选择题

5) 若输入1↓d 64 64↓则输出为( )。
6) 若输入2↓a 64 46 则输出为( )。

2.

#include <bits/stdc++.h>
using namespace std;
struct Big_int {
int a[1000], len;
Big_int() {
memset(a,0,sizeof(a));
len=1;
}
Big_int(string s) {
len=s.size();
for(int i=len; i>=1; i--) a[i]=s[len-i]-'0';
}
void print() {
int i=len;
for(; i>1; i--) if(a[i]>0) break;
for(int j=i; j>=1; j--) cout<<a[j];
}
Big_int operator+ (const Big_int &x) {
Big_int ans;
ans.len= (len>x.len?len:x.len) ;
for(int i=1; i<=ans.len; i++) {
ans.a[i]+=a[i]+x.a[i];
ans.a[i+1]+=ans.a[i]/10;
ans.a[i]%=10;
}
if (ans.a[ans.len+1]>0) ans.len++;
return ans;
}
};
string s;
int main() {
cin>>s;
Big_int a(s);
cin>>s;
Big_int b(s);
Big_int c=a+b;
c.print();
return 0;
}


判断题

1) C++语言中,struct默认是public 的,而class默认是private的。( )
2) 第06行memset的作用是对a数组里的所有元素设置为0,因为a数组里的元素是int类型的,所以memset是以4个字节为一组进行设置的。( )
3) 第07行len=1;改成len=0;程序的运行结果不变。( )
4) 去除第14行int i=len;将这句话写入第15行,改成for(int i=len;i>1;i--),程序的运行结果不变。( )
5) 第18行Big_int operator +(const Big_int &x)改成Big_int operator + (Big_int x),程序的运行结果不变。( )
6) 第22行ans.a[i]+=a[i]+x.a[i];改成ans.a[i]=a[i]+x.a[i],程序的运行结果不变。( )

选择题

7) 若输入010 ↓ 0090 ↓则输出为( )。

3.

#include<bits/stdc++.h>
using namespace std ;
const int maxn = 1000005;
int n,m;
int w[maxn],c[maxn];
int f(int m,int n) {
if(n==0) return 0;
int x=f (m,n-1) ;
int y=0;
if(m-w[n]>=0) y=f(m-w[n],n-1)+c[n];
return max(x,y);
}
int main() {
cin>>m>>n;
for(int i=1; i<=n; i++)
cin>>w[i]>>c[i];
cout<<f(m,n);
return 0;
}


假设输入的n是不超过200的正整数,m是不超过30的正整数,w[i]、e[i]都是不超过5000的正整数,完成下面的判断题和单选题:

判断题

1) main函数里的m和n变量,与f函数里面的m和n变量,占用内存中的不同空间。( )
2) 输入m为0,此程序可能会死循环或发生运行错误。()

选择题

3) 若输入2 2 1 2 3 4则输出为( )。
4) 若输入10 2 1 2 3 4则输出为( )。
5) 若输入10 4 2 1 3 3 4 5 7 9则输出为( )。
6) (4分)若输入20 10,接下来的输入是1到20,则输出为( )。

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

1. (回文平方数)回文数是指从左向右念和从右向左念都一样的数。如12321就是一个典型的回文数。
给定一个进制B(2≤B≤20,由十进制表示),输出所有的大于等于1小于等于300(十进制下)且它的平方用B进制表示时是回文数的数。用A,|...表示1010,1111等。
输入一个单独的整数B(B用十进制表示)。
输出每行两个B进制的符合要求的数字,第二个数是第一个数的平方,且第二个数是回文数。

tinclude<bits/stdc++.h>
using namespace std;
int b,a[10000], aa 10000], cnta, cntaa;
void changeb(int x,int __(1)__,int &cnt) {
cnt=0;
while(x>0) a[cnt++]=__(2)__;
}
bool is_pal() {
for(int i=0,j=__(2)__; i<j; i++,j--)
if(aa[i]!=aa[j]) return 0;
return 1;
}
void print (int __(1)__,int __(4)__) {
for(int i=cnt-1; i>=0; i--)
if(a[i]>=0 && a[i]<=9) cout<<a[i];
else cout<<__(5)__;
}
int main() {
cin>>b;
for(int i=1; i<=300; i++) {
changeb(i,a, cnta) ;
changeb (i*1,aa, cntaa) ;
if(is_pal()) {
print(a,cnta) ;
cout<<' ';
print(aa, cntaa) ;
cout<<endl;
}
}
return 0;
}

选择题

1) ⑴处应填( )。
2) ⑵处应填( )。
3) ⑶处应填( )。
4) ⑷处应填( )。
5) ⑸处应填( )。

2. (吃奶酪)房间里放着n块奶酪。一只小老鼠要把它们都吃掉,向至少要跑多少距离?老鼠一开始在(0,0)点处。
输入第一行有一个整数,表示奶酪的数量n。
第2行到第(n+1)行,每行两个实数,第(i+1)行的实数分别表示第i块奶酪的横纵坐标x_i,y_i。

输出一行一个实数,表示要跑的最少距离,保留2位小数。
数据规模与约定:
对于全部的测试点,保证1≤n≤15,|x_il,|y_i|≤200,小数点后最多有3位数字。
试补全程序

#include <bits/stdc++.h>
using namespace std;
int n;
double a[16][3];
double dp[__(1)__][16],ans;
double dis(int x,int y) {
return sqrt((a[x][1]-a[y][1])*(a[x][1]-a[y][1])+(a[x][2]-a[y][2])*(a[x][2]-a[y][2]));
}
int main() {
cin>>n;
for (int i=1; 1<=n; i++) cin>>a[i][1]>>a[i][2];
n++;
memset (dp,127,sizeof (dp)) ;
dp[1][0]=0;
for (int s=0; s<=(1<<n)-1; s++) {
for(int i=1; i<=n-1; i++) {
if(__(2)__) continue;
int x=__(4)__;
for(int j=0; j<=n-1; j++) {
if(__(3)__) continue;
dp[s][i]=min(dp[s][i],dp[x][j]+dis(j,i));
}
}
}
int x=__(5)__;
ans=dp[x][1];
for (int i=2; i<n; i++) ans=min(dp[x][i],ans);
printf("%.2lf",ans);
return 0;
}

选择题

1) ⑴处应填( )。
2) ⑵处应填( )。
3) ⑶处应填( )。
4) ⑷处应填( )。
5) ⑸处应填( )。