全近几年科大讯飞软件笔试题目学习资料.docx
- 文档编号:25322940
- 上传时间:2023-06-07
- 格式:DOCX
- 页数:30
- 大小:39.54KB
全近几年科大讯飞软件笔试题目学习资料.docx
《全近几年科大讯飞软件笔试题目学习资料.docx》由会员分享,可在线阅读,更多相关《全近几年科大讯飞软件笔试题目学习资料.docx(30页珍藏版)》请在冰豆网上搜索。
全近几年科大讯飞软件笔试题目学习资料
(全)近几年科大讯飞软件笔试题目
2009讯飞软件开发笔试题目(C++)A卷
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.45B)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*60
b)#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,4,5
b)voidfunc(charstr[100])
{
Void*p=malloc(100);
}
请计算:
sizeof(str)=101
sizeof(p)=4
c)inta[3]={1,2,3};
intb=sizeof(a)/sizeof(a[0]);
请计算:
b=3
5、(2分)设有定义:
intn=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语言中频繁用以声明一个已经存在的数据类型的同义词。
也可以用以预处理器做类似的事情。
例如:
#definedpsstructs*
Typedefstructs*tps;
以上两种情况的意图都是要定义dps和tps作为一个指向结构s指针。
哪种方法更好一些呢?
(如果有的话)为什么?
Typedef更好一些,因为define只是简单的替换,比如声明dpsa,b等价于struct*a,b;所以这样声明是错误的,而Typedef却不会这样。
8、(8分)以下是一组有关内存知识的问题,请仔细看题,回答:
VoidGetMemory(char*p)
{
P=(char*)malloc(100);
}
VoidTest(void)
{
Char*str=Null;
GetMemory(str);
Strcpy(str,”helloworld”);
Printf(str);
}
请问运行Test函数会有什么样的结果?
a)_会出错,不能传递动态分配的内存,str一直为空
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函数会有什么样的结果?
虽然能拷贝成功,但是这样使用很不安全,free(str)后,str成为悬浮指针。
9、(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_cast(pA);
If(pB!
=NULL)
pB->fn();
C*pC=static_cast
If(pC!
=NULL)
pC->fn();
deletepA;
}
Aconstructed.
Bconstructed
Bfncalled.
Bfncalled.
Bfncalled.
Bdeconstructed.
Adeconstructed.
10.(2分)以下说法错误的是:
(b)
A)指针和引用作为函数参数都可以改变实参
B)指针和引用都可以在定义后任意的改变指向
C)引用必须在创建的时候初始化,而指针则不需要
D)不能空引用,但是可以有空指针
11、(2分)下列关于多态的描述,错误的是(c)
A)C++语言的多态性分为编译时的多态和运行时的多态性
B)编译时的多态性可以通过函数重载来实现
C)运行时的多态性可以通过模板和虚函数来实现
D)实现运行时多态性的机制称动态绑定
12、(2分)运算符的重载形式有两种,重载为_类的成员函数_和_类的友元函数_
13、(2分)main主函数执行完毕后,是否可能会再执行一段代码?
请说明理由?
答:
可以,可以用_onexit()注册一个函数,在main结束之后调用f1,f2,f3,f4。
14、(2分)C++中的空类,默认产生那些类成员函数?
答:
默认构造函数、析构函数、默认拷贝函数和赋值操作符
15、(4分)简述STL库的功能,并给出遍历一个包含一组整型数的vector的代码。
答:
标准模板库是一个基于模板的容器类库,包括链表、列表、队列和堆栈。
标准模板库还包含许多常用的算法,包括排序和查找。
标准模板库的目的是提供对常用需求重新开发的一种替代方法。
标准模板库已经经过测试和调试,具有很高的性能并且是免费的。
最重要的是,标准模板库是可重用的,当你知道如何使用一个标准模板库的容器后,就可以在所有的程序中使用它而不需要重新开发了。
容器是包容其他对象的对象。
标准C++库提供了一系列的容器类,它们都是强有力的工具,可以帮助C++开发人员处理一些常见的编程任务。
标准模板库容器类有两种类型,分别为顺序和关联。
顺序容器可以提供对其成员的顺序访问和随机访问,关联容器则经过优化类的键值访问它们的元素。
标准模板库在不同操作系统是可移植的。
#include
#include
usingnamespacestd;
intsum(vector
{
intresult=0;
vector
:
iteratorp=vec.begin();
while(p!
=vec.end())
{
cout<<*p<<"";
result+=*p++;
}
returnresult;
}
intmain()
{
vector
cout< cout< v1.push_back(23); cout< cout< v1.reserve(1000); v1[900]=900; cout< cout< cout< v1.pop_back(); cout< return0; } 16、(5分)请写出贝叶斯公式 若A1,A2,…,An构成完备事件组,且P(Ai)>0,(i=1,2,…,n),则对任一事件B(P(B)>0)有: 17、(5分)进程和线程的区别和联系? 进程和线程的关系: (1)一个线程只能属于一个进程,而一个进程可以有多个线程,但至少有一个线程。 (2)资源分配给进程,同一进程的所有线程共享该进程的所有资源。 (3)处理机分给线程,即真正在处理机上运行的是线程。 (4)线程在执行过程中,需要协作同步。 不同进程的线程间要利用消息通信的办法实现同步。 线程是指进程内的一个执行单元,也是进程内的可调度实体. 与进程的区别: (1)调度: 线程作为调度和分配的基本单位,进程作为拥有资源的基本单位 (2)并发性: 不仅进程之间可以并发执行,同一个进程的多个线程之间也可并发执行 (3)拥有资源: 进程是拥有资源的一个独立单位,线程不拥有系统资源,但可以访问隶属于进程的资源. (4)系统开销: 在创建或撤消进程时,由于系统都要为之分配和回收资源,导致系统的开销明显大于创建或撤消线程时的开销。 但是进程有独立的地址空间,一个进程崩溃后,在保护模式下不会对其它进程产生影响,而线程只是一个进程中的不同执行路径。 线程有自己的堆栈和局部变量,但线程之间没有单独的地址空间,一个线程死掉就等于整个进程死掉,所以多进程的程序要比多线程的程序健壮,但在进程切换时,耗费资源较大,效率要差一些 18、(10分)请不用任何cruntime函数实现以下函数: Intertrim_str(char*pstr) 函数功能如下: 1)滤掉字符串头尾的空格、回车、tab 2)输出字符串通过输入字符串指针返回 3)如果成功则返回0否则返回非0 #include usingnamespacestd; #defineERR-1; inttrim_str(char*pstr) { char*p=pstr; char*m; if(p==NULL) { returnERR; } while(*p! ='\0') { if((*p=='')|(*p=='\n')|(*p=='\t')) { m=p; while(*m! ='\0') { *m=*(m+1); m++; } } else { p++; } } return0; } intmain() { chars[]="abdeedeasd"; inti=trim_str(s); if(i==0) { cout<<"成功"< } else { cout<<"失败"< } cout< return0; } 19、(10分)有N个大小不等的自然数(1,2,3,…..N)请将它们从小到大排列。 算法要求: 时间复杂度为O(n),空间复杂度为O (1)。 请简要说明你采用的排序算法并写出c的伪代码。 #include usingnamespacestd; constintMAX=1000; intdata[MAX]; voidpaixu(int*p,intm) { intk=0;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 几年 科大讯飞 软件 笔试 题目 学习 资料