(轉)迅雷C++試題及解答

 1.下列程序的輸出結果爲:(B)
#include<iostream.h>
void main()
{
       char* a[ ] = { "hello", "the", "world"};
       char** pa = a;
       pa++;
       cout<<”*pa<<endl;
}
A) theworld    B) the   C) ello    D) ellotheworld
 
2. 已知二叉樹後序遍歷序列是bfegcda,中序遍歷序列是badefcg,它的前序遍歷序列是:(B)
A) abcdefg     B) abdcefg    C) adbcfeg    D) abecdfg
 
3. 棧和隊列的共同特點是:(C)
A) 都是先進先出                  B) 都是先進後出
C) 只允許在短點處插入和刪除元素 D) 沒有共同點
 
4. 下面程序的運行結果爲:(A)
#include <iostream.h>
void main()
{
       int a, x;
       for(a = 0, x = 0; a<=1 && !x++; a++)
       {
              a++;
       }
       cout<< a << x <<endl;
}
A) 21             B) 22             C) 32             D) 41
 
5. 下列選項,不正確的是:(B) while後沒有分號
 A) for(int a=1; a<=10; a++);
B) int a=1;
   do
   {
              a++;
   }while(a<=10)
C) int a=1;
   while(a<=10)
   {
          a++;
}
D) for(int a= 1; a<=10; a++)a++;
6. 下面關於數組的初始化正確的是:(B)
A) char str[2] = {“a”,”b”};
B) char str[2][3]={“a”,”b”};
C) char str[2][3]={{‘a’,’b’},{‘e’,’d’},{‘e’,’f’}};
D) char str[] = {“a”, “b”};

 

7. 下列說法正確的是:(B)
A) 內聯函數在運行時是將該函數的目標代碼插入每個調用該函數的地方
B) 內聯函數在編譯時是將該函數的目標代碼插入每個調用該函數的地方
C) 類的內聯函數必須在類體內定義
D) 類的內聯函數必須在類體外通過關鍵字inline定義
 
8.下面對靜態成員的描述中,正確的是:(D)
A) 靜態數據成員可以在類體內初始化
B) 靜態數據成員不可以被類的對象調用
C) 靜態數據成員不能受private控制符的作用
D) 靜態數據成員可以直接用類名調用
 
9. 下列運算符中,在C++語言中不能重載的是:(C)
A) *                B) >=             C) ::              D) delete
 
10 下面關於多態性的描述,錯誤的是:(C)
A) C++語言的多態性分爲編譯時的多態性和運行時的多態性
B) 編譯時的多態性可通過函數重載實現
C) 運行時的多態性可通過模板和虛函數實現 //模板的是編譯時多態性,而虛函數是運行時
D) 實現運行時多態性的機制稱爲動態綁定
 
11. 如果進棧序列爲e1,e2,e3,e4,e5,則可能的出棧序列是:(D)
A) e3,e2,e5,e4,e1
B) e2,e3,e5,e4,e1
C)    e3,e2,e4,e5,e1
D) 以上都有可能
 
12 下面關於類和對象的描述中,錯誤的是:(A)
A) 類就是C語言中的結構體類型,對象就是C語言中的結構體變量
B) 類和對象之間的關係是抽象和具體的關係
C) 對象是類的實例,一個對象必須屬於一個已知的類
D) 類是具有共同行爲的若干對象的統一描述體
 
13.下面關於數組的描述錯誤的是:D
A) 在C++語言中數組的名字就是指向該數組第一個元素的指針
B) 長度爲n的數組,下標的範圍是0-n-1
C) 數組的大小必須在編譯是確定
D) 數組只能通過值參數和引用參數兩種方式傳遞給函數
註釋:
在把數組作爲參數傳遞給函數時,有值傳遞(by value)和地址傳遞(by reference)兩種方式。 
    在值傳遞方式中,要在數組參數的尾部加上一對方括號([]),調用函數時只需將數組的地址(即數組名)傳遞給函數。 
    例如:如果數組x被聲明爲:int x[10]; 
    那麼函數被說明爲:void byval_func(int[]); 

    參數int[]告訴編譯程序byval_func()函數只有一個參數,即一個由int型值組成的數組。     函數調用時只需將數組名傳遞給函數:byval_func(x);
#include <stdio.h> 
 void byval_func(int[]); 
 void main(void); 
 void main(void)
 {
     int x[10];
     int y;
     for(y=0;y<10;y++)
         x[y]=y;
     byval_func(x);    
 } 
 void byal_func(int i[])
 { 
     int y;
     for(y=0;y<10;y++)
        printf("%d/n",i[y]);
 }
