2020年度C常见笔试题及答案_第1页
2020年度C常见笔试题及答案_第2页
2020年度C常见笔试题及答案_第3页
2020年度C常见笔试题及答案_第4页
2020年度C常见笔试题及答案_第5页
已阅读5页,还剩186页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

C++常见笔试题及答案

资料仅供参考

C++面试题

1#include“filename.h”和#include

<filename.h>的区另U?

答:对于#include〈filename.h>编译器从标准库

开始搜索filename.h

对于#include"filename.h”编译器从用户工作

路径开始搜索filename.h

2头文件的作用是什么?

答:一、经过头文件来调用库功能。在很多场合,

源代码不便(或不准)向用户公布,只要向用户

提供头文件和二进制的库即可。用户只需要按照

头文件中的接口声明来调用库功能,而不必关心

接口怎么实现的。编译器会从库中提取相应的代

码。

二、头文件能加强类型安全检查。如果某个接口

被实现或被使用时,其方式与头文件中的声明不

一致,编译器就会指出错误,这一简单的规则,

能大大减轻程序员调试、改错的负担。

资料仅供参考

3C++函数中值的传递方式有哪几种?

答:C++函数的三种传递方式为:值传递、指针

传递和引用传递。

4内存的分配方式有几种?

答:一、从静态存储区域分配。内存在程序编译

的时候就已经分配好,这块内存在程序的整个运

行期间都存在。例如全局变量。

二、在栈上创立。在执行函数时,函数内局部变

量的存储单元都能够在栈上创立,函数执行结束

时这些存储单元自动被释放。栈内存分配运算内

置于处理器的指令集中,效率很高,可是分配的

内存容量有限。

三、从堆上分配,亦称动态内存分配。程序在运

行的时候用malloc或new申请任意多少的内存,

程序员自己负责在何时用free或delete释放内

存。动态内存的生存期由我们决定,使用非常灵

活,但问题也最多。

资料仅供参考

5实现双向链表删除一个节点P,在节点P后插

入一个节点,写出这两个函数;

答:双向链表删除一个节点P

template<classtype>voidlist<type>::delnode(int

P)

