(全)近几年科大讯飞软件笔试题目学习资料.doc
《(全)近几年科大讯飞软件笔试题目学习资料.doc》由会员分享,可在线阅读,更多相关《(全)近几年科大讯飞软件笔试题目学习资料.doc(18页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、_2009讯飞软件开发笔试题目(C+)A卷1、(4分)用变量a给出下面的定义a) 一个整型数;b)一个指向整型数的指针;c)一个指向指针的指针,它指向的指针是指向一个整型数;d)一个有10个整型的数组;e)一个有10个指针的数组,该指针是指向一个整型数;f)一个指向有10个整型数数组的指针;g)一个指向函数的指针,该函数有一个整型参数并返回一个整型数;h)一个有10个指针的数组,该指针指向一个函数,该函数有一个整型参数并返回一个整型数答案:a)int a b)int *a; c)int *a; d)int a10; e)int *a 10; f) int a10, *p=a; g)int (*
2、a)(int) h) int( *a10)(int) 2、(4分)请写出以下语句的输出结果:Int i=43;Int j=5;Double f=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 B)i=2b ,j=00005,i/j=8 (%x显示的是一个无符号的0x 16进制的整数,%06d输出的是6位数,不够6位数,前面补0,i/j两个整数相除,只取商的整数值)3、(2分)请完成以下宏定义:a)用预处理指令#define 声明
3、一个常数,用以表明1年中有多少个秒(忽略闰年问题)b)写一个“标准”宏MIN,这个宏输入两个参数并返回较小的一个答案:a)#define seconds 365*24*60*60b) #define MIN(a,b) (a)(b)(a):(b) ABS宏 #define ABS (x)0)?(x):(-(x)4、(6分)以下为32为windows下的c+程序,请计算:a)char str=”hello”;char *p=str;请计算:sizeof(str)= sizeof(p)= strlen(p)=答案:6, 4,5b)void func(char str100)Void *p=mallo
4、c(100);请计算:sizeof(str)=101sizeof (p)=4c) int a3=1,2,3;int b=sizeof(a)/sizeof(a0);请计算:b=35、(2分) 设有定义:int n=0,*p=&n,*q=&p; 则以下选项中,正确的赋值语句是(d)a)p=1; b)*q=2; c)q=p; d)*p=5;6、(2分)const关键字的用途?(至少说明两种)答案:(1)可以定义 const 常量 (2)const 可以修饰函数的参数、返回值,甚至函数的定义体。被const 修饰的东西都受到强制保护,可以预防意外的变动,能提高程序的健壮性。7、(2分)typedef的
5、c语言中频繁用以声明一个已经存在的数据类型的同义词。也可以用以预处理器做类似的事情。例如:#define dps struct s*Typedef struct s *tps;以上两种情况的意图都是要定义dps和tps作为一个指向结构s指针。哪种方法更好一些呢?(如果有的话)为什么?Typedef更好一些,因为define只是简单的替换,比如声明dps a,b等价于struct *a,b;所以这样声明是错误的,而Typedef却不会这样。8、(8分) 以下是一组有关内存知识的问题,请仔细看题,回答:Void GetMemory(char *p)P=(char *)malloc(100);Voi
6、d Test(void)Char *str=Null;GetMemory(str);Strcpy(str,”hello world”);Printf(str);请问运行Test函数会有什么样的结果?a)_会出错,不能传递动态分配的内存,str一直为空char *GetMemory(void)Char p=”hello world”);Return p;Void Test(void)Char *str=NULL;Str=GetMemory();Printf(str);请问运行Test函数会有什么结果?b)_会产生错误,不能返回子函数的局部变量值,因为在函数退出时,局部变量的值也清空。void G
7、etMemory2(char *p,int num)*p=(char *)malloc(num);Void Test(void)Char *str=NULL;GetMemory(&str,100);Strcpy(str,”hello”);Printf(str);请问运行Test函数会有什么结果?c)_hello。void Test(void)Char *str=(char *)malloc(100);Strcpy(str,”hello”);Free(str);If(str!=NULL)Strcpy(str,”world”);Printf(str);请问运行test函数会有什么样的结果?虽然能拷
8、贝成功,但是这样使用很不安全,free(str)后,str成为悬浮指针。9、(6分)请写出以下程序的输出结果:Class APublic:A() Printf(“A constructed.n”);Virtual A()printf(“A deconstructed.n”);Virtual void Fn()printf(“A fn called.n”);Class B:public APublic:B()printf(“B constructed.n”);Virtual B()printf(“B deconstructed.n”);Virtual void Fn()printf(“B fn
9、called.n”);Class C:public BPublic:C()printf(“C constructed.n”);Virtual C()printf(“C deconstructed.n”);Virtual void Fn()printf(“C fn called.n”);Void main(int argc,char* grgv)A *pA=new B;If(pA!=NULL)pA-fn();B *pB=static_cast(pA);If(pB!=NULL)pB-fn();C * pC=static_cast(pA);If(pC!=NULL)pC-fn();delete pA;
10、A constructed.B constructedB fn called.B fn called.B fn called.B deconstructed.A deconstructed.10.(2分)以下说法错误的是:(b)A)指针和引用作为函数参数都可以改变实参B)指针和引用都可以在定义后任意的改变指向C)引用必须在创建的时候初始化,而指针则不需要D)不能空引用,但是可以有空指针11、(2分) 下列关于多态的描述,错误的是(c)A)C+语言的多态性分为编译时的多态和运行时的多态性B)编译时的多态性可以通过函数重载来实现C)运行时的多态性可以通过模板和虚函数来实现D)实现运行时多态性的机制
11、称动态绑定12、(2分) 运算符的重载形式有两种,重载为_类的成员函数_和_类的友元函数_13、(2分) main主函数执行完毕后,是否可能会再执行一段代码?请说明理由?答:可以,可以用_onexit()注册一个函数,在main结束之后调用f1,f2,f3,f4。14、(2分)C+中的空类,默认产生那些类成员函数?答:默认构造函数、析构函数、默认拷贝函数和赋值操作符15、(4分)简述STL库的功能,并给出遍历一个包含一组整型数的vector的代码。答:标准模板库是一个基于模板的容器类库,包括链表、列表、队列和堆栈。标准模板库还包含许多常用的算法,包括排序和查找。标准模板库的目的是提供对常用需求
12、重新开发的一种替代方法。标准模板库已经经过测试和调试,具有很高的性能并且是免费的。最重要的是,标准模板库是可重用的,当你知道如何使用一个标准模板库的容器后,就可以在所有的程序中使用它而不需要重新开发了。容器是包容其他对象的对象。标准C+库提供了一系列的容器类,它们都是强有力的工具,可以帮助C+开发人员处理一些常见的编程任务。标准模板库容器类有两种类型,分别为顺序和关联。顺序容器可以提供对其成员的顺序访问和随机访问,关联容器则经过优化类的键值访问它们的元素。标准模板库在不同操作系统是可移植的。#include#includeusing namespace std;int sum(vector v
13、ec)int result=0;vector:iterator p=vec.begin();while(p!=vec.end()cout*p ;result+=*p+;return result;int main()vector v1(100);coutv1.size()endl;/100coutsum(v1)endl;/0v1.push_back(23);coutv1.size()endl;/101coutsum(v1)endl;/23v1.reserve(1000);v1900=900;coutv1900endl;coutv1.front()endl;coutv1.back()endl;v
14、1.pop_back();coutv1.back()0,(i=1,2,n),则对任一事件B(P(B)0)有:17、(5分)进程和线程的区别和联系?进程和线程的关系:(1)一个线程只能属于一个进程,而一个进程可以有多个线程,但至少有一个线程。(2)资源分配给进程,同一进程的所有线程共享该进程的所有资源。(3)处理机分给线程,即真正在处理机上运行的是线程。(4)线程在执行过程中,需要协作同步。不同进程的线程间要利用消息通信的办法实现同步。线程是指进程内的一个执行单元,也是进程内的可调度实体.与进程的区别:(1)调度:线程作为调度和分配的基本单位,进程作为拥有资源的基本单位(2)并发性:不仅进程之间
15、可以并发执行,同一个进程的多个线程之间也可并发执行(3)拥有资源:进程是拥有资源的一个独立单位,线程不拥有系统资源,但可以访问隶属于进程的资源.(4) 系统开销:在创建或撤消进程时,由于系统都要为之分配和回收资源,导致系统的开销明显大于创建或撤消线程时的开销。但是进程有独立的地址空间,一个进程崩溃后,在保护模式下不会对其它进程产生影响,而线程只是一个进程中的不同执行路径。线程有自己的堆栈和局部变量,但线程之间没有单独的地址空间,一个线程死掉就等于整个进程死掉,所以多进程的程序要比多线程的程序健壮,但在进程切换时,耗费资源较大,效率要差一些18、(10分) 请不用任何c runtime函数实现以
16、下函数:Inter trim_str(char *pstr)函数功能如下:1) 滤掉字符串头尾的空格、回车、tab2) 输出字符串通过输入字符串指针返回3) 如果成功则返回0否则返回非0#includeusing namespace std;#define ERR -1;int trim_str(char *pstr)char *p=pstr;char *m;if(p=NULL)return ERR;while(*p!=0)if(*p= )|(*p=n)|(*p=t)m=p;while(*m!=0)*m=*(m+1);m+;elsep+;return 0;int main() char s=a
17、b deedeasd ; int i=trim_str(s);if(i=0)cout成功endl;elsecout失败endl;coutsendl;return 0;19、(10分)有N个大小不等的自然数(1,2,3,.N)请将它们从小到大排列。算法要求:时间复杂度为O(n),空间复杂度为O(1)。请简要说明你采用的排序算法并写出c的伪代码。#includeusing namespace std;const int MAX=1000;int dataMAX;void paixu(int *p,int m)int k=0;for(int i=0;iMAX;i+)datai=0;for(int j
18、=0;jm;j+)data*(p+j)+;for(i=0;iMAX;i+)if(datai!=0)for(j=0;jdatai;j+)*(p+k)=i;k+;int main()int a=1,3,1,27,13,2,4,80,43,23,18,46;int len;len=sizeof(a)/sizeof(int);paixu(a,len);for(int i=0;ilen;i+)coutai ;return 0;20、(10分) 用文字和图示(类图)描述你所知道的除单件模式和简单工厂之外的一种设计模式,并用c+实现单例模式:类图:Singletonsingleton:Singleton *
19、GetInstance()Singleton()class Singletonpublic:static Singleton* GetInstance();private:Singleton()Singleton()static Singleton *singleton;Singleton* Singleton:singleton=NULL;Singleton* Singleton:GetInstance()if(singleton=NULL)singleton=new Singleton();return singleton;21、(10分)请在下列三题中任选一题作答A)什么是内存的垃圾回收
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 几年 科大讯飞 软件 笔试 题目 学习 资料
限制150内