在值傳遞方式中,數組x將被複制一份,複製所得的數組將被存放在棧中,然後由byval_func()函數接收並打印出來。由於傳遞給byval_func()函數的是初始數組的一份拷貝,因此在byval_func()函數內部修改傳遞過來的數組對初始數組沒有任何影響。 
    值傳遞方法的開銷是很大的,因爲首先它要完整地複製初始數組並將這份拷貝存放到棧中,這將耗費相當可觀的運行時間, 因而值傳遞方法效率較低;其次,初始化數組的拷貝需要佔用額外的內存空間(棧中的內存);最後,編譯程序需要專門產生一部分用來複制初始數組的代碼,這將使程序變大。
    地址傳遞方法克服了值傳遞方法的缺點。在地址傳遞方法中,傳遞給函數的是指向初始數組的指針,不用複製數組,因此程序變得簡練,也節省了棧中的內存空間。在地址傳遞過程中,只需在函數原形中將函數的參數說明爲指向數組元素數據類型的一個指針。
    例如同樣定義一個數組x:int x[10];

    那麼函數被說明爲:int const_funt(const int*);
    參數const int*告訴編譯程序const_funt()函數只有一個參數,即指向一個int類型常量的指針。
    函數調用時只需將數組的地址傳遞給函數:const_func(x);
#include <stdio.h> 
 void const_func(const int*); 
 void main(void); 
 void main(void)
 {
     int x[10];
     int y;
     for(y=0;y<10;y++)
         x[y]=y;
     constl_func(x);    
 } 
 void const_func(const int*i)
 { 
     int y;
     for(y=0;y<10;y++)
        printf("%d/n",*(i+y));
 }
 在值傳遞方式中,沒有複製初始數組並將其拷貝存放在棧中,const_func()函數只接收到指向一個int類型常量的指針,因此在編寫程序時要保證傳遞給const_func()函數的是指向一個由int類型常量組成的數組的指針。const修飾符的作用是防止意外修改初始數組中的某一個元素。
 
14. 引用標準庫時,下面的說法你認爲哪個是正確的:B
A) 語句#include “stdlib.h”是正確的,但會影響程序的執行速度
B) 語句#include <stdlib.h>是正確的,而去程序執行速度比#include “stdlib.h”要快
C) 語句#include <stdlib.h>和#include “stdlib.h”都是正確的,程序執行速度沒有區別
D) 語句#include “stdlib.h”是錯誤的
註釋:include   ""是先從本地目錄開始尋找,然後去尋找系統路徑,而Include   <>   相反先從系統目錄,後從本地目錄,
 
15.設a、b、c、d、m、n均爲int型變量,且a=5、b=6、c=7、d=8、m=2、n=2,則邏輯表達式(m=a>b)&&(n=c>d)運算後,n的值爲:C
A) 0               B) 1               C) 2               D) 7
 
16.不能作爲重載函數的調用的依據是:C
A) 參數個數                              B) 參數類型
C) 函數類型                              D) 函數名稱
 
17.下列程序的輸出結果爲: (D)
#include< iostream. h>
int func(int n)
{
  ifn<1)return 1;
else return n+func(n-1);
return 0;
}
void main()
{
cout<<func(5)<<endl;
}
A) 0        B)10             C)15            D)16
 
18. 建立派生類對象時,3種構造函數分別是a(基類的構造函數)b(成員對象的構造函數)c(派生類的構造函數)3種構造函數的調用順序爲: (A)
A)abc                                                                B)acb
C)cab                                                                     D)cba
 
19. 如果友元函數重載一個運算符時,其參數表中沒有任何參數則說明該運算符是:D
A)一元運算符                                                      B)二元運算符
C)選項A)和選項B)都可能                               D)重載錯誤
解析:C++中用友元函數重載運算符至少有一個參數,重載一目運算符要有一個參數,重載二目運算符要有兩個參數
 
20. 有以下程序段:D)?
#define F(X,Y)   (X)--; (Y)++ (X)*(Y);
int i, a = 3, b = 4;
for( i = 0; i<5; i++)   F(a,b)
printf(“%d, %d”, a, b);
輸出結果是:()
A) 3, 4                                       B) 3, 5
C) -2, 5                                     D) -2, 9
 
21. 下列for循環的循環體執行次數爲:A
for(int i(10), j(1); i=j=0; i++, j--)
A) 0;       B) 1;       C) 無限;        D)以上都不對
 
22. 下面程序的輸出結果是D
char *p1= “123”, *p2 = “ABC”, str[50]= "xyz";
strcpy(str+2,strcat(p1,p2));
cout << str;
A)xyz123ABC                                                       B)z123ABC
C)xy123ABC                                                        D)出錯
 
23.下面函數的執行結果是輸出B
char str[ ] = “xunlei”;
char *p = str;
int n = 10;
printf(“%d, %d, %d/n”, sizeof(str), sizeof(p), sizeof(n));
A) 4, 4, 4                                                 B) 7, 4, 4
C) 6, 4, 4                                                 D) 6, 6, 4
 