(

intk=l;

listnode<type>*ptr,*t;

ptr=first;

while(ptr->next!=NULL&&k!=p)

(

ptr=ptr->next;

k++;

t=ptr->next;

cout«"你已经将数据项"«t->data«"删

资料仅供参考

除,,<<endl;

ptr->next=ptr->next->next;

length-;

deletet;

}

在节点P后插入一个节点:

template<classtype>bool

list<type>::insert(typetjntp)

(

listnode<type>*ptr;

ptr=first;

intk=l;

while(ptr!=NULL&&k<p)

(

ptr=ptr->next;

k++;

资料仅供参考

if(ptr==NULL&&k!=p)

returnfalse;

else

(

listnode<type>*tp;

tp=newlistnode<type>;

tp->data=t;

tp->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;

returntrue;

)

intmain()

(

charbuf[100]

"123\t45\t\t\t6\t\t65\n4234\t5345";

cout«"Beforechage:"«endl;

资料仅供参考

cout«buf«endl;

cout«"Aftercallingthefunction:"«endl;

//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结构体的IpfnWndProc

成员保存的窗口过程函数的指针调用窗口过程,

对消息进行处理(即“系统给应用程序发送了消

息”)。

8如何定义和实现一个类的成员函数为回调函

数?

把函数声明为static

资料仅供参考

9C++里面是不是所有的动作都是main()引起的?

如果不是,请举例.

答:在运行C++程序时,一般从main。函数开始

执行。因此如果没有main(),程序将不完整,编

译器将指出未定义main()函数。

例外情况:如,在windows编程中,能够编写

一个动态连接库(州)模块,这是其它windows

程序能够使用的代码。由于DLL模块不是独立的

程序,因此不需要main。.用于专用环境的程序-

如机器人中的控制器芯片-可能不需要main().

但常规的独立程序都需要main().

10C++里面如何声明constvoidf(void)函数为C

程序中的库函数?

extern"C"voidf(void);

11下列哪两个是等同的C==D

intb;

Aconstint*a=&b;

资料仅供参考

Bconst*inta=&b;

Cconstint*consta=&b;

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->next;

while(ps)

{pe->next=ps->next;

资料仅供参考

ps->next=head;

head=ps;

ps=pe->next;}}

16某个程序在一个嵌入式系统(200M的

CPU,50M的SDRAM)中已经最化了,换到另一个

系统(300M的CPU,501Vl的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有什么区另(I?

答: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=l;k<n-i+1;k++)

(

cout«".";

)

)

cout«endl;

资料仅供参考

)

system("pause")

)

26完成程序,实现对数组的降序排序

#include<iostream>

usingnamespacestd;

voidsort(int*arr,intn);

intmain()

(

intarray口={45,56,76,234,1,34,23,2,3};

sort(array,9);

for(inti=0;i<=8;i++)〃曾经在这儿出界

cout«array[i]«"

cout«endl;

system("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>

usingnamespacestd;

intPheponatch(intn);

main()

(

intPh=Pheponatch(lO);

cout«Ph«endl;

system("pause");

)

intPheponatch(intn)

(

intelem;

intnl=1;

资料仅供参考

intn2=1;

if(n==111n==2)

return1;

else

(

for(inti=3;i<=n;i++)

(

elem=nl+n2;

nl=n2;

n2=elem;

}returnelem;}}

递归

#include<iostream>

usingnamespacestd;

intPheponatch(intn);

main()

资料仅供参考

intn;

cin»n;

intph=Pheponatch(n);

cout«ph«endl;

system("pause");

}

intPheponatch(intn)

(

if(n<=0)

exit(-l);

else

if(n==111n==2)

return1;

else

returnPheponatch(n-1)+Pheponatch(n-2);

资料仅供参考

28下列程序运行时会崩溃,请找出错误并改正,

而且说明原因。

#include<stdio.h>

#include<malloc.h>

typedefstruct{

TNode*left;

TNode*right;

intvalue;

}TNode;

TNode*root=NULL;

voidappend(intN);

intmain()

(

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;

)

else

TNode*temp;

资料仅供参考

temp=root;

while((N>=temp.value&&temp.left!=NULL)11

(N<temp.value&&temp.right!=NULL))

(

while(N>=temp.value&&temp.left!=NULL)

temp=temp.left;

while(N<temp.value&&temp.right!=NULL)

temp=temp.right;

)

if(N>=temp.value)

temp.left=NewNode;

else

temp.right=NewNode;

return;}}

29.AclassBnetworkontheinternethasasubnet

maskof,whatisthemaximum

numberofhostspersubnet.

资料仅供参考

a.240b.255c.4094d.65534

30.Whatisthedifference:betweeno(logn)and

o(lognA2),wherebothlogarithemshavebase2.

a.o(lognA2)isbiggerb.o(logn)isbigger

c.nodifference

31.Foraclasswhatwouldhappenifwecalla

class'sconstructorfromwiththesameclass's

constructor.

pilationerrorb.linkingerror

c.stackoverflowd.noneoftheabove

32."new“inC++isa:.

a.libraryfunctionlikemallocinc

b.keywordc.operator

d.noneoftheabove

33.Whichofthefollowinginformationisnot

containedinaninode.

a.fileownerb.filesize

资料仅供参考

c.filenamed.diskaddress

34.What'sthenumberofcomparisonsinthe

worstcasetomergetwosortedlistscontainingn

elementseach.

a.2nb.2n-lc.2n+ld.2n-2

35.TimecomplexityofnalgorithmT(n),wheren

istheinputsize,isT(n)=T(n-l)+l/nifn>l

otherwise1theorderofthisalgorithmis.

a.log(n)b.nc.nA2d.nAn

36.Thenumberof1'sinthebinary

representationof3*4096+15*256+5*16+3are.

a.8b.9c.10d.12

设计函数

37.intatoi(char*s)o

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易]

charstrl[]="abc";

charstr2[]="abc";

资料仅供参考

constcharstr3[]="abc";

constcharstr4[]="abc";

constchar*str5="abc";

constchar*str6="abc";

cout«boolalpha«(strl==str2)«endl;//输

出什么?0

cout«boolalpha«(str3==str4)«endl;//输

出什么?0

cout«boolalpha«(str5==str6)«endl;//输

出什么?1

答:分别输出false,false,true。strl和str2

都是字符数组,每个都有其自己的存储区,它们

的值则是各存储区首地址,不等;str3和str4

同上,只是按const语义,它们所指向的数据区

不能修改。str5和str6并非数组而是字符指针,

并不分配存储区,其后的“abc”以常量形式存于

静态数据区,而它们自己仅是指向该区首地址的

指针,相等。

资料仅供参考

