(全)近几年科大讯飞软件笔试题目
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
D)实现运行时多态性的机制称动态绑定 12、 (2 分) 运算符的重载形式有两种,重载为_类的成员函数_和_类的友元函数_ 13、 (2 分) main 主函数执行完毕后,是否可能会再执行一段代码?请说明理由? 答:可以,可以用_onexit()注册一个函数,在 main 结束之后调用 f1,f2,f3,f4。 14、 (2 分)C++中的空类,默认产生那些类成员函数? 答:默认构造函数、析构函数、默认拷贝函数和赋值操作符 15、 (4 分)简述 STL 库的功能,并给出遍历一个包含一组整型数的 vector 的代码。 答:标准模板库是一个基于模板的容器类库,包括链表、列表、队列和堆栈。标准模板库还 包含许多常用的算法, 包括排序和查找。 标准模板库的目的是提供对常用需求重新开发的一 种替代方法。 标准模板库已经经过测试和调试, 具有很高的性能并且是免费的。 最重要的是, 标准模板库是可重用的, 当你知道如何使用一个标准模板库的容器后, 就可以在所有的程序 中使用它而不需要重新开发了。 容器是包容其他对象的对象。标准 C++库提供了一系列的容器类,它们都是强有力的工具, 可以帮助 C++开发人员处理一些常见的编程任务。 标准模板库容器类有两种类型, 分别为顺 序和关联。 顺序容器可以提供对其成员的顺序访问和随机访问, 关联容器则经过优化类的键 值访问它们的元素。标准模板库在不同操作系统是可移植的。 #include<iostream> #include<vector> using namespace std; int sum(vector<int > vec) { int result=0; vector<int>::iterator p=vec.begin(); while(p!=vec.end()) { cout<<*p<<" "; result+=*p++; } return result; } int main() { vector<int> v1(100); cout<<v1.size()<<endl;//100 cout<<sum(v1)<<endl;//0 v1.push_back(23); cout<<v1.size()<<endl;//101 cout<<sum(v1)<<endl;//23 v1.reserve(1000); v1[900]=900; cout<<v1[900]<<endl; cout<<v1.front()<<endl; cout<<v1.back()<<endl; v1.pop_back();
c)
int a[3]={1,2,3}; int b=sizeof(a)/sizeof(a[0]); 请计算: b=3 5、 (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 的 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); } Void 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 函数会有什么结果?
l 1 l l
n
P ( Ak ) P ( B / Ak )
17、 (5 分)进程和线程的区别和联系? 进程和线程的关系: (1)一个线程只能属于一个进程,而一个进程可以有多个线程,但至少有一个线程。 (2)资源分配给进程,同一进程的所有线程共享该进程的所有资源。 (3)处理机分给线程,即真正在处理机上运行的是线程。 (4)线程在执行过程中,需要协作同步。不同进程的线程间要利用消息通信的办法实现同 步。 线程是指进程内的一个执行单元,也是进程内的可调度实体. 与进程的区别: (1)调度:线程作为调度和分配的基本单位,进程作为拥有资源的基本单位 (2)并发性:不仅进程之间可以并发执行,同一个进程的多个线程之间也可并发执行 (3)拥有资源:进程是拥有资源的一个独立单位,线程不拥有系统资源,但可以访问隶属于 进程的资源. (4) 系统开销:在创建或撤消进程时,由于系统都要为之分配和回收资源,导致系统的开销 明显大于创建或撤消线程时的开销。但是进程有独立的地址空间,一个进程崩溃后,在保护 模式下不会对其它进程产生影响, 而线程只是一个进程中的不同执行路径。 线程有自己的堆 栈和局部变量,但线程之间没有单独的地址空间,一个线程死掉就等于整个进程死掉,所以 多进程的程序要比多线程的程序健壮,但在进程切换时,耗费资源较大,效率要差一些 18、 (10 分) 请不用任何 c runtime 函数实现以下函数: Inter trim_str(char *pstr) 函数功能如下: 1) 滤掉字符串头尾的空格、回车、tab 2) 输出字符串通过输入字符串指针返回 3) 如果成功则返回 0 否则返回非 0 #include<iostream> using namespace std; #define ERR -1; int trim_str(char *pstr) { char *p=pstr; char *m; if(p==NULL) { return ERR;
b) _会产生错误, 不能返回子函数的局部变量值, 因为在函数退出时, 局部变量的值也清空。 void GetMemory2(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 函数会有什么样的结果? 虽然能拷贝成功,但是这样使用很不安全,free(str)后,str 成为悬浮指针。 9、 (6 分)请写出以下程序的输出结果: Class A { Public: A() { Printf(“A constructed.\n”);} Virtual ~A() {printf(“A deconstructed.\n”);} Virtual void Fn() {printf(“A fn called.\n”);} }; Class B:public A { Public: B() {printf(“B constructed.\n”);} Virtual ~B()
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 a[10]; e)int *a [10]; f) int a[10], *p=a; g)int (*a)(int) h) int( *a[10])(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 声明一个常数,用以表明 1 年中有多少个秒(忽略闰年问题) b)写一个“标准”宏 MIN,这个宏输入两个参数并返回较小的一个 答案: a)#define seconds 365*24*60*60 b) #define MIN(a,b) ((a)<(b)?(a):(b)) 扩展:MAX 宏 #define MAX ((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,5 b)void func(char str[100]) { Void *p=malloc(100); } 请计算: sizeof(str)=101 sizeof (p)=4
{printf(“B deconstructed.\n”);} Virtual void Fn() {printf(“B fn called.\n”);} }; Class C:public B { Public: 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<B*>(pA); If(pB!=NULL) pB->fn(); C * pC=static_cast<C*>(pA); If(pC!=NULL) pC->fn(); delete pA; } A constructed. B constructed B 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)运行时的多态性可以通过模板和虚函数来实现
cout<<v1.back()<<endl; return 0; } 16、 (5 分)请写出贝叶斯公式 若 A1,A2,…,An 构成完备事件组,且 P(Ai)>0,(i=1,2,…,n) ,则对任一事件 B(P(B)>0) 有:
P ( Ak / B )
P( A ) P( B /பைடு நூலகம்A )