C语言笔试面试题C语言笔试c语言笔试C语言笔试题笔试面试题.docx
《C语言笔试面试题C语言笔试c语言笔试C语言笔试题笔试面试题.docx》由会员分享,可在线阅读,更多相关《C语言笔试面试题C语言笔试c语言笔试C语言笔试题笔试面试题.docx(234页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、表示已有答案表示没有处理表示答案不确定C+笔试题1.多态类中的虚函数表是Compile-Time,还是Run-Time时建立的?答案:虚拟函数友是在编译期就建立了,各个虚拟函数这时被组织成了 个虚拟函数的入口地址的数 组.而对象的隐藏成员一虚拟函数表指针是在运行期一也就是构造函数被调用时进行初始化的,这是 实现多态的关键.3. main主函数执行完毕后,是否可能会再执行一段代码?(朗讯的一道笔试题) 答案:可以,可以用_onexit注册 个函数,它会在main之后执行;如果你需要加入一段五main退出后执行的代码,可以使用atexit ()函数,注册一个函数。语法:#include int a
2、texit(void (function)(void);#include #include void fnl( void ), fn2( void ), fn3( void ), fn4( void );int main( void )atexit(fnl);atexit( fn2 );atexit( fn3 );atexit( fn4 );printf( This is executed first. n* );void fnl()(printf( next.n* );)void fn2()(printf( executed );void fn3()(printf( is );void fn
3、4()printf( This );结果:This is executed first.This is executed next.4 .一个父类写了一个virtual函数,如果子类覆盖它的函数不加virtual ,也能实现多态? 在子类的空间里,有没有父类的这个函数,或者父类的私有变量?(华为笔试题)答案:只要基类在定义成员函数时已经声明了 virtue关键字,在派生类实现的时候覆盖该函数时, virtue关键字可加可不加,不影响多态的实现。子类的空间里有父类的所有变量(static除外)。5 .给一个字符串、例如“ababc”要求返回“ab” .因为“ab”连续重复出现且最长。用C/C+语
4、言写一函数完成该算法,给出复杂度6 .对序列 1、1、2、3、5、8、13. 是 Fab.数列2、3、5、13. .是Fab.质数数列,因为他们与自己前面的Fab.数列都互质给出k,返回第k小的Fab.质数7 . 101个硬币100真、1假,真假区别在于重量。请用无硅码天平称两次给出真币重还是假币 重的结论。8 .完成字符串拷贝可以使用sprintf、strcpy及memcpy函数,请问这些函数有什么区别,你喜欢使用哪个,为什么?答案:这些函数的区别在于实现功能以及操作对象不同。1. strcpy函数操作的对象是字符串,完成从源字符串到目的字符串的拷贝功能。2. snprintf函数操作的对象
5、不限于字符串:虽然目的对象是字符串,但是源对象可以是字符串、也 可以是任意基本类型的数据。这个函数主要用来实现(字符串或基本数据类型)向字符串的转换功 能。如果源对象是字符串,并且指定%s格式符,也可实现字符串拷贝功能。3. memcpy函数顾名思义就是内存拷贝,实现将一个内存块的内容复制到另一个内存块这一功 能。内存块由其首地址以及长度确定。程序中出现的实体对象,不论是什么类型,其最终表现就是 在内存中占据席之地(个内存区间或块)。因此,memcpy的操作对象不局限于某类数据类型, 或者说可适用于任意数据类型,只要能给出对象的起始地址和内存长度信息、并且对象具有可操作 性即可。鉴于memcp
6、y函数等长拷贝的特点以及数据类型代表的物理意义,memcpy函数通常限于同 种类型数据或对象之间的拷贝,其中当然也包括字符串拷贝以及基本数据类型的拷贝。对于字符串拷贝来说,用上述三个函数都可以实现,但是其实现的效率和使用的方便程度不同: strcpy无疑是最合适的选择:效率高且调用方便。 snprintf要额外指定格式符并且进行格式转化,麻烦且效率不高。 memcpy虽然高效,但是需要额外提供拷贝的内存长度这一参数,易错且使用不便;并且如 果长度指定过大的话(最优长度是源字符串长度+1),还会带来性能的下降。其实strcpy 函数一般是在内部调用memcpy函数或者用汇编直接实现的,以达到高效
7、的目的。因此,使 用memcpy和strcpy拷贝字符串在性能上应该没有什么大的差别。对于非字符串类型的数据的复制来说,strcpy和snprintf 一般就无能为力了,可是对memcpy 却没有什么影响。但是,对于基本数据类型来说,尽管可以用memcpy进行拷贝,由于有赋值 运算符可以方便且高效地进行同种或兼容类型的数据之间的拷贝,所以这种情况下memcpy儿 乎不被使用。memcpy的长处是用来实现(通常是内部实现居多)对结构或者数组的拷贝,其目 的是或者高效,或者使用方便,甚或两者兼有。9 .变量的声明和定义有什么区别?10 .请写出下面代码在32位平台上的运行结果,并说明sizeof的
8、性质:#include #include int main(void)char a30;printf(%dn”, sizeof(a);char *b = (char *)malloc(20 * sizeof(char);printf(%dn, sizeof(b);printf(%dn”, sizeof(a3);printf(*%dn*, sizeof(b+3);printf(%dn, sizeof(b+4);return 0 ;12.请完成以下题目。注意,请勿直接调用ANSI C函数库中的函数实现。a)请编写一个C函数,该函数给出一个字节中被置1的位的个数,并请给出该题的至少一个不同 解法。第
9、一种 unsigned int TestAsOneO(char log)int i;unsigned int num=0, val;for(i=0; i8;i+)( val =log i; 移位val & 二 0x01; 与 1 相与 if(val)num+;) return num;第二种 unsigned int TestAsOnel (char log)(int i;unsigned int num=0, val;for(i=0; i8;i+)(val =Clog) i; 反码?val &二 0x00;与。相与if(!val) num+;) return num;b)请编写一个C函数,该
10、函数将给定的一个字符串转换成整数。int Invert(char *str)int num=0;while(*str!=,0J)(int digital=*str-48;num=num*10+digital;str=str+l;)return num;)c)请编写一个C函数,该函数将给定的一个整数转换成字符串。 void IntToCharChange(int num, char* pval)char strval100;int i,j;int valO=0;int val1=o;valO =num;for(i=0;i100;i+)(vail =valO %10;取余valO =valO /1
11、0;取整strval i=vail +48; /数字一字符if(valO10)(i+;strval i=valO +48;break;)ifor(j=0;j99)return;)sourcej= 0;for(i=0; ij;i+)(childi=sourcej-i-l:反序childi=0;)e)请编写一个C函数,该函数在给定的内存区域搜索给定的字符,并返回该字符所在位置索引值。int search (char *cpSource, int n, char ch) 起始地址,搜索长度,目标字符 for(i=0; in & *(cpSource+i) != ch; +i):return i;)f
12、)请编写一个C函数,该函数在一个字符串中找到可能的最长的子字符串,该字符串是由同一 字符组成的。int ChildString(char*p) 自己写(Char *q=p;int stringlen=O, i=0, j=l, len=O,maxlen=l;while(*q! = 0* )不能用 strlen,求得长度 stringlen(Stringlen+;q+;while( i Stringlen )(if(*(p+i)=*(p+j)&jmaxlen)统计最大子串长度 maxlen=len+l;len=O;)else len=O;) i+; j+;)return maxlen;)给出演示上
13、述函数功能的一个简单程序,并请编写对应的Makefile文件13.我们需要编写一个图形相关的应用程序,需要处理大量图形(Shape)信息,图形有矩形 (Rectangle),正方形(Square),圆形(Circle)等种类,应用需要计算这些图形的面积,并且可能 需要在某个设备上进行显示(使用在标准输出上打印信息的方式做为示意)。a)请用面向对象的方法对以上应用进行设计,编写可能需要的类b)请给出实现以上应用功能的示例性代码,从某处获取图形信息, 并且进行计算和绘制c)如果你的Square继承自Rectangle,请给出理由,如果不是, 请给出理由,并且请比较两种方式的优劣d)请问你所编写的类
14、,在如下代码中会有何表现,请解释 void test_rectangle_area(Rectanglefe r)r. set_width(10);r. set height (15);assert (r. area() = 150);14 .假设现有一个单向的链表,但是只知道只有一个指向该节点的指针p,并且假设这个节 点不是尾节点,试编程实现删除此节点参考:将下一个节点的内容复制到本节点上,然后删除下一个节点;15 .写一个程序,把一个100以内的自然数分解因数。(自然数分解因数就是将一个自然数 分解为几个素数的乘积,提示,由于该数不是很大,所以可以将质数保存在数组中,以加快计 算速度)16
15、.编写一个Identify的分配、释放的函数,为1一10000之间的自然数。17 .分别实现itoa和atoi.18 . Consider the following code:#include #include int main(int argc, char *argv) int i = 1;char buf4;strcpy(buf, AAAA);printf(%dn, i);return 0;a) When compiled and executed on x86, why does this program usually not output what theprogrammer in
16、tended?在x86上为什么不能得到预期结果b) Name several ways in which the security problem that causes this program not to output what the programmer intended can be prevented WITHOUT changing the code.参考:第一个问题:32位情况:x86卜,栈方向向上生长.在main的栈中,先分配i空间(4byte),然后分配4个字节的buf (地址在 i的上面,比i小).strcpy越界,用0把buf开始的第4(0开始)个字节覆盖掉了.而x8
17、6是LSB排列 顺序,所以真好覆盖了 i的内个数字1.所以显示出数字0.16位情况同样分析即可.第2问?19 . int w=l, x=2, y=3, z=4;m=(wx)?w:x;m=(my)?m:y;m=(m2)?m:z;说出结果printf(*m=%d*,m);答案:120 .说出结果?#include main()FILE *fp;int i, a4 = l, 2, 3, 4, b;fp=fopen(z,data. dat, wb); 这里帮忙解释一下for(i=0;i4;i+)fwrite(&ai, sizeof (int), 1, fp);/这里也帮忙看一下fclose(fp);f
18、p=fopenC*data. dat*, rb);fseek (fp, -2L*sizeof (int), SEEK_END);还有这里fread(&b, sizeof (int), 1, fp);这里还有也看一下fclose(fp);printf(*b=%dn*, b);21,有双向循环链表结点:(华为面试题)typedef struct node(int date;struct node *front, *next;_Node;看两个双向循环链表A, B,知道其头指针为:pHeadA, pHeadB,请写一函数将两上链表中date值相 同的结点删除参考算法:1 ,取出A的一个元素d2 .收
19、集B中有相同元素d的结点到垃圾箱,并从B里删除3 .收集A中有相同元素d的结点到垃圾箱,并从A里删除4 .删除垃圾箱中的所有元素5 .A链的指针指向下一个6 .重复15,直到A链循环到头了注意的是第3步,在2步执行后垃圾箱不为空时才执行。上述算法还可以做一点点优化:1.加入两个变量cA,cB,分别记录当前A中和B中的元素个数每次从较长者中取出一个元素来,先从较小者中找起若没有,则不必在较长者中浪费时间了#include?struct NODEint date;NODE *front, *next;;void redel(NODE *&ahead, NODE *&bhead)(int boy=0
20、;NODE *pa=ahead, *pb=bhead, *paa, *paaa, *paaaa, *pbb;while(pa-next!=ahead) (int boys=pa-date; 取 pa 中一个值paaaa=pa;paa=pa;pb=bhead;while(pb-next!=bhead)if (boys=pb-date)如果 pa, pb 中有值相同coutendl;cout*deleteB: *date*if (pb=bhead) (boy=l;pb-front-next=pb-next;pb-next-front=pb-front; bhead=bhead-next;pbb=p
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 笔试 试题
限制150内