43.非C++内建型别A和B,在哪几种情况下B

能隐式转化为A?[C++中等]

答:BD

a.classB:publicA{.......}〃B公有继承自A,能

够是间接继承的

b.classB{operatorA();}//B实现了隐式转化为

A的转化

c.classA{A(constB&);}//A实现了

non-explicit的参数为B(能够有其它带默认值的

参数)构造函数

d.A&operator=(constA&);//赋值操作,虽不

是正宗的隐式类型转换,但也能够勉强算一个

44.以下代码中的两个sizeof用法有问题吗?[C

易]

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";

cout«"str字符长度为:"«

sizeof(str)/sizeof(str[0])«endl;

UpperCase(str);

cout«str«endl;

45.以下代码有什么问题?[C难]

voidchar2Hex(charc)//将字符以16进制表示

(

charch=c/OxlO+'O';if(ch>'9')ch+=('A'-'g'-l);

charcl=c%OxlO+'O';if(cl>'9')cl+=

cout«ch«cl«'

)

charstr[]="Ilove中国";

资料仅供参考

for(size_ti=0;i<strlen(str);++i)

char2Hex(str[i]);

cout«endl;

46.以下代码有什么问题?[C++易]

structTest

(

Test(int){}

Test(){}

voidfun(){}

};

voidmain(void)

(

Testa(l);

a.fun();

Testb();

b.fun();

资料仅供参考

***Testb();〃定义了一个函数

47.以下代码有什么问题?[C++易]

cout«(true?l:"l")«endl;

8.以下代码能够编译经过吗,为什么?[C++易]

unsignedintconstsizel=2;

charstrl[sizel];

unsignedinttemp=0;

cin»temp;

unsignedintconstsize2=temp;

charstr2[size2];

48.以下代码中的输出语句输出。吗,为什么?

[C++易]

structCLS

资料仅供参考

intmi;

CLS(inti):m_i(i){}

CLS()

(

CLS(O);

)

);

CLSobj;

cout«obj.m_i«endl;

49.C++中的空类,默认产生哪些类成员函数?

[C++易]

答:

classEmpty

public:

资料仅供参考

Empty();//缺省构造函数

Empty(constEmpty&);//拷贝构造函数

~Empty();〃析构函数

Empty&operator=(constEmpty&);//赋值运算

Empty*operator&();//取址运算符

constEmpty*operator&()const;//取址运算符

const

);

50.以下两条输出语句分别输出什么?[C++难]

floata=l.Of;

cout«(int)a«endl;

cout«(int&)a«endl;

cout«boolalpha«((int)a==(int&)a)«endl;

//输出什么0

floatb=O.Of;

资料仅供参考

cout«(int)b«endl;

cout«(int&)b«endl;

cout«boolalpha«((int)b==(int&)b)«endl;

//输出1

51.以下反向遍历array数组的方法有什么错误?

[STL易]

vectorarray;

array.push_back(1);

array.push_back(2);

array.push_back(3);

for(vector::size_typei=array.size()-l;i>=0;-i)//

反向遍历array数组

cout«array[i]«endl;

资料仅供参考

52.以下代码有什么问题?[STL易]

typedefvectorIntArray;

IntArrayarray;

array.push_back(1);

array.push_back(2);

array.push_back(2);

array.push_back(3);

//删除array数组中所有的2

for(lntArray::iteratoritor=array.begin();

itor!=array.end();++itor)

(

if(2==*itor)array.erase(itor);

}

53.写一个函数,完成内存之间的拷贝。[考虑问

题是否全面]

答:

资料仅供参考

void*mymemcpy(void*dest,constvoid*src,

size_tcount)

(

char*pdest=static_cast<char*>(dest);

constchar*psrc=static_cast<constchar*>(src);

if(pdest>psrc&&pdest<psrc+cout)能考虑到这

种情况就行了

(

for(size_ti=count-l;i!=-l;-i)

pdest[i]=psrc[i];

)

else

for(size_ti=0;i<count;++i)

pdest[i]=psrc[i];

)

returndest;

资料仅供参考

intmain(void)

