您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 招聘面试 > (1912制作)微软笔试题
1912制作微软研究院是一个听起来就牛B的地方啊,反正我是进不去,不过不妨碍我看看他的笔试题到底是怎么样的。下面四道题就是微软研究院的笔试题目,题后附有我的解答。微软研究院(亚洲)的网址是:.改错#includestdio.h#includeString.hclassCBuffer{char*m_pBuffer;intm_size;public:CBuffer(){m_pBuffer=NULL;}~CBuffer(){Free();}voidAllocte(intsize)(3){m_size=size;m_pBuffer=newchar[size];}private:voidFree(){if(m_pBuffer!=NULL){deletem_pBuffer;m_pBuffer=NULL;}}public:voidSaveString(constchar*pText)const{strcpy(m_pBuffer,pText);}char*GetBuffer()const{returnm_pBuffer;}};voidmain(intargc,char*argv[]){CBufferbuffer1;buffer1.SaveString(Microsoft);printf(buffer1.GetBuffer());}答:改正后主要改正SaveString函数将voidSaveString(constchar*pText)const{strcpy(m_pBuffer,pText);}改为voidSaveString(constchar*pText)(1){Allocte(strlen(pText)+1);(2)strcpy(m_pBuffer,pText);}原因:(1)const成员函数表示不会修改数据成员,而SaveString做不到,去掉const声明(2)m_pBuffer指向NULL,必须用Allocte分配空间才能赋值。(3)另外需要将Allocte成员函数声明为私有成员函数更符合实际2.下来程序想打印“WelcomeMSRAsia”,改正错误#includestdio.h#includestring.hchar*GetName(void){//Toreturn“MSRAsia”Stringcharname[]=MSRAsia;returnname;}voidmain(intargc,char*argv[]){charname[32];//Fillinzerosintonamefor(inti=0;i=32;i++){name[i]='\0';}//copy“Welcome”tonamename=Welcome;//Appendablankcharname[8]=;//Appendstringtonamestrcat(name,GetName());//printoutprintf(name);}答:改正后为#includestdio.h#includestring.hchar*GetName(void){//Toreturn“MSRAsia”String//charname[]=MSRAsia;(1)char*name=(char*)malloc(strlen(MSRAsia)+1);strcpy(name,MSRAsia);returnname;}voidmain(intargc,char*argv[]){charname[32];//Fillinzerosintonamefor(inti=0;i=32;i++){name[i]='\0';}//copy“Welcome”toname//name=Welcome;(2)strcat(name,Welcome);//Appendablankchar//name[8]='';(3)//Appendstringtonamechar*p=GetName();(4)strcat(name,p);free(p);//printoutprintf(name);}原因:(1)在函数内部定义的变量在函数结束时就清空了,必须动态分配内存(2)字符串赋值语句错误,应该用strcat(3)该语句无效,可去掉(4)定义一个指针指向动态分配的内存,用完后需用free语句释放3.写出下面程序的输出结果#includestdio.hclassA{public:voidFuncA(){printf(FuncAcalled\n);}virtualvoidFuncB(){printf(FuncBcalled\n);}};classB:publicA{public:voidFuncA(){A::FuncA();printf(FuncABcalled\n);}virtualvoidFuncB(){printf(FuncBBcalled\n);}};voidmain(void){Bb;A*pa;pa=&b;A*pa2=newA;b.FuncA();(1)b.FuncB();(2)pa-FuncA();(3)pa-FuncB();(4)pa2-FuncA();(5)pa2-FuncB();deletepa2;}答:1.b.FuncA();输出FuncAcalledFuncABcalled2.b.FuncB();输出FuncBBcalled上两者好理解,直接调用类B的相应成员函数3.pa-FuncA();输出FuncAcalled调用类A的FuncA()4.pa-FuncB();输出FuncBBcalled调用类B的FuncB(),原因是C++的动态决议机制,当基类函数声明为virtual时,指向派生类对象的基类指针来调用该函数会选择派生类的实现,除非派生类没有才调用基类的虚函数。还有一点注意的是:指向基类类型的指针可以指向基类对象也可以指向派生类对象,如pa=&b;5.pa2-FuncA();pa2-FuncB();输出FuncAcalledFuncBcalled这也好理解,直接调用类A的相应成员函数4.Inthemain()function,afterModifyString(text)iscalled,what’sthevalueof‘text’?#includestdio.h#includestring.hintFindSubString(char*pch){intcount=0;char*p1=pch;while(*p1!='\0'){if(*p1==p1[1]-1){p1++;count++;}else{break;}}intcount2=count;while(*p1!='\0'){if(*p1==p1[1]+1){p1++;count2--;}else{break;}}if(count2==0)returncount;return0;}voidModifyString(char*pText){char*p1=pText;char*p2=p1;while(*p1!='\0'){intcount=FindSubString(p1);if(count0){*p2++=*p1;sprintf(p2,%I,count);while(*p2!='\0'){p2++;}p1+=count+count+1;}else{*p2++=*p1++;}}voidmain(void){chartext[32]=XYBCDCBABABA;ModifyString(text);printf(text);}答:我不知道这个结构混乱的程序到底想考察什么,只能将最后运行结果写出来是XYBCDCBAIBAAP1912太久不用C和C++写程序,脑袋一团糟,对着屏幕手都僵了,写出漏洞百出的代码,于是决定找些题连连,找回编程的感觉。上周日是微软2005校园招聘的第一场笔试,其中有一道编程题目:给定一单链表的表头指针和指向其中一个节点的指针,要求以该指针为头将原链表逆序排列,例如:N1-N2-N3-N4-N5-NULLpHEAD=N1,pSTART=N3,返回N3-N2-N1-N5-N4-NULLN1-N2-N3-N4-N5-NULLpHEAD=N1,pSTART=N5,返回这个N5-N4-N3-N2-N1-NULLN1-N2-N3-N4-N5-NULLpHEAD=N1,pSTART=N1,返回这个N1-N5-N4-N3-N2-NULL不允许额外分配存储空间,不允许递归,可以使用临时变量。看了一下版上的讨论,思路就被固定在那个里面了,基本的算法就是将整个链表逆序,并将头节点链接到尾节点,新的头节点的下一个节点链接到空。一开始被逆序搞昏了头,顾此失彼,赶着去杂志社见社长,就带着问题上了公车,在车上拿笔比划,有了大致的思路,晚上回到宿舍把完整的代码写了出来,还是比较简洁的。原题似乎还要求体现基本异常处理,不知道该怎么办了。难道还要判断一下头指针是否为空,和pStart是否在链表中?typedefstructnode{intvalue;structnode*next;}node;voidReverseList(node**pHead,node*pStart){node*t1,*t2,*it=*pHead;t1=it-next;while(t1!=0){t2=t1-next;t1-next=(it==pStart?0:it);it=t1;t1=t2;}(*pHead)-next=it;*pHead=pStart;}附加了测试代码后的完整程序,抄了一部分chaoslawful的,呵呵#includestdio.h#includestdarg.h#includestdlib.htypedefstructnode{intvalue;structnode*next;}node;voidReverseList(node**pHead,node*pStart){node*t1,*t2,*it=*pHead;t1=it-next;while(t1!=0){t2=t1-next;t1-next=(it==pStart?0:it);it=t1;t1=t2;}(*pHead)-next=it;*pHead=pStart;}voidPrintList(node*pHead){node*it=pHead;while(it){printf(%d,it-value);it=it-next;}}voidConstructList(node**pHead,...){node*q=0;va_listap;inti;va_start(ap,pHead);while(1){i=va_arg(ap,int);if(i0)break;if(!q){*pHead=q=(node*)malloc(sizeof(node));q-value=i;q-next=0;}else{q-next=(node*)malloc(sizeof(node));q=q-next;q-value=i;q-next=0;}}}voidSetStart(node*it,node**pStart,inti){while(i--0&&it-next!=0){it=it-next;}*pStart=it;}intmain(){node*pHead=(node*)malloc(sizeof(node*));node*pStart=(node*)malloc(sizeof(node*));ConstructList(&pHead,1,2,3,4,5,-1);PrintList(pHead);SetStart(pHead,&pStart,2);ReverseList(&pHead,pStart);PrintList(pHead);return1;}45分钟1.写出a*(b-c*
本文标题:(1912制作)微软笔试题
链接地址:https://www.777doc.com/doc-3110632 .html