c语言面试题目100及最佳答案

上传人:无*** 文档编号:84754755 上传时间:2022-05-04 格式:DOC 页数:63 大小:259KB
返回 下载 相关 举报
c语言面试题目100及最佳答案_第1页
第1页 / 共63页
c语言面试题目100及最佳答案_第2页
第2页 / 共63页
c语言面试题目100及最佳答案_第3页
第3页 / 共63页
点击查看更多>>
资源描述
c 语言面试题目 100 及最佳答案作为 IT 行业人士需要掌握的最基本的计算机语言-c 语言,如今的地 位只高不低,c 语言掌握程度的高低往往在面试的时候可以完全表现 出来,而有些问题是大家平时似乎是知道的,但却不能完整准确地回 答上来的,今天大家带来精心整理的 C C 语言经典面试题,希望对大家有 所帮助1、请填写 bool , float ,指针变量与“零值”比较的 if语句提示:这里“零值”可以是 0, 0.0,FALSE 或者“空指针”。例如 int 变量 n 与“零值”比较的 if 语句为:if ( n = 0)if ( n != 0 )以此类推。(1) 请写出 bool flag 与“零值”比较的 if 语句:【标准答案】if ( flag )if ( !flag )100 条经典 C 语言笔试题目(2) 请写出 float x 与“零值”比较的 if 语句:【标准答案】const float EPSINON = 0。00001;if( (x = EPSINON) & (x = EPSINON)不可将浮点变量用“=”或“匸与数字比较,应该设法转化成“ =”或“=此类形式。100 条经典 C 语言笔试题目(3)请写出 char *p 与“零值”比较的 if 语句【标准答案】if ( p = NULL) if ( p != NULL)2、以下为 Linux 下的 32 位 C 程序,请计算 sizeof 的值。char str =“ Hello ”;char 兴 p = str ;i nt n二10;请计算(1) sizeof (str ) =(2)s i zeof ( p ) =(3) sizeof ( n )=【标准答案】(1) 6、(2)4、(3 ) 4(4) void Fu nc ( char str 100)请计算 sizeof( str )=(5 ) void * p = mall oc( 100 );请计算 sizeof ( p )=20【标准答案】(4)4、( 5) 44、用变量 a 给出下面的定义e)一个有 10 个指针的数组,该指针是指向一个整型数的;f)一个指向有 10 个整型数数组的指针;g)个指向函数的指针,该函数有一个整型参数并返回一个整型数;h)个有 10 个指针的数组,该指针指向一个函数,该函数有一个整型参数并返回一个整型数;【标准答案】e)int * a10; f)int (兴 a)10 g)int(兴 a) (int); h) int(*a 10) (int )5、设有以下说明和定义:typedef u nion Iong i ; int k5 ; char c ; DATE;struct data int cat ; DATE cow; double dog ; too;DATE max则语句 printf(%d, sizeof (struct date)+sizeof(max);的执行结果是:_【标准答案】DATE 是一个 union,变量公用空间。里面最大的变量类型是 int5 ,占用 20 个字节。所以它的大小是data 是一个 struct,每个变量分开占用空间。依次为 int4 +DATE20 + double8 = 32.所以结果是 20 + 32 = 52.当然 在某些 16 位编辑器下,int 可能是 2 字节,那么结果是 int2 + DATE10 + double8 = 206、请问以下代码有什么问题:int mai n()char a;char 兴 str= & a;strcpy(str,“ hello ” );prin tf(str);return 0 ;【标准答案】没有为 str 分配内存空间,将会发生异常问题出在将一个字符串复制进一个字符变量指针所指地址。虽然可以正确输出结果,但因为越界进行内在读写而导致程序崩溃。7、请问以下代码有什么问题:char* s= “ AAA ;data 是一个 struct,每个变量分开占用空间。依次为 int4 +printf(%s, s);s0 二 Bprintf (” s,s);有什么错?【标准答案】“ AAA 是字符串常量。s 是指针,指向这个 字符串常量,所以声明 s 的时候就有问题.cos nt char 兴 s= “ AAA ;然后又因为是常量,所以对是 s : 0的赋值操作是不合法 的。8 int (*s 10)(int ) 表示的是什么啊【标准答案】int (*s10 )(int )函数指针数组,每个指针指向一个 int func(intp aram ) 的函数.9、 c 和 C+中的 struct 有什么不同?【标准答案】c 和 c+中 struct 的主要区别是 c 中的 struct不可以含有成员函数,而 c+中的 struct 可以。c+中 struct 和 class 的主要区别在于默认的存取权限不同,struct 默认为 public ,而 class 默认为 private10、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 操作很危险。11、char szstr10 ;strcpy(szstr,“ 0123456780);产生什么结果?为什么?【标准答案】长度不一样,出现段错误。100 条经典 C 语言笔试题目12、数组和链表的区别?【标准答案】数组:数据顺序存储,固定大小;链表:数据可以随机存储,大小可动态改变13、void main ()char aa10 ;printf (“ %d , strlen(aa);会出现什么问题?打印结果是是多少?【标准答案】sizeof ()和初不初始化,没有关系 strlen ()和初始化有关,打印结果值未知。14、给定结构 struct Achar t:4;char k : 4;unsigned short i: 8;un sig ned long m;问 sizeof(A ) = ?【标准答案】815、struct name1char str;short x ;int num ; 求 sizeof (name1 ?【标准答案】816、struct name2char str ;int num ;short x ;求 sizeof(name2 ) ?【标准答案】1217、程序哪里有错误wap( int 兴 p1,int* p2)int 兴 p;兴 p = *p1;兴 p1 = *p2;兴 p2 =兴 p;【标准答案】p 为野指针19、(void)ptr 和(void*兴)ptr 的结果是否相同?其 中 ptr 为同一个指针.【标准答案】(void) ptr 和(void*) ) ptr 值是相同的20、要对绝对地址 0 x100000 赋值,我们可以用(unsigned int* ) 0 x100000 = 1234;那么要是想让程序跳转到绝对地址是0 x100000 去执行,应该怎么做?【标准答案】(void ()( ) ) 0 x100000 )();首先要将 0 x100000 强制转换成函数指针,即:(void (*)() )0 x100000然后再调用它:(void ()()0 x100000)();22、关于内存的思考题(1)你能看出有什么问题?23、关于内存的思考题 你能看出有什么问题?25、关于内存的思考题(3)你能看出有什么问题?26、关于内存的思考题(4 )你能看出有什么问题?27、 关键字 volatile 有什么含意? 并给出三个不同的例 子。【参考答案】一个定义为 volatile的变量是说这变量可能会被意想不到地改变,这样,编译器就不会去假设 这个变量的值了。精确地说就是,优化器在用到这个 变量时必须每次都小心地重新读取这个变量的值,而 不是使用保存在寄存器里的备份.下面是 volatile 变量 的几个例子:1) 。并行设备的硬件寄存器(如:状态寄存器)2). 一个中断服务子程序中会访问到的非自动变量(Non automatic variables)3) 。多线程应用中被几个任务共享的变量【标准答案】:(1)可以定义 const 常量28、嵌入式系统经常具有要求程序员去访问某特定的内存位置的特点.在某工程中,要求设置一绝对地址 为 0 x67a9 的整型变量的值为 0 xaa66.编译器是一个纯 粹的 ANSI 编译器。写代码去完成这一任务。【参考答案】这一问题测试你是否知道为了访问一绝对 地址把一个整型数强制转换(typecast )为一指针是合 法的.这一问题的实现方式随着个人风格不同而不同 。典型的类似代码如下:int 兴 ptr ;ptr= (int 兴)0 x67a9;*ptr = 0 xaa55 ;29、 头文件中的 ifndef/define/endif干什么用?【标准答案】防止该头文件被重复引用。30、# in elude 禾口# in elude“filename.h ”有什么区别?【标准答案】对于#inelude ,编译器从标准库路径开始搜索 file name。h ;对于#in elude“ file name。h” ,编译器从用户的工作路径开始搜索 file name。h。31、const 有什么用途?(请至少说明两种)(2)const 可以修饰函数的参数、 返回值, 甚至函数 的定义体。 被 const修饰的东西都受到强制保护,可 以预防意外的变动,能提高程序的健壮性。32、static 有什么用途?(请至少说明两种)【标准答案】1.限制变量的作用域(static 全局变量);2.设置变量的存储域(static 局部变量).33、堆栈溢出一般是由什么原因导致的?【标准答案】没有回收垃圾资源。34、如何引用一个已经定义过的全局变量?【标准答案】可以用引用头文件的方式,也可以用 extern 关键字,如果用引用头文件方式来引用某个在 头文件中声明的全局变理,假定你将那个变量写错了 ,那么在编译期间会报错,如果你用 extern 方式引用 时,假定你犯了同样的错误,那么在编译期间不会报 错,而在连接期间报错。35、全局变量可不可以定义在可被多个.C 文件包含的 头文件中?为什么?【标准答案】可以,在不同的 C 文件中以 static 形式来声 明同名全局变量。可以在不同的 C 文件中声明同名的全局变量,前提是其中只能有一个 C 文件中对此变量赋初 值,此时连接不会出错。36、队列和栈有什么区别?【标准答案】队列先进先出,栈后进先出。37、Heap 与 stack 的差别。【标准答案】Heap 是堆,stack 是栈。Stack 的空间由操作系统自动分配/释放,Heap 上的空 间手动分配/释放.Stack 空间有限,Heap 是很大的自由存储区C 中的 malloc 函数分配的内存空间即在堆上,C+中对 应的是 new 操作符.程序在编译期对变量和函数分配内存都在栈上进行,且 程序运行过程中函数调用时参数的传递也在栈上进行。38、用宏定义写出 swap(x, y),即交换两数。【标准答案】# define swap(x, y) (x) = (x) +(y) ; (y) = (x) - (y) ; (x)=(x )-(y);39、写一个“标准”宏,这个宏输入两个参数并返回较 小的一个。【标准答案】#define Min(X , Y)(X) (Y) ? (Y) :(X)结没有;40、 带参宏与带参函数的区别(至少说出 5 点)? 【标准答案】带参宏带参函数处理时间编译时运行时参数类型无需定义程序长度变长不变占用存储空间否是运行时间 不占运行时间 调用和返回时占41、 关键字 volatile有什么含意?【标准答案】 提示编译器对象的值可能在编译器未监测 到的情况下改变。42、int main()int x=3;printf (”d,x);return 1;问函数既然不会被其它函数调用,为什么要返回 1?【标准答案】mian 中,c 标准认为 0 表示成功,非 0 表示 错误.具体的值是某中具体出错信息。43、 已知一个数组 tabl e,用一个宏定义,求出数据的 元素个数.【标准答案】#define NTBL ( table) (sizeof ( table)/sizeof ( table0)44、A。c 和 B。c 两个 c 文件中使用了两个相同名字的 static 变量,编译的时候会不会有问题?这两个 static 变量 会保存到哪里(栈还是堆或者其他的)?【标准答案】static 的全局变量,表明这个变量仅在本 模块中有意义,不会影响其他模块.他们都放在静态数据区,但是编译器对他们的命名是 不同的。如果要使变量在其他模块也有意义的话,需要使用 exter n 关键字。45、static 全局变量与普通的全局变量有什么区别?【标准答案】static 全局变量只初使化一次,防止在其 他文件单元中被引用;46、static 局部变量和普通局部变量有什么区别【标准答案】static 局部变量只被初始化一次,下一次 依据上一次结果值;47、static 函数与普通函数有什么区别?【标准答案】static 函数在内存中只有一份,普通函数在每个被调用中维持一份拷贝 关于 45 47 的参考文章全局变量(外部变量)的说明之前再冠以 static 就构成了静态的全 局变量。全局变量本身就是静态存储方式,静态全局变量当然也是静态存储 方式。这两者在存储方式上并无不同。 这两者的区别虽在于非静态全局 变量的作用域是整个源程序,当一个源程序由多个源文件组成时, 非静 态的全局变量在各个源文件中都是有效的。 而静态全局变量则限制了其 作用域,即只在定义该变量的源文件内有效, 在同一源程序的其它源文 件中不能使用它。由于静态全局变量的作用域局限于一个源文件内, 只能为该源文件内的函数公用,因此可以避免在其它源文件中引起错 误。从以上分析可以看出,把局部变量改变为静态变量后是改变了它的存 储方式即改变了它的生存期。把全局变量改变为静态变量后是改变了它 作用域,限制了它的使用范围.static 函数与普通函数作用域不同。仅在本文件。只在当前源文件 中使用的函数应该说明为内部函数(static),内部函数应该在当前源文 件中说明和定义。对于可在当前源文件以外使用的函数,应该在一个头文件中说明,要使用这些函数的源文件要包含这个头文件。48、程序的局部变量存在于中,全局变量存在于中,动态申请数据存在于中。【标准答案】程序的局部变量存在于栈(stack)中,全局变量存在于静态数据区中,动态申请数据存在于堆(heap)中.49、什么是预编译,何时需要预编译:【标准答案】1、总是使用不经常改动的大型代码体。2、程序由多个模块组成,所有模块都使用一组标准的包含文件和相同的编译选项.在这种情况下,可以将所有包含文件预编译为一个预编译头.50、用两个栈实现一个队列的功能?要求给出算法和 思路!【参考答案】设 2 个栈为 A, B,一开始均为空。入队:将新元素 push 入栈 A;出队:(1 )判断栈 B 是否为空;如果不为空,则将栈 A 中所有元素依次 pop 出并push 到栈 B;(3)将栈 B 的栈顶元素 pop 出;51、对于一个频繁使用的短小函数,在 C 语言中应用什 么实现,在 C+中应用什么实现?【标准答案】c 用宏定义,C+用 inline52、1。 用预处理指令#define声明一个常数, 用以表 明1年中有多少秒(忽略闰年问题)【参考答案】# define SECONDS_PER_YEAR (60 * 6024 兴 365) UL53、Typedef 在 C 语言中频繁用以声明一个已经存在的 数据类型的同义字。也可以用预处理器做类似的事。例 如,思考一下下面的例子:#defi ne dPS struct s *typedef struct s * tPS;以上两种情况的意图都是要定义 dPS 和 tPS 作为一个指向结构 s 指针。哪种方法更好呢?(如果有的话)为什么?【参考答案】这是一个非常微妙的问题,任何人答对这个问题(正当 的原因)是应当被恭喜的.答案是:typedef 更好。思考下面的例子:dPS p 1,p2;tPS p3,p4;第一个扩展为struct s 兴 pl , p2 ;上面的代码定义 pl 为一个指向结构的指,p2 为一个实际的结构,这 也许不是你想要的第二个例子正确地定义了 p3 和 p4 两个指针。54、在 C+程序中调用被 C 编译器编译后的函数,为什么要加 extern“ C ?【标准答案】C+语言支持函数重载,C 语言不支持函数重载。函数被 C+编译后在库中的名字与 C 语言的不同。假设某个函数的原型为:void foo(int x, int y );该函数被 C 编译器编译后在库中的名字为_foo,而C+编译器则会产生像_foont_int 之类的名字。C+提供了 C 连接交换指定符号 extern “ C”来解决名字匹配问题。55、请简述以下两个 for 循环的优缺点。【标准答案】56、语句 for( ;1 ;)有什么问题?它是什么意思?【标准答案】死循环,和 while(1)相同。57、 do.while 和 while.do 有什么区别?【标准答案】前一个循环一遍再判断,后一个判断以后 再循环。58、请写出下列代码的输出内容#include stdio。hint mai n()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, 12059、unsigned char 兴 pl;unsigned long兴 p2;p1= (unsigned char *) 0 x801000;p2=(unsigned long*) 0 x810000;请问 p1+5=;p2+5=;【标准答案】0 x801005、0 x81002060、main()int a : 5=1,2 , 3,4,5;int 兴 ptr=(int兴)(& a+1);printf( “ d, %d”,(a+1),(ptr 1);请问输出:【标准答案】2, 561、请问下面程序有什么错误?int a : 60 250 1000 , i , j , k;for (k=0; k=1000; k+) for(j=0 ; j250;j+)for(i=0;i60;i+)a : i j k =0;【标准答案】把循环语句内外换一下。62、以下是求一个数的平方的程序,请找出错误:#define SQUARE (a)( (a)*( a)int a=5 ;int b ;b=SQUAREa+);【标准答案】宏在预编译时会以替换的形式展开,仅仅 会替换。涉及到宏的地方,不要用+士一,标准中对此 没有规定,因此最终结果将会依赖于不同的编译器 . 执行程序的答案可能是 25、也有可能是 36。63、# define Max_CB 500void LmiQueryCSmd (StructMSgCB 兴 pmsg)un sig ned char ucCmdNum;for(ucCmdNum=0;ucCmdNumMax_CBcCmdNum+)这段代码执行有什么问题?【标准答案】死循环unsigned char /无符号字符型表示范围 0255char /有符号字符型 表示范围-12812764、嵌入式系统中经常要用到无限循环,你怎么用 C 编写死循环。【标准答案】while(1) 或者 for (; ?100 条经典 C 语言笔试题目65、程序输出结果是?【标准答案】8 ,10,12 , 14, 1666、【标准答案】1667、int modifyvalue( )retur n (x+=10);int c han gevalue(i nt x )return (x+=1);void m ai n( )int x =10;x+;changevalue (x);x+;modifyvalue ();printf (“ First output : %dn”,x);x+;cha ngevalue(x);printf( “Second output :% dn”,x ); modifyvalue ();printf (“ Thirdoutput: % dn”,x );输出?【标准答案】12、13、1368、不能做 switch ()的参数类型是:【标准答案】switch 的参数不能为实型69、请写出下列代码的输出内容#i n cludemain ()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, 12070、找出程序的错误。【标准答案】71、一语句实现 x 是否为 2 的若干次幕的判断。【参考答案】void mai n()i nt a;scanf( “d, &a);printf( “ c,(a) & (a-1)? n: y ) ; II 若是打印 y,否则 n72、中断是嵌入式系统中重要的组成部分,这导致了很多编译开发商 提供一种扩展一让标准 C 支持中断。具代表事实是,产生了一个新的 关键字_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 ()经常有重入和性能上的问题 如果你丢掉了第三和第四点,我不会太为难你的.不用说,如果你能得到后两点, 那么你的被雇用前景越来越光明了。73、下面的代码输出是什么,为什么?void foo(void )un sig ned int a = 6;int b = 20;(a+b 6)? puts ( 6 ” ) : puts (6” .原因是当表达式中存在有符号类型和无符号类型 时所有的数都自动转换为无符号类型。因此一 20 变成了一个非常大的正整 数,所以该表达式计算出的结果大于 6 .这一点对于应当频繁用到无符号数据类 型的嵌入式系统来说是丰常重要的。 如果你答错了这个问题,你也就 到了得不到这份工作的边缘。74、评价下面的代码片断:un sig ned int zero = 0;un sig ned int compzero = OxFFFF ;/ 兴 1 s complement of zero 兴 /【参考答案】对于一个 int 型不是 16 位的处理器为说,上面的代码 是不正确的。应编写如下:un sig ned int compzero = 0;这一问题真正能揭露出应试者是否懂得处理器字长的重要性.在我的 经验里,好的嵌入式程序员非常准确地明白硬件的细节和它的局限,然而PC 机程序往往把硬件作为一个无法避免的烦恼。到了这个阶段,应试者或者完全垂头丧气了或者信心满满志在必得。如果显然应试者不是很好,那么这个测试就在这里结束了。但如果显然 应试者做得不错,那么我就扔出下面的追加问题,这些问题是比较难的,我想仅仅非常优秀的应试者能做得不错.提出这些问题,我希望更多 看到应试者应付问题的方法,而不是答案。不管如何,你就当是这个娱 乐吧75、下面的代码片段的输出是什么,为什么?char 兴 ptr ;if ( ptr = (char 兴)malloc(0 ) ) = NULL)puts( “ Gota null poin ter ”);elseputs( “ Gota valid pointer ”);【参考答案】这个你可以先大胆猜测下,然后再用你的编译器尝试着编译下 100 条经典 C 语言笔试题目欢迎进入 C 语言程序笔试面试,编写程序代码单元。76、编写 strcpy 函数已知 strcpy 函数的原型是 char 兴 strcpy(char 兴 strDest, con st char 兴strSrc );其中 strDest 是目的字符串,strSrc 是源字符串。(1)不调用 C+/C 的字符串库函数,请编写函数strcpy(2)strcpy 能把 strSrc 的内容复制到 strDest,为什么还要 char 兴 类型的返回值?77、写出二分查找的代码。【参考答案】 int b in ary_search (int* arr, i nt k eyint low = 0;int h igh = n 1 ;int m id;while (low k)high = mid -1;else if (arrmid k )low = mid + 1;elsereturn mid ;return 1;,int n)78、请编写一个 C 函数,该函数给出一个字节中被置 1 的位的个数.【参考答案】un sig ned int T estAs On eO(char log )int i;un sig ned int num=0, val;for(i=0; i i; /移位val &二0 x01; / 与 1 相与if (val )nu m+;return num;79、请编写一个 C 函数,该函数将给定的一个字符串 转换成整数。【参考答案】int Invert (char* str) int num =0 ;while (兴 str!二0)int d igital二str-48 ;num=num)+digital;str=st叶1;return num;80、请编写一个 C 函数,该函数将给定的一个整数转 换成字符串。【参考答案】void IntToCharChange (int num,char* pval)char strval 100;int i , j ;in t val0 = 0;in t val1 = 0;val0 = num;for(i=0 ; i100; i+)val1 = val0 % 10 ; / 取余 val0 = val0 / 10; / 取整strval i = vail + 48; /数字一字符if(valO 10)i+ ;strvali = val0 + 48;break ;for(j=0; j 0)ret = 1;else if (ret0 )ret = -1;return ret;82、请编写一个 C 函数,该函数将一个字符串逆序【参考答案】void An tit on eValue( cha r* father, char* child)int i ;char source 100;int j = 0;while(fatherj) / 放入 source , j 为长度sourcej = fatherj ;j+;if(j 99)return;sourcej= 0 ;for(i=0 ;ij ; i+ )child : i: =source j-i 1 ; / 反序childi= 0 ;83、请编写一个 C 函数,该函数在给定的内存区域搜 索给定的字符,并返回该字符所在位置索引值.【参考答案】int s earch ( char 兴 cpSource , intn , char ch) / 搜索长度,目标字符int i ;for (i=0; in & * (cpSource+i) ! = ch; +i ) return i ;84、请编写一个 C 函数,该函数在一个字符串中找到 可能的最长的子字符串,该字符串是由同一字符组成 的。【参考答案】int C hildString(char兴 p) / 自己写起始地址,charq =p;int s tringlen=0, i=0, j=1 , len=0, maxlen=1;while (q! = 0 ) / 不能用 strlen,求得长度 stringlenStri ngle n+ ;q+;while( iString len )if (p+i)=(p+j) & & jmaxle n)/统计最大子串长度maxle n=len+1 ;len=0 ;else len=O;i+;j+ ;retu rn ma xle n;85、华为面试题:怎么判断链表中是否有环?【参考答案】答:用两个指针来遍历这个单向链表,第 一个指针 pl,每次走一步;第二个指针 p2,每次走两 步;当 p2 指针追上 pl 的时候,就表明链表当中有环 路了.int testLinkRing( Link 兴 head)Link *t 仁 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;86、有一浮点型数组 A,用 C 语言写一函数实现对浮点 数组 A 进行降序排序,并输出结果,要求要以数组 A 作为 函数的入口 .(建议用冒泡排序法)【参考答案】void BubbleSort(double a rr 口,int n )int i,j ;int e xchange = 1; / 交换标志for(i=1 ; i n;i+ ) / 最多做 n-1 趟排序exchange=0 ; /本趟排序开始前,交换标志应为假for(j=n-1;j =i ; j -) /对当前无序区 Rin自下向上扫描if (arr j+1 arr j )/交换记录arr 0=arr j+1 ; R0 不是哨兵,仅做暂存单元arrj+1=arrj ;arr j =arr0;exchange=1 ; /发生了交换,故将交换标志置为真if(!exchange) /本趟排序未发生交换,提前终止算法return ; /endfor(外循环)87、实现双向链表删除一个节点 P,在节点 P 后插入一个节点,写出这两个函数.【参考答案】/删除操作Status ListDelete_DuL(DuLinkList &L , inti ,Ele mType & e)if (!(p=G e tElemP_DuL (L, i) return ERROR;e=p- data;p- prior- next=p next;p- next- prior二p-pror;free ;return OK ;/插入操作Status ListI nsert_DuL (DuLin kList & L,i nti,ElemType& e)if (!( p=G e tElemP_DuL (L,i)return ERROR;if (!( s=(DuLinkList)malloc(sizeof(DuLNode)return ERROR;s-data=e;s pri or =p;pnext - prior =s;pn ext=s ;s next=p-next- next;return OK ;88、把一个链表反向。【参考答案】从第一个元素开始,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;89、将二维数组行列元素互换,存到另一个数组中【参考答案】# in elude main () int a 23 = 1, 2,3 , 4,5,6 ;int b32, i , j;printf(“ array a :n ”);for (i=0;imain ()char str i ng81;int i , num=Q word=0;char c;gets (string);for(i=0;(c=stringi ) ! = 0 ; i+ )if(c=)word=0;else if (word=0)word=1; num+; printf( “There are %d word s in the linen ”,num)91、写一个内存拷贝函数,不用任何库函数.就是前些时 候本版讨论的那个问题。【参考答案】void 兴 m e mcpy(void* pvTo, const void 兴 pvFrom, size_tassert (pvTo != NULL ) &(pvFrom ! = NULL);byte* pbTo= pvTo ;byte 兴 pbFrom = pbFrom ;while (size- 0 )兴 pbTo+ = *pbFrom+;return pvTo;92、有 1、2、3、4 个数字,能组成多少个互不相同且 无重复数字的三位数?都是多少?【参考答案】# inc lude “stdio.h ”#include“ conio。h”main ()size ) int i,j , k;printf( ” n ” );for (i=1;i5;i+)/*以下为三重循环*/for (j=1;j5;j+)for (k=1;k 4;c=(04);d=b&c;printf( % on % on ” ,a,d);94、打印出杨辉三角形(要求打印出 10 行如下图)O【参考答案】mai n()int i,j;int a 10: 10;printf (n ”);for (i=0 ; i 10;i+)a : i 0=1 ;ai i=1 ;for (i=2;i10;i+)for(j=1;j i;j+)ai: j =ai 1 j 1 +ai 1 :j;for(i=0;i10; i+)for(j=0;j=i;j+)printf( ” %5d, ai j );printf( ” n ”);getch ();95、实现 strcmp 函数。100 条经典 C 语言笔试题目96、 写一个函数,求一个字符串的长度,在main 函数 中输入字符串,并输出其长度。【参考答案】mai n()in tle n;char 兴 s tr20;printf( “ please in put a stri ng: n);scanf (” %s, str);len=le ngth(str);printf (“ the s tring has % d characters. ”, len ) getch ();length char *p;int n ;n=0;while (*p ! = 0)n+;P+;return n;97、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=ia+1;if(b=1000&b =100)output (b, i );getch ();98、 某个公司采用公用电话传递数据, 数据是四位的整数, 在 传递过程中是加密的,加密规则如下:每位数字都加上 5, 用和除以 10的余数代替该数字,再将第一位和第四位交换,J二位和第三位交换。【参考答案】main ()int a , i , aa4,t ;scanf (” d ”,& a);aa0=a % 10;aa1=a %100/10;aa :2 =a % 1000/100;aa : 3 =a /1000;for (i=0 ; i=0;i-)prin tf (” % d , a i);getch ();99、计算字符串中子串出现的次数。【参考答案】mai n()char str120,str220 ,*p1 , *p2 ;int sum=0;printf (“ please in put two stringsn ”);scanf( ” %s s, str1,st;p1=str1;p2=str2;while(*p1!= 0 )if (兴 p仁二*p2)while(玄p仁二*p2&*p2! = 0)P1+;P2+;elseP1+;if(*p2=0)sum+p2=str2;printf( ” %d ,sum);getch();100、有两个磁盘文件 A 和 B,各存放一行字母,要求把 这两个文件中的信息合并(按字母顺序排列),输出 到一个新文件 C 中.【参考答案】100 条经典 C 语言笔试题目 mai n()FILE伙fp;in t i,j,n, ni ;char c160, t , ch;if(fp=fopen(“A, “r “)=NULLprintf(“file A cannot be openedn”);exit (0);printf (” nA contents are : n ”);for(i=0; (ch=fgetc (fp)匸 EOF ; i+)ci=ch;pu tchar(ci );fclose (fp );ni=i;if (fp=fopen (“ B”, “ r“)=NULL)printf(“file B cannot be openedn”);exit(0);printf( ” nB contents are : n ”);for (i=0;(ch=fgetc(fp ) )! =EOF ; i+ )
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 压缩资料 > 基础医学


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!