您好,欢迎访问三七文档
当前位置:首页 > IT计算机/网络 > 软件工程 > 科大讯飞笔试题目C++-(1)
2009讯飞软件开发笔试题目(C++)A卷答案请写在答题纸上第一部分综合基础试题共50分1、(4分)用变量a给出下面的定义a)一个整型数;b)一个指向整型数的指针;c)一个指向指针的指针,它指向的指针是指向一个整型数;d)一个有10个整型的数组;e)一个有10个指针的数组,该指针是指向一个整型数;f)一个指向有10个整型数数组的指针;g)一个指向函数的指针,该函数有一个整型参数并返回一个整型数;h)一个有10个指针的数组,该指针指向一个函数,该函数有一个整型参数并返回一个整型数答案:a)intab)int*a;c)int**a;d)inta[10];e)int*a[10];f)inta[10],*p=a;g)int(*a)(int)h)int(*a[10])(int)2、(4分)请写出以下语句的输出结果:Inti=43;Intj=5;Doublef=25.45181;a)printf(“i=%d,j=%d,f=%3.2f”,i,j,f);b)printf(“i=%x,j=%06d,i/j=%d”,i,j,i/j);答案:A)i=43,j=5,f=25.45(说明:本来应该输出最小3位有效数字,25.5,但是由于限定了2位小数,所以强制有2位小数,有效数字的个数就起不到强制作用了。如果是%3.1,则输出为25.5)B)i=2b,j=00005,i/j=8(%x显示的是一个无符号的0x16进制的整数,%06d输出的是6位数,不够6位数,前面补0,i/j两个整数相除,只取商的整数值)3、(2分)请完成以下宏定义:a)用预处理指令#define声明一个常数,用以表明1年中有多少个秒(忽略闰年问题)b)写一个“标准”宏MIN,这个宏输入两个参数并返回较小的一个答案:a)#defineseconds365*24*60*60b)#defineMIN(a,b)((a)(b)?(a):(b))扩展:MAX宏#defineMAX((a)(b)(a):(b))ABS宏#defineABS(((x)0)?(x):(-(x)))4、(6分)以下为32为windows下的c++程序,请计算:a)charstr[]=”hello”;char*p=str;请计算:sizeof(str)=sizeof(p)=strlen(p)=答案:6,字符串数组以\0(空格为结尾,所以str数组空间大小为5+1)4,5,strlen函数区的字符指针str的长度,不包括空字符。b)voidfunc(charstr[100]){Void*p=malloc(100);}请计算:sizeof(str)=4sizeof(p)=4c)inta[3]={1,2,3};intb=sizeof(a)/sizeof(a[0]);请计算:b=35、(2分)设有定义:intn=0,*p=&n,**q=&p;则以下选项中,正确的赋值语句是(d)a)p=1;b)*q=2;c)q=p;d)*p=5;6、(2分)const关键字的用途?(至少说明两种)答案:(1)避免变量的值被修改(2)修饰指针int*constp(地址不可以被修改)intconst*p(值不可以被修改)(3)修饰函数形参表示该参数只是用来传入值(4)Canst修饰的成员变量不可以被成员函数更改、(5)对于类的成员函数有时候必须返回const修饰的类型避免函数返回值为左值7、(2分)typedef的c语言中频繁用以声明一个已经存在的数据类型的同义词。也可以用以预处理器做类似的事情。例如:#definedpsstructs*Typedefstructs*tps;以上两种情况的意图都是要定义dps和tps作为一个指向结构s指针。哪种方法更好一些呢?(如果有的话)为什么?1)#define是预处理指令,在编译预处理时进行简单的替换,不作正确性检查,不关含义是否正确照样带入,只有在编译已被展开的源程序时才会发现可能的错误并报错。例如:#definePI3.1415926程序中的:area=PI*r*r会替换为3.1415926*r*r如果你把#define语句中的数字9写成字母g预处理也照样带入。2)typedef是在编译时处理的。它在自己的作用域内给一个已经存在的类型一个别名,但是Youcannotusethetypedefspecifierinsideafunctiondefinition。8、(8分)以下是一组有关内存知识的问题,请仔细看题,回答:VoidGetMemory(char*p){P=(char*)malloc(100);}VoidTest(void){Char*str=Null;GetMemory(str);Strcpy(str,”helloworld”);Printf(str);}请问运行Test函数会有什么样的结果?a)__________在函数中申请内存函数调用完毕内存直接释放str值仍为NULL___________________________char*GetMemory(void){Charp[]=”helloworld”);Returnp;}VoidTest(void){Char*str=NULL;Str=GetMemory();Printf(str);}请问运行Test函数会有什么结果?b)_______________________________________________voidGetMemory2(char**p,intnum){*p=(char*)malloc(num);}VoidTest(void){Char*str=NULL;GetMemory(&str,100);Strcpy(str,”hello”);Printf(str);}请问运行Test函数会有什么结果?c)___________________hello_______________________________voidTest(void){Char*str=(char*)malloc(100);Strcpy(str,”hello”);Free(str);If(str!=NULL){Strcpy(str,”world”);Printf(str);}}请问运行test函数会有什么样的结果?world9、(6分)请写出以下程序的输出结果:ClassA{Public:A(){Printf(“Aconstructed.\n”);}Virtual~A(){printf(“Adeconstructed.\n”);}VirtualvoidFn(){printf(“Afncalled.\n”);}};ClassB:publicA{Public:B(){printf(“Bconstructed.\n”);}Virtual~B(){printf(“Bdeconstructed.\n”);}VirtualvoidFn(){printf(“Bfncalled.\n”);}};ClassC:publicB{Public:C(){printf(“Cconstructed.\n”);}Virtual~C(){printf(“Cdeconstructed.\n”);}VirtualvoidFn(){printf(“Cfncalled.\n”);}};Voidmain(intargc,char*grgv[]){A*pA=newB;If(pA!=NULL)pA-fn();B*pB=static_castB*(pA);If(pB!=NULL)pB-fn();C*pC=static_castC*(pA);If(pC!=NULL)pC-fn();deletepA;}10.(2分)以下说法错误的是:(b)A)指针和引用作为函数参数都可以改变实参B)指针和引用都可以在定义后任意的改变指向C)引用必须在创建的时候初始化,而指针则不需要D)不能空引用,但是可以有空指针11、??(2分)下列关于多态的描述,错误的是(c)A)C++语言的多态性分为编译时的多态和运行时的多态性B)编译时的多态性可以通过函数重载来实现C)运行时的多态性可以通过模板和虚函数来实现D)实现运行时多态性的机制称动态绑定12、(2分)运算符的重载形式有两种,重载为__类的成员函数重载___________和________友元函数重载________________13、(2分)main主函数执行完毕后,是否可能会再执行一段代码?请说明理由?一段程序是以main函数开始main函数执行完毕程序结束如果想在mian函数退出后执行代码可以使用atexit()函数注册一个函数14、(2分)C++中的空类,默认产生那些类成员函数?缺省的构造函数缺省的拷贝构造函数缺省的析构函数缺省的赋值运算符缺省的地址运算符缺省的地址运算符const第二部分概念简答(共10分)15、(4分)简述STL库的功能,并给出遍历一个包含一组整型数的vector的代码。16、(5分)请写出贝叶斯公式P(A|B)=P(B|A)*P(A)/P(B)17、(5分)进程和线程的区别和联系?1)进程:子进程是父进程的复制品。子进程获得父进程时间空间,堆和栈的复制品2)线程:相对进程而言,线程是程序执行的基本单位,它可以与同进程的其他线程共享数据,但拥有自己的栈空间,拥有独立的执行序列。速度:线程产生的速度快,线程间的通信快.切换快,因为他们都在同一个地址空间资源利用率:线程的资源利用率比较好也是他们在同一个地址空间同步问题:线程使用公共变量或内存是需要使用同步机制,还是因为他们在同一地址空间。二者都可以提高程序的并发度,提高程序运行效率和响应时间。线程和进程在使用上各有优缺点:线程执行开销小,但不利于资源管理和保护。同时,线程适合在SMP机器上运行,而进程则可以跨机器迁移(SMP)(共享内存多处理器)2.用两个栈实现一个队列的功能?要求给出算法和思路堆栈的特征:FILO先进后出队列的特征:FIFO先进先出所以,用两个栈s1和s2模拟一个队列时,s1作输入栈,逐个元素压栈,以此模拟队列元素的入队。当需要出队时,将栈s1退栈并逐个压入栈s2中,s1中最先入栈的元素,在s2中处于栈顶。s2退栈,相当于队列的出队,实现了先进先出。显然,只有栈s2为空且s1也为空,才算是队列空。算法中假定栈s1和栈s2容量相同。出队从栈s2出,当s2为空时,若s1不空,则将s1倒入s2再出第三部分算法设计与设计思考共30分18、(10分)请不用任何cruntime函数实现以下函数:Intertrim_str(char*pstr)函数功能如下:1)滤掉字符串头尾的空格、回车、tab2)输出字符串通过输入字符串指针返回3)如果成功则返回0否则返回非019、(10分)有N个大小不等的自然数(1,2,3,…..N)请将它们从小到大排列。算法要求:时间复杂度为O(n),空间复杂度为O(1)。请简要说明你采用的排序算法并写出c的伪代码。快速排序20、(10分)用文字和图示(类图)描述你所知道的除单件模式和简单工厂之外的一种设计模式,并用c++实现第四部分知识面考察共10分21、(10分)请在下列三题中任选一题作答A)什么是内存的垃圾回收集算法,其作用是什么?据你所知,有那些开发语言中提供了垃圾收集机制?虚拟机自动回收你曾经声明过,但不使用了的那些变量。C#JAVAB)现在非常多的用户都在谈SOA,根据Gartner的预测,2008年,企业80%应用都将通过使用SOA来实现,你理解SOA是什么?SOA的关键特点有哪些?SOA带来什么?面向服务的体系结构SOA服务具有平台独立的自我描述XML文档。SOA服务用消息进行通信,该消息通常使用XMLSchema来定义在一个企业内部,SOA服务通过一个扮演目录列表(directorylisting)角色的登记处(Registry)来进行维护。C)随着互联网的普及,很多新兴的、传统的软件厂商都在探讨SAAS的前景,甚至很多行业观点认为SAAS是软件行业的未来趋势。你是怎么理解SAAS的,你怎么看待这种趋势?SAAs和更
本文标题:科大讯飞笔试题目C++-(1)
链接地址:https://www.777doc.com/doc-6714892 .html