33. 有下列程序段:
char *p, *q;
p = (char*) malloc(sizeof(char) * 20);
q = p;
scanf(“%s %s”, p, q);
printf(“%s %s/n”, p, q);
若從鍵盤輸入:abc def, 則輸出結果是A
A) def def                     B) abc def
C) abc d                       D) d d
解析:q=p;因此p,q指向的是同一段內存.scanf先是把abc寫到p指向的空間,再把def寫到q指向的空間,也就是同一段空間,因此abc被def覆蓋了.
 
34.現在有以下語句:
struct _THUNDER{
       int iVersion;
       char cTag;
       char cAdv;
       int iUser;
       char cEnd;
}Thunder;
int sz = sizeof(Thunder);
則執行後,變量sz的值將得到D
A) 11             B) 12             C) 13             D) 16
 
35. 有如下程序段:
void GetMemeory(char* p)
              p = (char*) malloc (100);
void test()
{
char *str=NULL;
GetMemory(str);
strcpy(str,”Thunder”);
strcat(str+2, “Downloader”);
 printf(str);
}
請問運行Test函數結果是:D
A) Thunder Downloader                                 B) under Downloader
C) Thunderownloader                                    D) 程序崩潰
解析:在函數中給指針分配空間,實際上是給指針的臨時變量分配空間,函數結束後,這個臨時變量也消亡,而str仍然爲NULL,沒有爲其分配空間,此時strcpy()是肯定會出錯的。
 
36. 函數調用exec((v1,v2), (v3,v4,v5),v6,v7);中,實參的個數是(A)
A) 4               B) 5               C) 6               D) 7             
 
37. p是指向類X的成員m的指針,s是類X的一個對象。現要給m賦值,C是正確的。
A) s.p = 5                                                        B) s->p = 5
C) s.*p = 5                                                      D) *s.p = 5
 
38. 函數fun(char* p) { return p;}的返回值是B
A)無確切值                                              B) 行參p中存放的地址值
C) 一個臨時存儲單元的地址                   D) 行參p自身的地址值
 
39.a,b均爲不等於0的整形變量,以下關係式恆成立的是:C
A) a*b/a*b == 1                                 B) a/b*b/a == 1
C) a/b*b + a%b == a                          D) a/b*b == a
 
40. 設有如下說明:
       typedef struct ST{ long a; int b; char c[2]; } NEW;
則下面敘述中正確的是:(C)
A)以上的說明形式非法                            BST是一個結構體類型 
C
NEW是一個結構體類型                DNEW是一個結構體變量
 
41. 下列表達式正確的是:C
A) 9++                  B) (x+y)++              C) c+++c+++c++                D) ++(a-b--)
 
42.在int b[ ][3] = {{1},{3,2},{4,5,6},{0}};中,sizeof(b) = D
A) 4                      B) 12                    C) 28                    D) 48
 
43.以下程序的輸出結果是:(D)
#define M(x,y,z) x*y+z
main()
{
       int a=1, b=2, c=3;
       printf(“%d/n”,M(a+b,b+c,c+a));
}
A)19                   B) 17                    C) 15                    D) 12
 
44.若有以下定義和語句:
int u=010, v= 0x10, w=10;
printf(“%d,%d,%d/n”,u,v,w);
則輸出結果是:(A)
A)8,16,10     B)10,10,10      C)8,8,10      D)8,10,10
 
45. 下面程序段的輸出結果是:B
int a=5, b=4, c=3, d=2;
if(a>b>c)
       printf(“%d/n”,d);
else if((c-1>=d)==1)
       printf(“%d/n”, d+1);
else
       printf(“%d/n”, d+1);
A) 2                      B) 3                      C) 4                   D) 編譯錯誤
 
46.有如下程序段,請問k的值是:D
enum {a, b=5, c, d=4, e} k; k =c;
A) 3                      B)4                     C) 5                      D) 6
 
47.有如下程序段:
int i, n = 0;
double x = 1, y1 = 2.1/1.9, y2 = 1.9/2.1;
for( i = 1; i<22; i++)
       x = x*y1;
while( x!=1.0)
{
       x =x*y2;
       n++;
}
printf(“%d/n”, n);
請問執行結果是:A
A) 21                    B) 22                    C)無限循環                  D) 程序崩潰
 
48. 用樹形結構表示實體之間聯繫的模型是C
A) 關係模型                       B) 網狀模型                C) 層次模型                D)以上三個都是
 
49.有如下程序段:
char fun(char *);
main()
{
       char *s = “one”, a[5] = {0}, (*f1)(char *) = fun, ch;
}
則對函數fun的調用語句正確的是C
A) *f1(&a);                  B) f1(*s);                 C) f1(&ch)                   D) ch = *f1(s);要改成(*f1(s)才正確
 
50.有如下程序段:
int c = 23;
printf(“%d/n”, c&c);
請問執行結果是:C
A) 0               B) 46             C) 23                    D) 以上都不對
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章