(

charstr[]=

mymemcpy(str+1,str+O,9);

cout«str«endl;

system("Pause");

return0;

54线程与进程的区别

进程就是一个应用程序在处理机上的一次执

行过程,它是一个动态的概念,而线程是进程中

的一部分,进程包含多个线程在运行。

55:请你分别划划0SI(开放式系统互联)的七

资料仅供参考

层网络结构图,和TCP/IP的五层结构图?

加毒/安全技术OSI/梅披层安全协议

应用程序网应用相关

/保密网关

信淑加密

SOCKS

动右包过滤ssyns

能塞包过滤IPSec

PPTP/L2IP

茴顺密

应用层(applicationlayer)

传输层(transportlayer)

网络层(networklayer)

数据链路层(datalinklayer)

物理层(physicallayer)

56:请你详细的解释一下IP协议的定义,在哪

个层上面,主要有什么作用?TCP与UDP呢?

IP协议是网络层的协议,它实现了Internet中

自动路由的功能,即寻径的功能,TCP协议是一

个传输性的协议它向下屏蔽了IP协议不可靠传

输的特性,向上提供一个可靠的点到点的传输,

UDP提供的是一种无连接的服务,主要考虑到很

多应用不需要可靠的连接,但需要快速的传输

资料仅供参考

57:请问交换机和路由器分别的实现原理是什么?

分别在哪个层次上面实现的?

交换机用在局域网中,交换机经过记录局域网

内各节点机器的MAC地质(物理地址)就能够实

现传递报文,无需看报文中的IP地址。路由器识

别不同网络的方法是经过识别不同网络的网络

ID号(IP地址的高端部分)进行的,因此为了保证

路由成功,每个网络都必须有一个唯一的网络编

号。路由器经过察看报文中IP地址,来决定路

径,向那个子网(下一跳)路由,也就是说交换机

工作在数据链路层看MAC地址,路由器工作在

网际层看IP地址

可是由于现在网络设备的发展,很多设备既有交

换机的功能有由路由器的功能(交换试路由器)使

得两者界限越来越模糊。

58:请问C++的类和C里面的struct有什么区别?

资料仅供参考

(1)C++类中属性默认访问类型为private,而C中

的struct默认的访问类型为public

(2)c++类能够有继承,虚函数,多态,而C中struct

不能够。

C++的class具有数据封装功能,其包含属性访问

级别能够为private,public和protect,还具有实现

类接口功能和辅助功能的操作函数,而struct属

性访问权限只有public,没有数据封装功能,也

就没有实现信息隐藏这一面向对象的思想的机

制,struct本身不含有操作函数,只有数据。

59:请讲一讲析构函数和虚函数的用法和作用?

析构函数是在类对象死亡时由系统自动调用,

其作用是用来释放对象的指针数据成员所指的

动态空间,如果在构造函数中,你申请了动态空

间,那么为了避免引起程序错误,你必须在析构

函数中释放这部分内存空间。如果基类的函数用

virtual修饰,成为虚函数,则其派生类相应的重

载函数仍能继承该虚函数的性质,虚函数进行动

态联编,也即具有多态性,也就是派生类能够改

变基类同名函数的行为,在面向对象世界中,多

态是最强大的机制,虚函数就是这一机制的C++

实现方式。

资料仅供参考

60:全局变量和局部变量有什么区别?实怎么实

现的?操作系统和编译器是怎么知道的?

全局变量是整个程序都可访问的变量,谁都能

够访问,生存期在整个程序从运行到结束(在程

序结束时所占内存释放),而局部变量存在于模

块(子程序,函数)中,只有所在模块能够访问,

其它模块不可直接访问,模块结束(函数调用完

毕),局部变量消失,所占据的内存释放。

全局变量分配在全局数据段而且在程序开始

运行的时候被加载.局部变量则分配在堆栈里

面。

61:一些寄存器的题目,主要是寻址和内存管理

等一些知识。

2、交换机用在局域网中,交换机经过纪录局域

网内各节点机器的MAC地质(物理地址)就能够

实现传递报文,无需看报文中的IP地质。路由器

识别不同网络的方法是经过识别不同网络的网

络ID号(IP地址的高端部分)进行的,因此为了保

资料仅供参考

证路由成功,每个网络都必须有一个唯一的网络

编号。路由器经过察看报文中IP地址,来决定

路径,向那个子网(下一跳)路由,也就是说交换

机工作在数据链路层看MAC地址,路由器工作

在网际层看IP地质

可是由于现在网络设备的发展,很多设备既有交

换机的功能有由路由器的功能(交换试路由器)使

得两者界限越来越模糊。

3、IP协议是网络层的协议,它实现了Internet

中自动路由的功能,即寻径的功能,TCP协议是

一个传输性的协议它向下屏蔽了IP协议不可靠

传输的特性,向上提供一个可靠的点到点的传输,

UDP提供的是一种无连接的服务,主要考虑到很

多应用不需要可靠的连接,但需要快速的传输。

4、

Testb();〃定义了一个函数

62:8086是多少位的系统?在数据总线上是怎么

实现的?

资料仅供参考

«IBM»

63.怎样用最快的方法判断链表是否有环?

设置两个指针,开始都指向链表头,然后其中

一个指针每次向前走一步,另一个指针每次向前

走两步,如果快的遇到NULL了,证明该链表中

没有环,如果有环,快的指针每次都要比慢的多

走一步,最终两个指针会相遇,

64.C++中引用和指针有什么不同?指针加上什么

限制等于引用?

答:1引用被创立的时候必须被初始化,而指

针不是必须的。2引用在创立后就不能改变引用

的关系,而指针在初始化后能够随时指向其它的

变量或对象。3没有NULL引用,引用必须与合法

的存储单元关联,而指针能够是NULL。

65,做的项目,遇到的困难,怎样解决?

资料仅供参考

69.操作符重载

classCMyObject:pulicCObject

(

Public:

CMyObject();

CMyObject&operator=(constCMyObject&my);

private:

CStringstrName;

intnld:

};

请重载赋值操作符

70.链表

StructstructList

资料仅供参考

intvalue;

structList*pHead;

StructLinkedList*pMyList;

请编写删除链表的头、尾和第n个节点的程序

7L用SocketAPI制作一个聊天程序,通讯协议使

用tcp/ip。要求有简单界面即可,支持多人聊天。

72.如果有过工作经验,请说明在先前公司的工

作以及离职原因(如无,请说明毕业后的个人展

望)

资料仅供参考

73对于C++中类(class)与结构(struct)的描述正

确的为:

A,类中的成员默认是private的,当是能够声明为

public,private和protected,结构中定义的成员默

认的都是public;

B,结构中不允许定义成员函数,当是类中能够定

义成员函数;

C,结构实例使用malloc()动态创立,类对象使用

new操作符动态分配内存;

D,结构和类对象都必须使用new创立;

E,结构中不能够定义虚函数,当是类中能够定义

虚函数.

F,结构不能够存在继承关系,当是类能够存在继

承关系.

答:A,D,F

74,两个互相独立的类:ClassA和ClassB,都各自

资料仅供参考

定义了非静态的公有成员函数PublicFunc()和

非静态的私有成员函数PrivateFunc();

现在要在ClassA中增加定义一个成员函数

ClassA::AdditionalPunction(ClassAa,ClassBb);则

能够在AdditionalPunction(ClassAx,ClassBy)的实

现部分(函数功能体内部)

出现的合法的表示是最全的是:

A,x.PrivateFunc();x.PublicFuncO;y.PrivateFunc();y.

PublicFunc();

B^x.PrivateFuncO^.PublicFuncO^.PublicFuncO;

C^.PrivateFuncO^.PrivateFuncO^.PublicFuncO;

D^.PublicFuncOjy.PublicFuncO;

答:B

75,C++程序下列说法正确的有:

A,对调用的虚函数和模板类都进行迟后编译.

B,基类与子类中函数如果要构成虚函数,除了要

求在基类中用virtual声名,而且必须名字相同且

参数类型相同返回类型相同

资料仅供参考

C,重载的类成员函数都必须要:或者返回类型不

同,或者参数数目不同,或者参数序列的类型不

同.

D,静态成员函数和内联函数不能是虚函数,友员

函数和构造函数也不能是虚函数,可是析构函数

能够是虚函数.

答:A

76,C++中的类与结构的区别?

77,构造函数和析构函数是否能够被重载,为什

么?

答:构造函数能够被重载,析构函数不能够被重

载。因为构造函数能够有多个且能够带参数,而

析构函数只能有一个,且不能带参数。

资料仅供参考

78,一个类的构造函数和析构函数什么时候被调

用,是否需要手工调用?

答:构造函数在创立类对象的时候被自动调用,

析构函数在类对象生命期结束时,由系统自动调

用。

1#include“filename.h”和#include

<filename.h>的区另U?

答:#include"filename.h”表明该文件是用户

提供的头文件,查找该文件时从当前文件目录开

始;#include〈filename.h>表明这个文件是一个

工程或标准头文件,查找过程会检查预定义的目

录。

2头文件的作用是什么?

答:一、经过头文件来调用库功能。在很多场合,

源代码不便(或不准)向用户公布,只要向用户

资料仅供参考

提供头文件和二进制的库即可。用户只需要按照

头文件中的接口声明来调用库功能,而不必关心

接口怎么实现的。编译器会从库中提取相应的代

码。

二、头文件能加强类型安全检查。如果某个接口

被实现或被使用时,其方式与头文件中的声明不

一致,编译器就会指出错误,这一简单的规则能

大大减轻程序员调试、改错的负担。

3C++函数中值的传递方式有哪几种?

答:C++函数的三种传递方式为:值传递、指针

传递和引用传递。

4内存的分配方式的分配方式有几种?

答:一、从静态存储区域分配。内存在程序编译

的时候就已经分配好,这块内存在程序的整个运

行期间都存在。例如全局变量。

二、在栈上创立。在执行函数时,函数内局部变

量的存储单元都能够在栈上创立,函数执行结束

资料仅供参考

时这些存储单元自动被释放。栈内存分配运算内

置于处理器的指令集中,效率很高,可是分配的

内存容量有限。

三、从堆上分配,亦称动态内存分配。程序在运

行的时候用malloc或new申请任意多少的内存,

程序员自己负责在何时用free或delete释放内

存。动态内存的生存期由我们决定,使用非常灵

活,但问题也最多。

5实现双向链表删除一个节点P,在节点P后插

入一个节点,写出这两个函数;

答:双向链表删除一个节点P

template<classtype>voidlist<type>::delnode(int

P)

intk=l;

listnode<type>*ptr,*t;

ptr=first;

资料仅供参考

while(ptr->next!=NULL&&k!=p)

(

ptr=ptr->next;

k++;

}

t=ptr->next;

你已经将数据项"«t->data«"j®ll^

"«endl;

ptr->next=ptr->next->next;

length-;

deletet;

}

