c语言笔试面试大全【经典收藏】

上传人:xzh****18 文档编号:42150796 上传时间:2018-06-01 格式:DOC 页数:59 大小:263.50KB
返回 下载 相关 举报
c语言笔试面试大全【经典收藏】_第1页
第1页 / 共59页
c语言笔试面试大全【经典收藏】_第2页
第2页 / 共59页
c语言笔试面试大全【经典收藏】_第3页
第3页 / 共59页
c语言笔试面试大全【经典收藏】_第4页
第4页 / 共59页
c语言笔试面试大全【经典收藏】_第5页
第5页 / 共59页
点击查看更多>>
资源描述

《c语言笔试面试大全【经典收藏】》由会员分享,可在线阅读,更多相关《c语言笔试面试大全【经典收藏】(59页珍藏版)》请在金锄头文库上搜索。

1、C语言笔试大全 本人收藏4、编写算法,从 10 亿个浮点数当中,选出其中最大的 10000 个。用外部排序,在数据结构书上有计算方法导论在找到第 n 大的数的算法上加工5、编写一 unix 程序,防止僵尸进程的出现.*同学的 4 道面试题,应聘的职位是搜索引擎工程师,后两道超级难,(希望大家多给一些算发)1.给两个数组和他们的大小,还有一动态开辟的内存,求交集,把交集放到动态内存 dongtai,并且返回交集个数long jiaoji(long* a,long b,long* alength,long blength,long* dongtai)2.单连表的建立,把a-z26 个字母插入到连表

