C++笔试题目及答案.docx
《C++笔试题目及答案.docx》由会员分享,可在线阅读,更多相关《C++笔试题目及答案.docx(12页珍藏版)》请在冰点文库上搜索。
C++笔试题目及答案
C++笔试题目及答案
C++笔试题目及答案篇1
1.What’soverloadfunctioninC++?
“重载”是指编写一个与已有函数同名但参数表不同的函数。
构成重载的条件是:
在相同的范围内(比如说在同一个类中),函数名字相同,但函数参数不同(要么参数类型不同,要么参数个数不同,要么两者都不同)
2.A.What’sinlinefunctioninC++?
内联函数是指嵌入代码,就是在调用函数的地方不是跳转,而是直接把代码写到那里去。
它与普通函数相比能提高效率,因为它不需要中断调用,在编译的时候内联函数可以直接把代码镶嵌到目标代码中去,省去了函数调用的开销,但是它是以代码膨胀为代码的(以增加空间消耗为代价)
B.Whenwouldyouuseinlinefunction?
(1)一个函数不断的被重复调用
(2)函数只有简单的几行,且函数内部包含:
for,while,switch语句。
C.Pleasewritesamplecode.
voidFoo(intx,inty);
inlinevoidFoo(intx,inty){...}
需要注意的是:
关键字inline必须与函数定义体放在一起才能使函数构成内联,仅将inline放在函数声明前不起任何作用。
3.Whichofthefollowingarelegal?
Forthoseusagesthatareillegal,explainwhy.
constintbuf;
不合法。
因为定义const变量(常量)时必须进行初始化,而buf没有初始化。
intcnt=0;
constintsz=cnt;
合法。
cnt++;sz++;
不合法。
因为修改了const变量sz的值。
4.PleasepointouttheerrorsinthefollowingC++code.Andwhy?
switch(ival)
{
case1,3,5,7,9:
oddcnt++;
break;
case2,4,6,8,10:
evencnt++;
break;
}
貌似case不能把所有的情况并列列出来,没见过case1,3,5,7,9:
这种写法,改为case1:
oddcnt++;case3:
oddcnt++;
C++笔试题目及答案篇2
1.Giventhefollowingbaseandderivedclassdefinitions:
classBase
{
public:
foo(int);
protected:
int_bar;
double_foo_bar;
};
classDerived:
publicBase
{
public:
foo(string);
boolbar(Base*pb);
voidfoobar();
protected:
string_bar;
};
Identifywhatiswrongwitheachofthefollowingcodefragmentsandhoweachmightbefixed:
(a)Derivedd;d.foo(1024);
错误:
定义个派生类的对象d,d.foo(1024);派生类中foo的参数是string,不能将int型转换为"string"
(b)voidDerived:
:
foobar(){_bar=1024;}
正确:
定义派生类的成员函数foobar();把整形1024赋给string,发生类型转换
(c)boolDerived:
:
bar{Base*pb}
{return_foo_bar==pb->_foo_bar;}
错误:
没有参数列表,还有下面不应该为"==",还有在派生类中无法访问基类的保护成员。
应该改为:
boolDerived:
:
bar(Base*pb)
{return_foo_bar=pb->_foo_bar;}
2.A.Pleaselistallthedesignpatternsyouknown.
常见的设计模式有23种,比如说:
单例模式、工厂模式,观察者模式、组合模式、策略模式、适配器模式、命令模式等等
B.Pleaseexplainthepatternof“Factory”andgiveanexampleifyoucan.
工厂模式使一个类的实例化延迟到子类,换句话说也就是将创建对象实例的责任,
转移到工厂类中,并利用抽象的原理,将实例化行为延迟到具体工厂类。
3.A.Pleaselistallthesortingalgorithmsyouknown.
排序算法:
冒泡排序(最简单了,就是2个for循环)、快速排序、选择排序、插入排序、归并排序、希尔排序、堆排序等等
B.Pleaseusepseudocodetodescribethealgorithmof“QuickSort”.
快速排序采用的是分治策略,分治法的基本思想是:
将原问题分解为若干个规模更小但结构与原问题相似的子问题,递归解决这些子问题,然后将这些子问题的解组合为原问题的解。
快速排序:
快速排序是对冒泡排序的一种改进,时间复杂度均是O(nlogn)空间复杂度是:
O(logn)
基本思想:
通过一趟排序算法将待排记录分割成2部分,其中一部分记录的关键字均比另一部分记录的关键字小,则可分别对这两部分记录进行排序以达到整个序列有序。
一趟快速排序做法:
附设两个指针low和high,设枢轴记录关键字为pivotkey,则先从高位(high)起向前搜索找到第一个关键字小于pivotkey的记录和枢轴记录进行交换,然后从低位(low)所指位置向后搜索,找到第一个关键字大于pivotkey的记录和枢轴记录进行交换,重复这两步,直至low=high为止。
源代码:
voidquicksort(inta[],intlow,inthigh)
{
inti,j,key,temp;
if(low
{
key=a[low];
i=low;
j=high;
while(i
{
for(i=i+1;i
if(a[i]>key)
break;
for(j=j;j>low;j--)
if(a[j]
break;
if(i
{temp=a[i];
a[i]=a[j];
a[j]=temp;
}
}
temp=a[low];
a[low]=a[j];
a[j]=temp;
quicksort(a,low,j-1);
quicksort(a,i,high);
}
}
测试:
int_tmain(intargc,_TCHAR*argv[])
{
inta[]={49,38,65,97,76,13,27,49};
intsize=sizeof(a)/sizeof(int);
quicksort(a,0,size-1);
for(inti=0;i
{
cout<
cout<
}
system("pause");
return0;
}
C++笔试题目及答案篇3
Pleaseanswerthefollowingquestions:
A.What’sprocessschedulingandlistallschedulingalgorithmsyouknown.
调度算法是指:
根据系统的资源分配策略所规定的资源分配算法。
1.先来先服务和短作业(进程)优先调度算法
2.高优先权优先调度算法
3.基于时间片的轮转调度算法
B.What’sthe“RaceCondition”?
竞态条件(racecondition)是一个在设备或者系统试图同时执行两个操作的时候
出现的不希望的状况,但是由于设备和系统的自然特性,为了正确地执行,操作必
须按照合适顺序进行。
常用在多线程环境中。
C.Pleaseexplainthediagramofprocessstatechange.
进程有3种基本状态,等待、就绪、运行。
运行态→等待态:
往往是由于等待外设,等待主存等资源分配或等待人工干预而引
起的。
(服务请求,如请求I/O等)
等待态→就绪态:
等待的条件已满足,只需分配到处理器后就能运行。
(服务完
成/事件来到)
运行态→就绪态:
不是由于自身原因,而是由外界原因使运行状态的进程让出处理
器,这时候就变成就绪态。
例如时间片用完,或有更高优先级的进程来抢占处理器
等。
(时间片到等)
就绪态→运行态:
系统按某种策略选中就绪队列中的一个进程占用处理器,此时就
变成了运行态(进程调度)