华为C/C++笔试题(4)

一、判断题

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

2、int (*ptr) (),则ptr是一维数组的名字。(错误 int (*ptr) ();定义一个指向函数的指针变量 )

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

4、switch(c) 语句中c可以是int ,long,char ,float ,unsigned int 类型。( 错,不能用实形)

 

二、填空题

1、在windows下,写出运行结果

char str[ ]= "Hello";
char *p=str;
int n=10;

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

答案:6,4,4,4

2、

void  getmemory( char   ** p,  int  num)
{
    
* p = ( char   * ) malloc(num);
}

void  test( void )

    
char   * str = NULL;
    getmemory(
& str, 100 );
    strcpy(str,
" hello " );
    printf(str);
}

运行test函数有什么结果?( )

答案:输出hello,但是发生内存泄漏。

3、
设int arr[]={6,7,8,9,10};
  int *ptr=arr;
  *(ptr++)+=123;
  printf("%d,%d", *ptr, *(++ptr));

答案:8,8。这道题目的意义不大,因为在不同的编译器里printf的参数的方向是不一样的,在vc6.0下是从有到左,这里先*(++ptr) 后*pt,于是结果为8,8

 

二、编程题

1、不使用库函数,编写函数int strcmp(char *source, char *dest)

相等返回0,不等返回-1;

答案:一、

int  strcmp( char   * source,  char   * dest)
{
    assert((source
!= NULL) && (dest != NULL));
    
int  i,j;
    
for (i = 0 ; source[i] == dest[i]; i ++ )
    {
        
if (source[i] == ' \0 '   &&  dest[i] == ' \0 ' )
            
return   0 ;
        
else
            
return   - 1 ;
    }
}

 

答案:二、

int  strcmp( char   * source,  char   * dest)
{
    
while  ( ( * source  !=   ' \0 ' &&  ( * source  ==   * dest))
    {
        source
++ ;
        dest
++ ;
    }
    
return  ( ( * source)  -  ( * dest) )  ?   - 1  :  0 ;
}

 

2、 写一函数int fun(char *p)判断一字符串是否为回文,是返回1,不是返回0,出错返回-1

答案:一、

int  fun( char   * p)
{
    
if (p == NULL)
        
return   - 1 ;
    
else
    {
        
int  length  =   0 ;
        
int  i  =   0 ;
        
int  judge  =   1 ;
        length 
=  strlen(p);
        
for (i = 0 ; i < length / 2 ; i ++ )
        {
            
if (p[i] != p[length - 1 - i])
                judge 
=   0 ;
            
break ;
        }
        
if (judge  ==   0 )
            
return   0 ;
        
else
            
return   1 ;
    }
}

 

答案:二、

int  fun( char   * p)

    
int  len  =  strlen(p)  -   1
    
char   * =  p  +  len; 
    
if  ( ! p) 
        
return   - 1
    
while  (p  <  q) 
    {
        
if  (( * p ++ !=  ( * q -- )) 
            
return   0
    } 
    
return   1 ;
}

转载于:https://www.cnblogs.com/Aioria0622/archive/2008/10/22/1316852.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值