2012微软暑期实习C/C++笔试题

来源:互联网 发布:电话网络诈骗怎么办 编辑:程序博客网 时间:2024/05/16 06:51

所有答案均为自己主观判断加上网络资料查阅,不保证答案完全正确。欢迎讨论

第一题:

题目:假设一个包含80个元素的选择排序已经迭代了32趟,那么有多少个元素的位置再也不会动?

A 16 ;B 31 ; C 32 ;D 39 ;E40

分析:选择排序的基本思想是:每一趟在n-i+1(i=1,2,...,n-1)个记录中选取待排序关键字最小的记录作为有序序列中的第i个记录。因此对于每一趟循环,均可确定待排序序列中个一个元素的位置,故本题答案为C。

 

第二题:

题目:下列哪个或哪些同步机制用于避免出现进程(线程)之间的竞争?

A Mutex ; B MailBox ; C Semaphore ; D Local procedure call ;

分析:基本的操作系统问题,答案AC不解释

 

第三题:

题目:有一包含n个数字的序列1,2,3,...n,和一个最大容量为m的栈。将n个数字按顺序随机进行入栈出栈操作。比如,假设n=2,m=3,那么输出序列可能为1,2或者2,1,此时我们得到两个不同的输出序列。假设n=7,m=5。请从下列序列中选择栈的输出序列:

A 1 2 3 4 5 6 7       ;B 7 6 5 4 3 2 1

C 5 6 4 3 7 2 1       ;D 1 7 6 5 4 3 2     ;E 3 2 1 7 5 6 4

分析:有点像考研数据结构的选择题,简单的栈入栈出栈与输出序列的问题,以P表示Push,Q表示Pop,下面给出正确答案的入栈出栈操作序列

A PQPQPQPQPQPQPQ   

B 答案错误,7要第一个出栈的话,需要将所有元素入栈,但是m=5,所以7不可能是第一个出栈元素 

C PPPPPQPQQQPQQQ  

D 答案错误,原因类似B  

E 答案错误,按序列进行入栈,PPPQQQ,此时输出序列为3,2,1,欲使得7为剩下4个元素最先出栈的,则需将剩下所有元素入栈,即PPPP,接着的出栈操作将产生的输出序列为7 6 5 4,而非7 5 6 4。

 

第四题:

题目:0101 1001 乘以0111001 然后加上1101110后等于多少?

A 0001 0100 0011 1111

B 0101 0111 0111 0011

D 0011 0100 0011 0101

分析:简单的计算机组成原理题目,两数相乘再相加即可,不解释。答案A。

 

第五题:

题目:下面一段C代码的输出是?

void main(){      int i = 11;      int const* p = &i;      p++;      printf("%d",*p);}

A 11 ;B 12 ;C Garbage value ;D Compiler error ;E None of above

分析:答案为C 直接放到Dev-c中验证,同时为了说明问题,另加一行输出,见下图:

 

第六题:

题目:下面哪段C++代码是正确的?(题目就不写了,看图片)

分析:都是基本的C++的语法问题,答案为D

A:应为int * a  = new int[3];

B:返回了局部变量a的地址;

C:Dev提示有错

 

 

第七题:

题目:将一个数字A翻转180度后形成数字B,A和B之差为78633,问A是多少?

A 60918 ;B 91086 ;C 18609 ;D 10968 ;E 86901

分析:各项答案直接验证:

A :60918-81609 = -20691

B:91086 - 98016=

C: 18609 - 60981=

D: 10968-89601=78633

E:86901 - 10698=

故正确答案为:D,为节省时间,可以先验证最高位的情况,然后逐位排除。

 

第八题:

题目:下面那个句子是对的?

分析:答案为AD。AB考察的是二叉树的建立,AB中A正确,利用二叉树的前序和中序遍历可建立二叉树;

C明显错误,D正确。

 

第九题:

分析:答案为B。

 

第十题:

分析:答案为E。

当x<y时,y^((x^y)&(-(x<y))) = y^((x^y)&(-1)) = y^((x^y)&0xffffffff) = y^(x^y) = (y^y)^x = 0^x = x
当x>=y时,y^((x^y)&(-(x<y))) = y^((x^y)&(-0)) = y^((x^y)&0) = y^0 = y 

 

第十一题:

分析:UTF8通常用3个字节对一个字符编码,比如'a',普通编码是2个字节,则UTF8中需要3个,因此使用UTF-8编码时,需要3*391 = 1173bytes,故C正确。

同时,UTF8使用BOM的时候,需要额外增加3个字节,故使用BOM时,UTF8编码需要3*391+3 = 1176bytes,故D正确。

而UTF-16使用双字节表示一个汉字,外加一个BOM两个字节,因此需要391*2+2 = 724,故B正确。

第十二题:

题目:填空:

分析:正确答案为:BC

典型的纠结于static,const,const static 和static const的问题。

首先,在C++中,const常量成员变量和static静态成员变量均不能在类内部定义处进行初始化。const常量成员变量只能通过够咱函数初始化列表进行,且必须有构造函数。

《Effective C++》中条款03:尽可能使用const中说:const的一件奇妙事情是,它允许你制定一个语义约束,二编译器会强制实施这种约束。它允许你告诉编译器和其他程序员某值应该保持不变。

其次,类中的static修饰成员变量的作用有:

1.对于静态的成员变量,连接器会保证它拥有一个单一的外部定义。静态成员变量按定义出现的先后顺序依次初始化,按逆序析构。

2.累的静态成员函数是属于整个类而非类的对象,因此它没有this指针,这就导致了它仅能访问类的静态数据成员和静态成员函数。

 

第十三题:

题目:一个3阶的B-树共有2047个关键字,请问这可树的最大高度为?

A 11; B12; C 13 ;D 14

分析:答案为A

B树即为二叉搜索树,二叉搜索树的特点有:

1.所有非叶子节点至多拥有两个儿子(Left和Right);2.每个节点存储一个关键字;4.非叶子节点的Left儿子的关键字小于其本身的关键字;Right儿子的关键字大于其本身的关键字。

B-树是一种多路搜索树。

定理9.1 若n≥1,m≥3,则对任意一棵具有n个关键字的m阶B-树,其树高h至多为:
        logt((n+1)/2)+1。
这里t是每个(除根外)内部结点的最小度数,即

       

 

第十四题:

分析:答案为ACE

第十五题:

分析:答案为D

 

第十六-二十题

分析:答案为:ABDCE

 

原创粉丝点击