华为笔试题(一)

一、判断题(对的写T,错的写F并说明原因,每小题4分,共20分)

1、有数组定义int a[2][2]={{1},{2,3}};则a[0][1]的值为0。(     )

MY Answer: T

2、int (*ptr) (),则ptr是一维数组的名字。(     )

MY Answer: F. Ptr is an function pointer, which have no parameter and returns an int value.

3、指针在任何情况下都可进行>, <, >=, <=, = =运算。(     )

MY Answer: F. The poiters have to pointer to the same array can do the aritheric operator.

4、switch(c) 语句中c可以是int, long, char, float, unsigned int 类型。(   )

My Answer: F. The c can not be float type. 5、#define print(x)  printf("the no, "#x",is ") My Answer: F.

二、填空题(共30分)

1、在windows下,写出运行结果,每空2分,共10分。

char str[ ]= "Hello";

char *p=str;

int n=10;

sizeof(str)=(    )

My Answer: 6;

sizeof(p)=(       )

My Answer:4

sizeof(n)=(       )

My Answr:4/2 dependent on machine.

void func(char str[100]) {    } sizeof(str)=(     )

My Answer: 4

2、void setmemory(char **p, int num)

{ *p=(char *) malloc(num);}

void test(void) {  

char *str=NULL;    

getmemory(&str,100);    

strcpy(str,"hello");    printf(str); }

运行test函数有什么结果?(            hello, 但是每运行一次Test都会去申请一次内存空间,运行完毕内存空间并没有被释放,出现内存泄漏。运行多次后会出现内存耗尽,崩溃。                    )10分

3、设int arr[]={6,7,8,9,10};     

 int *ptr=arr;   

 *(ptr++)+=123;

printf("%d,%d",*ptr,*(++ptr)); (                                   ) 10分

My Answer: 230,8

但是在VC中运行结果为:7.8. 实际上arr[0]为230,而不是arr[1]为230;

在VC中的Debug选项中,Disassambly可以看到汇编代码:

==================Source Code====================

int main(int argc, char* argv[]) {  int arr[]={6,7,8,9,10};

  int *ptr=arr;

   *(ptr++)+=123;

 printf("%d ",arr[0]);    

printf("%d  ",*ptr); 

 printf("%d ",*(++ptr));  

 return 0; }

=======================================================

汇编代码:

可以看到先计算在寄存器上先加。然后再进行指针运算。

二、编程题(第一小题20,第二小题30分) 1、  不使用库函数,编写函数int strcmp(char  *source, char *dest) 相等返回0,不等返回-1; 2、  写一函数int fun(char *p)判断一字符串是否为回文,是返回1,不是返回0,出错返回-1  <script language=JavaScript type=text/javascript> document.write('
本文地址为: ' + window.location.href +''); document.close(); </script>

My Answer:

 

int strcomp(char* source, char *dest)

{

	assert(source!=NULL&&dest!=NULL);



	char* tempsrc = source;

	char* tempdest = dest;

	int result = 65535;

	while(*tempsrc!='/0'&&*tempdest!='/0')

	{

		result = (*tempsrc++)-(*tempdest++);

		if(result!=0)

			return result>0 ? 1 : -1;

	}

	if(*tempsrc=='/0'&&*tempdest!='/0')

		return -1;

	else if(*tempsrc!='/0' && *tempdest=='/0')

		return 1;

	else 

		return 0;

}

 测试程序:

#include "stdafx.h"

#include "assert.h"

int strcomp(char* source, char *dest);

int main(int argc, char* argv[])

{



	char *str = "abcd";

	char *dest ="abcd";

	printf("%d  ",strcomp(str,dest));

	return 0;

}
2. 应该定义的有长度传入的。传入的字符串是末尾不含有‘/0'的。
int fun(char *p, int len)

{

	if(p==NULL)

		return -1;

	if(len<=0)

		return -1;

	char *temp = p;

	char *dest = p+len-1;

	for(int i=0;i<len/2;++i)

	{

		if(*(temp+i)!=*(dest-i))

			return 0;

	}

		return 1;

}

测试代码:

#include "stdafx.h"

#include "assert.h"

int fun(char *p, int len);



int main(int argc, char* argv[])

{

	char str[] = {'a','b','c','b','a'};

	printf("%d",fun(str,5));

	return 0;

}
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值