1. 程式人生 > >(各個公司面試原題)線上做了一套CC++綜合測試題,也來測一下你的水平吧(一)

(各個公司面試原題)線上做了一套CC++綜合測試題,也來測一下你的水平吧(一)

      剛才又把做錯的題看了看,感覺自己有太多的東西要補啊!!!

      下面給出試題,和我對題目的一些理解


1.下面描述正確的是

int *p1 = new int[10]; 
int *p2 = new int[10]();

A.   p1和p2申請的空間裡面的值都是隨機值

B.   p1和p2申請的空間裡的值都已經初始化

C.   p1申請的空間裡的值是隨機值,p2申請的空間裡的值已經初始化

D.   p1申請的空間裡的值已經初始化,p2申請的空間裡的值是隨機值


答案:C

我的理解:應該是呼叫了帶有預設引數值的建構函式吧 (據說,《C和指標》這本書裡有介紹)


2.下面的程式可以從

1....n中隨機等概率的輸出m個不重複的數。這裡我們假設n遠大於m

knuth(int n, int m)
{ 
    srand((unsigned int)time(0)); 
    for (int i = 0; i < n; i++) { 
        if ( ) { 
            cout << i << endl;
            ( );
        }
     }
}

A.    rand()%(n-i)<=mm--

B.   rand()%(n-i)<mm--

C.   rand()%(n-i)>=mm++

D.   rand()%(n-i)>mm++

答案:B

我選的A,錯的太虧了。

貼個圖


3.以下prim函式的功能是分解質因數。括號內的內容應該為?


void prim(int m, int n)
 {
     if (m > n)
     {
         while (        ) n++;
         (     );
         prim(m, n);
         cout << n << endl;
     }
 }


A.    m/nm/=n

B.   m/n m%=n

C.   m%nm%=n

D.   

m%nm/=n

答案:D

4.

enum string
{    
    x1,    
    x2,    
    x3=10,    
    x4,    
    x5,    
} x;


x等於什麼?

A.    5

B.   12

C.   0

D.   隨機值

答案:C


5.

unsigned char *p1;
unsigned long *p2;
p1=(unsigned char *)0x801000;
p2=(unsigned long *)0x810000;


請問p1+5= 什麼?
p2+5= 什麼?

A.   801005810005

B.   801010810014

C.   801005810014

D.   801010810015

答案:C

p1+5=p1+5*sizeof(unsigned char),char佔1位元組
p2+5=p2+5*sizeof( unsigned long),long佔4位元組

最後轉換為十六進位制

6.

32位機器中,如下程式碼:

void example(char acWelcome[])
{
    printf("%d",sizeof(acWelcome));
    return;
}
void main()
{
    char acWelcome[]="Welcome to Huawei Test";
    example(acWelcome);
    return;
}


的輸出是?

A.   0

B.   4

C.   23

D.   24

答案:B

陣列作為引數傳入函式會退化為指標,所以,不管acWelcome的長度是多少(即便為空),都返回4

如果不經過函式而直接寫出以下語句

printf("%d\n",sizeof(acWelcome));

則輸出23,為acWelcome的長度+1(結束符);



7.

下面關於虛擬函式和函式過載的敘述不正確的是

A.   虛擬函式不是類的成員函式

B.   虛擬函式實現了C++的多型性

C.   函式過載允許非成員函式,而虛擬函式則不行

D.   函式過載的呼叫根據引數的個數、序列來確定,而虛擬函式依據物件確定


答案:A

很明顯,A是錯的。當時就突然想到,sizeof(Class)是受虛擬函式影響的,但不受static變數和static函式影響

8.

處理a.html檔案時,以下哪行虛擬碼可能導致記憶體越界或者丟擲異常()

<span style="white-space:pre">	</span>int totalBlank = 0;
         int blankNum = 0;
         int taglen = page.taglst.size();
A       for(int i = 1; i < taglen-1; ++i)
        {
                 //check blank
B             while(page.taglst[i] == "<br>" && i < taglen)
               {
C                       ++totalBlank;
D                       ++i;
               }
E             if(totalBlank > 10)
F                      blankNum += totalBlank;
G             totalBlank = 0;
        }


注意:以下程式碼中taglen是html檔案中存在元素的個數,a.html中taglen的值是15,page.taglst[i]取的是a.html中的元素,例如page.taglst[1]的值是<html>
a.html的檔案如下:

<html>
<title>test</title>
<body>
<div>aaaaaaa</div>
</body>
</html>
<br>
<br>
<br>
<br>
<br>


A.    A

B.   B

C.   C

D.   D

E.   E

F.   F

G.   G

答案:B


9.

void Func(char str_arg[100])
{
       printf("%d\n",sizeof(str_arg));
}
int main(void)
{
     char str[]="Hello";
     printf("%d\n",sizeof(str));
    printf("%d\n",strlen(str));
    char*p=str;
    printf("%d\n",sizeof(p));
    Func(str);
}


32位系統下下面程式的輸出結果為多少?

A.   5 5 4 4

B.   6 5 4 4

C.   6 5 6 4

D.   5 5 5 100

答案:B

sizeof(str)和strlen(str)的區別在於,前者會把str末尾的'\0'算上

3個輸出我也不太理解,若有如下程式碼

char a='c';
char *p=&a;

則,sizeof(a)輸出1,sizeof(p)輸出4.


第4個輸出

陣列作為引數傳入函式會退化為指標,這個和題6一樣

10.

下面程式執行後的結果為:

char str[] = "glad to test something";
char *p = str;
p++;
int *p1 = static_cast<int *="">(p);
p1++;
p = static_cast<char *="">(p1);
printf("result is %s\n", p);


A.    glad to testsomething

B.   ad to testsomething

C.   test something

D.   to testsomething

答案:D

程式碼執行不了。。。

不過覺得這題的關鍵就是,p++是+1個位元組(char型佔1個位元組),p1++是+4個位元組(int型佔4個位元組)