ImageVerifierCode 换一换
格式:DOCX , 页数:41 ,大小:86.60KB ,
资源ID:20434693      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/20434693.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(培训用C面试经典题目Word格式.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

培训用C面试经典题目Word格式.docx

1、main() int M,N,x,i; struct stu *p,*q; printf(please scanf M and N (Mnext; q=p-%dn,q-data) ; p-next = p-next- free(q) ; x-; getch();2、有一个16位的整数,每4位为一个数,写函数求他们的和。解释:整数110101*1和 1101+0101+1011+0111感觉应该不难,当时对题理解的不是很清楚,所以写了一个函数,也不知道对不对。疑问: 既然是16位的整数,110101*1是2进制的,那么函数参数怎么定义呢,请大虾指教。答案:用十进制做参数,计算时按二进制考虑。/*

2、 n就是16位的数,函数返回它的四个部分之和 */char SumOfQuaters(unsigned short n) char c = 0; int i = 4; do c += n & 15; n = n 4; while (-i); return c;3、有1,2,.一直到n的无序数组,求排序算法,并且要求时间复杂度为O(n),空间复杂度O(1),使用交换,而且一次只能交换两个数.(华为)#includeint main() int a = 10,6,9,5,2,8,4,7,1,3; int len = sizeof(a) / sizeof(int); int temp; for(in

3、t i = 0; i len; )temp = aai - 1;aai - 1 = ai;ai = temp;if ( ai = i + 1) i+; for (int j = 0; j j+) coutajwhile(q!=NULL)r=q-q-next=p;p=q;q=r;head-head=p;return head;9、写出下列代码的输出内容 int 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) (in

4、t*,int*,int*); void show(FUNC2 fun,int arg1, int*arg2) FUNC1 p=&inc; int temp =p(arg1); fun(&temp,&arg1, arg2); printf(%dn,*arg2); main() int a; /局部变量a为0; show(multi,10,&a); 答:110 10、请找出下面代码中的所有错误 (题目不错,值得一看)说明:以下代码是把一个字符串倒序,如“abcd”倒序后变为“dcba” #includestring.h main() char*src=hello,worldchar* dest=N

5、ULL;int len=strlen(src);dest=(char*)malloc(len);char* d=dest;char* s=srclen; while(len-!=0) d+=s-;printf(%s,dest);return 0; 答:方法1:一共有4个错误;int main() char* src = int len = strlen(src);char* dest = (char*)malloc(len+1);/要为分配一个空间 char* d = dest;char* s = &srclen-1; /指向最后一个字符while( len- != 0 ) *d+=*s-;*

6、d = 0; /尾部要加0 %snfree(dest); / 使用完,应当释放空间,以免造成内存汇泄露 dest = NULL; /防止产生野指针 方法2: (方法一需要额外的存储空间,效率不高.)不错的想法string.hchar str=int len=strlen(str);char t;for(int i=0; ilen/2; i+)t=stri;stri=strlen-i-1; /小心一点strlen-i-1=t;,str);1. 用宏定义写出swap(x,y)答#define swap(x, y)x = x + y;y = x - y;x = x - y;2.数组aN,存放了1至N

7、-1个数,其中某个数重复一次。写一个函数,找出被重复的数字.时间复杂度必须为o(N)函数原型:int do_dup(int a,int N)答:int do_dup(int a,int N) /未经调试 int sun = 0; int sum2; for(int i=0;N;+i) Sum+=ai; Sum2 = (1+N-1)*N/2; Return (sum-sum2);下述三个有什么区别?char * const p;char const * pconst char *p解答: /常量指针,p的值不可以修改char const * p;/指向常量的指针,指向的常量值不可以改const

8、char *p; /和char const *p3. 解释下列输出结果char str1 = abcchar str2 = const char str3 = const char str4 = const char *str5 = const char *str6 = char *str7 = char *str8 = cout ( str1 = str2 ) endl; ( str3 = str4 ) ( str5 = str6 ) ( str7 = str8 ) (Y)?(Y):(X) /结尾没有;1.有以下表达式:int a=248; b=4;int const c=21;const

9、int *d=&int *const e=&b;int const *f const =&请问下列表达式哪些会被编译器禁止?为什么?*c=32;d=&*d=43;e=34;e=&f=0x321f;*c 这是个什么东东,禁止*d 说了是const, 禁止e = &a 说了是const 禁止const *f const =& 禁止 4.#include void getmemory(char *p)p=(char *) malloc(100);int main( )char *str=NULL;getmemory(str);strcpy(p,hello world%s/nfree(str); 程序

10、崩溃,getmemory中的malloc 不能返回动态内存, free()对str操作很危险3. 数组越界问题 (这个题目还是有点小险的)下面这个程序执行后会有什么错误或者效果:#define MAX 255unsigned char AMAX,i;for (i=0;=MAX;Ai=i;MAX=255,数组A的下标范围为:0.MAX-1,这是其一,其二 当i循环到255时,循环内执行: A255=255;这句本身没有问题,但是返回for (i=0;i+)语句时,由于unsigned char的取值范围在(0.255),i+以后i又为0了.无限循环下去.注:char类型为一个字节,取值范围是-1

