當前位置:文思屋>學習教育>考研>

筆試題參考

文思屋 人氣:2.98W

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;
}

TAGS:筆試