100条经典C语言笔试题目100条经典C语言笔试题目题目来源:1、中兴、华为、慧通、英华达、微软亚洲技术中心等中外企业面试题目;2、C语言面试宝典(林锐《高质量编程第三版》)。说明:1、部分C语言面试题中可能会参杂部分和C++相关的知识,为了保持题目的灵活性故保留,但选题最终还是会以C语言题目为主体;2、以上公司的面试题目已成为国内中小型企业公司出题模板;3、由于本人的能力有限加上时间仓促,本课件肯定存在不足之处,恳请各位同学批评指正。100条经典C语言笔试题目题目类型基本数据类型的考察(1-4)数组、指针、内存、结构体常考点(5-28)宏、头文件、关键字的考察(29-54)程序阅读、改错(55-75)编程练习(76-100)100条经典C语言笔试题目1、请填写bool,float,指针变量与“零值”比较的if语句。提示:这里“零值”可以是0,0.0,FALSE或者“空指针”。例如int变量n与“零值”比较的if语句为:if(n==0)if(n!=0)以此类推。100条经典C语言笔试题目(1)请写出boolflag与“零值”比较的if语句:【标准答案】if(flag)if(!flag)100条经典C语言笔试题目(2)请写出floatx与“零值”比较的if语句:【标准答案】constfloatEPSINON=0.00001;if((x=-EPSINON)&&(x=EPSINON)不可将浮点变量用“==”或“!=”与数字比较,应该设法转化成“=”或“=”此类形式。100条经典C语言笔试题目(3)请写出char*p与“零值”比较的if语句【标准答案】if(p==NULL)if(p!=NULL)100条经典C语言笔试题目2、以下为Linux下的32位C程序,请计算sizeof的值。charstr[]=“Hello”;char*p=str;intn=10;请计算(1)sizeof(str)=(2)sizeof(p)=(3)sizeof(n)=【标准答案】(1)6、(2)4、(3)4100条经典C语言笔试题目(4)voidFunc(charstr[100]){……;}请计算sizeof(str)=(5)void*p=malloc(100);请计算sizeof(p)=【标准答案】(4)4、(5)4100条经典C语言笔试题目3、longa=0x801010;a+5=?【标准答案】0x801010用二进制表示为:“100000000001000000010000”,十进制的值为8392720,再加上5就是8392725。100条经典C语言笔试题目4、用变量a给出下面的定义e)一个有10个指针的数组,该指针是指向一个整型数的;f)一个指向有10个整型数数组的指针;g)一个指向函数的指针,该函数有一个整型参数并返回一个整型数;h)一个有10个指针的数组,该指针指向一个函数,该函数有一个整型参数并返回一个整型数;【标准答案】e)int*a[10];f)int(*a)[10]g)int(*a)(int);h)int(*a[10])(int)100条经典C语言笔试题目5、设有以下说明和定义:typedefunion{longi;intk[5];charc;}DATE;structdata{intcat;DATEcow;doubledog;}too;DATEmax;则语句printf(%d,sizeof(structdate)+sizeof(max));的执行结果是:_____【标准答案】DATE是一个union,变量公用空间.里面最大的变量类型是int[5],占用20个字节.所以它的大小是20data是一个struct,每个变量分开占用空间.依次为int4+DATE20+double8=32.所以结果是20+32=52.当然...在某些16位编辑器下,int可能是2字节,那么结果是int2+DATE10+double8=20100条经典C语言笔试题目6、请问以下代码有什么问题:intmain(){chara;char*str=&a;strcpy(str,hello);printf(str);return0;}【标准答案】没有为str分配内存空间,将会发生异常问题出在将一个字符串复制进一个字符变量指针所指地址。虽然可以正确输出结果,但因为越界进行内在读写而导致程序崩溃。100条经典C语言笔试题目7、请问以下代码有什么问题:char*s=AAA;printf(%s,s);s[0]='B';printf(%s,s);有什么错?【标准答案】AAA是字符串常量。s是指针,指向这个字符串常量,所以声明s的时候就有问题。cosntchar*s=AAA;然后又因为是常量,所以对是s[0]的赋值操作是不合法的。100条经典C语言笔试题目8、int(*s[10])(int)表示的是什么啊【标准答案】int(*s[10])(int)函数指针数组,每个指针指向一个intfunc(intparam)的函数。100条经典C语言笔试题目9、c和c++中的struct有什么不同?【标准答案】c和c++中struct的主要区别是c中的struct不可以含有成员函数,而c++中的struct可以。c++中struct和class的主要区别在于默认的存取权限不同,struct默认为public,而class默认为private100条经典C语言笔试题目10、voidgetmemory(char*p){p=(char*)malloc(100);strcpy(p,“helloworld”);}intmain(){char*str=NULL;getmemory(str);printf(“%s/n”,str);free(str);return0;}会出现什么问题?【标准答案】程序崩溃,getmemory中的malloc不能返回动态内存,free()对str操作很危险。100条经典C语言笔试题目11、charszstr[10];strcpy(szstr,0123456789);产生什么结果?为什么?【标准答案】长度不一样,出现段错误。100条经典C语言笔试题目12、数组和链表的区别?【标准答案】数组:数据顺序存储,固定大小;链表:数据可以随机存储,大小可动态改变100条经典C语言笔试题目13、voidmain(){charaa[10];printf(“%d”,strlen(aa));}会出现什么问题?打印结果是多少?【标准答案】sizeof()和初不初始化,没有关系,strlen()和初始化有关,打印结果值未知。100条经典C语言笔试题目14、给定结构structA{chart:4;chark:4;unsignedshorti:8;unsignedlongm;};问sizeof(A)=?【标准答案】8100条经典C语言笔试题目15、structname1{charstr;shortx;intnum;};求sizeof(name1)?【标准答案】8100条经典C语言笔试题目16、structname2{charstr;intnum;shortx;};求sizeof(name2)?【标准答案】12100条经典C语言笔试题目17、程序哪里有错误wap(int*p1,int*p2){int*p;*p=*p1;*p1=*p2;*p2=*p;}【标准答案】p为野指针100条经典C语言笔试题目18、c和c++中的struct有什么不同?【标准答案】c和c++中struct的主要区别是c中的struct不可以含有成员函数,而c++中的struct可以。c++中struct和class的主要区别在于默认的存取权限不同,struct默认为public,而class默认为private。100条经典C语言笔试题目19、(void*)ptr和(*(void**))ptr的结果是否相同?其中ptr为同一个指针。【标准答案】(void*)ptr和(*(void**))ptr值是相同的100条经典C语言笔试题目20、要对绝对地址0x100000赋值,我们可以用*(unsignedint*)0x100000=1234;那么要是想让程序跳转到绝对地址是0x100000去执行,应该怎么做?【标准答案】*((void(*)())0x100000)();首先要将0x100000强制转换成函数指针,即:(void(*)())0x100000然后再调用它:((void(*)())0x100000)();100条经典C语言笔试题目21、inta,b,c请写函数实现c=a+b,不可以改变数据类型,如将c改为longint,关键是如何处理溢出问题【标准答案】booladd(inta,intb,int*c){*c=a+b;return(a0&&b0&&(*ca||*cb)||(a0&&b0&&(*ca||*cb)));}100条经典C语言笔试题目22、关于内存的思考题(1)你能看出有什么问题?100条经典C语言笔试题目23、关于内存的思考题(2)你能看出有什么问题?100条经典C语言笔试题目25、关于内存的思考题(3)你能看出有什么问题?100条经典C语言笔试题目26、关于内存的思考题(4)你能看出有什么问题?100条经典C语言笔试题目27、关键字volatile有什么含意?并给出三个不同的例子。【参考答案】一个定义为volatile的变量是说这变量可能会被意想不到地改变,这样,编译器就不会去假设这个变量的值了。精确地说就是,优化器在用到这个变量时必须每次都小心地重新读取这个变量的值,而不是使用保存在寄存器里的备份。下面是volatile变量的几个例子:1).并行设备的硬件寄存器(如:状态寄存器)2).一个中断服务子程序中会访问到的非自动变量(Non-automaticvariables)3).多线程应用中被几个任务共享的变量100条经典C语言笔试题目28、嵌入式系统经常具有要求程序员去访问某特定的内存位置的特点。在某工程中,要求设置一绝对地址为0x67a9的整型变量的值为0xaa66。编译器是一个纯粹的ANSI编译器。写代码去完成这一任务。【参考答案】这一问题测试你是否知道为了访问一绝对地址把一个整型数强制转换(typecast)为一指针是合法的。这一问题的实现方式随着个人风格不同而不同。典型的类似代码如下:int*ptr;ptr=(int*)0x67a9;*ptr=0xaa55;100条经典C语言笔试题目29、头文件中的ifndef/define/endif干什么用?【标准答案】防止该头文件被重复引用。100条经典C语言笔试题目30、#includefilename.h和#include“filename.h”有什么区别?【标准答案】对于#includefilename.h,编译器从标准库路径开始搜索filename.h;对于#include“filename.h”,编译器从用户的工作路径开始搜索filename.h。100条经典C语言笔试题目31、const有什么用途?(请至少说明两种)【标准答案】:(1)可以定义const常量(2)const可以修饰函数的参数、返回值,甚至函数的定义体。被const修饰的东西都受到强制保护,可以预防意外的变动,能提高程序的健壮性。100条经典C语言笔试题目32、static有什么用途?(请至少说明两种)【标准答案】1.限制变量的作用域(static全局变量);2.设置变量的存储域(static局部变量)。100条经典C语言笔试题目33、堆栈溢出一般是由什么原因导致的?【标准答案】没有回收垃圾资源。100条经典C语言笔试题目34、如何引用一个已经定义过的全局变量?【标准答案】可以用引用头文件的方式,也可以用extern关键字,如果用引用头文件方式来引用某个在头文件中声明的全局变量,假定你将那个变量写错了,那么在编译期间会报错,如果你用extern方式引用时,假定你犯了同样的错误,那么在