华为笔试题(答案)(2)

2019-09-02 17:20

答案:B, C

23、关于以太网中的ARP协议,描述错误的是: A) 根据IP地址查询其对应的MAC地址

B) 根据MAC地址查询其对应的IP地址,便于IP通信

C) 通过ARP协议产生的IP和MAC地址的映射,超时会淘汰 D) ARP请求中的MAC地址为广播地址

答案:B

24、关于TCP、UDP及其上层的应用,描述错误的是: A)TCP协议面向连接的,UDP协议是面向无连接的

B) UDP不保证数据的可靠传送,而文件的传递时要求必须无错传送的,因而所有基于文件传递的应用都不能基于UDP,如:TFTP C) telnet是基于TCP的终端应用,连续输入的多个字符可能会被封装到一个TCP包中

D) 在同一个节点上,基于TCP和UDP的应用端口号可以重叠

答案:B

改错题

1、请指出下面程序的错误 unsigned char i = 10; char b = 100; char *p

void f(void) {

while(--i >= 0) {

*(p++) = b; } }

参考答案:

(1) p没有分配空间

(2) i是无符号型,自减操作会引发死循环

2、下面函数要实现打印hello world的功能,请问程序中有何错误? void* GetMemory() {

char str[] = \; return str; }

void Test() {

char *str = NULL;

str = (char*) GetMemory(); printf(str); }

参考答案:

(1) GetMemory函数返回的地址内容已经被释放。

(2)str是指针,printf(str)打印的是地址,正确的是printf(*str)

3、请问如下代码有什么错误? #define MAX_SIZE 1000 #define NULL 0 #define TRUE 1 #define FALSE 0 struct XXX {

unsigned short a; unsigned short b; };

int demo(struct XXX *p, unsigned long size) {

struct XXX *temp;

temp=(struct XXX*)malloc(sizeof(struct XXX)*MAX_SIZE); if (NULL == temp) {

return FALSE; }

memcpy(temp, p, sizeof(struct XXX)*size);

/*其他操作*/

free (temp); return TRUE; }

参考答案:

(1) size可能大于MAX_SIZE,缺少安全检查

(2)p指针未作安全检查

4、如下程序用于把“blue”字符串返回,请指出其中的错误。 char *GetBlue() {

char* pcColor; char* pcNewColor;

pcColor = \;

pcNewColor = (char*)malloc(strlen(pColor)); strcpy(pcNewColor, pcColor);

return pcNewColor; }

参考答案:

(1) pcColor没有结束符,导致strcpy错误

(2) pcNewColor分配的长度应该再加1,用来放结束符’\\0’

5、请问如下程序段有什么错误? main() {

unsigned long i = 0, *p, *p1;

p = (unsigned long *)malloc(10000); p1 = p;

for(i = 0; i < 9999; i++) {

*p1 = 0x100; p1++; }

/*其他操作*/

free(p); }

参考答案:

(我找不到明显错误,要么是main函数没有指定返回值类型?)

编程题

1、对称数判断问题 请编写一段程序,判断一个正整数是否为对称数(对称数即左右对称的数字,

如3、22、121、1331、34543等),不允许利用C语言将数字转换为字符转的库函数。

参考答案:

bool judgeNumberSymmetry(unsigned long ulNumber) {

unsigned long ulTemp = ulNumber;/*src copy*/ unsigned long ulResult = 0; int iMod = 0;

while (ulTemp) {

iMod = ulTemp % 10;

ulResult = ulResult * 10 + iMod; ulTemp /= 10; }

if (ulNumber == ulResult) {

return true; } else {

return false; } }

2、排队队列问题

n个人,排成1队,(p1,p2,p3...pn)从第一个人开始从1报数,报数到3的人离开队列,队列里的下一个人继续从1开始报数,以此反复,当数到队列尾时,从队列头部继续报数,这样周而复始,知道队列剩一人。 给一个简单的例: 报数结果如下:

1,2,4,5,7,第一轮,3、6离开队列,7报数1,然后从队列头部继续报数,那么第一个人报数2,如此1,4,5,这样第二轮,位置2和位置7离开队列,并且从队列头部继续报数,第一个人报数1,因为队列尾部的7恰好报数到3.

1,2,这样第三轮,5被淘汰;

然后开始位置1的人报数1,最后位置1正好报数3,于是离开队列,最后剩下的人是2。

这样给定7个人,原始位置2的人是剩下的人。

请事先一个简单程序,实现上述问题,程序输入n,输出那个最后剩下的人的原始位置。 参考答案:(仅提供算法伪代码)

/*use queue*/ int getLast() {

int iCur = 1; int iPop;

while (que.head != que.tail) {

iCur++;

iPop = que.pop() if (3 != iCur) {

que.push(iPop); } else {

iCur = 1; } }

iPop = que.pop(); return iPop; }


华为笔试题(答案)(2).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:11-12-1商务策划课程设计指导书

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: