科大讯飞2012笔试标准答案
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
、单选题
1、64变形的外角和是多少(A)是360度
A、1*360
B、1*180
C 64*360 D、64*180
2、有一盆衣服(已经洗过了,需要漂洗),请问在漂洗次数固定的情况下如何分配水才能把衣服洗得最干净(C)
A、从少到多
B、从多到少
C平均分配,是求函数极值问题D、随便洗
3、用力拉一根橡皮筋,橡皮筋上有没有点还处在原来的位置没有被拉走(B)
A、有
B、没有
C有是有、有时没有D、一般人拉没有,刘谦拉就有4、假设一个应用程序需要使用多个提供不同功能但在皆接口上有差异的类,适合使用的设计模式是(D(确定))
A、装饰模式
B、迭代器模式
装饰模式是在不必改变原类文件和使用继承的情况下,动态的扩展一个对象的功能。
它是通过创建一个包装对象,也就是装饰来包裹真实的对象。
迭代器模式是一种设计模式,是一种最简单也最常见的设计模式。
它可以让使用者透过特定的接口巡访容器中的每一个元素而不用了解底层的实作。
C工厂模式D、适配器模式5、结构化程序设计主要强调的是(C)
A、程序的规模
B、程序的效率
C程序的易读性D、程序设计语言的先进性6、SQL Server中,删除一个表的命令是(C)
A、DELETE B CLEAR C DROP
D、REMOVVE
7、以下关于互斥量说法错误的是:(B)
A、单线程程序不需要使用互斥量
B、互斥量可以被两个以上的线程锁定
C互斥量的激活是原子操作
D、互斥量的创建和销毁可以在不同的线程进行
&在Windows任务管理器中发现某个进程CPU占用率长时间处于100%,以下可能导致该现
象的原因是(D)
A、程序处于大量I/O过程中
B、多线程导致进程死锁
C等带另一个程序响应D、程序进入死循环
9、假设进程中一个生产者线程,10个消费者线程,为保证进程间不出现死锁,信号量的初
值可以设置为(C)
A、-1
D 10
10、使用两个栈共享一片空间时,当( D )时,才产生溢出
A 、 其中一个栈的栈底到达这片内存空间的中心点
B 、 其中一个栈的栈顶到达这片内存空间的中心点
C 两个栈均不空,且一个栈的栈顶到达另一个栈的栈底(不可能发生这种情况)
D 、两个栈的栈顶在这片内存空间的某一位置相遇
11、在一个单链表HL 中,若要在指针所指节点的后面插入一个有指针 seco nd 所指向的节点, 则执行(A )
A 、 second->next=first->next ; first->next=second;
B 、 first->n ext=sec ond->next ; sec on d=first ;
C second->next=first->next ; second->next=first ;
D 、 first->next=second->next ; second->next=first ;
12、以下C 语言编译过程的真确步骤是( B )
A 、预处理 编译 汇编 连接
B 、预处理 编译 优化(不能少了优化) 汇编 连 接
C 编译优化汇编运行
D 、编辑预处理编译汇编优化运行 13、在C 语言程序编译时出现如下错误:
“error LNK2019: unresoved external symbol"int__cdecl test ( int ) "(?test@@YAHH@Z ) refere need ”可能的原因是(D )
A 、函数未定义
B 、变量未声明
C 、变量未定义
D 、函数未声明
14、下列关于C 语言中的函数叙述错误的是(
B )
A 、 一个函数中可以有多条 return 语句
B 、 调用函数必须要在一条独立的语句中完成
C 函数可以通过 return 语句传递函数值
D 、主函数main 可以带有参数
15、在C 语言中,打开可读写的二进制文件 myfile 并向该文件追加写入内容,如果 myfile 不存在则创建新文件,正确的调用方式为()
16、在C 语言中,一个short int 型数据在内存中占2字节,则short int 型数据的取值范围(B ) A 、 -256~255
B 、 -32768~32767
C -65536~65535
D 、-2147483647-2147683648
A 、fopen ("myfile","w")
C fopen ("myfile","r+b") a 表示追加文件内容。
B fopen ("myfile","wb") D 、fopen ("myfile","a+b")
C char s[6]="" ; D、char s[6]="abcdef'
18、有以下一段程序代码:
void GetMemory (char **p , int num )
{
*p= (char * ) malloc (num);
}
void Test (void)
{
char *str=NULL;
GetMemory (&str, 100);
strcpy (str, "hello");
prin tf(str);
}
请问运行Test函数会有什么样的结果(A)
A、hello B无效指针,输出不确定
C NUll D程序崩溃
19、在32位系统中,有一类:
class A
{
public:
virtual int test();
virtual double test2();
int test3();
protected:
double test4();
private :
int a,b,c;定义了三个变量,加上一个虚函数表指针。
大小
16
为};
请问sizeof (A) = (B)
A、12
B、16
C、28
D、32
这个指针需要占
成员变量+虚函数表指针(4个字节,多个虚函数也只有一个该指针)。
则所有的虚函数保存在虚函数表中,然后类中会有一个指针指向该表;用空间,所以需要+4 ;
空类的大小为1.
20、有以下一段程序代码:
class A
{
public:
virtual void fun c1(){pri ntf("A'sfu ncl");} void fun c2(){("A'sfu nc2")};
}
class B:public A
{
public:
virtual void fun c1(){pri ntf("B'sfu ncl");} void fun c2(){("B'sfu nc2")};
}
void mai n()
{
B in st_b;
B *ptr_a=&b;
ptr_a->fu nc1();
ptr_a->fu nc2();
}
程序的输出结果为:(C)
A、A'sfuncl B'sfunc2
B、B'sfuncl A'sfunc2
C、B'sfuncl B'sfunc2
D、A'sfuncl A'sfunc2
、填空题
1、操作系统中的存储管理常用—虚拟存储器—的方式来摆脱主存容量的限制。
2、满二叉树第i层上的叶子节点数有_2 A(i —1) —个。
3、二分查找算法平均时间复杂程度是—o (log (n)) ___________ 。
4、设x=3, y=2, x<<y= __________ 12 ____ 。
5、非成员函数声明为类的 _友元函数________ 才能访问这个类的private成员。
6、带有 ___ 纯虚函数_____ 的类称为抽象类,它只能作为基类来使用。
三、简答题(每题6分,共18 分)
1、列举你所知道的排序算法和它们的平均复杂程度。
答:1、冒泡排序(bubble sort) —O(n^2)
2、鸡尾酒排序(Cocktail sort,双向的冒泡排序)一0(n A2)
3、插入排序(insertion sort ) —0(门人2)
4、选择排序(selection sort) —0(门人2)
5、堆排序(heapsort) —0(nlog n)
6、快速排序(quicksort) —0(nlog n)
快速排序:(基于划分即分治的的思想,就是选择一个基准,使得左边小于基准,右边大于基准) 希尔排序:选择你一个增量,不断递减来排序。
基数排序:对于整数,按照个位,十位,百位来排序0(d n)
桶排序:工作的原理是将阵列分到有限数量的桶子里。
每个桶子再个别排序(有可能再使用别的排序算法或是以递回方式继续使用桶排序进行排序)。
桶排序是鸽巢排序
的一种归纳结果。
当要被排序的阵列内的数值是均匀分配的时候,0(n)
各种排序的方式
2、列举析构函数与普通类成员函数的不同点。
答:1、析构函数名也应与类名相同,只是在函数名前面加一个波浪符
~,例如~stud()
2、它不能带任何参数,也没有返回值(包括void类型)。
3、只能有一个析构函数,不能重载
4、析构函数在对象生存期即将结束的时刻被自动调用
3、在C++语言中使用宏定义经常会引起一些错误(如少打括号引起表达式值与预期不符等)
列举一些可以代替宏定义的方法。
内联函数从源代码层看,有函数的结构,而在编译后,却不具备函数的性质。
编译时,类似宏替换。
Method 1 :内联函数,
Method 2 : con st 方法
Method 3 : typedef 方法。
四、编程题(共三题20分)
1、斐波那契数列的形式如下:1,1,2,3,5,8,13”,n,编写一个函数计算数列中第n个元素
的值。
(5分)
(1 )、C语言程序实现
#i nclude<stdio.h>
int feibo(i nt p)
{
if(p>2)
return feibo(p-1)+feibo(p-2); else
return 1;
}
void mai n()
{
int i,n;
long int sum=0;
scan f("%d",&n);
sum=feibo( n-1)+feibo( n-2);
prin tf("%d\n",sum);
(2)、C++语言实现
#i nclude <iostream>
using n amespace std;
int fib(i nt n)
{
cout<<"Process ing fib("< <n< <")...";
if(n<3)
{return(1);}
else
{return(fib( n-2)+fib( n-1));}
}
int mai n()
{
int n,an swer;
cout<<"E nter nu mber:";
cin»n;
cout<<"\n\n";
an swer=fib (n);
cout<<a nswer<<"is the "<<n< <"th Fib on acci nu mber\ n"; return 0;
}
int fabnc(int n)
{
if (n==1|| n==0)
{
return 1;
}
else
return fabn c(n-1)+fab nc(n-2);
}
2、不调用任何系统函数,实现一个字符串查找子串的函数,如果包含字串,则返回该字符串的位置值,如果不包含,则返回-1。
( 7分)
int substring(char* str,char* substr)
{
char* p,*q;
char* temp;
p=str;
q=substr
int count=1;
while (*p!='\0')
{
while (*p!=*q)
{
p++;
cou nt++;
}
temp=p;
if (*p=='\0)
{
return -1;
}
while((*p==*q)&&* q!='\0')
{
p++;
q++;
}
if (*q!='\0')
{
p=temp+1;
q=substr;
cou nt++;
}
else
break;
}
cout<<* p<<" "<<*q<< en dl;
if (*q=='\0)
{
return count;
}
else
{
/*delete[] p;
delete[] q;*/
//没?有?Dnew岀?地?址23来□?, @是(?不?需•要°释o'si放C?地?址?□的?,溟只?需••要°把??旨?针?置?零©即??可•「
p=NULL;
q=NULL;
temp=NULL ;
return -1;
分两步,
第一步:找到字符串中与子串首字符相等的字符在字符串中的位置。
第二步:比较以后的字符是否相等。
如果不等,记录上次找到的第一次相等的位置,从这以后再寻找找到字符串中与子串首字符相等的字符在字符串中的位置。
然后再比较以后的字符是否相等。
2、用算法实现将一个输入的数字颠倒(输入12345->54321 ),要求不调用任何系统函数,
也不能将输入的数字转换为字符串作为中间过渡。
(8分)
#inelude <iostream>
using namespacestd;
int revernum(int num)
{
int a[15];
int b, temp;
int revernum=O;
while (num!=O)
{
b=n um%10;
rever num=(rever num*10)+ b;
num=n um/10;
}
return rever num;
}
int main()
{
int num;
int num仁56435;
cout<<"please in put the test n umber<<e ndl;
cin»n um;
cout<< rever num(n um)<<e ndl;
system( "pause");。