2020年度C常见笔试题及答案.pdf
C+常见笔试题及答案资料仅供参考C+面试题1#include“filename.h”和#include 的区另 U?答:对于#includefilename.h编译器从标准库开始搜索filename.h对于#include filename.h”编译器从用户工作路径开始搜索filename.h2头文件的作用是什么?答:一、经过头文件来调用库功能。在很多场合,源代码不便(或不准)向用户公布,只要向用户提供头文件和二进制的库即可。用户只需要按照头文件中的接口声明来调用库功能,而不必关心接口怎么实现的。编译器会从库中提取相应的代码。二、头文件能加强类型安全检查。如果某个接口被实现或被使用时,其方式与头文件中的声明不一致,编译器就会指出错误,这一简单的规则,能大大减轻程序员调试、改错的负担。资料仅供参考3 C+函数中值的传递方式有哪几种?答:C+函数的三种传递方式为:值传递、指针传递和引用传递。4 内存的分配方式有几种?答:一、从静态存储区域分配。内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。例如全局变量。二、在栈上创立。在执行函数时,函数内局部变量的存储单元都能够在栈上创立,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中,效率很高,可是分配的内存容量有限。三、从堆上分配,亦称动态内存分配。程序在运行的时候用malloc或 new申请任意多少的内存,程序员自己负责在何时用free或 delete释放内存。动态内存的生存期由我们决定,使用非常灵活,但问题也最多。资料仅供参考5 实现双向链表删除一个节点P,在节点P 后插入一个节点,写出这两个函数;答:双向链表删除一个节点Ptemplate void list:delnode(intP)(int k=l;listnode*ptr,*t;ptr=first;while(ptr-next!=NULL&k!=p)(ptr=ptr-next;k+;t=ptr-next;cout你已经将数据项t-data删资料仅供参考除,next=ptr-next-next;length-;delete t;在节点P后插入一个节点:templatelist:insert(type tjnt p)(listnode*ptr;ptr=first;int k=l;while(ptr!=NULL&knext;k+;bool资料仅供参考if(ptr=NULL&k!=p)return false;else(listnode*tp;tp=new listnode;tp-data=t;tp-next=ptr-next;ptr-next=tp;length+;return true;6 写一个函数,将其中的t都转换成4 个空格。bool change(char*buf,int len)资料仅供参考int count=0;int i;/统计有多少个tfor(i=0;bufi!=0;i+)if(bufi=t)count+;)/给定的buf空间是否能装下生成的字符串int j=i+3*count;if(len 0)资料仅供参考while(bufi!=t)bufj-=bufi-;count-;bufj=bufj-1=bufj-2=bufj-3=;j-=4;return true;)int main()(char buf100123t45ttt6tt65n4234t5345;coutBefore chage:endl;资料仅供参考coutbufendl;coutAfter calling the function:endl;/buf是原字符串,100是 buf的长度(要足够大,最好是原字符串的3 倍)if(change(buf,100)=true)cout buf endl;char c;cinc;7 Windows程序的入口是哪里?写出 Windows消息机制的流程.函数 WinMain()Windows应用程序的消息处理机制如图1.2所示。(1)操作系统接收到应用程序的窗口消息,将资料仅供参考消息投递到该应用程序的消息队列中。(2)应用程序在消息循环中调用GetMessage函数从消息队列中取出一条一条的消息。取出消息后,应用程序能够对消息进行一些预处理,例如,放 弃 对 某 些 消 息 的 响 应,或者调用TranslateMessage产生新的消息。(3)应用程序调用DispatchMessage,将消息回传给操作系统。消息是由M SG结构体对象来表示的,其中就包含了接收消息的窗口的句柄。因此,DispatchMessage函数总能进行正确的传递。(4)系统利用 WNDCLASS结构体的IpfnWndProc成员保存的窗口过程函数的指针调用窗口过程,对消息进行处理(即“系统给应用程序发送了消息”)。8 如何定义和实现一个类的成员函数为回调函数?把函数声明为static资料仅供参考9 C+里面是不是所有的动作都是main()引起的?如果不是,请举例.答:在运行C+程序时,一般从main。函数开始执行。因此如果没有main(),程序将不完整,编译器将指出未定义main()函数。例外情况:如,在windows编程中,能够编写一个动态连接库(州)模块,这是其它windows程序能够使用的代码。由于DLL模块不是独立的程序,因此不需要main。.用于专用环境的程序-如机器人中的控制器芯片-可能不需要main().但常规的独立程序都需要main().10 C+里面如何声明const void f(void)函数为C程序中的库函数?extern C void f(void);1 1下列哪两个是等同的C=Dint b;A const int*a=&b;资料仅供参考B const*int a=&b;C const int*const a=&b;D int const*const a=&b;1 2内联函数在编译时是否做参数类型检查是13 三个 float:a,b,c 问值(a+b)+c=(b+a)+c 1(a+b)+c=(a+c)+b 11 4把一个链表反向填空void reverse(test*head)test*pe=head;test*ps=head-next;while(ps)pe-next=ps-next;资料仅供参考ps-next=head;head=ps;ps=pe-next;1 6某 个 程 序 在 一 个 嵌 入 式 系 统(200M的CPU,50M的SDRAM)中已经最化了,换到另一个系统(300M的CPU,501Vl的SDRAM)中运行,还需要优化吗?要。程序在每时每刻都要优化,只要能找到能够优化的方法。优化有多种目的,在200M的CPU中可能需要以速度为重点优化,在300M的CPU中可能要以代码长度为目的优化。17.下面哪种排序法对12354最 快Ca quick sort/快速排序b.buble sort/冒泡排序c.merge sort 归并排序资料仅供参考18.哪种结构,平均来讲,获取一个值最快Ba.binary tree/二叉树b.hash table 散 列表哈希表c.stack/栈1 9请问C+的类和C里面的struct有什么区另(I?答:C+的类的成员默认情况下是私有的,C的struct的成员默认情况下是公共的.2 0请讲一讲析构函数和虚函数的用法和作用?答:析构函数的名字和类名相同,没有返回值,没有参数,不能随意调用也没有重载。只是在类对象生命期结束时由系统自动调用。虚函数用在继承中,当在派生类中需要重新定义基类的函数时需要在基类中将该函数声明为虚函数,作用为使程序支持动态联编。资料仅供参考2 1全局变量和局部变量有什么区别?是怎么实现的?操作系统和编译器是怎么知道的?答:一些变量整个程序中都是可见的,它们称为全局变量,一些变量在函数内部定义且只在函数中可知,则称为局部变量。全局变量由编译器建立且存放在内存的全局数据区,局部变量存放在栈区.22 一些寄存器的题目,等一些知识。1、立即寻址2、寄存器寻址3、直接寻址4、寄存器间接寻址5、基址加变址寻址主要是寻址和内存管理资料仅供参考6、寄存器相对寻址7、相对基址加变址寻址23 8086是多少位的系统?在数据总线上是怎么实现的?8086有16根数据线和20根地址线,因为可用20位地址.8086是16位处理器.24 多态。overload 和 override 的区别。答:多态:接口的多种不同的实现方式即为多态重载在相同范围(同一个类中),函数名字相同,参数不同,virtual关键字可有可无。覆盖是指派生类函数覆盖基类函数,不同的范围,函数名字相同,参数相同,基类函数必须有virtual关键字。Sony笔试题 25.完成下列程序*资料仅供参考*#i ncludeusing namespace std;资料仅供参考const int n=8;main()int i;int j;int k;for(i=n;i=1;i-)(for(j=0;j n-i+1;j+)(cout*;for(k=l;k n-i+1;k+)(cout.;)coutendl;资料仅供参考)system(pause)2 6完成程序,实现对数组的降序排序#i nclude using namespace std;void sort(int*arr,int n);int main()(int array 口=45,56,76,234,1,34,23,2,3;sort(array,9);for(int i=0;i=8;i+)曾经在这儿出界coutarrayicoutendl;system(pause);资料仅供参考void sort(int*arr,int n)(int temp;for(int i=1;i 9;i+)(for(int k=0;k 9-i;k+)曾经在这儿出界(if(arrk arrk+1)(temp=arrk;arrk=arrk+1;arrk+1=temp;资料仅供参考2 7费波那其数列,1,1,2,3,5 编写程序求第十项。能够用递归,也能够用其它方法,但要说明你选择的理由。非递归#i nclude using namespace std;int Pheponatch(int n);main()(int Ph=Pheponatch(lO);coutPhendl;system(pause);)int Pheponatch(int n)(int elem;int nl=1;资料仅供参考int n2=1;if(n=1 11 n=2)return 1;else(for(int i=3;i=n;i+)(elem=nl+n2;nl=n2;n2=elem;return elem;递归#i nclude using namespace std;int Pheponatch(int n);main()资料仅供参考int n;cinn;int ph=Pheponatch(n);coutphendl;system(pause);int Pheponatch(int n)(if(n=0)exit(-l);elseif(n=1 11 n=2)return 1;elsereturn Pheponatch(n-1)+Pheponatch(n-2);资料仅供参考2 8下列程序运行时会崩溃,请找出错误并改正,而且说明原因。#i nclude#i nclude typedef structTNode*left;TNode*right;int value;TNode;TNode*root=NULL;void append(int N);int main()(append(63);append(45);append(32);append(77);资料仅供参考append(96);append(21);append(17);/Again,数字任意给出void append(int N)(TNode*NewNode=(TNode*)malloc(sizeof(TNode);NewNode-value=N;if(root=NULL)(root=NewNode;return;)elseTNode*temp;资料仅供参考temp=root;while(N=temp.value&temp.left!=NULL)1 1(N=temp.value&temp.left!=NULL)temp=temp.left;while(N=temp.value)temp.left=NewNode;elsetemp.right=NewNode;return;29.A class B network on the internet has a subnetmask of 255.255.240.0,what is the maximumnumber of hosts per subnet.资料仅供参考a.240 b.255 c.4094 d.6553430.What is the difference:between o(log n)ando(log nA2),where both logarithems have base 2.a.o(log nA2)is bigger b.o(log n)is biggerc.no difference31.For a class what would happen if we call aclass s constructor from with the same class pilation error b.linking errorc.stack overflow d.none of the above32.new“in C+is a:.a.library function like malloc in cb.key word c.operatord.none of the above33.Which of the following information is notcontained in an inode.a.file owner b.file size资料仅供参考c.file name d.disk address34.What s the number of comparisons in theworst case to merge two sorted lists containing nelements each.a.2n b.2n-l c.2n+l d.2n-235.Time complexity of n algorithm T(n),where nis the input size,is T(n)=T(n-l)+l/n if nlotherwise 1 the order of this algorithm is.a.log(n)b.n c.nA2 d.nAn36.The number of 1 s in the binaryrepresentation of 3*4096+15*256+5*16+3 are.a.8 b.9 c.10 d.123 7.设计函数 int atoi(char*s)o38.int i=(j=4,k=8,l=16,m=32);printf(%d”,i);输资料仅供参考出是多少?39.解释局部变量、全局变量和静态变量的含义。40.解释堆和栈的区别。栈 区(stack)-由编译器自动分配释放,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。堆:一般由程序员分配释放,若程序员不释放,程序结束时可能由O S 回 收。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表.41 .论述含参数的宏与函数的优缺点。1 .函数调用时,先求出实参表示式的值,然后带入形参。而使用带参的宏只是进行简单的字符替换。2.函数调用是在程序运行时处理的,分配临时的内存单元;而宏展开则是在编译时进行的,在展开时并不分配内存单元,不进行值的传递处理,资料仅供参考也 没 有“返回值”的概念。3.对函数中的实参和形参都要定义类型,二者的类型要求一致,如不一致,应进行类型转换;而宏不存在类型问题,宏名无类型,它的参数也无类型,只是一个符号代表,展开时带入指定的字符即可。宏定义时,字符串能够是任何类型的数据。4,调用函数只可得到一个返回值,而用宏能够设法得到几个结果。5,使用宏次数多时,宏展开后源程序长,因为每展开一次都使程序增长,而函数调用不使源程序变长。6.宏替换不占运行时间,只占编译时间;而函数调用则占运行时间(分配单元、保留现场、值传递、返回)。一般来说,用宏来代表简短的表示式比较合适。4 2.以下三条输出语句分别输出什么?C易char strl=abc;char str2=abc;资料仅供参考const char str3=abc;const char str4=abc;const char*str5=abc;const char*str6=abc;cout boolalpha (strl=str2)endl;/输出什么?0cout boolalpha (str3=str4)endl;/输出什么?0cout boolalpha (str5=str6)endl;/输出什么?1答:分别输出 false,false,true。s trl 和 str2都是字符数组,每个都有其自己的存储区,它们的值则是各存储区首地址,不等;s tr3和str4同上,只是按const语义,它们所指向的数据区不能修改。s tr5和s tr6并非数组而是字符指针,并不分配存储区,其后的“abc”以常量形式存于静态数据区,而它们自己仅是指向该区首地址的指针,相等。资料仅供参考43.非C+内建型别A和B,在哪几种情况下B能隐式转化为A?C+中等答:BDa.class B:public A .B 公有继承自 A,能够是间接继承的b.class B operator A();/B 实现了隐式转化为A的转化c.class A A(const B&);/A 实现了non-explicit的参数为B(能够有其它带默认值的参数)构造函数d.A&operator=(const A&);/赋值操作,虽不是正宗的隐式类型转换,但也能够勉强算一个44.以下代码中的两个sizeof用法有问题吗?C易 void UpperCase(char str)/将 str 中的小写字母转换成大写字母for(size_t i=0;isizeof(str)/sizeof(str0);+i)资料仅供参考if(a=stri&stri 9)ch+=(A-g-l);char cl=c%OxlO+O;if(cl 9)cl+=cout ch cl )char str=I love 中国;资料仅供参考for(size_t i=0;i=0;-i)/反向遍历array数组cout arrayi endl;资料仅供参考52.以下代码有什么问题?STL易typedef vector I nt Array;I nt Array array;array.push_back(1);array.push_back(2);array.push_back(2);array.push_back(3);/删除array数组中所有的2for(lntArray:iterator itor=array.begin();itor!=array.end();+itor)(if(2=*itor)array.erase(itor);53.写一个函数,完成内存之间的拷贝。考虑问题是否全面答:资料仅供参考void*mymemcpy(void*dest,const void*src,size_t count)(char*pdest=static_cast(dest);const char*psrc=static_cast(src);if(pdestpsrc&pdestpsrc+cout)能考虑到这种情况就行了(for(size_t i=count-l;i!=-l;-i)pdesti=psrci;)elsefor(size_t i=0;icount;+i)pdesti=psrci;)return dest;资料仅供参考int main(void)(char str=mymemcpy(str+1,str+O,9);cout str endl;system(Pause);return 0;5 4 线程与进程的区别进程就是一个应用程序在处理机上的一次执行过程,它是一个动态的概念,而线程是进程中的一部分,进程包含多个线程在运行。55:请你分别划划0SI(开放式系统互联)的七资料仅供参考层网络结构图,和 TC P/IP的五层结构图?加毒/安全技术安全协议应用程序网/保密网关信淑加密动右包过滤能塞包过滤OSI/梅披层应用相关SOCKSssynsIPSecPPTP/L2IP茴 顺 密应用层(application layer)传输层(transport layer)网络层(network layer)数据链路层(data link layer)物理层(physical layer)56:请你详细的解释一下IP协议的定义,在哪个层上面,主要有什么作用?TC P与 UDP呢?IP协议是网络层的协议,它实现了 Internet中自动路由的功能,即寻径的功能,TC P协议是一个传输性的协议它向下屏蔽了 IP协议不可靠传输的特性,向上提供一个可靠的点到点的传输,U D P 提供的是一种无连接的服务,主要考虑到很多应用不需要可靠的连接,但需要快速的传输资料仅供参考57:请问交换机和路由器分别的实现原理是什么?分别在哪个层次上面实现的?交换机用在局域网中,交换机经过记录局域网内各节点机器的M A C地质(物理地址)就能够实现传递报文,无需看报文中的IP地址。路由器识别不同网络的方法是经过识别不同网络的网络ID号(IP地址的高端部分)进行的,因此为了保证路由成功,每个网络都必须有一个唯一的网络编号。路由器经过察看报文中IP地址,来决定路径,向那个子网(下一跳)路由,也就是说交换机工作在数据链路层看M A C 地址,路由器工作在网际层看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、交换机用在局域网中,交换机经过纪录局域网内各节点机器的M A C地质(物理地址)就能够实现传递报文,无需看报文中的IP地质。路由器识别不同网络的方法是经过识别不同网络的网络 ID号(IP地址的高端部分)进行的,因此为了保资料仅供参考证路由成功,每个网络都必须有一个唯一的网络编号。路由器经过察看报文中IP 地址,来决定路径,向那个子网(下一跳)路由,也就是说交换机工作在数据链路层看MAC地址,路由器工作在网际层看IP地质可是由于现在网络设备的发展,很多设备既有交换机的功能有由路由器的功能(交换试路由器)使得两者界限越来越模糊。3、IP 协议是网络层的协议,它实现了 Internet中自动路由的功能,即寻径的功能,TCP协议是一个传输性的协议它向下屏蔽了 IP 协议不可靠传输的特性,向上提供一个可靠的点到点的传输,U D P提供的是一种无连接的服务,主要考虑到很多应用不需要可靠的连接,但需要快速的传输。4、Test b();定义了一个函数62:8086是多少位的系统?在数据总线上是怎么实现的?资料仅供参考 I B M 63.怎样用最快的方法判断链表是否有环?设置两个指针,开始都指向链表头,然后其中一个指针每次向前走一步,另一个指针每次向前走两步,如果快的遇到NULL 了,证明该链表中没有环,如果有环,快的指针每次都要比慢的多走一步,最终两个指针会相遇,64.C+中引用和指针有什么不同?指针加上什么限制等于引用?答:1引用被创立的时候必须被初始化,而指针不是必须的。2 引用在创立后就不能改变引用的关系,而指针在初始化后能够随时指向其它的变量或对象。3 没 有NULL引用,引用必须与合法的存储单元关联,而指针能够是NULL。65,做的项目,遇到的困难,怎样解决?资料仅供参考69.操作符重载class CMyObject:pulic CObject(Public:CMyObject();CMyObject&operator=(const CMyObject&my);private:CString strName;int nld:;请重载赋值操作符70.链表Struct structList资料仅供参考int value;structList*pHead;)Struct LinkedList*pMyList;请编写删除链表的头、尾和第n个节点的程序7 L用Socket API制作一个聊天程序,通讯协议使用tcp/ip。要求有简单界面即可,支持多人聊天。72.如果有过工作经验,请说明在先前公司的工作以及离职原因(如无,请说明毕业后的个人展望)资料仅供参考7 3 对 于 C+中类(class)与结构(struct)的描述正确的为:A,类中的成员默认是private的,当是能够声明为public,private和 protected,结构中定义的成员默认的都是public;B,结构中不允许定义成员函数,当是类中能够定义成员函数;C,结构实例使用malloc()动态创立,类对象使用new操作符动态分配内存;D,结构和类对象都必须使用new 创立;E,结构中不能够定义虚函数,当是类中能够定义虚函数.F,结构不能够存在继承关系,当是类能够存在继承关系.答:A,D,F74,两个互相独立的类:ClassA和 ClassB,都各自资料仅供参考定义了非静态的公有成员函数PublicFunc()和非静态的私有成员函数PrivateFunc();现 在 要 在ClassA中增加定义一个成员函数ClassA:AdditionalPunction(ClassA a,ClassB b);则能够在 AdditionalPunction(ClassA x,ClassB y)的实现部分(函数功能体内部)出现的合法的表示是最全的是:A,x.PrivateFunc();x.PublicFuncO;y.PrivateFunc();y.PublicFunc();Bx.PrivateFuncO.PublicFuncO.PublicFuncO;C.PrivateFuncO.PrivateFuncO.PublicFuncO;D.PublicFuncOjy.PublicFuncO;答:B75,C+程序下列说法正确的有:A,对调用的虚函数和模板类都进行迟后编译.B,基类与子类中函数如果要构成虚函数,除了要求在基类中用virtual声名,而且必须名字相同且参数类型相同返回类型相同资料仅供参考C,重载的类成员函数都必须要:或者返回类型不同,或者参数数目不同,或者参数序列的类型不同.D,静态成员函数和内联函数不能是虚函数,友员函数和构造函数也不能是虚函数,可是析构函数能够是虚函数.答:A76,C+中的类与结构的区别?77,构造函数和析构函数是否能够被重载,为什么?答:构造函数能够被重载,析构函数不能够被重载。因为构造函数能够有多个且能够带参数,而析构函数只能有一个,且不能带参数。资料仅供参考78,一个类的构造函数和析构函数什么时候被调用,是否需要手工调用?答:构造函数在创立类对象的时候被自动调用,析构函数在类对象生命期结束时,由系统自动调用。1#include“filename.h”和#include 的区另 U?答:#i nclude filename.h”表明该文件是用户提供的头文件,查找该文件时从当前文件目录开始;#i ncludefilename.h表明这个文件是一个工程或标准头文件,查找过程会检查预定义的目录。2头文件的作用是什么?答:一、经过头文件来调用库功能。在很多场合,源代码不便(或不准)向用户公布,只要向用户资料仅供参考提供头文件和二进制的库即可。用户只需要按照头文件中的接口声明来调用库功能,而不必关心接口怎么实现的。编译器会从库中提取相应的代码。二、头文件能加强类型安全检查。如果某个接口被实现或被使用时,其方式与头文件中的声明不一致,编译器就会指出错误,这一简单的规则能大大减轻程序员调试、改错的负担。3 C+函数中值的传递方式有哪几种?答:C+函数的三种传递方式为:值传递、指针传递和引用传递。4内存的分配方式的分配方式有几种?答:一、从静态存储区域分配。内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。例如全局变量。二、在栈上创立。在执行函数时,函数内局部变量的存储单元都能够在栈上创立,函数执行结束资料仅供参考时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中,效率很高,可是分配的内存容量有限。三、从堆上分配,亦称动态内存分配。程序在运行的时候用malloc或 new申请任意多少的内存,程序员自己负责在何时用free或 delete释放内存。动态内存的生存期由我们决定,使用非常灵活,但问题也最多。5 实现双向链表删除一个节点P,在节点P 后插入一个节点,写出这两个函数;答:双向链表删除一个节点Ptemplate void list:delnode(intP)int k=l;listnode*ptr,*t;ptr=first;资料仅供参考while(ptr-next!=NULL&k!=p)(ptr=ptr-next;k+;t=ptr-next;你已经将数据项t-datajllendl;ptr-next=ptr-next-next;length-;delete t;在节点P 后插入一个节点:template bool list:insert(typet,int p)资料仅供参考listnode*ptr;ptr=first;int k=l;while(ptr!=NULL&knext;k+;if(ptr=NULL&k!=p)return false;elselistnode*tp;tp=new listnode;tp-data=t;资料仅供参考tp-next=ptr-next;ptr-next=tp;length+;return true;上海贝尔的面试题43分即可进入复试一、请填写BOOL,float,指针变量 与“零值”比较的i f语句。(10分)资料仅供参考提示:这里“零值”能够是0,0.0,FALSE或者“空指针”。例 如 in t变 量 n 与“零值”比较的i f 语句为:if(n=0)if(n!=0)以此类推。请写出BOOL flag与“零值”比较的i f 语句:请写出float x 与“零值”比较的i f 语句:请写出char*p 与“零值”比较的i f 语句:二、以下为Windows NT下的32位 C+程序,请计算sizeof的 值(10分)char str=H ello;char*p=str;int n=10;请计算sizeof(str)=sizeof(p)=资料仅供参考sizeof(n)=void Func(char str100)(请计算sizeof(str)=void*p=malloc(100);请计算sizeof(p)=、简 答 题(25分)1、头文件中的ifndef/define/endif干什么用?防止头文件重复定义。2、#i nclude 和#i nclude“filename,h”有什么区别?答:#i nclude filename.h”表明该文件是用户提供的头文件,查找该文件时从当前文件目录开始;#i ncludefilename.h表明这个文件是一个工程或标准头文件,查找过程会检查预定义的目录。资料仅供参考3、const有什么用途?(请至少说明两种)在 C/C+中,(1)能够定义const常量,(2)修饰函数的返回值和形参;在 C+中,还能够修饰函数的定义体,定义类的const成员函数。被 const修饰的东西受到强制J保护,能够预防意外的变动,提高了程序的健壮性。4、在 C+程序中调用被C 编译器编译后的函数,为什么要加extern“C”声明?答:C+语言支持函数重载,C 语言不支持函数重载。函数被C+编译后在库中的名字与C语言不同。假设某个函数的原型为:void foo(int x,int y);该函数被C 编译器编译后在库中的名字为_foo,而 C+编译器则会产生像_foo_int_int之类的名字。C+提供了 C 连接交换指定符号extern”来解决名字匹配问题。5、请简述以下两个for循环的优缺点/第一个for(i=0;iN;i+)if(condition)资料仅供参考DoSomething();elseDoOtherthing();/第二个if(condition)(for(i=0;iN;i+)DoSomething();)else(for(i=0;iN;i+)DoOtherthing();)优点:N 次中,每次都要对8ndition进行判断缺点:优点:一次判断condition后,对something或 Otherthing执行N 次资料仅供参考缺点:四、有关内存的思考题(20分)void GetMemory(char*p)(p=(char*)malloc(100);)void Test(void)(char*str=NULL;GetMemory(str);strcpy(str,hello world);printf(str);请问运行Test函数会有什么样的结果?资料仅供参考char*GetMemory(void)(char p=hello world;return p;void Test(void)(char*str=NULL;str=GetMemory();printf(str);请问运行Test函数会有什么样的结果?Void GetMemory2(char*p,int num)资料仅供参考*p=(char*)malloc(num);)void Test(void)(char*str=NULL;GetMemory(&str,100);strcpy(str,hello);printf(str);)请问运行Test函数会有什么样的结果?void Test(void)(char*str=(char*)malloc(lOO);strcpy(str,hello);free(s