在节点P后插入一个节点:

template<classtype>boollist<type>::insert(type

t,intp)

资料仅供参考

listnode<type>*ptr;

ptr=first;

intk=l;

while(ptr!=NULL&&k<p)

(

ptr=ptr->next;

k++;

}

if(ptr==NULL&&k!=p)

returnfalse;

else

listnode<type>*tp;

tp=newlistnode<type>;

tp->data=t;

资料仅供参考

tp->next=ptr->next;

ptr->next=tp;

length++;

returntrue;

〃上海贝尔的面试题43分即可进入复试

一、请填写BOOL,float,指针变量与“零值”

比较的if语句。(10分)

资料仅供参考

提示:这里“零值”能够是0,0.0,FALSE或者“空

指针”。例如int变量n与“零值”比较的if语

句为:

if(n==0)

if(n!=0)

以此类推。

请写出BOOLflag与“零值”比较的if语句:

请写出floatx与“零值”比较的if语句:

请写出char*p与“零值”比较的if语句:

二、以下为WindowsNT下的32位C++程序,请

计算sizeof的值(10分)

charstr[]="Hello";

char*p=str;

intn=10;

请计算

sizeof(str)=

sizeof(p)=

资料仅供参考

sizeof(n)=voidFunc(charstr[100])

(

请计算

sizeof(str)=

}

