C++常见笔试题及答案文档格式.docx
《C++常见笔试题及答案文档格式.docx》由会员分享,可在线阅读,更多相关《C++常见笔试题及答案文档格式.docx(86页珍藏版)》请在冰豆网上搜索。
![C++常见笔试题及答案文档格式.docx](https://file1.bdocx.com/fileroot1/2022-11/23/ccb6d232-1e93-421e-abf2-7c2a54e3ea7d/ccb6d232-1e93-421e-abf2-7c2a54e3ea7d1.gif)
deletet;
}
在节点P后插入一个节点:
boollist〈type〉:
:
insert(typet,intp)
{
listnode〈type〉*ptr;
ptr=first;
intk=1;
while(ptr!
=NULL&&k<
p)
ptr=ptr->
k++;
if(ptr==NULL&&k!
returnfalse;
else
listnode<
type〉*tp;
tp=newlistnode<
type〉;
tp->
data=t;
next=ptr—〉next;
ptr->
next=tp;
length++;
returntrue;
6写一个函数,将其中的\t都转换成4个空格。
boolchange(char*buf,intlen)
intcount=0;
inti;
//统计有多少个’\t’
for(i=0;
buf[i]!
='
\0'
;
i++){
if(buf[i]=='
\t'
)
count++;
}
//给定的buf空间是否能装下生成的字符串
intj=i+3*count;
if(len〈j+1)
returnfalse;
//从后向前逐个替换
while(count>
0)
{
while(buf[i]!
\t’)
buf[j--]=buf[i-—];
count——;
buf[j]=buf[j-1]=buf[j—2]=buf[j—3]='
'
;
j—=4;
i—-;
returntrue;
intmain()
charbuf[100]="
123\t45\t\t\t6\t\t65\n4234\t5345"
cout<
<
”Beforechage:
"
endl;
cout〈〈buf<
cout〈〈"
Aftercallingthefunction:
//buf是原字符串,100是buf的长度(要足够大,最好是原字符串的3倍)
if(change(buf,100)==true)
cout〈<
buf<
〈endl;
charc;
cin〉〉c;
7Windows程序的入口是哪里?
写出Windows消息机制的流程。
函数WinMain()
Windows应用程序的消息处理机制如图1。
2所示。
(1)操作系统接收到应用程序的窗口消息,将消息投递到该应用程序的消息队列中.
(2)应用程序在消息循环中调用GetMessage函数从消息队列中取出一条一条的消息。
取出消息后,应用程序可以对消息进行一些预处理,例如,放弃对某些消息的响应,或者调用TranslateMessage产生新的消息。
(3)应用程序调用DispatchMessage,将消息回传给操作系统。
消息是由MSG结构体对象来表示的,其中就包含了接收消息的窗口的句柄。
因此,DispatchMessage函数总能进行正确的传递。
(4)系统利用WNDCLASS结构体的lpfnWndProc成员保存的窗口过程函数的指针调用窗口过程,对消息进行处理(即“系统给应用程序发送了消息”).
8如何定义和实现一个类的成员函数为回调函数?
把函数声明为static
9C++里面是不是所有的动作都是main()引起的?
如果不是,请举例。
在运行c++程序时,通常从main()函数开始执行.因此如果没有main(),程序将不完整,编译器将指出未定义main()函数.
例外情况:
如,在windows编程中,可以编写一个动态连接库(dll)模块,这是其他windows程序可以使用的代码。
由于DLL模块不是独立的程序,因此不需要main().用于专用环境的程序-—如机器人中的控制器芯片-—可能不需要main().但常规的独立程序都需要main().
10C++里面如何声明constvoidf(void)函数为C程序中的库函数?
extern"
C”voidf(void);
11下列哪两个是等同的C==D
intb;
Aconstint*a=&
b;
Bconst*inta=&
Cconstint*consta=&
Dintconst*consta=&
b;
12内联函数在编译时是否做参数类型检查
是
13三个float:
a,b,c问值
(a+b)+c==(b+a)+c1
(a+b)+c==(a+c)+b1
14把一个链表反向填空
voidreverse(test*head)
{test*pe=head;
test*ps=head->
while(ps)
{pe-〉next=ps—〉next;
ps—>
next=head;
head=ps;
ps=pe-〉next;
}}
16某个程序在一个嵌入式系统(200M的CPU,50M的SDRAM)中已经最化了,换到另一个系统(300M的CPU,50M的SDRAM)中运行,还需要优化吗?
要。
程序在每时每刻都要优化,只要能找到可以优化的方法。
优化有多种目的,在200M的CPU中可能需要以速度为重点优化,在300M的CPU中可能要以代码长度为目的优化。
17。
下面哪种排序法对12354最快C
aquicksort//快速排序
b.bublesort//冒泡排序
c.mergesort//归并排序
18。
哪种结构,平均来讲,获取一个值最快B
a。
binarytree//二叉树
b。
hashtable//散列表,哈希表
c.stack//栈
19请问C++的类和C里面的struct有什么区别?
c++的类的成员默认情况下是私有的,c的struct的成员默认情况下是公共的.
20请讲一讲析构函数和虚函数的用法和作用?
析构函数的名字和类名相同,没有返回值,没有参数,不能随意调用也没有重载.只是在类对象生命期结束时由系统自动调用。
虚函数用在继承中,当在派生类中需要重新定义基类的函数时需要在基类中将该函数声明为虚函数,作用为使程序支持动态联编.
21全局变量和局部变量有什么区别?
是怎么实现的?
操作系统和编译器是怎么知道的?
一些变量整个程序中都是可见的,它们称为全局变量,一些变量在函数内部定义且只在函数中可知,则称为局部变量。
全局变量由编译器建立且存放在内存的全局数据区,局部变量存放在栈区.
22一些寄存器的题目,主要是寻址和内存管理等一些知识.
1、立即寻址
2、寄存器寻址
3、直接寻址
4、寄存器间接寻址
5、基址加变址寻址
6、寄存器相对寻址
7、相对基址加变址寻址
238086是多少位的系统?
在数据总线上是怎么实现的?
8086有16根数据线和20根地址线,因为可用20位地址.8086是16位处理器。
24多态。
overload和override的区别。
多态:
接口的多种不同的实现方式即为多态
重载在相同范围(同一个类中),函数名字相同,参数不同,virtual关键字可有可无.
覆盖是指派生类函数覆盖基类函数,不同的范围,函数名字相同,参数相同,基类函数必须有virtual关键字.
〈Sony笔试题〉〉
25.完成下列程序
*
*.*.
*。
。
*..*。
..*...*。
.。
*...
*.。
..*.。
*。
..。
*....*..。
.
.*。
..*.。
...*.....*。
*......*..。
.*。
.*..。
.*.。
*..。
*....。
..*....。
..*...。
...*......。
...。
#include〈iostream>
usingnamespacestd;
constintn=8;
main()
inti;
intj;
intk;
for(i=n;
i>
=1;
i--)
for(j=0;
j〈n-i+1;
j++)
cout〈<
”*"
for(k=1;
k〈n—i+1;
k++)
cout<
."
〈endl;
system("
pause”)
26完成程序,实现对数组的降序排序
#include〈iostream〉
voidsort(int*arr,intn);
intarray[]={45,56,76,234,1,34,23,2,3};
sort(array,9);
for(inti=0;
i〈=8;
i++)//曾经在这儿出界
cout〈〈array[i]<
〈"
”;
cout〈〈endl;
pause”);
voidsort(int*arr,intn)
{
inttemp;
for(inti=1;
i<
9;
i++)
for(intk=0;
k〈9—i;
k++)//曾经在这儿出界
if(arr[k]〈arr[k+1])
temp=arr[k];
arr[k]=arr[k+1];
arr[k+1]=temp;
}
27费波那其数列,1,1,2,3,5……编写程序求第十项.可以用递归,也可以用其他方法,但要说明你选择的理由.
非递归
#include<
iostream〉
intPheponatch(intn);
intPh=Pheponatch(10);
〈Ph<
system(”pause”);
intPheponatch(intn)
intelem;
intn1=1;
intn2=1;
if(n==1||n==2)
return1;
for(inti=3;
=n;
elem=n1+n2;
n1=n2;
n2=elem;
}returnelem;
}}
递归
usingnamespacestd;
intPheponatch(intn);
intn;
cin〉〉n;
intph=Pheponatch(n);
ph<
if(n〈=0)
exit(—1);
if(n==1||n==2)
return1;
returnPheponatch(n—1)+Pheponatch(n-2);
28下列程序运行时会崩溃,请找出错误并改正,并且说明原因.
#include〈stdio.h〉
malloc。
h>
typedefstruct{
TNode*left;
TNode*right;
intvalue;
}TNode;
TNode*root=NULL;
voidappend(intN);
append(63);
append(45);
append(32);
append(77);
append(96);
append(21);
append(17);
//Again,数字任意给出
voidappend(intN)
TNode*NewNode=(TNode*)malloc(sizeof(TNode));
NewNode—>
value=N;
if(root==NULL)
root=NewNode;
return;
TNode*temp;
temp=root;
while((N>
=temp。
value&
&temp.left!
=NULL)||(N<
temp。
value&&temp。
right!
=NULL))
while(N>
=temp.value&
&
temp。
left!
=NULL)
temp=temp。
left;
while(N〈temp。
value&&
temp.right!
right;
if(N〉=temp。
value)
temp.left=NewNode;
temp.right=NewNode;
return;
}}
29。
AclassBnetworkontheinternethasasubnetmaskof255.255.240.0,whatisthemaximumnumberofhostspersubnet.
240b。
255c。
4094d。
65534
30。
Whatisthedifference:
betweeno(logn)ando(logn^2),wherebothlogarithemshavebase2。
a.o(logn^2)isbiggerb。
o(logn)isbigger
c.nodifference
31.Foraclasswhatwouldhappenifwecallaclass’sconstructorfromwiththesameclass’sconstructor。
a.compilationerrorb.linkingerror
c。
stackoverflowd.noneoftheabove
32。
“new”inc++isa:
。
libraryfunctionlikemallocinc
keywordc。
operator
d.noneoftheabove
33。
Whichofthefollowinginformationisnotcontainedinaninode.
fileownerb。
filesize
filenamed。
diskaddress
34。
What’sthenumberofcomparisonsintheworstcasetomergetwosortedlistscontainingnelementseach.
a.2nb。
2n-1c.2n+1d。
2n-2
35.TimecomplexityofnalgorithmT(n),wherenistheinputsize,isT(n)=T(n—1)+1/nifn>
1otherwise1theorderofthisalgorithmis。
a.log(n)b。
nc。
n^2d。
n^n
36。
Thenumberof1’sinthebinaryrepresentationof3*4096+15*256+5*16+3are.
a.8b。
9c.10d。
12
37.设计函数intatoi(char*s)。
38.inti=(j=4,k=8,l=16,m=32);
printf(“%d”,i);
输出是多少?
39.解释局部变量、全局变量和静态变量的含义。
40.解释堆和栈的区别。
栈区(stack)-由编译器自动分配释放,存放函数的参数值,局部变量的值等。
其操作方式类似于数据结构中的栈。
堆:
一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收.注意它与数据结构中的堆是两回事,分配方式倒是类似于链表.
41.论述含参数的宏与函数的优缺点.
1.函数调用时,先求出实参表达式的值,然后带入形参.而使用带参的宏只是进行简单的字符替换。
2。
函数调用是在程序运行时处理的,分配临时的内存单元;
而宏展开则是在编译时进行的,在展开时并不分配内存单元,不进行值的传递处理,也没有“返回值”的概念。
3。
对函数中的实参和形参都要定义类型,二者的类型要求一致,如不一致,应进行类型转换;
而宏不存在类型问题,宏名无类型,它的参数也无类型,只是一个符号代表,展开时带入指定的字符即可。
宏定义时,字符串可以是任何类型的数据。
4.调用函数只可得到一个返回值,而用宏可以设法得到几个结果。
5.使用宏次数多时,宏展开后源程序长,因为每展开一次都使程序增长,而函数调用不使源程序变长.
6.宏替换不占运行时间,只占编译时间;
而函数调用则占运行时间(分配单元、保留现场、值传递、返回)。
一般来说,用宏来代表简短的表达式比较合适。
42.以下三条输出语句分别输出什么?
[C易]
charstr1[]=”abc"
charstr2[]=”abc"
constcharstr3[]=”abc”;
constcharstr4[]=”abc"
constchar*str5="
abc”;
constchar*str6=”abc"
cout<
〈boolalpha〈〈(str1==str2)〈<
endl;
//输出什么?
cout〈<
boolalpha<
(str3==str4)〈<
//输出什么?
〈boolalpha<
〈(str5==str6)〈<
endl;
1
答:
分别输出false,false,true。
str1和str2都是字符数组,每个都有其自己的存储区,它们的值则是各存储区首地址,不等;
str3和str4同上,只是按const语义,它们所指向的数据区不能修改。
str5和str6并非数组而是字符指针,并不分配存储区,其后的“abc"
以常量形式存于静态数据区,而它们自己仅是指向该区首地址的指针,相等。
43。
非C++内建型别A和B,在哪几种情况下B能隐式转化为A?
[C++中等]
BD
a.classB:
publicA{……}//B公有继承自A,可以是间接继承的
classB{operatorA();
}//B实现了隐式转化为A的转化
c.classA{A(constB&);
}//A实现了non-explicit的参数为B(可以有其他带默认值的参数)构造函数
d。
A&
operator=(constA&);
//赋值操作,虽不是正宗的隐式类型转换,但也可以勉强算一个
44.以下代码中的两个sizeof用法有问题吗?
voidUpperCase(charstr[])//将str中的小写字母转换成大写字母
for(size_ti=0;
i〈sizeof(str)/sizeof(str[0]);
++i)
if('
a’<
=str[i]&&str[i]〈='
z'
)
str[i]-=('
a’—’A'
);
charstr[]="
aBcDe”;
"
str字符长度为:
”〈<
sizeof(str)/sizeof(str[0])〈〈endl;
UpperCase(str);
cout〈〈str<
45.以下代码有什么问题?
[C难]
voidchar2Hex(charc)//将字符以16进制表示
charch=c/0x10+'
0'
if(ch〉'
9'
)ch+=(’A’—'
—1);
charcl=c%0x10+'
if(cl>
9’)cl+=(’A'
-’9’—1);
ch〈〈cl〈〈’’;
charstr[]="
Ilove中国”;
i<
strlen(str);
char2Hex(str[i]);
〈endl;
4