2007年9月全國計算機等級考試二級C++筆試試題及答案

字號:

為大家收集整理了《2007年9月全國計算機等級考試二級C++筆試試題及答案》供大家參考,希望對大家有所幫助?。?!
    一、選擇題(每小題2分,共70分) 下列各題A)、B)、C)、D)四個選項中,只有一個選項是正確的。請將正確選項涂寫在答題卡相應位置上,答在試卷上不得分。
    (1)下列敘述中正確的是 。
    A)算法的效率只與問題的規(guī)模有關,而與數據的存儲結構無關.
    B)算法的時間復雜度是指執(zhí)行算法所需要的計算工作量
    C)數據的邏輯結構與存儲結構是一一對應的.
    D)算法的時間復雜度與空間復雜度一定相關.
    (2)在結構化程序設計中,模塊劃分的原則是 。
    A) 各模塊應包括盡量多的功能
    B) 各模塊的規(guī)模應盡量大
    C)各模塊之間的聯(lián)系應盡量緊密
    D) 模塊內具有高內聚度,模塊間具有低耦合度
    (3)下列敘述中正確的是 。
    A)軟件測試的主要目的是發(fā)現(xiàn)程序中的錯誤.
    B)軟件測試的主要目的是確定程序中錯誤的位置.
    C)為了提高軟件測試的效率,由程序編制者自己來完成軟件測試的工作
    D)軟件測試是證明軟件沒有錯誤
    (4) 下面選項中不屬于面向對象程序設計特征的是 。
    A)繼承性
    B)多態(tài)性
    C)類比性
    D)封裝性
    (5) 下列對列的敘述正確的是 。
    A) 隊列屬于非線性表
    B) 隊列按”先進后出”的原則組織數據
    C)隊列在隊尾刪除數據
    D) 隊列按“先進先出”原則組織數據
    (6)對下列二叉樹
    進行前序遍歷的結果為
    A)DYBEAFCZX
    B)YDEBFZXCA
    C)ABDYECFXZ
    D)ABCDEFXYZ
    (7)某二叉樹中有n個度為2的結點則該二叉樹中的葉子結點數為
    A)n+1
    B)n-1
    C)2n
    D)n/2
    (8)在下列關系運算中,不改變關系表中的屬性個數但能減少元組個數的是 。
    A)井
    B)交
    C)投影
    D)笛卡兒乘積
    (9)在E-R圖中,用來表示實體之間是聯(lián)系的圖形是 。
    A) 矩形
    B)橢圓形
    C)菱形
    D)平行四邊形
    (10)下列敘述中錯誤的是 。
    A) 在數據庫系統(tǒng)中,數據的物理結構必須與邏輯結構一致.
    B)數據庫技術的根本目標是要解決數據的共享問題
    C)數據庫設計是指在已有數據庫管理系統(tǒng)的基礎上建立數據庫
    D)數據庫系統(tǒng)需要操作系統(tǒng)的支持
    (11)為了取代C中帶參數的宏,在C++中使用
    A)重載函數
    B)內聯(lián)函數
    C)遞歸函數
    D)友元函數
    (12)下列關于類定義的說法中,正確的是
    A)類定義中包括數據成員和函數成員的聲明
    B)類成員的缺省訪問權限是保護的
    C) 數據成員必須被聲明為私有的
    D)成員函數只能在類體外進行定義
    (13)下列關于派生類構造函數和析構函數的說法中,錯誤的是
    A)派生類的構造函數會隱含調用基類的構造函數
    B)如果基類中沒有缺省構造函數,那么派生類必須定義構造函數
    C)在建立派生類對象時,先調用基類的構造函數,再調用派生類的構造函數
    D)在銷毀派生類對象時,先調用基類的析構函數,再調用派生類的析構函數
    (14)通過運算符重載,可以改變運算符原有的
    A)操作數類型
    B)操作數個數
    C)優(yōu)先級
    D)結合性
    (15)有如下函數模板:
    template T souare(T x) (retumx * x ;)
    基中T是
    A)函數形參
    B)函數實參
    C)模板形參
    D)模板實參
    (16)使用輸入輸出操作符setw,可以控制
    A)輸出精度
    B)輸出寬度
    C)對齊方式
    D)填充字符
    (17)下列字符串中,不可以用作C++標識符的是
    A)y_2006
    B)____TEST__H
    C)Retum
    D)switch
    (18)字面常量42、4.2、42L的數據類型分別是
    A)long、double int
    B)long、float、int
    C)int、double、long
    D)int、float、long
    (19)執(zhí)行下列語句段后,輸出字符“*”的個數是
    for(int i =50;I>1;— i )cout<<”*”
    A)48
    B)49
    C)50
    D)51
    (20)有如下程序段
    int i =0, j=1;
    int?。=i ; // ①
    r =j; //②
    int*p=&i ; //③
    *p=&r ; //④
    基中會產生編譯錯誤的語句是
    A)④
    B)③
    C)②
    D)①
    (21)有如下函數定義:
    void func (int a,int&b) {a++; b++;}
    若執(zhí)行代碼段:
    int x=0 ,y=1
    func(x,y);
    則變量x和y值分別是
    A)0和1  
    B)1和1
    C)0和2
    D)1和2
    (22)有如下程序:
    #include
    using namespace std;
    class A{
    public
    static int a;
    void init(){a=1;}
    A(int a=2) {init();a++;}
    };
    int A:;a=0
    A obj;
    Int main()
    {
    cout<  retum0;
    }
    運行時輸出的結果是
    A)0
    B)1
    C)2
    D)3
    (23)下列有關繼承和派生的敘述中,正確的是
    A) 派生類不能訪問基類的保護成員
    B)作為虛基類的類不能被實例化
    C)派生類應當向基類的構造函數傳遞參數
    D)虛函數必須在派生類中重新實現(xiàn)
    (24)下列運算符中,不能被重載的是
    A)&&
    B)!=
    C).
    D)++
    (25)下列函數模板的定義中,合法的是
    A) template Tabs(T x) {return x <0 – x: x;}
    B)template class Tabs(Tx){retumx<0 -x;x;}
    C)template Tabs(T x){retum x<0 -x;x;}
    D)template T abs(T x){returm x<0 -x;x;}
    (26)在語句cin>>data;中,cin是
    A)C++的關鍵字
    B)類名
    C)對象名
    D)函數名
    (27)有如下程序:
    #include
    using namespace std;
    class test {
    private:
    int a;
    public:
    test(){cout<<”constructor”<  test(int a){cout<  test(const test&_test)
    {
    a=_testa;
    cout<<”copy constructor”<  }
    test(){cout<<”destructor”<  };
    int main()
    }
    test A(3)
    return0;
    運行時輸出的結果是
    A)3
    B)constructor
    destruclor
    C)copy constructor
    D)3
    dstructor destruclor
    (28)若有如下類聲明
    class My Class {
    public:
    MyClass() {cout<<1;}
    };
    執(zhí)行下列語句
    MyClass a,b[2],*P[2];
    以后,程序的輸出結果是
    A)11
    B)111
    C)1111
    D11111
    (29)有如下程序:
    #include
    using namespace std;
    class point {
    public:
    static int number;
    public:
    point(){number++;
    ~point(){number-;}
    };
    imt point::number=0;
    void main(){
    point*ptr;
    printA,B;
    {
    point*ptr_point=new point{3};
    ptr=ptr_point;
    }
    pointC;
    cout<  delete[]ptr;
    }
    運行時輸出的結果是
    A)3
    B)4
    C)6
    D)7
    (30)如果不使用多態(tài)機制,那么通過基類的指針雖然可以指向派生類對象,但是只能訪問從基類繼承的成員,有如下程序,沒有使用多態(tài)機制。
    #include
    using namespace std;
    class Base{
    int a,b;
    public:
    Bace(int x ,int y) { a=x; b=y;}
    Void show(){ cout<  }
    clsaa Derived:public Base {
    int c ,d;
    public:
    Derived(int x,int y,int z,int m):Base(x,y){c=z; d=m;}
    Void show(){ cout<  };
    int main()
    {
    Base B1(50,50),*pb;
    Derived DI(10,20,30,40);
    Pb=&D1;
    Pb->show();
    Return 0;
    }
    運行時輸出的結果是
    A)10,20
    B)30,40
    C)20,30
    D)50,50
    (31)有如下程序:
    #include
    using namespace std;
    class A
    {
    public;
    A(int i ){x= i ;}
    Void sispa(){cout<  Private:
    int x ;
    };
    class B;publicA
    {
    public;
    B(int i):A(i +10) {x =i ;}
    voud dispb() {dispa();cout<  Private:
    Int x;
    };
    int main()
    {
    B b(2);
    b.dispb()
    retum 0:
    }
    運行時輸出的結果是
    A)10,2
    B)12,10
    C)12,2
    D)2,2
    (32)虛函數支持多態(tài)調用,一個基類的指針可以指向派生類的對象,而且通過這樣的指針調用虛函數時,,被調用的是指針所指的實際對象的虛函數,而非虛函數不支持多態(tài)調用。有如下程序:
    #include
    using namespace std;
    class Base
    {
    public:
    virtual void f(){cout<<”f0+”;}
    void g() {cout<<”g0+”;}
    };
     class Derived:public Base
    {
    public:
    void f() {cout<<”f+”;}
    void g() {cout<<”g+”;}
    };
    int main()
    {
    Derived d;
    Base*p=&d;
    p->f(); p->g();
    return 0:
    }
    運行時輸出的結果是
    A)f+g+
    B)f0+g+
    C)f+g0+
    D)f0+g0+
    (33)下面程序中對一維坐標點類Point進行運算符重載
    #include
    using namespace std;
    class point {
    public:
    point (int vaI) {x=val;}
    point& operator++(){x++;retum*this;}
    print operator++(int) {point old=*this,++(*this);retum old;}
    int GetX() const {retum x;}
    private:
    int x;
    };
    int main()
    {
    point a(10);
    cout<<(++a).GetX();
    cout<  retum();
    }
    編譯和運行情況是
    A)運行時輸出1011
    B)運行時輸出1111
    C)運行時輸出1112
    D)編譯有錯
    (34)有如下程序:
    #include
    using namespace std;
    int main()
    {
    char str[100],*p;
    cout<<”please input a string:”;
    cin>>str;
    p=str;
    for(int i =0;*p!=”\0”;p++, i ++);
    cout<< i <  retum 0;
    }
    運行這個程序時,若輸入字符串為
    abcdefg abcd
    則輸出結果是
    A)7
    B)12
    C)13
    D)100
    (35)有如下程序::
    #include
    using namespace std:
    class Sample
    {
    friend long fun (Sample s);
    public:
    Sample (long a ){x=a;}
    Private:
    long x;
    };
    long fun (Sample s)
    {
    if(s.x<2)retum 1;
    retum s.x*fun(Sample(s.x-a));
    }
    int main()
    {
    int sum=0
    for(int i =0; i <6; i ++) { sum+=fun(Sample( i );) }
    cout<  retum 0;
    }
    運行時輸出的結果是
    A)120
    B)16
    C)154
    D)34
    二、填空題(每空2分,共30分)
    請將每一個空的正確答案寫在答題卡【1】~【15】序號的橫線上,答在試卷上不得分。
    (1)在深度為7的滿二叉樹中,度為2的結點個數為 【1】 。
    (2)軟件測試分為白箱(盒)測試和黑箱(盒)測試,等價類劃分法屬于 【2】 測試。
    (3)在數據庫系統(tǒng)中,實現(xiàn)各種數據管理體制功能的核心軟件稱為 【3】 。
    (4)軟件生命周期可分為多個階段,一般分為定義階段、開發(fā)和維護階段。編碼和測試屬于 【4】 階段。
    (5)在結構化分析使用的數據流圖(DFD)中,利用 【5】 對其中的圖形元素進行確切解釋。
    (6)C++中只有兩個邏輯常量:true和 【6】 。
    (7)若要訪問指針變量p所指向的數據,應使用表達式 【7】 。
    (8)已知一個函數的原型是:
    int fn(double x);
    若要以5.27為實參調用該函數,應使用表達式 【8】 。
    (9)有如下定義:
    class MA{
    int value;
    public:
    MA(int n=0):valut(n){}
    };
    MA*ta,tb;
    其中MA類的對象名標識符是 【9】 。
    (10)如下類定義中包含了構造函數和拷貝數的原型聲明請在橫線處寫正確的內容,使拷貝構造函數的聲明完整。
    Class my Class{
    Private:
    Int data:
    Public:
    MyClass(int value); //構造函數
    MyClass(const 【10】 another Object); //拷貝構造函數
    }
    (11)用來派生新類的稱為 【11】 ,而派生出的新類稱為它的子類或派生類。
    (12)有如下程序:
    #include
    using namespace std;
    clsaa CA{
    public:
    CAD{cout<  };
    class CB ;private CA{
    public;
    CB(){cout<  };
    int main(){cout<  };
    int main(){
    CA a;
    CB b; 
    retum0;
    }
    這個程序的輸出結果是 【12】 。
    (13)若將一個二元運算符重載為類的成員函數,其形參個數應該是 【13】 個。
    (14)有如下程序:
    #include
    using namespace std;
    class DA{
    int k;
    public:
    DA(int x=1): k (x){}
    ~DA(){cout<  };
    int main(){
    DA d[]={DA(3),DA(3),DA(3)};
    DA* p=new DA[2];
    delete[]p;
    return0;
    }
    這個程序的輸出結果是 【14】 。
    (15)C++語言中的多態(tài)性分為編譯時的多態(tài)性和 【15】 時的多態(tài)性。
    選擇題:
    1-5BDACD
    6-10CABCA
    11-15BADAC
    16-20BCDBA
    21-25CCCCA
    26-30CDBDA
    30-35CBBBC
    填空:
    1、63
    2、黑盒
    3、DBMS
    4、開發(fā)
    5、數據字典
    6、false
    7、 *P
    8、fn(5.27)
    9、tb
    10、myclass&
     11、基類
    12、AAB
    13、1個
    14、11333
    15、運行