void*p=malloc(100);

请计算

sizeof(p)=

、简答题(25分)

1、头文件中的ifndef/define/endif干什么用?

防止头文件重复定义。

2、#include<filename.h>和#include

“filename,h”有什么区别?

答:#include"filename.h”表明该文件是

用户提供的头文件,查找该文件时从当前文件目

录开始;#include〈filename.h>表明这个文件是

一个工程或标准头文件,查找过程会检查预定义

的目录。

资料仅供参考

3、const有什么用途?(请至少说明两种)

在C/C++中,(1)能够定义const常量,(2)

修饰函数的返回值和形参;

在C++中,还能够修饰函数的定义体,定义类的

const成员函数。被const修饰的东西受到强制J保

护,能够预防意外的变动,提高了程序的健壮性。

4、在C++程序中调用被C编译器编译后的函

数,为什么要加extern“C”声明?

答:C++语言支持函数重载,C语言不支持

函数重载。函数被C++编译后在库中的名字与C

语言不同。假设某个函数的原型为:voidfoo(i

ntx,inty);该函数被C编译器编译后在库中的

名字为_foo,而C++编译器则会产生像_foo_i

nt_int之类的名字。C++提供了C连接交换指定

符号extern”〃来解决名字匹配问题。

5、请简述以下两个for循环的优缺点

