华为C语言面试题.doc

上传人:枫** 文档编号:558422773 上传时间:2023-04-05 格式:DOC 页数:9 大小:36.01KB
返回 下载 相关 举报
华为C语言面试题.doc_第1页
第1页 / 共9页
华为C语言面试题.doc_第2页
第2页 / 共9页
华为C语言面试题.doc_第3页
第3页 / 共9页
华为C语言面试题.doc_第4页
第4页 / 共9页
华为C语言面试题.doc_第5页
第5页 / 共9页
点击查看更多>>
资源描述

《华为C语言面试题.doc》由会员分享,可在线阅读,更多相关《华为C语言面试题.doc(9页珍藏版)》请在金锄头文库上搜索。

1、内容摘要:华为C语言面试题 关键词:华为面试题C语言面试题本文地址:http:/ 找错Void test1()char string10;char* str1=0123456789;strcpy(string, str1);Void test2()char string10, str110;for(I=0; I10;I+)str1i =a;strcpy(string, str1);Void test3(char* str1)char string10;if(strlen(str1)=MAX_SRM)return (NULL_SRM);elsereturn SRM_no;3.写出程序运行结果in

2、t sum(int a)auto int c=0;static int b=3;c+=1;b+=2;return(a+b+C);void main()int I;int a=2;for(I=0;I5;I+)printf(%d, sum(a);4.int func(int a)int b;switch(a)case 1: 30;case 2: 20;case 3: 16;default: 0return b;则func(1)=?5:int a3;a0=0; a1=1; a2=2;int *p, *q;p=a;q=&a2;则aq-p=?6. 定义 int *a34, 则变量占有的内存空间为:_7.

3、编写一个函数,要求输入年月日时分秒,输出该年月日时分秒的下一秒。如输入2004年12月31日23时59分59秒,则输出2005年1月1日0时0分0秒1、找错void test1()char string10;char* str1=0123456789;strcpy(string, str1);这里string数组越界,因为字符串长度为10,还有一个结束符0。所以总共有11个字符长度。string数组大小为10,这里越界了。PS:使用strcpy函数的时候一定要注意前面目的数组的大小一定要大于后面字符串的大小,否则便是访问越界。void test2()char string10, str110;

4、for(i=0; i10;i+)str1i =a;strcpy(string, str1);这里有一个一眼就能看出的问题,那就是变量i没有定义,这在代码编译阶段编译器可以帮你发现,很容易搞定。然而很多问题是自己造成的漏洞,编译器是帮不上什么忙的。这里最大的问题还是str1没有结束符,因为strcpy的第二个参数应该是一个字符串常量。该函数就是利用判断第二个参数的结束符来得到是否拷贝完毕。所以在for循环后面应加上str1p9 = 0;PS:字符数组和字符串的最明显的区别就是字符串会被默认的加上结束符0。void test3(char* str1)char string10;if(strlen(

5、str1)=10)strcpy(string, str1);这里的问题仍是越界问题。strlen函数得到字符串除结束符外的长度。如果这里是=10话,就很明显越界了。小结:上面的三个找错的函数,主要是考查对字符串和字符数组的概念的掌握以及对strcpy函数和strlen函数的理解。2、找错DSN get_SRM_no()static int SRM_no;int I;for(I=0;I=MAX_SRM)return (NULL_SRM);elsereturn SRM_no;这里for循环的判断语句是后来我加上的,估计在网上流传的时候被人给弄丢了,根据对程序的分析,给补上了。估计错误应该不是这儿。

6、简单的阅读一下这个函数,可以大概的可以猜测出这个函数的功能是分配一个空闲的SRAM块。方法:从上次分配的RAM块后的RAM块开始检测SRAM每个RAM块,看是否是IDLE状态,如果是IDLE则返回当前的RAM块的号SRM_no.如果所有的RAM块都不是IDLE状态,则意味着无法分配一个RAM给函数调用者,返回一个表示没有RAM可分配的标志(NULL_SRM)。经过上面的分析,则这里可以知道,这个函数的错误是for循环里面没有给SRM_no这个变量累加1。3、写出程序运行结果int sum(int a)auto int c=0;static int b=3;c+=1;b+=2;return(a+

7、b+c);void main()int I;int a=2;for(I=0;I5;I+)printf(%d, sum(a);运行结果是:8,10,12,14,16,在求和函数sum里面c是auto变量,根据auto变量特性知每次调用sum函数时变量c都会自动赋值为0.b是static变量,根据static变量特性知每次调用sum函数时变量b都会使用上次调用sum函数时b保存的值。简单的分析一下函数,可以知道,若传入的参数不变,则每次调用sum函数返回的结果,都比上次多2.所以答案是:8,10,12,14,16,4、func(1) ?int func(int a)int b;switch(a)c

8、ase 1: 30;case 2: 20;case 3: 16;default: 0;return b;在 case 语句中可能忘记了对变量b赋值。如果改为下面的代码:int func(int a)int b;switch(a)case 1: b = 30;case 2: b = 20;case 3: b = 16;default: b = 0;return b;因为case语句中漏掉了break语句,所以无论传给函数的参数是多少,运行结果均为0。5、aq - p ?int a3;a0=0; a1=1; a2=2;int *p, *q;p=a;q=&a2;很明显:aq - p = a2 = 2

9、;6、内存空间占用问题定义 int *a34, 则变量占有的内存空间为:16位系统24,32位编译系统中是48。PS:公式:3 * 4 * sizeof(int *)7、程序编写编写一个函数,要求输入年月日时分秒,输出该年月日时分秒的下一秒。如输入2004年12月31日23时59分59秒,则输出2005年1月1日0时0分0秒。void ResetTheTime(int *year,int *month,int *date,int *hour,int *minute,int*second)int dayOfMonth12=31,28,31,30,31,30,31,31,30,31,30,31;i

10、f( *year 0 | *month 12 |*date 31 | *hour 23 |*minute 59| *second 60 )return;if( *year%400 = 0 | *year%100 != 0 & *year%4 = 0 )dayOfMonth1 = 29;if(*second = 60)*second = 0;*minute += 1;if(*minute = 60)*minute = 0;*hour += 1;if(*hour = 24)*hour = 0;*date += 1;if(*date dayOfMonth*month-1)*date = 1;*month += 1;if(*month 12)*month=1;*year += 1;return;

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

当前位置:首页 > 生活休闲 > 社会民生

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