有问题请讨论
1. 关于二叉树,下面说法正确的是(C)
A. 对于N个节点的二叉树,其高度为nlog2n;
B. 一个具有1025个节点的二叉树,其高度范围在11~1025之间
C. 二叉树的先序遍历是EFHIGJK,中序遍历为HFIEJKG,该二叉树的右子树的根为G
D. 二叉树中至少有一个节点的度为2
2. 假设函数f1的时间复杂度O(n),那么f1*f1的时间复杂度为(D)
A.O(n) B.O(n*n) C.O(n*log(n)) D.以上都不对
说明:f1返回值不同时间复杂度不同
3. 对下列四种排序方法,在排序中关键字比较次数与记录初始化顺序无关的是(A)
A.直接排序 B. 二分法插入 C.快速排序 D.归并排序
说明:二分插入、快排、归并的比较次数肯定跟初始顺序有关;
4. 已知一段文本有1382个字符,使用了1382个字节存储,这段文本全部是由a、b、c、d、e字符组成,a 354次,b 483次,c 227次,d 96次,e 222次,对这5个字符使用哈夫曼编码。则以下说法正确的是?(D)
A. 使用哈夫曼编码后,使用编码值来存储这段文本将花费最少的存储空间、
B. 使用哈夫曼编码后,a b c d e 这5个字符对应的编码值是唯一确定的
C. 使用哈夫曼编码后,a b c d e 这5个字符对应的编码值可以有多套,但每个字符的编码位数是确定的
D. b这个字符的编码位数最短,d这个字符的哈夫曼编码位数应该最长
5. 判断单链表有没有环的算法中,至少需要几个指针(B)
A. 1 B. 2 C. 3 D. 4
说明:单指针遍历如果不能停下来也能证明有环,但是总觉得这样本的判断方法不能称为“判断算法”
6. 在编译过程中,产生Parse tree的过程是(A)
A.语法分析 B.语义分析阶段 C.词法分析 D.目标代码生成阶段
说明:编译原理没有学过,百度的。。。
7. 阅读下面代码,程序会打印出来的值是(D)
#include
void f(char **p){
*p += 2;
}
void main() {
char *a[] = { “123”,”abc”,”456”},**p;
p = a;
f(p);
printf(“%s\r\n”,*p);
}
A.123 B.abc C.456 D.3
8. char p1[] = “Tencent”, void *p2 = malloc((10)在32位机器上sizeof(p1)和sizeof(p2)对应的值是(C)
A.8:0 B.4:10 C.8:4 D.4:4
9. 现在有以下两个函数,调用test的结果是(D)
char* getMem(void) { char * p = “hello world ”;
P[5] = 0x0;
Return p;
}
Voidtest(void) { char *s = 0x0;
s = getMem();
Printf(s);
}
A.hello B.无输出 C.Hello0world D.不确定
10. 冯诺依曼体系结构计算机的基本原理是(D)
A信息存储 B存储智能 C数字控制 D存储程序和程序控制
11、下面代码中析构函数(1)和(2)的调用顺序是:(C)
class base
{
public:
~base(){cout<<1<<endl;} //(1)
};
class child: public base
{
public:
~child(){cout<<2<<endl;} //(2)
};
int main()
{
// child b; 先调用(2)再调用(1)
base *b = new child();
delete b;
}
A. 先调用(1)再调用(2) B.先调用(2)再调用(1) C.只调用(1) D.只调用(2)
12.下面哪种设计模式的定义为:定义对象间的一种一对多的关系,当一个对象改变时,其他依赖于他的对象都能够得到通知并自动更新。(C)
A.Visitor B.Adapter C.Observer D.Interpreter
13.请看一下这一段C++代码,如果编译后程序在windows下运行,则一下说话正确的是(C)
char*p1 = “123456”; //123456\0,在常量区;p1在栈中或者在全局区
char*p2 = (char*)malloc(10); //p2在栈中或者全局区,分配来的是个字节在堆中
A. p1 he p2都存在栈中
B. p2指向的10个字节内存在栈中
C. 堆和栈在内存中的生长方向是相反的
D. "123456"这6个字符存储在栈中
说明:这两句位于main的内部还是外部,p1、p2的存储位置不同。
14.将3个球随机放入4个杯子中,则杯子中球的最大个数为2的概率是(A)
A.9/16 B.3/4 C.3/8 D.3/16
说明:1-(3*2*1*4+4)/4^3
15.对n个元素的数组进行快速排序,所需要的二外空间为(B)
A.O(1) B.O(n) C.O(log(2n) D.O(n^2))
说明:最好O(log(n)),最差O(n)
16.下面关于编译器与解释器的观点,错误的是(D)
A. 解释器不产生目标程序,它直接执行源程序或者源程序的内部形式
B. 解释程序和编译程序的主要区别在于是否产生目标程序
C. 编译器对高级语言程序的处理过程划分成词法分析、语法分析、语义分析,中间代码生成、代码优化、目标代码生成几个阶段
D. 解释器参与运行控制、程序执行的速度快
17.假设系统中有5太设备,有多个进程需要使用2个设备,假定每个进程一次只能申请一台,则至多允许多少个进程来竞争这5个资源,而不会发生死锁(C)
A. 2 B. 3 C. 4 D. 5
18.下面哪些协议,存在源端口和目的端口是(BC)
A. IP B. TCP C. UDP D. ICMP协议
19.下列哪些sql是等价的(BC)
A. Select A.tname ,A.depart from teacher A join course B on B.tno = .A.tno
B. Select A.tname ,A.depart from teacher A where A.tno = course.tno
C. Select A.tname ,A.depart from teacher where tno in (select tno from course)
D. Select A.tname ,A.depart from teacher where exsist (select * from course B where B.tno = A.tno);
说明:数据库忘干净了,蒙的
20.某一磁盘请求序列(磁道号):98、 183、 37、122、14、124、 65、 67,按照先来先服务FCFS磁盘调度对磁盘进行请求服务,假设当前磁头在53道上,则磁臂总移动道数为:(C)
A、169 B、208 C、640 D、236
21. 将一个C类网络划分为3个子网,每个子网最少要容纳55台主机,使用的子网掩码是:(D)
A、255.255.255.248 B、255.255.255.224 C、255.255.255.224 D、255.255.255. 192
22.下列关于计算机硬件的描述,正确的是:(D)
A、磁盘的平均存取时间指的是磁盘的寻道时间加上磁头在某一磁道等待记录扇区的时间
B、计算机的控制器是由多种部件组成,其中包括,指令寄存器、程序计数器和算数逻辑单元
C、一台计算机的字长是32位,表明该机器能处理的数值最多为4个字节
D、系统总线可以分为数据总线、地址总线和控制总线三类
23. 假设有关系模式R(A,B,C,D),其数据依赖集:F={(A,B)- >C,C->D},则关系模式R的规范化程度最高达到:(B)
A.1NF
B.2NF
C.3NF
D.BCNF
24. 以下为一段浏览器中可运行的Javascript 代码,则运行该段Javascript代码的页面弹出框中显示的结果是:(C)??
Var obj = { “key”:”1”,”value”:2};
Var newObj = obj;
newObj.value += obj.key;
alert(obj.value);
A、2 B、12 C、3 D、21
25. 有足够量的2分、5分、1分硬币,如果想凑齐一元钱,可以有(A)种方法
A、541 B、270 C、1024 D、128
说明:看成50个2分和20个5分构成小于一元,不够的用1分来补。当20个5分,2分0个共1种;当19个5分时,2分可能有:0,1,2共3种;。。。。。。当有2个5分时,2分可能有0,1,2...45共46种;当有一个5分时,2分可能有:0,1,2...47共48种;当有0个5分,2分可能有:0,1,2...50共51种。所以共有1+3+...+48+51=(1+48)+(3+46)+...+(23+26)+51=49*(20/2)+51=541
填空题(共5题,每题4分,共20分)
26. 阅读下面代码:
#defineMAX_NUM 1000+1
intTemp = Max_NUM*10;
则Temp的值为(1010)
27.某个单CPU操作系统抢占式进程调度策略。现在有三个任务T1(优先级高),T2(优先级中),T3(优先级低)同时进入调度队列,每个任务都需要占用CPU时间10ms,等待I/O需要13ms,然后再用CPU时间5ms,则T3从进入调度到完成需要()ms(不考虑系统任务调度的开销)
58ms
说明:感谢qiaoozheng的提醒,T1、T2、T3同时进入调度队列,10+10+3+5+5+5+2+13+5
28. 在一个采用页式虚拟存储管理的系统中,有一用户作业,它依次要访问的也没序列是1,2,3,4,1,2,5,1,2,3,4,5.假定分配给该作业的页数为3且作业初始时未装载页面,那么采用FIFO调度算法产生的缺页中断数为(9),采用LRU调度算法产生的缺页中断数为(10)
29.
#include <stdio.h>
class Base
{
public:
virtual int foo(int x){return x*10;}
int foo(char x[14]){return sizeof(x)+10;}
};
class Derived:public Base
{
int foo(int x){return x*20;}
virtual int foo(char x[10]){return sizeof (x)+20;}
};
int main(void)
{
Derived stDerived;
Base * pstBase=& stDerived;
char x[10];
printf("%d\n",pstBase->foo(100)+pstBase->foo(x));
return 0;
}
在32位环境下,以上程序的输出结果是(2014)
附加题(共2题,不计入总分)
A. 珠宝商甲需要去鉴定一批41克以下的宝石(可能是41克以下不包括41克的任意重量),他只能携带一个天平和四个砝码去称重,请问他会携带那些重量的砝码?
1 3 9 27
说明:我第一反应有两种思路。1、由上往下尝试,假设需要40/2=20,转化为有3个发吗解决1-20的问题,发现走不通;2、然后尝试由下往上,首先以2倍为步长,明显不行,再以3倍为步长1,3,9,27,短暂尝试发现确实可以经过加减构造出任意1-40.
更严密的解法:假设有i个砝码a[1]、a[2]...a[i]可以表示[1,n],其中n=a[1]+a[2]+...+a[i],则新加入一个砝码a[i+1]后可以表示的范围是[1,n]∪[a[i+1]-n,a[i+1]+n],显然为了是能表示的范围最大化,a[i+1]应该等于2n+1。a[1]=1,a[2]=3,a[3]=9,a[4]=27,此时a[1]+a[2]+a[3]+a[4]=40,可以表示[1,40],所以所需砝码为:1、3、9、27
B. UTF-8是现在流行的编码方式,下面是RFC2279对UTF-8编码规则的规定,根据这个规则,中文字符‘我’的unicode值为0X6211,utf-8编码之后为0XE68891。
请回答一下问题:
A)英文字符‘a’,其unicode的十六进制值为0X61,则其UTF-8编码后的十六进制值为?
B)中文字符‘腾’,其unicode的十六进制值为0X817E,则其UTF-8编码后的十六进制值为?
C)中文字符‘讯’,其unicode值经过UTF-8编码之后为0XE8AEAF,则请问其unicode的十六进制值是?