//第一个

for(i=0;i<N;i++)

if(condition)

资料仅供参考

DoSomething();

else

DoOtherthing();

}//第二个

if(condition)

(

for(i=0;i<N;i++)

DoSomething();

)

else

(

for(i=0;i<N;i++)

DoOtherthing();

)

优点:N次中,每次都要对8ndition进行判断

缺点:优点:一次判断condition后,对something

或Otherthing执行N次

资料仅供参考

缺点:

四、有关内存的思考题(20分)

voidGetMemory(char*p)

(

p=(char*)malloc(100);

)

voidTest(void)

(

char*str=NULL;

GetMemory(str);

strcpy(str,"helloworld");

printf(str);

请问运行Test函数会有什么样的结果?

资料仅供参考

char*GetMemory(void)

(

charp[]="helloworld";

returnp;

}

voidTest(void)

(

char*str=NULL;

str=GetMemory();

printf(str);

}

请问运行Test函数会有什么样的结果?

VoidGetMemory2(char**p,intnum)

资料仅供参考

*p=(char*)malloc(num);

)

voidTest(void)

(

char*str=NULL;

GetMemory(&str,100);

strcpy(str,"hello");

printf(str);

)

请问运行Test函数会有什么样的结果?

voidTest(void)

(

char*str=(char*)malloc(lOO);

strcpy(str,"hello");

free(str);

资料仅供参考

if(str!=NULL)

strcpy(str,"world");

printf(str);

}

}

请问运行Test函数会有什么样的结果?

五、编写strcpy函数(10分)

已知strcpy函数的原型是

char*strcpy(char*strDest,constchar*strSrc);

其中strDest是目的字符串,strSrc是源字符串。

(1)不调用C++/C的字符串库函数,请编写函

数strcpy

资料仅供参考

char*strcpy(char*strDest,constchar*strSrc){

intn=0;

while(strSrc[n]!=NULL){

n++:

}

*srtDest=newchar[n];

for(inti=O;i<n;i++){

strDest=strSrc[i];

i++;

)

return*strDest;

}

(2)strcpy能把strSrc的内容复制到strDest,

为什么还要char*类型的返回值?

因为该函数的还能够把复制的字符串首地址

指针给其它的指针,而且这种需要也是有用的。

六、编写类String的构造函数、析构函数和赋值

资料仅供参考

函数(25分)

已知类String的原型为:

classString

(

public:

String(constchar*str=NULL);//普通构造函

String(constString&other);//拷贝构造函数

~String(void);//析构函数

String&operate=(constString&other);//赋

值函数

private:

char*m_data;//用于保存字符串

};

请编写String的上述4个函数。

资料仅供参考

〃答案一并给出

一、请填写BOOL,float,指针变量与“零值”

比较的if语句。(10分)

请写出BOOLflag与“零值”比较的if语句。

(3分)

标准答案:

if(flag)

if“flag)如下写法均属不良风格,不得分。

if(flag==TRUE)

if(flag==1)

if(flag==FALSE)

if(flag==0)

请写出floatx与“零值”比较的if语句。(4

分)

资料仅供参考

标准答案示例:

constfloatEPSINON=0.00001;

if((x>=-EPSINON)&&(x<=EPSINON)

不可将浮点变量用或“!=”与数字比较,

应该设法转化成或"<=”此类形式。

如下是错误的写法,不得分。

if(x==0.0)

if(x!=0.0)

请写出char*p与“零值”比较的if语句。,

分)

标准答案:

if(p==NULL)

if(p!:NULL)如下写法均属不良风格,不得分。

if(p==0)

if(p!=0)

资料仅供参考

if(P)

if(!)

二、以下为WindowsNT下的32位C++程序,请

计算sizeof的值(10分)

charstr[]="Hello”;

char*p=str;

intn=10;

请计算

sizeof(str)=6(2分)

sizeof(p)=4(2分)

sizeof(n)=4(2分)

voidFunc(charstr[100])

资料仅供参考

请计算

sizeof(str)=4(2分)

void*p=malloc(100);

请计算

sizeof(p)=4(2分)

三、简答题(25分)

1、头文件中的ifndef/define/endif干什么用?

(5分)

答:防止该头文件被重复引用。

2、#include<filename.h>和#include

“filename.h”有什么区别?(5分)

资料仅供参考

答:对于#include<filename.h>,编译器从标

准库路径开始搜索filename.h

