2012年3月計(jì)算機(jī)二級(jí)C++模擬試題及答案(5)

字號(hào):


    一、選擇題
    1.設(shè)一棵二叉樹(shù)中有3個(gè)葉子結(jié)點(diǎn),有8個(gè)度為1的結(jié)點(diǎn),則該二叉樹(shù)中總的結(jié)點(diǎn)數(shù)為( )
    A.12 B.13 C.14 D.15
    【參考答案】 B
    2.下列敘述中,不屬于結(jié)構(gòu)化程序設(shè)計(jì)方法的主要原則的是( )
    A.自頂向下 B.由底向上 C.模塊化 D.限制使用goto語(yǔ)句
    【參考答案】 B
    3.為了避免流程圖在描述程序邏輯時(shí)的靈活性,提出了用方框圖來(lái)代替?zhèn)鹘y(tǒng)的程序流程圖,通常也把這種圖稱為( )
    A.PAD圖 B.N-S圖 C.結(jié)構(gòu)圖 D.數(shù)據(jù)流圖
    【參考答案】 B
    4.下列敘述中,不屬于數(shù)據(jù)庫(kù)系統(tǒng)的是( )
    A.數(shù)據(jù)庫(kù) B.數(shù)據(jù)庫(kù)管理系統(tǒng) C.數(shù)據(jù)庫(kù)管理員 D.數(shù)據(jù)庫(kù)應(yīng)用系統(tǒng)
    【參考答案】 B
    5.視圖設(shè)計(jì)一般有3種設(shè)計(jì)次序,下列不屬于視圖設(shè)計(jì)的是( )
    A.自頂向下 B.由外向內(nèi) C.由內(nèi)向外 D.自底向上
    【參考答案】 B
    6.棧通常采用的兩種存儲(chǔ)結(jié)構(gòu)是( )
    A.線性存儲(chǔ)結(jié)構(gòu)和鏈表存儲(chǔ)結(jié)構(gòu)
    B.散列方式和索引方式
    C.鏈表存儲(chǔ)結(jié)構(gòu)和數(shù)組
    D.線性存儲(chǔ)結(jié)構(gòu)和非線性存儲(chǔ)結(jié)構(gòu)
    【參考答案】 A
    7.完全不考慮程序的內(nèi)部結(jié)構(gòu)和內(nèi)部特征,而只是根據(jù)程序功能導(dǎo)出測(cè)試用例的測(cè)試方法是( )
    A.黑箱測(cè)試法 B.白箱測(cè)試法 C.錯(cuò)誤推測(cè)法 D.安裝測(cè)試法
    【參考答案】 A
    8.下列選項(xiàng)中,不屬于模塊間耦合的是( )
    A.數(shù)據(jù)耦合 B.同構(gòu)耦合 C.異構(gòu)耦合 D.公用耦合
    【參考答案】 C
    9.為用戶與數(shù)據(jù)庫(kù)系統(tǒng)提供接口的語(yǔ)言是( )
    A.高級(jí)語(yǔ)言 B.數(shù)據(jù)描述語(yǔ)言(DDL) C.數(shù)據(jù)操縱語(yǔ)言(DML) D.匯編語(yǔ)言
    【參考答案】 C
    10.需求分析階段的任務(wù)是確定( )
    A.軟件開(kāi)發(fā)方法 B.軟件開(kāi)發(fā)工具 C.軟件開(kāi)發(fā)費(fèi)用 D.軟件系統(tǒng)功能
    【參考答案】 D
       11.C++語(yǔ)言中用于定義類的關(guān)鍵字是( )
    A.class B.struct C.default D.sizeof
    【參考答案】 A
    12.以下程序的輸出結(jié)果是( )
    #include
    void main()
    {int a=21,b=11;
    cout<<--a+b;}
    A.30 B.31 C.32 D.33
    【參考答案】 B
    13.與y=(x>0?1:x<0?-1:0);的功能相同的if語(yǔ)句是( )
    A.if(x>0) y=1; B.if(x)
    else if(x<0) y=-1; if(x>0) y=1;
    else y=0; else if(x<0) y=-1;
    C.y=-1; D.y=0;
    if(x) if(x>=0)
    if(x>0) y=1; if(x>0) y=1;
    else if(x==0) y=0; else y=-1;
    else y=-1;
    【參考答案】 A
    14.下面程序段的運(yùn)行結(jié)果是( )
    #include
    void main()
    { char *s=″abcde″;
    s+=2;
    cout<<&s;}
    A.cde B.字符′c′ C.字符′c′的地址 D.無(wú)確定的輸出結(jié)果
    【參考答案】 C
    15.下面程序應(yīng)能對(duì)兩個(gè)整型變量的值進(jìn)行交換。以下正確的說(shuō)法是( )
    #include
    void swap(int p,int q)
    { int t;
    t=p;
    p=q;
    q=t; }
    void main()
    { int a=10,b=20;
    swap(&a,&b);
    cout<
    A.該程序完全正確
    B.該程序有錯(cuò),只要將語(yǔ)句swap(&a,&b);中的參數(shù)改為a,b即可
    C.該程序有錯(cuò),只要將swap()函數(shù)中的形參p和q以及t均定義為指針 (執(zhí)行語(yǔ)句不變)即可
    D.以上說(shuō)法都不對(duì)
    【參考答案】 D
    16.關(guān)于抽象類下面說(shuō)法正確的是( )
    A.抽象類就是其中有函數(shù)定義但沒(méi)有實(shí)現(xiàn)的類
    B.抽象類是可以被實(shí)例化的
    C.派生類不能成為抽象類
    D.抽象類的子類必須實(shí)現(xiàn)父類中的純虛函數(shù)
    【參考答案】 D
    17.如果表達(dá)式--x+y中,--是作為成員函數(shù)重載的,+是作為成員函數(shù)重載的,則該表達(dá)式還可為( )
    A.y.operator+(x.operator--(0)) B.y.operator+(x.operator--())
    C.y.operator+(operator--(x,0)) D.operator+(x.operator--())
    【參考答案】 B
    18.以下哪個(gè)基類中的成員函數(shù)表示純虛函數(shù)?( )
    A.virtual void vf(int) B.void vf(int)=0
    C.virtual void vf(=0) D.virtual void yf(int){ }
    【參考答案】 B
    19.派生類繼承基類的方式有( )
    A.public    B.private
    C.protected D.以上都對(duì)
    【參考答案】 D
    20.有以下程序
    #include
    void ss(char *s,char t)
    { while(*s)
    { if(*s==t) *s=t-′a′+′A′;
    s++; } }
    void main()
    { char str1[100]=″abcddfefdbd″,c=′d′;
     ss(str1,c);cout<
    程序運(yùn)行后的輸出結(jié)果是( )
    A.ABCDDEFEDBD B.abcDDfefDbD C.abcAAfefAbA D.Abcddfefdbd
    【參考答案】 B
       21.已知各變量的定義如下
    int i=8,k,a,b;
    unsigned long w=5;
    double x=1.42,y=5.2;
    則以下符合C++語(yǔ)言語(yǔ)法的表達(dá)式是( )
    A.a+=a-=(b=4)*(a=3) B.a=a*3+2
    C.x%(-3) D.y=float i
    【參考答案】 A
    22.對(duì)于下面的程序,說(shuō)法正確的是( )
    #include
    void main()
    { int x=3,y=4,z=2;
    if(x=y+z)cout<<″x=y+z″;
    else cout<<″x!=y+z″;}
    A.不能通過(guò)編譯 B.輸出6 C.輸出x!=y+z D.輸出x=y+z
    【參考答案】 D
    23.以下哪個(gè)不是C++語(yǔ)言中的有效標(biāo)識(shí)符?( )
    A.34a B._AB C.A_B D.A25
    【參考答案】 A
    24.下面程序的運(yùn)行結(jié)果是( )
    #include″iostream.h″
    #define sum(a,b)a*b
    void main()
    { int x;
    x=sum(1+2,3)
    cout
    A.0 B.9 C.7 D.5
    【參考答案】 C
    25.關(guān)于continue語(yǔ)句敘述不正確的是( )
    A.continue語(yǔ)句用于循環(huán)體中,結(jié)束循環(huán)
    B.continue語(yǔ)句用于循環(huán)體中,它使執(zhí)行流跳出循環(huán)體中尚未執(zhí)行的語(yǔ)句,并進(jìn)行下一循環(huán)判斷
    C.continue可以用于if語(yǔ)句中
    D.continue語(yǔ)句不能代替break語(yǔ)句
    【參考答案】 A
    26.下面程序的執(zhí)行結(jié)果是( )
    #include″iostream.h″
    void main()
    { int *p,r;
    p=new int;
    *p=20;
    r=sizeof(*p);
    cout<
    delete p; }
    A.程序錯(cuò)誤 B.內(nèi)存為20地址的大小 C.20 D.4
    【參考答案】 D
    27.下列程序的輸出結(jié)果是( )
    #include ″iostream″
    using namespace std;
    int Max(int a,int b)
    {
    if(a>b)
    return a;
    else
    return b;
    }
    void main()
    {
    int m,n;
    m=10,n=5;
    int max=Max(m,n);
    cout<
    }
    A.10 B.程序有誤 C.1 D.0
    【參考答案】 A
    28.C++中類定義中默認(rèn)的訪問(wèn)權(quán)限是( )
    A.public    B.protected
    C.private    D.default
    【參考答案】 C
    29.關(guān)于構(gòu)造函數(shù)A()的拷貝構(gòu)造函數(shù)正確的是( )
    A.A(A*B); B.A(AB); C.A(A&B); D.A(A);
    【參考答案】 C
    30.虛函數(shù)必須是類的( )
    A.成員函數(shù) B.友元函數(shù) C.構(gòu)造函數(shù) D.析構(gòu)函數(shù)
    【參考答案】 A
       31.不能重載的運(yùn)算符是( )
    A.new B.sizeof C..* D.++
    【參考答案】 C
    32.關(guān)于模板下列說(shuō)法不正確的是( )
    A.用類模板定義一個(gè)對(duì)象時(shí),不能省略實(shí)參 B.類模板只能有虛擬類型參數(shù)
    C.類模板本身在編譯中不會(huì)生成任何代碼 D.類模板的成員函數(shù)都是模板函數(shù)
    【參考答案】 B
    33.下面程序的結(jié)果為( )
    #include″iostream.h″
    void change(int a,int b)
    {int temp;
    temp=a;
    a=b;
    b=temp;}
    void main()
    {int m,n;
    m=8;
    n=9;
    change(m,n);
    cout<
    A.8 9 B.9 8 C.程序有錯(cuò)誤 D.9 9
    【參考答案】 A
    34.下面程序輸出的結(jié)果為( )
    #include ″iostream.h″
    class A
    { public:
    A(){cout<<″CLASS A″<
    ~A(){ } };
    class B:public A
    { public:
    B(){cout<<″CLASS B″<
    ~B(){ } };
    void main()
    { A *p;
    p=new B;
    B *q;
    q=new B; }
    A.CLASS A B.CLASS A C.CLASS A D.CLASS A
    CLASS B CLASS B CLASS B CLASS B
    CLASS B CLASS A CLASS B
    CLASS B CLASS B
    【參考答案】 C
    35.下列程序的運(yùn)行結(jié)果為( )
    #include
    template
    class FF
    { TT a1,a2,a3;
    public:
    FF(TT b1,TT b2,TT b3){a1=b1;a2=b2;a3=b3;}
    TT Sum(){return a1+a2+a3;} };
    void main()
    { FFx(int(1.1),2,3),y(int(4.2),5,6);
     cout<
    A.6.1 15.2 B.6 15 C.6 15.2 D.6.1 15
    【參考答案】 B
       二、填空題
    1.數(shù)據(jù)結(jié)構(gòu)包括數(shù)據(jù)的邏輯結(jié)構(gòu)、數(shù)據(jù)的【1】以及對(duì)數(shù)據(jù)的操作運(yùn)算。
    【參考答案】
    1.【1】存儲(chǔ)結(jié)構(gòu)
    2.軟件工程包括3個(gè)要素,分別為方法、工具和【2】。
    【參考答案】
    2.【2】過(guò)程
    3.在程序設(shè)計(jì)階段應(yīng)該采取【3】和逐步求精的方法,把一個(gè)模塊的功能逐步分解,細(xì)化為一系列具體的步驟,進(jìn)而用某種程序設(shè)計(jì)語(yǔ)言寫(xiě)成程序。
    【參考答案】
    3.【3】自頂而下
    4.數(shù)據(jù)庫(kù)系統(tǒng)階段的數(shù)據(jù)具有較高獨(dú)立性,數(shù)據(jù)獨(dú)立性包括物理獨(dú)立性和【4】?jī)蓚€(gè)含義。
    【參考答案】
    4.【4】邏輯獨(dú)立性
    5.棧和隊(duì)列通常采用的存儲(chǔ)結(jié)構(gòu)是【5】。
    【參考答案】
    5.【5】鏈?zhǔn)酱鎯?chǔ)和順序存儲(chǔ)
    6. 以下程序的輸出結(jié)果是【6】。
    #include
    void main()
    { a+=(a=8);
    cout<
    【參考答案】
    6.【6】16
    7.如果類中的一個(gè)成員函數(shù)的定義實(shí)現(xiàn)在類內(nèi),則該函數(shù)系統(tǒng)自動(dòng)默認(rèn)為該類的【7】函數(shù)。
    【參考答案】
    7.【7】?jī)?nèi)聯(lián)
    8.operator是運(yùn)算符重載時(shí)必須使用的關(guān)鍵字,它和被重載的運(yùn)算符連在一起,作為運(yùn)算符函數(shù)的專用函數(shù)名,務(wù)必把該函數(shù)說(shuō)明為【8】的。
    【參考答案】
    8.【8】public
    9.我們通常用到的cin>>,是屬于【9】輸入。
    【參考答案】
    9.【9】有格式
    10. 派生類的成員一般分為兩部分,一部分是【10】,另一部分是自己定義的新成員。
    【參考答案】
    10.【10】從基類繼承的成員
       11.設(shè)i,j,k均為int型變量,則執(zhí)行完for(i=0,j=10;i<-j;i++,j--)k=i+j;語(yǔ)句后,k的值為【11】。
    【參考答案】
    11.【11】10
    12.如果類B繼承了類A,則稱類A為類B的基類,類B稱為類A的【12】。
    【參考答案】
    12.【12】派生類
    13.已知程序的結(jié)果為1 2 3,請(qǐng)?zhí)羁铡?BR>    #include
    template
    class A
    { public:
    T x,y,z;
    void display(){cout<
    void main()
    { Aa1;
    【13】
    【14】
    【15】
    a1.display(); }
    【參考答案】
    13.【13】a1.x=1; 【14】a1.y=2; 【15】a1.z=3;
    上機(jī)部分
    一、改錯(cuò)題
    使用VC6打開(kāi)考生文件夾下的工程kt9_1,此工程包含一個(gè)源程序文件kt9_1.cpp,但該程序運(yùn)行有問(wèn)題,請(qǐng)改正程序中的錯(cuò)誤,使程序的輸出結(jié)果如下:
    4,5
    20
    源程序文件清單如下:
    #include
    classA
    { protected:
    intn,m;
    public:
    voidset(inta,intb){m=a;n=b;}
    voidshow(){cout<
    /**********found**********/ }
    classB:publicA
    { ints;
    public:
    voidset(){s=m*n;}
    voidshows(){cout<
    voidmain()
    {
    Bb;
    /**********found**********/
    b.set();
    b.show();
    b.set();
    /**********found**********/
    b.show();
    }
    【參考答案】
    (1)在“}”后添加分號(hào)
    (2)將b.set();改為:b.A::set(4,5);
    (3)將b.show();改為:b.shows();
    【試題解析】
    (1)主要考查對(duì)類定義格式的掌握,類的結(jié)尾應(yīng)該使用";";
    (2)主要考查對(duì)基類與派生類函數(shù)調(diào)用關(guān)系的掌握,根據(jù)所要求的輸出結(jié)果,應(yīng)該調(diào)用的函數(shù)為類A的set,而不是類B自身的set函數(shù),應(yīng)該避免調(diào)用的二義性;
    (3)主要考查對(duì)繼承與派生的理解,由所要求輸出結(jié)果可知正確:b.shows()。
    二、簡(jiǎn)單應(yīng)用題
    請(qǐng)編寫(xiě)一個(gè)函數(shù)intCalcDigital(char*str),該函數(shù)可返回字符串str中數(shù)字字符(即“0”-“9”這10個(gè)數(shù)字)的個(gè)數(shù),如字符串"olympic2008"中數(shù)字字符的個(gè)數(shù)為4。請(qǐng)用if條件判斷語(yǔ)句與for循環(huán)語(yǔ)句來(lái)實(shí)現(xiàn)該函數(shù)。
    注意:部分源程序已存在文件中。
    請(qǐng)勿修改主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)find的花括號(hào)中填寫(xiě)若干語(yǔ)句。
    文件kt9_2.cpp的內(nèi)容如下:
    #include
    #include
    intCalcDigital(char*str);
    voidmain()
    { char*str;
    str=newchar[255];
    cout<<"輸入字符串:";
    cin>>str;
    intnum=CalcDigital(str);
    cout<
    intCalcDigital(char*str)
    {
    }
    【參考答案】
    int CalcDigital(char *str)
    { if(str==NULL) return 0;
    int num_of_digital=0;
    int len=strlen(str);
    for(int i=0;i
    if(str[i]<='9' && str[i]>='0')
    num_of_digital++;
    return num_of_digital; }
    【試題解析】
    本題考查對(duì)于if條件判斷語(yǔ)句與for循環(huán)語(yǔ)句的熟練使用程度。注意判斷條件(判斷是否是數(shù)字是直接比較ASCII碼)的使用。
    3.綜合應(yīng)用題
    使用VC6打開(kāi)考生文件夾下的工程kt9_3,此工程包含一個(gè)源程序文件kt9_3.cpp,其中定義了Circle類與Money類,Circle類可對(duì)半徑為r的圓進(jìn)行周長(zhǎng)與面積的計(jì)算,而Money類用于計(jì)算一圓形游泳池的造價(jià)。游泳池四周有原形過(guò)道,過(guò)道外圍上柵欄,過(guò)道寬度為3米,根據(jù)鍵入的游泳池半徑,每米柵欄價(jià)格及每平方米過(guò)道價(jià)格,即可計(jì)算出游泳池的造價(jià)。請(qǐng)按要求完成下列操作,將程序補(bǔ)充完整。
    (1)定義符號(hào)常量PI(值為3.14159f)與WIDTH(值為3.00f),分別用于表示圓周率與過(guò)道的固定寬度。請(qǐng)?jiān)谧⑨尅?/**1**”之后添加適當(dāng)?shù)恼Z(yǔ)句。
    (2)定義Circle類默認(rèn)構(gòu)造函數(shù),把私有成員radius初始化為參數(shù)r的值。請(qǐng)?jiān)谧⑨尅?/**2**”之后添加適當(dāng)?shù)恼Z(yǔ)句;
    (3)完成Money類默認(rèn)構(gòu)造函數(shù)的定義,把私有成員FencePrice(每米柵欄的價(jià)格)、ConcretePrice(每平方米過(guò)道的價(jià)格)初始化為參數(shù)f,c的值。請(qǐng)?jiān)谧⑨尅?/**3**”之后添加適當(dāng)?shù)恼Z(yǔ)句。
    (4)完成Money類成員函數(shù)floatMoney::TotalMoney(floatfencelen,floatconarea)的定義,根據(jù)參數(shù)fencelen(柵欄的長(zhǎng)度)和conarea(過(guò)道的面積),返回柵欄與過(guò)道的總造價(jià)。請(qǐng)?jiān)谧⑨尅?/**4**”之后添加適當(dāng)?shù)恼Z(yǔ)句。
    注意:除在指定位置添加語(yǔ)句之外,請(qǐng)不要改動(dòng)程序中的其他內(nèi)容。
    源程序文件kt9_3.cpp清單如下:
    #include
    //**1**
    classCircle
    { private:
    floatradius;
    public:
    //**2**
    floatCircumference(){return2*PI*radius;}
    floatArea(){returnPI*radius*radius;} };
    classMoney
    { private:
    floatFencePrice;
    floatConcretePrice;
    public:
    Money(floatf,floatc);
    floatTotalMoney(floatfencelen,floatconarea); };
    Money::Money(floatf,floatc)
    { //**3** }
    floatMoney::TotalMoney(floatfencelen,floatconarea)
    { //**4** }
    voidmain()
    { floatradius,fence,concrete;
    cout.setf(ios::fixed);
    cout.setf(ios::showpoint);
    cout.precision(2);
    cout<<"Entertheradiusofthepool:";
    cin>>radius;
    cout<<"EntertheFencePrice:";
    cin>>fence;
    cout<<"EntertheConcretePrice:";
    cin>>concrete;
    CirclePool(radius);
    CirclePoolRim(radius+WIDTH);
    Moneymon(fence,concrete);
    floattotalmoney(PoolRim.Circumference(),(PoolRim.Area()-Pool.Area()));
    cout<<"ThetotalmoneyisRMB"<
    【參考答案】
    (1)const float PI = 3.14159f;
    const float WIDTH =3.00f;
    (2)Circle(float r):radius(r){};
    (3)FencePrice=f;
    ConcretePrice=c;
    (4)return FencePrice*fencelen+ConcretePrice*conarea;
    【試題解析】
    本題考查對(duì)符號(hào)常量的定義及類的定義與實(shí)現(xiàn)等方面的內(nèi)容,其中常類型的定義應(yīng)使用const關(guān)鍵字。