11、28,127,unsigned char 0 ,2552. 二分查找算法:1) 递归方法实现:int BSearch(elemtype a,elemtype x,int low,int high)/*在下届为low,上界为high的数组a中折半查找数据元素x*/int mid;if(lowhigh) return -1;mid=(low+high)/2;if(x=amid) return mid;if(xamid) return(BSearch(a,x,low,mid-1);else return(BSearch(a,x,mid+1,high);2) 非递归方法实现:int BSearch(e

12、lemtype a,keytype key,int n)int low,high,mid;low=0;high=n-1;while(low=high) if(amid.key=key) return mid;else if(amid.keykey) low=mid+1;else high=mid-1;return -1;1.找错题试题2:void test2()char string10, str110;int i;for(i=0;10;str1i = astrcpy( string, str1 ); 试题3:void test3(char* str1)char string10;if( st

13、rlen( str1 ) = 10 )strcpy( string, str1 );库函数strcpy的工作方式,如果编写一个标准strcpy函数的总分值为10,下面给出几个不同得分的答案:2分void strcpy( char *strDest, char *strSrc ) while( (*strDest+ = * strSrc+) != );4分void strcpy( char *strDest, const char *strSrc ) /将源字符串加const,表明其为输入参数,加2分7分void strcpy(char *strDest, const char *strSrc)

14、 /对源地址和目的地址加非0断言,加3分assert( (strDest != NULL) & (strSrc != NULL) );while( (*strDest+ = * strSrc+) !10分/为了实现链式操作,将目的地址返回,加3分!char * strcpy( char *strDest, const char *strSrc ) char *address = strDest;return address;从2分到10分的几个答案我们可以清楚的看到,小小的strcpy竟然暗藏着这么多玄机,真不是盖的!需要多么扎实的基本功才能写一个完美的strcpy啊!再看看下面的一段程序有什

15、么错误:swap( int* p1,int* p2 )int *p;*p = *p1;*p1 = *p2;*p2 = *p;在swap函数中,p是一个“野”指针,有可能指向系统区,导致程序运行的崩溃。在VC+中DEBUG运行时提示错误“Access Violation”。该程序应该改为:int p;p = *p1;*p2 = p;写一个“标准”宏MIN,这个宏输入两个参数并返回较小的一个。另外,当你写下面的代码时会发生什么事?least = MIN(*p+, b);解答:#define MIN(A,B) (A) = (B) ? (A) : (B) MIN(*p+, b)会产生宏的副作用剖析:这

16、个面试题主要考查面试者对宏定义的使用,宏定义可以实现类似于函数的功能,但是它终归不是函数,而宏定义中括弧中的“参数”也不是真的参数,在宏展开的时候对“参数”进行的是一对一的替换。程序员对宏定义的使用要非常小心,特别要注意两个问题:(1)谨慎地将宏定义中的“参数”和整个宏用用括弧括起来。所以,严格地讲,下述解答:#define MIN(A,B) (A) (B)#define MIN(A,B) (A = B ? A : B ) 都应判0分;(2)防止宏的副作用。宏定义#define MIN(A,B) (A) (B)对MIN(*p+, b)的作用结果是:(*p+) = (b) ? (*p+) : (

17、*p+)这个表达式会产生副作用,指针p会作三次+自增操作。除此之外,另一个应该判0分的解答是: (B);这个解答在宏定义的后面加“;”,显示编写者对宏的概念模糊不清,只能被无情地判0分并被面试官淘汰。试题5:编写一个函数,作用是把一个char组成的字符串循环右移n个。比如原来是“abcdefghi”如果n=2,移位后应该是“hiabcdefgh” 函数头是这样的:/pStr是指向以结尾的字符串的指针/steps是要求移动的nvoid LoopMove ( char * pStr, int steps )/请填充.正确解答1:void LoopMove ( char *pStr, int ste

18、ps )int n = strlen( pStr ) - steps;char tmpMAX_LEN;strcpy ( tmp, pStr + n );strcpy ( tmp + steps, pStr);*( tmp + strlen ( pStr ) ) = strcpy( pStr, tmp );正确解答2:memcpy( tmp, pStr + n, steps );memcpy(pStr + steps, pStr, n );memcpy(pStr, tmp, steps );这个试题主要考查面试者对标准库函数的熟练程度,在需要的时候引用库函数可以很大程度上简化程序编写的工作量。最频繁被使用的库函数包括:(1) strcpy(2) memcpy(3) memsetFuYu注释:这两种方法都很业余,都是算法能力差的人给出的答案,都要用char tmpMAX_LEN 这么多辅助空间,“MAX_LEN”是多么好笑的用法。标准答案是对倒、对倒、再对倒。试题1:请写一个C函数,若处理器是Big_endian的,则返回0;若是Little_endian的,则返回1int checkCPU()union w int a;char b; c;c.a = 1;retu

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1