对于#include“filename.h”,编译器从用户

的工作路径开始搜索filename.h

3、const有什么用途?(请至少说明两种)(5

分)

答:(1)能够定义const常量

(2)const能够修饰函数的参数、返回值,甚至

函数的定义体。被const修饰的东西都受到强制

保护,能够预防意外的变动,能提高程序的健壮

性。

4、在C++程序中调用被C编译器编译后的函数,

为什么要加extern“C”?(5分)

答:C++语言支持函数重载,C语言不支持函数

重载。函数被C++编译后在库中的名字与C语言

的不同。假设某个函数的原型为:voidfoo(intx,

inty);该函数被C编译器编译后在库中的名字为

资料仅供参考

_foo,而C++编译器则会产生像_foo_int_int之类

的名字。C++提供了C连接交换指定符号extern

来解决名字匹配问题。

5、请简述以下两个for循环的优缺点(5分)

for(i=0;i<N;i++)

if(condition)

DoSomething();

else

DoOtherthing();

if(condition)

for(i=0;i<N;i++)

资料仅供参考

DoSomething();

else

(

for(i=0;i<N;i++)

DoOtherthing();

)

优点:程序简洁

缺点:多执行了N-1次逻辑判断,而且打断了循

环“流水线”作业,使得编译器不能对循环进行

优化处理,降低了效率。

优点:循环的效率高

缺点:程序不简洁

资料仅供参考

四、有关内存的思考题(每小题5分,共20分)

voidGetMemory(char*p)

(

p=(char*)malloc(100);

)

voidTest(void)

(

char*str=NULL;

GetMemory(str);

strcpy(str,"helloworld");

printf(str);

请问运行Test函数会有什么样的结果?

资料仅供参考

答:程序崩溃。

因为GetMemory并不能传递动态内存,

Test函数中的str一直都是NULL。

strcpy(str,"helloworld");将使程序崩溃。

char*GetMemory(void)

(

charp[]="helloworld";

returnp;

)

voidTest(void)

(

char*str=NULL;

str=GetMemory();

printf(str);

请问运行Test函数会有什么样的结果?

资料仅供参考

答:可能是乱码。

因为GetMemory返回的是指向“栈内存”的指

针,该指针的地址不是NULL,但其原现的内容

已经被清除,新内容不可知。

voidGetMemory2(char**p,intnum)

(

*p=(char*)malloc(num);

}

voidTest(void)

(

char*str=NULL;

GetMemory(&strz100);

strcpy(str,"hello");

printf(str);

}

请问运行Test函数会有什么样的结果?

答:

资料仅供参考

(1)能够输出hello

(2)内存泄漏

voidTest(void)

(

char*str=(char*)malloc(lOO);

strcpy(str,"hello");

free(str);

if(str!=NULL)

(

strcpy(str,"world");

printf(str);

)

)

请问运行Test函数会有什么样的结果?

答:篡改动态内存区的内容,后果难以预料,非

常危险。

资料仅供参考

因为free(str);之后,str成为野指针,

if(str!=NULL)语句不起作用。

"28下列程序运行时会崩溃,请找出错误并改正,

而且说明原因。”

//voidappend(intN);

〃指针没有初始化:

//NewNode->left=NULL;

//NewNode->right=NULL;

#include<stdio.h>

#include<malloc.h>

typedefstructTNode{

资料仅供参考

TNode*left;

TNode*right;

intvalue;

}TNode;

TNode*root=NULL;

voidappend(intN);

intmain()

(

append(63);

append(45);

append(32);

append(77);

append(96);

资料仅供参考

append(21);

append(17);//Again,数字任意给出

return0;

}

voidappend(intN)

(

TNode*NewNode=(TNode

*)malloc(sizeof(TNode));

NewNode->value=N;

NewNode->left=NULL;

NewNode->right=NULL;

if(root==NULL)

(

root=NewNode;

return;

资料仅供参考

else

TNode*temp;

temp=root;

while((N>=temp->value&&temp->left!=NULL)11

(N<temp->value&&temp->right!=NULL))

(

while(N>=temp->value&&temp->left!=NULL)

temp=temp->left;

while(N<temp->value&&temp->right!=NULL)

temp=temp->right;

)

if(N>=temp->value)

temp->left=NewNode;

else

temp->right=NewNode;

return;

资料仅供参考

算法:

1.什么是NPC,NP-Hard?

2.起泡排序的时间复杂度是多少?

说出至少

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论