
C程序员语言面试100题.ppt
110页100条经典条经典C语言笔试题目语言笔试题目100条经典C语言笔试题目n题目来源:题目来源:1、中兴、华为、慧通、英华达、微软亚洲技术中心等中外企业面试、中兴、华为、慧通、英华达、微软亚洲技术中心等中外企业面试题目;题目;2、、C语言面试宝典语言面试宝典(林锐《高质量编程第三版》林锐《高质量编程第三版》)n说明:说明:1、部分、部分C语言面试题中可能会参杂部分和语言面试题中可能会参杂部分和C++相关的知识,为了保相关的知识,为了保持题目的灵活性故保留,但选题最终还是会以持题目的灵活性故保留,但选题最终还是会以C语言题目为主体;语言题目为主体; 2、以上公司的面试题目已成为国内中小型企业公司出题模板;、以上公司的面试题目已成为国内中小型企业公司出题模板;3、由于本人的能力有限加上时间仓促,本课件肯定存在不足之处,、由于本人的能力有限加上时间仓促,本课件肯定存在不足之处,恳请各位同学批评指正恳请各位同学批评指正100条经典C语言笔试题目n题目类型题目类型基本数据类型的考察基本数据类型的考察(1-4)数组、指针、内存、结构体常考点数组、指针、内存、结构体常考点(5-28) 宏、头文件、关键字的考察宏、头文件、关键字的考察(29-54)程序阅读、改错程序阅读、改错(55-75)编程练习编程练习(76-100) 100条经典C语言笔试题目n1、请填写、请填写 bool , float, 指针变量指针变量 与与“零值零值”比较的比较的 if 语句。
语句 提示:这里提示:这里“零值零值”可以是可以是 0, 0.0 , FALSE 或者或者“空指针空指针” 例如 int 变量变量 n 与与“零值零值”比较的比较的 if 语句为:语句为: if ( n == 0 ) if ( n != 0 ) 以此类推以此类推 100条经典C语言笔试题目n((1)请写出)请写出 bool flag 与与“零值零值”比较的比较的 if 语句:语句: 【标准答案】【标准答案】if ( flag ) if ( !flag )100条经典C语言笔试题目n((2)请写出)请写出 float x 与与“零值零值”比较的比较的 if 语句:语句: 【标准答案】【标准答案】 const float EPSINON = 0.00001; if ((x >= - EPSINON) && (x <= EPSINON) 不可将浮不可将浮点变量用点变量用“==”或或“!!=”与数字比较,应该设法转化成与数字比较,应该设法转化成“>=”或或“<=”此类形式。
此类形式 100条经典C语言笔试题目n((3)请写出)请写出 char *p 与与“零值零值”比较的比较的 if 语句语句 【标准答案】【标准答案】 if (p == NULL) if (p != NULL) 100条经典C语言笔试题目n2、以下为、以下为 Linux下的下的 32 位位 C程序,请计算程序,请计算 sizeof 的值 char str[] = “Hello” ; char *p = str ; int n = 10; 请计算请计算 ((1))sizeof (str ) = ((2))sizeof ( p ) = ((3))sizeof ( n ) =【标准答案】(【标准答案】(1))6、(、(2))4、(、(3))4100条经典C语言笔试题目n((4))void Func ( char str[100]) { …… ; } 请计算请计算 sizeof( str ) = ((5))void *p = malloc( 100 ); 请计请计算算sizeof ( p ) = 【标准答案】(【标准答案】(4))4、(、(5))4100条经典C语言笔试题目n3、、 long a=0x801010;a+5=? 【标准答案】【标准答案】0x801010用二进制表示为:用二进制表示为:“1000 0000 0001 0000 0001 0000”,十进制的值为,十进制的值为8392720,再加上,再加上5就是就是8392725。
100条经典C语言笔试题目n4、用变量、用变量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语言笔试题目n5、设有以下说明和定义:、设有以下说明和定义:typedef union {long i; int k[5]; char c;} DATE;struct data { int cat; DATE cow; double dog;} too;DATE max;则语句则语句 printf("%d",sizeof(struct date)+sizeof(max));的执行结的执行结果是:果是:_____ 【标准答案】【标准答案】DATE是一个是一个union, 变量公用空间变量公用空间. 里面最大的变量类里面最大的变量类型是型是int[5], 占用占用20个字节个字节. 所以它的大小是所以它的大小是20data是一个是一个struct, 每个变量分开占用空间每个变量分开占用空间. 依次为依次为int4 + DATE20 + double8 = 32.所以结果是所以结果是 20 + 32 = 52.当然当然...在某些在某些16位编辑器下位编辑器下, int可能是可能是2字节字节,那么结果是那么结果是 int2 + DATE10 + double8 = 20100条经典C语言笔试题目n6、请问以下代码有什么问题:、请问以下代码有什么问题:int main(){char a;char *str=&a;strcpy(str,"hello");printf(str);return 0;} 【标准答案】没有为【标准答案】没有为str分配内存空间,将会发生异常分配内存空间,将会发生异常问题出在将一个字符串复制进一个字符变量指针所指地址。
虽然问题出在将一个字符串复制进一个字符变量指针所指地址虽然可以正确输出结果,但因为越界进行内在读写而导致程序崩溃可以正确输出结果,但因为越界进行内在读写而导致程序崩溃100条经典C语言笔试题目n7、请问以下代码有什么问题:、请问以下代码有什么问题: char* s="AAA";printf("%s",s);s[0]='B';printf("%s",s);有什么错?有什么错? 【标准答案】【标准答案】"AAA"是字符串常量是字符串常量s是指针,指向这个字符串常是指针,指向这个字符串常量,所以声明量,所以声明s的时候就有问题的时候就有问题cosnt char* s="AAA";然后又因为是常量,所以对是然后又因为是常量,所以对是s[0]的赋值操作是不合法的的赋值操作是不合法的100条经典C语言笔试题目n8、、 int (*s[10])(int) 表示的是什么啊表示的是什么啊 【标准答案】【标准答案】int (*s[10])(int) 函数指针数组,每个指针指向一个函数指针数组,每个指针指向一个int func(int param)的函数。
的函数100条经典C语言笔试题目n9、、 c和和c++中的中的struct有什么不同?有什么不同? 【标准答案】【标准答案】c和和c++中中struct的主要区别是的主要区别是c中的中的struct不可以含不可以含有成员函数,而有成员函数,而c++中的中的struct可以c++中中struct和和class的主要的主要区别在于默认的存取权限不同,区别在于默认的存取权限不同,struct默认为默认为public,而,而class默默认为认为private100条经典C语言笔试题目n10、、void getmemory(char *p){p=(char *) malloc(100);strcpy(p,“hello world”);}int main( ){char *str=NULL;getmemory(str);printf(“%s/n”,str);free(str);return 0;}会出现什么问题?会出现什么问题? 【标准答案】程序崩溃,【标准答案】程序崩溃,getmemory中的中的malloc 不能返回动态内存,不能返回动态内存, free()对()对str操作很危险操作很危险。
100条经典C语言笔试题目n11、、 char szstr[10];strcpy(szstr,"0123456789");产生什么结果?为什么?产生什么结果?为什么? 【标准答案】长度不一样,出现段错误标准答案】长度不一样,出现段错误100条经典C语言笔试题目n12、数组和链表的区别?、数组和链表的区别? 【标准答案】数组:数据顺序存储,固定大小;【标准答案】数组:数据顺序存储,固定大小;链表:数据可以随机存储,大小可动态改变链表:数据可以随机存储,大小可动态改变100条经典C语言笔试题目n13、、 void main(){char aa[10];printf(“%d”,strlen(aa));} 会出现什么问题?打印结果是多少?会出现什么问题?打印结果是多少? 【标准答案】【标准答案】sizeof()和初不初始化,没有关系,和初不初始化,没有关系,strlen()和初始化和初始化有关,打印结果值未知。
有关,打印结果值未知100条经典C语言笔试题目n14、给定结构、给定结构struct A{char t:4;char k:4;unsigned short i:8;unsigned long m;};问问sizeof(A) = ? 【标准答案】【标准答案】8100条经典C语言笔试题目n15、、 struct name1{char str;short x;int num;};求;求sizeof(name1)?【标准答案】【标准答案】8100条经典C语言笔试题目n16、、 struct name2{char str;int num;short x;};求求sizeof(name2)??【标准答案】【标准答案】12100条经典C语言笔试题目n17、程序哪里有错误、程序哪里有错误 wap( int* p1,int* p2 ) { int *p; *p = *p1; *p1 = *p2; *p2 = *p; } 【标准答案】【标准答案】p为野指针为野指针100条经典C语言笔试题目n18、、 c和和c++中的中的struct有什么不同?有什么不同? 【标准答案】【标准答案】c和和c++中中struct的主要区别是的主要区别是c中的中的struct不可以含不可以含有成员函数,而有成员函数,而c++中的中的struct可以。
可以c++中中struct和和class的主要的主要区别在于默认的存取权限不同,区别在于默认的存取权限不同,struct默认为默认为public,而,而class默默认为认为private100条经典C语言笔试题目n19、、 (void *)ptr 和和 (*(void**))ptr的结果是否相同?其中的结果是否相同?其中ptr为同为同一个指针一个指针 【标准答案】【标准答案】(void *)ptr 和和 (*(void**))ptr值是相同的值是相同的100条经典C语言笔试题目n20、要对绝对地址、要对绝对地址0x100000赋值,我们可以用赋值,我们可以用*(unsigned int*)0x100000 = 1234;那么要是想让程序跳转到绝对地址是那么要是想让程序跳转到绝对地址是0x100000去执行,应该怎么去执行,应该怎么做?做? 【标准答案】【标准答案】*((void (*)( ))0x100000 ) ( );首先要将首先要将0x100000强制转换成函数指针强制转换成函数指针,即即:(void (*)())0x100000然后再调用它然后再调用它:((void (*)())0x100000)();100条经典C语言笔试题目n21、、 int a,b,c 请写函数实现请写函数实现c=a+b ,不可以改变数据类型不可以改变数据类型,如将如将c改改为为long int,关键是如何处理溢出问题关键是如何处理溢出问题 【标准答案】【标准答案】 bool add (int a, int b,int *c){*c=a+b;return (a>0 && b>0 &&(*ca || *c>b)));}100条经典C语言笔试题目n22、关于内存的思考题(、关于内存的思考题(1)你能看出有什么问题?)你能看出有什么问题?100条经典C语言笔试题目n23、关于内存的思考题(、关于内存的思考题(2)你能看出有什么问题?)你能看出有什么问题?100条经典C语言笔试题目n25、关于内存的思考题(、关于内存的思考题(3)你能看出有什么问题?)你能看出有什么问题?100条经典C语言笔试题目n26、关于内存的思考题(、关于内存的思考题(4)你能看出有什么问题?)你能看出有什么问题?100条经典C语言笔试题目n27、、 关键字关键字volatile有什么含意有什么含意? 并给出三个不同的例子。
并给出三个不同的例子 【参考答案】一个定义为【参考答案】一个定义为volatile的变量是说这变量可能会被意想的变量是说这变量可能会被意想不到地改变,这样,编译器就不会去假设这个变量的值了精确不到地改变,这样,编译器就不会去假设这个变量的值了精确地说就是,优化器在用到这个变量时必须每次都小心地重新读取地说就是,优化器在用到这个变量时必须每次都小心地重新读取这个变量的值,而不是使用保存在寄存器里的备份下面是这个变量的值,而不是使用保存在寄存器里的备份下面是volatile变量的几个例子:变量的几个例子: 1). 并行设备的硬件寄存器(如:状态寄存器)并行设备的硬件寄存器(如:状态寄存器) 2). 一个中断服务子程序中会访问到的非自动变量一个中断服务子程序中会访问到的非自动变量(Non-automatic variables) 3). 多线程应用中被几个任务共享的变量多线程应用中被几个任务共享的变量 100条经典C语言笔试题目n28、嵌入式系统经常具有要求程序员去访问某特定的内存位置的、嵌入式系统经常具有要求程序员去访问某特定的内存位置的特点在某工程中,要求设置一绝对地址为特点在某工程中,要求设置一绝对地址为0x67a9的整型变量的的整型变量的值为值为0xaa66。
编译器是一个纯粹的编译器是一个纯粹的ANSI编译器写代码去完成编译器写代码去完成这一任务这一任务 【参考答案】这一问题测试你是否知道为了访问一绝对地址把一个【参考答案】这一问题测试你是否知道为了访问一绝对地址把一个整型数强制转换(整型数强制转换(typecast)为一指针是合法的这一问题的实)为一指针是合法的这一问题的实现方式随着个人风格不同而不同典型的类似代码如下:现方式随着个人风格不同而不同典型的类似代码如下: int *ptr; ptr = (int *)0x67a9; *ptr = 0xaa55;100条经典C语言笔试题目n29、头文件中的、头文件中的 ifndef/define/endif 干什么用?干什么用? 【标准答案】防止该头文件被重复引用标准答案】防止该头文件被重复引用 100条经典C语言笔试题目n30、、#include <> 和和 #include “” 有什么区别?有什么区别? 【标准答案】对于【标准答案】对于#include <> ,编译器从标准库路径开始搜索,编译器从标准库路径开始搜索 ; 对于对于#include “” ,编译器从用户的工作路,编译器从用户的工作路径开始搜索径开始搜索 。
100条经典C语言笔试题目n31、、const 有什么用途?(请至少说明两种)有什么用途?(请至少说明两种) 【标准答案】:【标准答案】: ((1)可以定义)可以定义 const 常量常量 ((2))const 可以修饰函数的参数、返回值,甚至函数的定义体被可以修饰函数的参数、返回值,甚至函数的定义体被 const 修修饰的东西都受到强制保护,可以预防意外的变动,能提高程序的饰的东西都受到强制保护,可以预防意外的变动,能提高程序的健壮性 100条经典C语言笔试题目n32、、 static有什么用途?(请至少说明两种)有什么用途?(请至少说明两种) 【标准答案】【标准答案】 1.限制变量限制变量的作用域(的作用域(static全局变量);全局变量);2.设置变量的存储域(设置变量的存储域(static局部变量)局部变量)100条经典C语言笔试题目n33、堆栈溢出一般是由什么原因导致的?、堆栈溢出一般是由什么原因导致的? 【标准答案】没有回收垃圾资源。
标准答案】没有回收垃圾资源100条经典C语言笔试题目n34、如何引用一个已经定义过的全局变量?、如何引用一个已经定义过的全局变量? 【标准答案】可以用引用头文件的方式,也可以用【标准答案】可以用引用头文件的方式,也可以用extern关键字,关键字,如果用引用头文件方式来引用某个在头文件中声明的全局变量,如果用引用头文件方式来引用某个在头文件中声明的全局变量,假定你将那个变量写错了,那么在编译期间会报错,如果你用假定你将那个变量写错了,那么在编译期间会报错,如果你用extern方式引用时,假定你犯了同样的错误,那么在编译期间不方式引用时,假定你犯了同样的错误,那么在编译期间不会报错,而在连接期间报错会报错,而在连接期间报错 100条经典C语言笔试题目n35、全局变量可不可以定义在可被多个、全局变量可不可以定义在可被多个.C文件包含的头文件中?文件包含的头文件中?为什么?为什么? 【标准答案】可以,在不同的【标准答案】可以,在不同的C文件中以文件中以static形式来声明同名全局形式来声明同名全局变量可以在不同的变量可以在不同的C文件中声明同名的全局变量,前提是其中文件中声明同名的全局变量,前提是其中只能有一个只能有一个C文件中对此变量赋初值,此时连接不会出错。
文件中对此变量赋初值,此时连接不会出错100条经典C语言笔试题目n36、队列和栈有什么区别?、队列和栈有什么区别? 【标准答案】队列先进先出,栈后进先出标准答案】队列先进先出,栈后进先出100条经典C语言笔试题目n37、、 Heap与与stack的差别 【标准答案】【标准答案】Heap是堆,是堆,stack是栈Stack的空间由操作系统自动分配的空间由操作系统自动分配/释放,释放,Heap上的空间手动分配上的空间手动分配/释放Stack空间有限,空间有限,Heap是很大的自由存储区是很大的自由存储区C中的中的malloc函数分配的内存空间即在堆上函数分配的内存空间即在堆上,C++中对应的是中对应的是new操作符程序在编译期对变量和函数分配内存都在栈上进行程序在编译期对变量和函数分配内存都在栈上进行,且程序运行过且程序运行过程中函数调用时参数的传递也在栈上进行程中函数调用时参数的传递也在栈上进行100条经典C语言笔试题目n38、用宏定义写出、用宏定义写出swap((x,,y),即交换两数即交换两数 【标准答案】【标准答案】 #define swap(x, y) (x)=(x)+(y);(y)=(x)–(y);(x)=(x)–(y);100条经典C语言笔试题目n39、写一个、写一个“标准标准”宏,这个宏输入两个参数并返回较小的一个。
宏,这个宏输入两个参数并返回较小的一个 【标准答案】【标准答案】#define Min(X, Y) ((X)>(Y)?(Y):(X))//结尾没有结尾没有;100条经典C语言笔试题目n40、带参宏与带参函数的区别、带参宏与带参函数的区别(至少说出至少说出5点点)?? 【标准答案】【标准答案】100条经典C语言笔试题目n41、关键字、关键字volatile有什么含意?有什么含意? 【标准答案】提示编译器对象的值可能在编译器未监测到的情况下【标准答案】提示编译器对象的值可能在编译器未监测到的情况下改变100条经典C语言笔试题目n42、、 int main(){int x=3;printf("%d",x);return 1;}问函数既然不会被其它函数调用,为什么要返回问函数既然不会被其它函数调用,为什么要返回1?? 【标准答案】【标准答案】mian中,中,c标准认为标准认为0表示成功,非表示成功,非0表示错误具体表示错误具体的值是某种具体出错信息的值是某种具体出错信息100条经典C语言笔试题目n43、已知一个数组、已知一个数组table,用一个宏定义,求出数据的元素个数用一个宏定义,求出数据的元素个数。
【标准答案】【标准答案】 #define NTBL(table) (sizeof(table)/sizeof(table[0]))100条经典C语言笔试题目n44、、 A.c 和和B.c两个两个c文件中使用了两个相同名字的文件中使用了两个相同名字的static变量变量,编编译的时候会不会有问题译的时候会不会有问题?这两个这两个static变量会保存到哪里(栈还是变量会保存到哪里(栈还是堆或者其他的)堆或者其他的)? 【标准答案】【标准答案】static的全局变量,表明这个变量仅在本模块中有意的全局变量,表明这个变量仅在本模块中有意义,不会影响其他模块义,不会影响其他模块他们都放在静态数据区,但是编译器对他们的命名是不同的他们都放在静态数据区,但是编译器对他们的命名是不同的如果要使变量在其他模块也有意义的话,需要使用如果要使变量在其他模块也有意义的话,需要使用extern关键字100条经典C语言笔试题目n45、、 static全局变量与普通的全局变量有什么区别?全局变量与普通的全局变量有什么区别? 【标准答案】【标准答案】 static全局变量只初使化一次,防止在其他文件单元全局变量只初使化一次,防止在其他文件单元中被引用中被引用;100条经典C语言笔试题目n46、、 static局部变量和普通局部变量有什么区别局部变量和普通局部变量有什么区别 【标准答案】【标准答案】static局部变量只被初始化一次,下一次依据上一次局部变量只被初始化一次,下一次依据上一次结果值;结果值;100条经典C语言笔试题目n47、、 static函数与普通函数有什么区别?函数与普通函数有什么区别? 【标准答案】【标准答案】static函数在内存中只有一份,普通函数在每个被调函数在内存中只有一份,普通函数在每个被调用中维持一份拷贝用中维持一份拷贝100条经典C语言笔试题目n关于关于45-47的参考文章的参考文章 全局变量全局变量( (外部变量外部变量) )的说明之前再冠以的说明之前再冠以static static 就构成了静态的全局变量。
就构成了静态的全局变量全局变量本身就是静态存储方式,全局变量本身就是静态存储方式, 静态全局变量当然也是静态存储方式静态全局变量当然也是静态存储方式 这两者在存储方式上并无不同这两者的区别虽在于非静态全局变量的这两者在存储方式上并无不同这两者的区别虽在于非静态全局变量的作用域是整个源程序,当一个源程序由多个源文件组成时,非静态的全作用域是整个源程序,当一个源程序由多个源文件组成时,非静态的全局变量在各个源文件中都是有效的局变量在各个源文件中都是有效的 而静态全局变量则限制了其作用域,而静态全局变量则限制了其作用域, 即只在定义该变量的源文件内有效,即只在定义该变量的源文件内有效, 在同一源程序的其它源文件中不能在同一源程序的其它源文件中不能使用它由于静态全局变量的作用域局限于一个源文件内,只能为该源使用它由于静态全局变量的作用域局限于一个源文件内,只能为该源文件内的函数公用,因此可以避免在其它源文件中引起错误文件内的函数公用,因此可以避免在其它源文件中引起错误从以上分析可以看出,从以上分析可以看出, 把局部变量改变为静态变量后是改变了它的存储把局部变量改变为静态变量后是改变了它的存储方式即改变了它的生存期。
把全局变量改变为静态变量后是改变了它的方式即改变了它的生存期把全局变量改变为静态变量后是改变了它的作用域,作用域, 限制了它的使用范围限制了它的使用范围staticstatic函数与普通函数作用域不同仅在本文件只在当前源文件中使函数与普通函数作用域不同仅在本文件只在当前源文件中使用的函数应该说明为内部函数用的函数应该说明为内部函数(static)(static),内部函数应该在当前源文件中,内部函数应该在当前源文件中说明和定义对于可在当前源文件以外使用的函数,应该在一个头文件说明和定义对于可在当前源文件以外使用的函数,应该在一个头文件中说明,要使用这些函数的源文件要包含这个头文件中说明,要使用这些函数的源文件要包含这个头文件100条经典C语言笔试题目n48、程序的局部变量存在于、程序的局部变量存在于___中,全局变量存在于中,全局变量存在于____中,动中,动态申请数据存在于态申请数据存在于___中 【标准答案】程序的局部变量存在于【标准答案】程序的局部变量存在于栈栈(stack)中,全局变量存在于中,全局变量存在于静态数据区静态数据区 中,动态申请数据存在于中,动态申请数据存在于堆(堆(heap))中。
中100条经典C语言笔试题目n49、什么是预编译,何时需要预编译:、什么是预编译,何时需要预编译: 【标准答案】1、总是使用不经常改动的大型代码体标准答案】1、总是使用不经常改动的大型代码体 2、程序由多个模块组成,所有模块都使用一组标准的包含文件2、程序由多个模块组成,所有模块都使用一组标准的包含文件和相同的编译选项在这种情况下,可以将所有包含文件预编译和相同的编译选项在这种情况下,可以将所有包含文件预编译为一个预编译头为一个预编译头100条经典C语言笔试题目n50、用两个栈实现一个队列的功能?要求给出算法和思路!、用两个栈实现一个队列的功能?要求给出算法和思路! 【参考答案】设【参考答案】设2个栈为个栈为A,B, 一开始均为空一开始均为空. 入队 入队: 将新元素 将新元素push入栈入栈A; 出队 出队: (1)判断栈判断栈B是否为空;是否为空; (2)如果不为空,则将栈如果不为空,则将栈A中所有元素依次中所有元素依次pop出并出并push到栈到栈B;; (3)将栈将栈B的栈顶元素的栈顶元素pop出;出;100条经典C语言笔试题目n51、对于一个频繁使用的短小函数、对于一个频繁使用的短小函数,在在C语言中应用什么实现语言中应用什么实现,在在C++中应用什么实现中应用什么实现? 【标准答案】【标准答案】c用宏定义,用宏定义,c++用用inline100条经典C语言笔试题目n52、、 1. 用预处理指令用预处理指令#define 声明一个常数,用以表明声明一个常数,用以表明1年中有年中有多少秒(忽略闰年问题)多少秒(忽略闰年问题) 【参考答案】【参考答案】#define SECONDS_PER_YEAR (60 * 60 * 24 * 365)UL 100条经典C语言笔试题目n53、、 Typedef 在在C语言中频繁用以声明一个已经存在的数据类型语言中频繁用以声明一个已经存在的数据类型的同义字。
也可以用预处理器做类似的事例如,思考一下下面的同义字也可以用预处理器做类似的事例如,思考一下下面的例子:的例子: #define dPS struct s * typedef struct s * tPS; 以上两种情况的意图都是要定义以上两种情况的意图都是要定义dPS 和和 tPS 作为一个指向结构作为一个指向结构s指针哪种方法更好呢?(如果有的话)为什么?指针哪种方法更好呢?(如果有的话)为什么? 【参考答案】这是一个非常微妙的问题,任何人答对这个问题(正当的原【参考答案】这是一个非常微妙的问题,任何人答对这个问题(正当的原因)是应当被恭喜的答案是:因)是应当被恭喜的答案是:typedef更好思考下面的例子:更好思考下面的例子: dPS p1,p2; tPS p3,p4;第一个扩展为第一个扩展为 struct s * p1, p2;上面的代码定义上面的代码定义p1为一个指向结构的指,为一个指向结构的指,p2为一个实际的结构,这也许为一个实际的结构,这也许不是你想要的第二个例子正确地定义了不是你想要的第二个例子正确地定义了p3 和和p4 两个指针两个指针100条经典C语言笔试题目n54、在、在 C++ 程序中调用被程序中调用被 C 编译器编译后的函数,为什么要加编译器编译后的函数,为什么要加 extern “C”?? 【标准答案】【标准答案】C++语言支持函数重载,语言支持函数重载,C 语言不支持函数重载。
函语言不支持函数重载函数被数被 C++编译后在库中的名字与编译后在库中的名字与 C 语言的不同假设某个函数的语言的不同假设某个函数的原型为:原型为: void foo(int x, int y); 该函数被该函数被 C 编译器编译后在库编译器编译后在库中的名字为中的名字为_foo,而,而 C++编译器则会产生像编译器则会产生像_foo_int_int 之类的之类的名字 C++提供了提供了 C 连接交换指定符号连接交换指定符号 extern“C”来解决名字匹来解决名字匹配问题 100条经典C语言笔试题目n55、请简述以下两个、请简述以下两个 for 循环的优缺点循环的优缺点100条经典C语言笔试题目 【标准答案】【标准答案】100条经典C语言笔试题目n56、语句、语句for( ;;1 ;;)有什么问题?它是什么意思?有什么问题?它是什么意思? 【标准答案】死循环,和【标准答案】死循环,和while(1)相同100条经典C语言笔试题目n57、、 do……while和和while……do有什么区别?有什么区别? 【标准答案】前一个循环一遍再判断,后一个判断以后再循环标准答案】前一个循环一遍再判断,后一个判断以后再循环。
100条经典C语言笔试题目n58、请写出下列代码的输出内容、请写出下列代码的输出内容#include
标准答案】把循环语句内外换一下100条经典C语言笔试题目n62、以下是求一个数的平方的程序、以下是求一个数的平方的程序,请找出错误请找出错误:#define SQUARE(a)((a)*(a))int a=5;int b;b=SQUARE(a++); 【标准答案】宏在预编译时会以替换的形式展开,仅仅会替换涉【标准答案】宏在预编译时会以替换的形式展开,仅仅会替换涉及到宏的地方,不要用及到宏的地方,不要用++ --,标准中对此没有规定,因此最终结,标准中对此没有规定,因此最终结果将会依赖于不同的编译器执行程序的答案可能是果将会依赖于不同的编译器执行程序的答案可能是25、也有可、也有可能是能是36100条经典C语言笔试题目n63、、#define Max_CB 500void LmiQueryCSmd(Struct MSgCB * pmsg){unsigned char ucCmdNum;...... for(ucCmdNum=0;ucCmdNum 编写死循环 【标准答案】【标准答案】while(1){}或者或者for(;;)100条经典C语言笔试题目n65、程序输出结果、程序输出结果 是?是?n【标准答案】【标准答案】8,,10,,12,,14,,16100条经典C语言笔试题目n66、、 【标准答案】【标准答案】16100条经典C语言笔试题目n67、、 int modifyvalue() { return(x+=10);}int changevalue(int x){ return(x+=1);}void main(){ int x=10; x++; changevalue(x); x++; modifyvalue(); printf("First output:%dn",x); x++; changevalue(x); printf("Second output:%dn",x); modifyvalue(); printf("Third output:%dn",x);}输出输出?【【 标准答案】标准答案】12、、13、、13100条经典C语言笔试题目n68、不能做、不能做switch()的参数类型是:的参数类型是: 【标准答案】【标准答案】switch的参数不能为实型。 的参数不能为实型100条经典C语言笔试题目n69、请写出下列代码的输出内容、请写出下列代码的输出内容##i nclude 具代表事实是,产生了一个新的关键字支持中断具代表事实是,产生了一个新的关键字 __interrupt下面的代码就使用了下面的代码就使用了__interrupt关键字去定义了一个中断关键字去定义了一个中断服务子程序服务子程序(ISR),请评论一下这段代码的请评论一下这段代码的interrupt double compute_area (double radius) { double area = PI * radius * radius; printf(" Area = %f", area); return area; } 【参考答案】这个函数有太多的错误了,以至让人不知从何说起了:【参考答案】这个函数有太多的错误了,以至让人不知从何说起了: 1). ISR 不能返回一个值如果你不懂这个,那么你不会被雇用的不能返回一个值如果你不懂这个,那么你不会被雇用的 2). ISR 不能传递参数如果你没有看到这一点,你被雇用的机会等同第不能传递参数如果你没有看到这一点,你被雇用的机会等同第一项 3). 在许多的处理器在许多的处理器/编译器中,浮点一般都是不可重入的。 有些处理器编译器中,浮点一般都是不可重入的有些处理器/编编译器需要让额处的寄存器入栈,有些处理器译器需要让额处的寄存器入栈,有些处理器/编译器就是不允许在编译器就是不允许在ISR中做中做浮点运算此外,浮点运算此外,ISR应该是短而有效率的,在应该是短而有效率的,在ISR中做浮点运算是不明中做浮点运算是不明智的 4). 与第三点一脉相承,与第三点一脉相承,printf()经常有重入和性能上的问题如果你丢掉经常有重入和性能上的问题如果你丢掉了第三和第四点,我不会太为难你的不用说,如果你能得到后两点,那了第三和第四点,我不会太为难你的不用说,如果你能得到后两点,那么你的被雇用前景越来越光明了么你的被雇用前景越来越光明了100条经典C语言笔试题目n73、下面的代码输出是什么,为什么?、下面的代码输出是什么,为什么?void foo(void) { unsigned int a = 6; int b = -20; (a+b > 6)? puts("> 6") : puts("<= 6"); }【参考答案】【参考答案】这个问题测试你是否懂得这个问题测试你是否懂得C语言中的整数自动转换原则,我发语言中的整数自动转换原则,我发现有些开发者懂得极少这些东西。 不管如何,这无符号整型问题的答案是现有些开发者懂得极少这些东西不管如何,这无符号整型问题的答案是输出是输出是“>6”原因是当表达式中存在有符号类型和无符号类型时所有的原因是当表达式中存在有符号类型和无符号类型时所有的数都自动转换为无符号类型因此数都自动转换为无符号类型因此-20变成了一个非常大的正整数,所以变成了一个非常大的正整数,所以该表达式计算出的结果大于该表达式计算出的结果大于6这一点对于应当频繁用到无符号数据类型这一点对于应当频繁用到无符号数据类型的嵌入式系统来说是丰常重要的如果你答错了这个问题,你也就到了得的嵌入式系统来说是丰常重要的如果你答错了这个问题,你也就到了得不到这份工作的边缘不到这份工作的边缘100条经典C语言笔试题目n74、评价下面的代码片断:、评价下面的代码片断:unsigned int zero = 0; unsigned int compzero = 0xFFFF; /*1‘s complement of zero */ 【参考答案】对于一个【参考答案】对于一个int型不是型不是16位的处理器为说,上面的代码是不正位的处理器为说,上面的代码是不正确的。 应编写如下:确的应编写如下:unsigned int compzero = ~0;这一问题真正能揭露出应试者是否懂得处理器字长的重要性在我的经这一问题真正能揭露出应试者是否懂得处理器字长的重要性在我的经验里,好的嵌入式程序员非常准确地明白硬件的细节和它的局限,然而验里,好的嵌入式程序员非常准确地明白硬件的细节和它的局限,然而PC机程序往往把硬件作为一个无法避免的烦恼机程序往往把硬件作为一个无法避免的烦恼 到了这个阶段,应试者或者完全垂头丧气了或者信心满满志在必得如到了这个阶段,应试者或者完全垂头丧气了或者信心满满志在必得如果显然应试者不是很好,那么这个测试就在这里结束了但如果显然应果显然应试者不是很好,那么这个测试就在这里结束了但如果显然应试者做得不错,那么我就扔出下面的追加问题,这些问题是比较难的,试者做得不错,那么我就扔出下面的追加问题,这些问题是比较难的,我想仅仅非常优秀的应试者能做得不错提出这些问题,我希望更多看我想仅仅非常优秀的应试者能做得不错提出这些问题,我希望更多看到应试者应付问题的方法,而不是答案不管如何,你就当是这个娱乐到应试者应付问题的方法,而不是答案不管如何,你就当是这个娱乐吧吧…100条经典C语言笔试题目n75、下面的代码片段的输出是什么,为什么?、下面的代码片段的输出是什么,为什么?char *ptr; if ((ptr = (char *)malloc(0)) == NULL) puts("Got a null pointer"); else puts("Got a valid pointer"); 【参考答案】这个你可以先大胆猜测下,然后再用你的编译器尝试【参考答案】这个你可以先大胆猜测下,然后再用你的编译器尝试着编译下着编译下~~100条经典C语言笔试题目欢迎进入欢迎进入C语言程序笔试面试,编写程序代码单元。 语言程序笔试面试,编写程序代码单元100条经典C语言笔试题目n76、编写、编写 strcpy 函数函数 已知已知 strcpy 函数的原型是函数的原型是 char *strcpy(char *strDest, const char *strSrc);其中其中 strDest 是目的字符串,是目的字符串,strSrc 是源字符串是源字符串 ((1)不调用)不调用 C++/C 的字符串库函数,请编写函数的字符串库函数,请编写函数 strcpy n((2))strcpy 能把能把 strSrc 的内容复制到的内容复制到 strDest,为什么还要,为什么还要 char * 类型的返回值?类型的返回值? 100条经典C语言笔试题目n77、写出二分查找的代码、写出二分查找的代码 参考答案】【参考答案】int binary_search(int* arr, int key, int n){ int low = 0; int high = n - 1; int mid; while (low <= high) { mid = (high + low) / 2; if (arr[mid] > k) high = mid - 1; else if (arr[mid] < k) low = mid + 1; else return mid; } return -1;}100条经典C语言笔试题目n78、、请编写一个请编写一个 C 函数,该函数给出一个字节中被置函数,该函数给出一个字节中被置 1 的位的个的位的个数。 数参考答案】【参考答案】unsigned int TestAsOne0(char log) { int i; unsigned int num=0, val; for(i=0; i<8; i++) { val = log >> i; //移位移位 val &= 0x01; //与与1相与相与 if(val) num++; } return num; } 100条经典C语言笔试题目n79、请编写一个、请编写一个 C 函数,该函数将给定的一个字符串转换成整数函数,该函数将给定的一个字符串转换成整数 【参考答案】【参考答案】int Invert(char *str) { int num=0; while(*str!='\0') { int digital=*str-48; num=num*10+digital; str=str+1; } return num; } 100条经典C语言笔试题目n80、请编写一个、请编写一个 C 函数,该函数将给定的一个整数转换成字符串。 函数,该函数将给定的一个整数转换成字符串参考答案】【参考答案】void IntToCharChange(int num, char* pval) { char strval[100]; int i, j; int val0 = 0; int val1 = 0; val0 = num; for(i=0; i<100; i++) { val1 = val0 % 10; //取余取余 val0 = val0 / 10; //取整取整 strval[i] = val1 + 48; //数字数字—字符字符 if(val0 < 10) { i++; strval[i] = val0 + 48; break; } } for(j=0; j<=i; j++) //倒置倒置 pval[j] = strval[i-j]; pval[j] = '\0'; }100条经典C语言笔试题目n81、实现、实现strcmp函数函数 。 参考答案】【参考答案】int mystrcmp(const char* str1, const char* str2){ assert((str1 != NULL) && (str2 != NULL)); int ret = 0; while (!(ret = *(unsigned char*)str1 - *(unsigned char*)str2) && *str2) { str1++; str2++; } if (ret > 0) ret = 1; else if (ret < 0) ret = -1; return ret;}100条经典C语言笔试题目n82、请编写一个、请编写一个 C 函数,该函数将一个字符串逆序函数,该函数将一个字符串逆序 【参考答案】【参考答案】void AntitoneValue(char* father, char* child) { int i; char source[100]; int j = 0; while(father[j]) //放入放入source,,[j]为长度为长度 { source[j] = father[j]; j++; if(j > 99) return; } source[j] = '\0'; for(i=0; i 符,并返回该字符所在位置索引值 【参考答案】【参考答案】int search(char *cpSource, int n, char ch) //起始地址,搜索长度,目标字符起始地址,搜索长度,目标字符{int i;for(i=0; i 的时候,就表明链表当中有环路了 int testLinkRing(Link *head){ Link *t1=head,*t2=head; while( t1->next && t2->next) { t1 = t1->next; if (NULL == (t2 = t2->next->next)) return 0; //无环无环 if (t1 == t2) return 1; } return 0;}100条经典C语言笔试题目n86、有一浮点型数组、有一浮点型数组A,用用C语言写一函数实现对浮点数组语言写一函数实现对浮点数组A进行降进行降序排序序排序,并输出结果并输出结果,要求要以数组要求要以数组A作为函数的入口作为函数的入口.(建议用冒泡建议用冒泡排序法排序法)【参考答案】【参考答案】void BubbleSort(double arr[], int n) { int i,,j;; int exchange = 1;; //交换标志交换标志 for(i=1;i 出这两个函数参考答案】【参考答案】//删除操作删除操作Status ListDelete_DuL(DuLinkList &L,int i,ElemType &e){ if(!(p=GetElemP_DuL(L,i))) return ERROR; e=p->data; p->prior->next=p->next; p->next->prior=p->pror; free(p); return OK;}//插入操作插入操作Status ListInsert_DuL(DuLinkList &L,int i,ElemType &e){ if(!(p=GetElemP_DuL(L,i))) return ERROR; if(!(s=(DuLinkList)malloc(sizeof(DuLNode)))) return ERROR; s->data=e; s->prior=p; p-> next -> prior =s; p->next=s; s->next=p->next->next; return OK;}100条经典C语言笔试题目n88、把一个链表反向、把一个链表反向 。 参考答案】从第一个元素开始,【参考答案】从第一个元素开始,ps指向他,将他(指向他,将他(ps)指向头)指向头节点节点(ps->next = head),将,将ps设为头节点(设为头节点(head = ps;)操作下)操作下一个元素(一个元素(ps = pe->next;)等于是依次将每个元素翻到原头节)等于是依次将每个元素翻到原头节点前面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;}}100条经典C语言笔试题目n89、将二维数组行列元素互换,存到另一个数组中将二维数组行列元素互换,存到另一个数组中参考答案】【参考答案】#include 输入一行字符,统计其中有多少个单词参考答案】【参考答案】#include 位参考答案】【参考答案】main(){unsigned a,b,c,d;scanf("%o",&a);b=a>>4;c=~(~0<<4);d=b&c;printf("%o\n%o\n",a,d);}100条经典C语言笔试题目n94、打印出杨辉三角形(要求打印出、打印出杨辉三角形(要求打印出10行如下图)行如下图)参考答案】【参考答案】main(){ int i,j; int a[10][10]; printf("\n"); for(i=0;i<10;i++) { a[i][0]=1; a[i][i]=1; } for(i=2;i<10;i++) for(j=1;j
串,并输出其长度参考答案】 【参考答案】 main(){ int len; char *str[20]; printf("please input a string:\n"); scanf("%s",str); len=length(str); printf("the string has %d characters.",len); getch();}length(p)char *p;{ int n; n=0; while(*p!='\0') { n++; p++; } return n;}100条经典C语言笔试题目n97、、809*??=800*??+9*??+1 其中其中??代表的两位数代表的两位数,8*??的结果的结果为两位数,为两位数,9*??的结果为的结果为3位数求??代表的两位数,及代表的两位数,及809*??后的结果后的结果参考答案】【参考答案】output(long b,long i){ printf("\n%ld/%ld=809*%ld+%ld",b,i,i,b%i);}main(){ long int a,b,i; a=809; for(i=10;i<100;i++) { b=i*a+1; if(b>=1000&&b<=10000&&8*i<100&&9*i>=100) output(b,i); } getch();}100条经典C语言笔试题目n98、某个公司采用公用传递数据,数据是四位的整数,在传递过程中是、某个公司采用公用传递数据,数据是四位的整数,在传递过程中是加密的,加密规则如下:每位数字都加上加密的,加密规则如下:每位数字都加上5,然后用和除以然后用和除以10的余数代替该数的余数代替该数字,再将第一位和第四位交换,第二位和第三位交换。 字,再将第一位和第四位交换,第二位和第三位交换参考答案】【参考答案】main(){ int a,i,aa[4],t; scanf("%d",&a); aa[0]=a%10; aa[1]=a%100/10; aa[2]=a%1000/100; aa[3]=a/1000; for(i=0;i<=3;i++) { aa[i]+=5; aa[i]%=10; } for(i=0;i<=3/2;i++) { t=aa[i]; aa[i]=aa[3-i]; aa[3-i]=t; } for(i=3;i>=0;i--) printf("%d",aa[i]); getch();}100条经典C语言笔试题目n99、计算字符串中子串出现的次数计算字符串中子串出现的次数参考答案】【参考答案】main(){ char str1[20],str2[20],*p1,*p2; int sum=0; printf("please input two strings\n"); scanf("%s%s",str1,str2); p1=str1;p2=str2; while(*p1!='\0') { if(*p1==*p2) { while(*p1==*p2&&*p2!='\0') { p1++; p2++; } } else p1++; if(*p2=='\0') sum++; p2=str2; } printf("%d",sum); getch();} 100条经典C语言笔试题目n100、有两个磁盘文件、有两个磁盘文件A和和B,各存放一行字母,要求把这两个文件各存放一行字母,要求把这两个文件中的信息合并(按字母顺序排列),输出到一个新文件中的信息合并(按字母顺序排列),输出到一个新文件C中。 中参考答案】【参考答案】100条经典C语言笔试题目main(){ FILE *fp; int i,j,n,ni; char c[160],t,ch; if((fp=fopen("A","r"))==NULL) { printf("file A cannot be opened\n");exit(0); } printf("\n A contents are :\n"); for(i=0;(ch=fgetc(fp))!=EOF;i++) { c[i]=ch;putchar(c[i]); } fclose(fp); ni=i; if((fp=fopen("B","r"))==NULL) { printf("file B cannot be opened\n");exit(0); } printf("\n B contents are :\n"); for(i=0;(ch=fgetc(fp))!=EOF;i++) { c[i]=ch;putchar(c[i]); } fclose(fp); n=i; for(i=0;i












