就业数据资源平台
当前位置:首页 > 笔试题目
笔试题参考


1、求函数返回值,输入x=9999;

int func(x)

{

    int countx = 0;

    while(x)

    {

        countx ++;

        x = x&(x-1);

    }

    return countx;

}

【试题解析】

    解这道题的时候,如果拿出一个二进制数来分析就会容易的多了,x=x&(x-1)实际上就是把x的二进制形式的最后一个“1”变成“0”,x的二进制形式有多少个“1”循环就执行多少次。


9999/256 = 39 余 15,把这两个数分别转化一下就很快了

39 = 32 + 4 + 2  +1 = 00100111

15 = 0F = 00001111

所以 9999=0010011100001111,共有8个1,答案就是 8 了


2、实现以下程序,以方便binary search.

.要有处理错误语句

.队列的分配的大小是固定的MAX_LEN,由第二个参数输入

.不能复制队列

insert (int *arr,           //队列

        size_l len,          // 队列大小

        size_l count,        //队列元素的数目

        int varl             //要处理的数据

)返回插入数据的索引

remove(int *arr,size_l len,size_l count,int varl)返回删除元素的索引

search(int *arr,size_l len,size_l count,int varl)返回搜索道元素的索引

【试题解析】

    略。数据结构书上都有的。


3、堆栈R,从顶到底:{2,4,6,8,10},逐个取出放入队列Q中 ,再从Q中逐个取出放入R中,问现在堆栈R中从顶到底的顺序。

【试题解析】

    这个也不用了吧,{10,8,6,4,2}


4、写出程序的结果:___________

int funa(int *a)

{

   a[0] ++;

}


int funb(int b[])

{

   b[1] += 5;

}


main()

{

   int a[5] = {2,3,4,5,6};

   int b[5] = {2,3,4,5,6};

   int *p;

   p = &a[0];

   (*p)++;

   funa(p);

   for(int i = 0; i<3; i++)

   printf("%d,",a);

   p = &b[1];

   funb(p);

   for(i = 0; i<3; i++)

   printf("%d,",b);

}

【题目解析】

结果是:

4,3,4,2,3,9


(*p)++; 也就是a[0]++;

funa(p);中的 a[0]++ 是将 main 中的数组 a[0]++,

数组 a 中只有第一个元素加了两次 1 ,


p = &b[1];把p指向了数组 b 的第二个元素

funb(p);中的 b[1]+=5 是将 main 中的数组 b[2]+=5

数组 b 中的第三个元素加了 5




5、找出下面程序的 BUG

int CopyStringAndCount(char * Str) ①

{

    int nCount = 0;

    char * pBuffer; ②

 

    pBuffer = new char[MAX_PATH_LENGTH];

    ③


    ④

    strcpy(pBuffer, Str);


    for ( ; pBuffer⑤; pBuffer++ )

        if ( pBuffer⑥=='\\' ) nCount ++;

   

    ⑦

    return nCount;

}

就业数据资源平台