2、中,并且倒叙,还要打印!方法 1:typedef struct val int date_1;struct val *next;*p;void main(void) char c;for(c=122;c=97;c-) p.date=c;p=p-next;p.next=NULL;方法 2:node *p = NULL;node *q = NULL;node *head = (node*)malloc(sizeof(node);head-data = ;head-next=NULL;node *first = (node*)malloc(sizeof(node);first-data = a;fi

3、rst-next=NULL;head-next = first;p = first;int longth = z - b;int i=0;while ( idata = b+i;temp-next=NULL;q=temp;head-next = temp; temp-next=p;p=q;i+;print(head);1.这样的初始化有什么问题?char *p = malloc(10); 编译器提示“非法初始式” 云云。答:这个声明是静态或非局部变量吗?函数调用只能出现在自动变量(即局部非静态变量) 的初始式中。因为静态变量的地址必须在编译的过程中就确定下来而 malloc()申请的内存地址是

4、在运行时确定的。2. *p+ 自增 p 还是 p 所指向的变量?答:后缀+ 和- 操作符本质上比前缀一目操作的优先级高, 因此*p+ 和*(p+) 等价, 它自增 p 并返回 p 自增之前所指向的值。要自增 p 指向的值, 使用(*p)+, 如果副作用的顺序无关紧要也可以使用+*p。3 我有一个 char * 型指针正巧指向一些 int 型变量, 我想跳过它们。为什么如下的代码(int *)p)+; 不行?答:在 C 语言中, 类型转换意味着“把这些二进制位看作另一种类型, 并作相应的对待”; 这是一个转换操作符,根据定义它只能生成一个右值(rvalue)。而右值既不能赋值, 也不能用+ 自增

5、。(如果编译器支持这样的扩展,那要么是一个错误, 要么是有意作出的非标准扩展。) 要达到你的目的可以用:p = (char *)(int *)p + 1);或者,因为 p 是 char * 型, 直接用 p += sizeof(int);4.空指针和未初始化的指针是一回事吗?答:空指针在概念上不同于未初始化的指针:空指针可以确保不指向任何对象或函数;而未初始化指针则可能指向任何地方。5.我可以用 0 来表示空指针吗?答:根据语言定义, 在指针上下文中的常数 0 会在编译时转换为空指针。也就是说, 在初始化、赋值或比较的时候,如果一边是指针类型的值或表达式, 编译器可以确定另一边的常数 0 为空

6、指针并生成正确的空指针值。因此下边的代码段完全合法:char *p = 0;if(p != 0)然而, 传入函数的参数不一定被当作指针环境, 因而编译器可能不能识别未加修饰的 0 “表示” 指针。在函数调用的上下文中生成空指针需要明确的类型转换,强制把 0 看作指针。例如, Unix 系统调用 execl 接受变长的以空指针结束的字符指针参数。它应该如下正确调用:execl(“/bin/sh“, “sh“, “-c“, “date“, (char *)0);如果省略最后一个参数的(char *) 转换, 则编译器无从知道这是一个空指针,从而当作一个 0 传入。(注意很多 Unix 手册在这个例

7、子上都弄错了。)4、语句 for( ;1 ;)有什么问题?它是什么意思?答:和 while(1)相同。5、dowhile 和 whiledo 有什么区别?答:前一个循环一遍再判断,后一个判断以后再循环6、请写出下列代码的输出内容#includemain()int a,b,c,d;a=10;b=a+;c=+a;d=10*a+;printf(“b,c,d:%d,%d,%d“,b,c,d);return 0;答:10,12,1201、static 全局变量与普通的全局变量有什么区别?static 局部变量和普通局部变量有什么区别?static 函数与普通函数有什么区别?全局变量(外部变量)的说明之前

8、再冠以 static 就构成了静态的全局变量。全局变量本身就是静态存储方式, 静态全局变量当然也是静态存储方式。 这两者在存储方式上并无不同。这两者的区别在于非静态全局变量的作用域是整个源程序, 当一个源程序由多个源文件组成时,非静态的全局变量在各个源文件中都是有效的。 而静态全局变量则限制了其作用域, 即只在定义该变量的源文件内有效, 在同一源程序的其它源文件中不能使用它。由于静态全局变量的作用域局限于一个源文件内,只能为该源文件内的函数公用, 因此可以避免在其它源文件中引起错误。从以上分析可以看出, 把局部变量改变为静态变量后是改变了它的存储方式即改变了它的生存期。把全局变量改变为静态变量

9、后是改变了它的作用域, 限制了它的使用范围。static 函数与普通函数作用域不同。仅在本文件。只在当前源文件中使用的函数应该说明为内部函数(static),内部函数应该在当前源文件中说明和定义。对于可在当前源文件以外使用的函数,应该在一个头文件中说明,要使用这些函数的源文件要包含这个头文件static 全局变量与普通的全局变量有什么区别:static 全局变量只初使化一次,防止在其他文件单元中被引用;static 局部变量和普通局部变量有什么区别:static 局部变量只被初始化一次,下一次依据上一次结果值;static 函数与普通函数有什么区别:static 函数在内存中只有一份,普通函数

10、在每个被调用中维持一份拷贝2、程序的局部变量存在于(堆栈)中,全局变量存在于(静态区 )中,动态申请数据存在于( 堆)中。3、设有以下说明和定义:typedef union long i; int k5; char c; DATE;struct data int cat; DATE cow; double dog; too;DATE max;则语句 printf(“%d“,sizeof(struct date)+sizeof(max);的执行结果是:_52_答:DATE 是一个 union, 变量公用空间. 里面最大的变量类型是 int5, 占用 20 个字节. 所以它的大小是 20data

11、是一个 struct, 每个变量分开占用空间. 依次为 int4 + DATE20 + double8 = 32.所以结果是 20 + 32 = 52.当然.在某些 16 位编辑器下, int 可能是 2 字节,那么结果是 int2 + DATE10 + double8 = 204、队列和栈有什么区别?队列先进先出,栈后进先出、写出下列代码的输出内容#includeint inc(int a)return(+a);int multi(int*a,int*b,int*c)return(*c=*a*b);typedef int(FUNC1)(int in);typedef int(FUNC2) (

12、int*,int*,int*);void show(FUNC2 fun,int arg1, int*arg2)INCp=int temp =p(arg1);fun(printf(“%dn“,*arg2);main()int a;show(multi,10,return 0;答:1107、请找出下面代码中的所以错误说明:以下代码是把一个字符串倒序,如“abcd”倒序后变为“dcba”1、#include“string.h“2、main()3、4、 char*src=“hello,world“;5、 char* dest=NULL;6、 int len=strlen(src);7、 dest=(c

13、har*)malloc(len);8、 char* d=dest;9、 char* s=srclen;10、 while(len-!=0)11、 d+=s-;12、 printf(“%s“,dest);13、 return 0;14、答:方法 1:int main()char* src = “hello,world“;int len = strlen(src);char* dest = (char*)malloc(len+1);/要为0 分配一个空间char* d = dest;char* s = /指向最后一个字符while( len- != 0 )*d+=*s-;*d = 0;/尾部要加0

14、printf(“%sn“,dest);free(dest);/ 使用完,应当释放空间,以免造成内存汇泄露return 0;方法 2:#include #include main()char str=“hello,world“;int len=strlen(str);char t;for(int i=0; i#include int main(void)long l;char *str = “98765432“;l = atol(lstr);printf(“string = %s integer = %ldn“, str, l);return(0);2.对于一个频繁使用的短小函数,在 C 语言中

15、应用什么实现,在 C+中应用什么实现?c 用宏定义,c+用 inline3.直接链接两个信令点的一组链路称作什么?PPP 点到点连接4.接入网用的是什么接口?5.voip 都用了那些协议?6.软件测试都有那些种类?黑盒:针对系统功能的测试 白合:测试函数功能,各函数接口7.确定模块的功能和模块的接口是在软件软件设计的那个队段完成的?概要设计阶段8.enum stringx1,x2,x3=10,x4,x5,x;问 x= 0x801005,0x8010f4 ;9.unsigned char *p1;unsigned long *p2;p1=(unsigned char *)0x801000;p2=(unsigned long *)0x810000;请问 p1+5= ;p2+5= ;三.选择题:1.Ethternet 链接到 Internet 用到以下那个协议?A.HDLC;B.ARP;C.UDP;D.TCP;E.ID2.属于网络层协议的是:A.TCP;B.IP;C.ICMP;D.X.253.Windows 消息调度机制是:A.指令队列;B.指令堆栈;C.消息队列;D.消息堆栈;4.unsigned short hash(unsigned short key)return (key)%256请问 hash(16),hash(256)的值分别是:A.1.16;B.8.32;C

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号