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

字號(hào):


    一、選擇題
    1.已知一棵二叉樹前序遍歷和中序遍歷分別為ABDEGCFH和DBGEACHF,則該二叉樹的后序遍歷為( )
    A.GEDHFBCA B.DGEBHFCA
    C.ABCDEFGH D.ACBFEDHG
    【參考答案】 B
    2.如果進(jìn)棧序列為e1,e2,e3,e4,則可能的出棧序列是( )
    A.e3,e1,e4,e2 B.e2,e4,e3,e1 C.e3,e4,e1,e2 D.任意順序
    【參考答案】 B
    3.程序設(shè)計(jì)語(yǔ)言的基本成分是數(shù)據(jù)成分、運(yùn)算成分、控制成分和( )
    A.對(duì)象成分 B.變量成分 C.語(yǔ)句成分 D.傳輸成分
    【參考答案】 D
    4.下列不屬于軟件工程的3個(gè)要素的是( )
    A.工具 B.過程 C.方法 D.環(huán)境
    【參考答案】 D
    5.將E-R圖轉(zhuǎn)換到關(guān)系模式時(shí),實(shí)體與聯(lián)系都可以表示成( )
    A.屬性 B.關(guān)系 C.鍵 D.域
    【參考答案】 B
    6.在深度為5的滿二叉樹中,葉子結(jié)點(diǎn)的個(gè)數(shù)為( )
    A.32 B.31 C.16 D.15
    【參考答案】 B
    7.一些重要的程序語(yǔ)言(如C語(yǔ)言和Pascal語(yǔ)言)允許過程的遞歸調(diào)用。而實(shí)現(xiàn)遞歸調(diào)用中的存儲(chǔ)分配通常用( )
    A.棧 B.堆 C.數(shù)組 D.鏈表
    【參考答案】 A
    8.開發(fā)軟件時(shí)對(duì)提高開發(fā)人員工作效率至關(guān)重要的是( )
    A.操作系統(tǒng)的資源管理功能 B.先進(jìn)的軟件開發(fā)工具和環(huán)境
    C.程序人員的數(shù)量 D.計(jì)算機(jī)的并行處理能力
    【參考答案】 B
    9.數(shù)據(jù)處理的最小單位是( )
    A.數(shù)據(jù) B.數(shù)據(jù)元素 C.數(shù)據(jù)項(xiàng) D.數(shù)據(jù)結(jié)構(gòu)
    【參考答案】 C
    10.下述關(guān)于數(shù)據(jù)庫(kù)系統(tǒng)的敘述中正確的是( )
    A.數(shù)據(jù)庫(kù)系統(tǒng)減少了數(shù)據(jù)冗余
    B.數(shù)據(jù)庫(kù)系統(tǒng)避免了一切冗余
    C.數(shù)據(jù)庫(kù)系統(tǒng)中數(shù)據(jù)的一致性是指數(shù)據(jù)類型一致
    D.數(shù)據(jù)庫(kù)系統(tǒng)比文件系統(tǒng)能管理更多的數(shù)據(jù)
       11.以下各選項(xiàng)組中,均是C++語(yǔ)言關(guān)鍵字的組是( )
    A.public operator this
    B.shod string static
    C.it while>=
    D.private cout printf
    【參考答案】 A
    12.下列描述正確的是( )
    A.表示m>n為true或mn&&m
    B.switch語(yǔ)句結(jié)構(gòu)中必須有default語(yǔ)句
    C.if語(yǔ)句結(jié)構(gòu)中必須有else語(yǔ)句
    D.如果至少有一個(gè)操作數(shù)為true,則包含“||”運(yùn)算符的表達(dá)式為true
    【參考答案】 D
    13.下面關(guān)于break語(yǔ)句的描述中,不正確的是( )
    A.break可以用于循環(huán)體內(nèi)
    B.break語(yǔ)句可以在for循環(huán)語(yǔ)句中出現(xiàn)多次
    C.break語(yǔ)句可以在switch語(yǔ)句中出現(xiàn)多次
    D.break語(yǔ)句可用于if條件判斷語(yǔ)句內(nèi)
    【參考答案】 D
    14.下面程序錯(cuò)誤的是( )
    ① #include
    ② void main()
    ③ {
    ④ int *p=new int[1];
    ⑤ p=9;
    ⑥ cout<<*p<
    ⑦ delete[]p;
    ⑧ }
    A.④ B.⑤ C.⑥ D.⑦
    【參考答案】 B
    15.不能作為重載函數(shù)的調(diào)用的依據(jù)是( )
    A.參數(shù)個(gè)數(shù) B.參數(shù)類型 C.函數(shù)類型 D.函數(shù)名稱
    【參考答案】 D
    16.在C++語(yǔ)言中,數(shù)據(jù)封裝要解決的問題是( )
    A.數(shù)據(jù)的規(guī)范化 B.便于數(shù)據(jù)轉(zhuǎn)換
    C.避免數(shù)據(jù)丟失 D.防止不同模塊之間數(shù)據(jù)的非法訪問
    【參考答案】 D
    17.類的構(gòu)造函數(shù)和析構(gòu)函數(shù)描述正確的是()
    A.構(gòu)造函數(shù)可以重載,析構(gòu)函數(shù)不能重載
    B.構(gòu)造函數(shù)不能重載,析構(gòu)函數(shù)可以重載
    C.構(gòu)造函數(shù)可以重載,析構(gòu)函數(shù)也可以重載
    D.構(gòu)造函數(shù)不能重載,析構(gòu)函數(shù)也不能重載
    【參考答案】 A
    18.對(duì)靜態(tài)數(shù)據(jù)成員的描述中,正確的是( )
    A.靜態(tài)數(shù)據(jù)成員是類的所有對(duì)象共享的數(shù)據(jù)
    B.類的每個(gè)對(duì)象都有自己的靜態(tài)數(shù)據(jù)成員
    C.類的不同對(duì)象有不同的靜態(tài)數(shù)據(jù)成員值
    D.靜態(tài)數(shù)據(jù)成員不能通過類的對(duì)象調(diào)用
    【參考答案】 A
    19.可以用p.a的形式訪問派生類對(duì)象p的基類成員a,其中a是( )
    A.私有繼承的公有成員 B.公有繼承的私有成員
    C.公有繼承的保護(hù)成員 D.公有繼承的公有成員
    【參考答案】 D
    20.下面關(guān)于虛函數(shù)的描述,錯(cuò)誤的是( )
    A.在成員函數(shù)聲明的前面加上virtual修飾,就可把該函數(shù)聲明為虛函數(shù)
    B.基類中說(shuō)明了虛函數(shù)后,派生類中對(duì)應(yīng)的函數(shù)也必須說(shuō)明為虛函數(shù)
    C.虛函數(shù)可以是另一個(gè)類的友元函數(shù),但不能是靜態(tài)成員函數(shù)
    D.基類中說(shuō)明的純虛函數(shù)在其任何派生類中都必須實(shí)現(xiàn)
    【參考答案】 B
       21.語(yǔ)句ofstream f(″SALARY.DAT″,
    ios::app|ios::binary);的功能是建立流對(duì)象f,試圖打開文件SALARY.DAT并與之連接,且( )
    A.若文件存在,將文件寫指針定位于文件尾;若文件不存在,建立一個(gè)新文件
    B.若文件存在,將其置為空文件;若文件不存在,找開失敗
    C.若文件存在,將文件寫指針定位于文件首;若文件不存在,建立一個(gè)新文件
    D.若文件存在,找開失敗;若文件不存在,建立一個(gè)新文件
    【參考答案】 A
    22.下面程序的運(yùn)行結(jié)果是( )
    #include
    void fun(int *a,int *b)
    {int x=*a;
     *a=*b;*b=x;
     cout<<*a<<*b<<″ ″;}
    void main()
    {int x=1,y=2;
    fun(&x,&y);
     cout<
    A.12 12 B.12 21 C.21 12 D.21 21
    【參考答案】 D
    23.以下哪個(gè)特征不是面向?qū)ο笏枷胫械闹饕卣?( )
    A.多態(tài) B.繼承 C.封裝 D.垃圾回收
    【參考答案】 D
    24.C++中運(yùn)算符優(yōu)先級(jí)由高到低排列正確的是( )
    A.:: ++ +|| B.< * ||,
    C.sizeof % + :: D., && new sizeof
    【參考答案】 A
    25.以下for語(yǔ)句中不是死循環(huán)的是( )
    A.for(int i=0;i<1;++i); B.for(int i=0;;++i); C.for(int i=1;i>0;++i); D.for(;;);
    【參考答案】 A
       26.以下定義數(shù)組中錯(cuò)誤的是( )
    A.int a[10]; B.int a[2][20]; C.int a[20][]; D.int a[];
    【參考答案】 C
    27.下面程序錯(cuò)誤的語(yǔ)句是( )
    #include ″iostrteam.h″
    ① void main()
    ② {
    ③ int A=0;
    ④ int & B;
    ⑤ B=A;
    ⑥ cout<
    ⑦ cout<
    ⑧ }
    A.② B.③ C.④ D.⑥
    【參考答案】 C
    28.函數(shù)int test(int a,int b=1,int c=0),下列調(diào)用不合法的個(gè)數(shù)是( )
    test(0); test(0,0); test(); test(0,0,0);
    A.0 B.1 C.2 D.3
    【參考答案】 C
    29.C++語(yǔ)言中關(guān)于構(gòu)造函數(shù)的說(shuō)法正確的是( )
    A.構(gòu)造函數(shù)的函數(shù)名不必和類名相同 B.構(gòu)造函數(shù)只能每一個(gè)
    C.每個(gè)類必定有構(gòu)造函數(shù) D.構(gòu)造函數(shù)必有返回值
    【參考答案】 C
    30.下面程序的執(zhí)行結(jié)果為( )
    #include ″iostream″
    using namespace std;
    class A
    {
    int a;
    public:
    void Seta(int x){a=x;}
    void Display_a(){cout<
    };
    class B
    {
    int b;
    public:
    void Setb(int x){b=x;}
    void Dispaly_b(){cout<
    };
    class C:public A,private B
    {private:
    int c;
    public:
    void Setc(int x,int y,int z)
    { c=z;Seta(x);Setb(y);}
    void Display_c(){cout<
    ① void main()
    ② {
    ③ C cc;
    ④ cc.Seta(1);
    ⑤ cc.Display_a();
    ⑥ cc.Setc(2,2,3);
    ⑦ cc.Dispaly_b();
    ⑧ cc.Display_c();
    }
    A.輸出為2 2 3 B.有錯(cuò)誤在第5行 C.輸出為1 2 3 D.有錯(cuò)誤在第7行
    【參考答案】 D
    31.多態(tài)性指的是( )
    A.以任何方式調(diào)用一個(gè)虛函數(shù)
    B.以任何方式調(diào)用一個(gè)純虛函數(shù)
    C.借助于指向?qū)ο蟮幕愔羔樆蛞谜{(diào)用一個(gè)虛函數(shù)
    D.借助于指向?qū)ο蟮幕愔羔樆蛞谜{(diào)用一個(gè)純虛函數(shù)
    【參考答案】 C
    32.只能作為成員函數(shù)重載的是( )
    A.= B.++ C.* D.new
    【參考答案】 A
    33.語(yǔ)句cout<
    A.1024.4567 B.1024 C.1024.45 D.1e+003
    【參考答案】 D
    34.下列程序的結(jié)果是( )
    #include ″iostream.h″
    void main()
    {
    char *str;
    str=″test!″;
    cout<
    }
    A.程序錯(cuò)誤 B.! C.′\0′ D.為空字符
    【參考答案】 D
    35.C++語(yǔ)言函數(shù)中不能由系統(tǒng)自動(dòng)生成的是( )
    A.析構(gòu)函數(shù) B.構(gòu)造函數(shù) C.內(nèi)聯(lián)函數(shù) D.拷貝構(gòu)造函數(shù)
    【參考答案】 C
    二、填空題
    1.數(shù)據(jù)結(jié)構(gòu)分為邏輯結(jié)構(gòu)與存儲(chǔ)結(jié)構(gòu),線性鏈表屬于【1】。
    【參考答案】
    【1】存儲(chǔ)結(jié)構(gòu)
    2.耦合和內(nèi)聚是評(píng)價(jià)模塊獨(dú)立性的兩個(gè)主要標(biāo)準(zhǔn),其中【2】反映了模塊內(nèi)各成分之間的聯(lián)系。
    【參考答案】
    【2】?jī)?nèi)聚
    3.數(shù)據(jù)庫(kù)設(shè)計(jì)分為以下6個(gè)設(shè)計(jì)階段:需求分析階段、【3】、邏輯設(shè)計(jì)階段、物理設(shè)計(jì)階段、實(shí)施階段、運(yùn)行和維護(hù)階段。
    【參考答案】
    【3】數(shù)據(jù)庫(kù)概念設(shè)計(jì)階段
    4.面向?qū)ο蟮哪P椭?,最基本的概念是?duì)象和【4】。
    【參考答案】
    【4】類
    5.數(shù)據(jù)模型按不同應(yīng)用層次分成3種類型,它們是概念數(shù)據(jù)模型、【5】和物理數(shù)據(jù)模型。
    【參考答案】
    【5】邏輯數(shù)據(jù)模型
    6.開發(fā)一個(gè)C++語(yǔ)言程序的步驟通常包括編輯、【6】、鏈接、運(yùn)行和調(diào)試。
    【參考答案】
    【6】編譯
    7.下面程序的輸出結(jié)果為【7】。
    #include
    void main()
    {
    int num=0,i=8;
    do{
    i--;
    num++;
    }while(--i);
    cout<
    }
    【參考答案】
    【7】-4
    8.下面程序的運(yùn)行結(jié)果為【8】。
    #include
    void fun(int x=0,int y=0)
    {cout<
    void main()
    {fun(5);}
    【參考答案】
    【8】50
    9.C++語(yǔ)言支持的兩種多態(tài)性分別是編譯時(shí)的多態(tài)性和【9】的多態(tài)性。
    【參考答案】
    【9】運(yùn)行時(shí)
    10.cout.put(′A′);,還可以表示為【10】。
    【參考答案】
    【10】cout<<′A′;
    11.將以下程序?qū)懗扇窟\(yùn)算表達(dá)式是【11】。
    if(a>b)max=a;
    else max=b;
    【參考答案】
    【11】max=(a>b)?a:b;
    12.下面程序的功能是將字符數(shù)組a中下標(biāo)值為偶數(shù)的元素從小到大排列,其他元素不變,請(qǐng)?zhí)羁铡?BR>    #include
    #include
    void main()
    { char a[]=″clanguage″,t;
    int i,j,k;
    k=strlen(a);
    for(i=0;i<=k-2;i+=2)
    for(j=i+2;j<=k;【12】)
    if(【13】)
    { t=a[i];a[i]=a[j];a[j]=t;}
    cout<
    cout<
    【12】j+=2 【13】a[i]>=a[j]或a[i]>a[j]
    13.請(qǐng)定義一個(gè)函數(shù)名為A,返回值為int,沒有參數(shù)的純虛函數(shù)的定義是【14】。
    【參考答案】
    【14】virtual int A()=0;
    14.假設(shè)fin是一個(gè)文件流對(duì)象,則關(guān)閉文件的語(yǔ)句是【15】。
    【參考答案】
    【15】fin
    上機(jī)部分
    一、改錯(cuò)題
    使用VC6打開考生文件夾下的工程kt5_1,此工程包含一個(gè)源程序文件kt5_1.cpp,但該程序運(yùn)行有問題,請(qǐng)改正程序中的錯(cuò)誤,使程序的輸出結(jié)果如下:
    (1,2)
    5,6
    (6,9)
    源程序文件kt5_1.cpp清單如下:
    #include
    classA{
    public:
    A(inti,intj){a=i;b=j;}
    /****************found*******************/
    voidMove(intx,inty){a+=x;b+=y}
    voidShow(){cout<<"("<
    private:
    inta,b;
    };
    classB:privateA
    {
    public:
    /****************found*******************/
    B(inti,intj,intk,intl):(i,j){x=k;y=l;}
    voidShow(){cout<
    voidfun(){Move(3,5);}
    /****************found*******************/
    voidf1(){Show();}
    private:
    intx,y;
    };
    voidmain()
    {
    Ae(1,2);
    e.Show();
    Bd(3,4,5,6);
    d.fun();
    d.Show();
    d.f1();
    }
    【參考答案】
    (1)將void Move( int x, int y) {a+=x;b+=y}
    改為:void Move( int x, int y) {a+=x;b+=y;}
    (2)將B(int i,int j,int k,int l):(i,j) {x=k;y=l;}
    改為:B(int i,int j,int k,int l):A(i,j) {x=k;y=l;}
    (3)將void f1(){Show();}
    改為:void f1(){A::Show();}
    【試題解析】
    (1)主要考查對(duì)表達(dá)式定義規(guī)則的掌握,此處缺少一個(gè)“;”,任何一個(gè)表達(dá)式都應(yīng)該以分號(hào)作為結(jié)束標(biāo)志;
    (2)主要考查對(duì)派生類構(gòu)造函數(shù)定義的掌握,參數(shù)列表中基類的成員應(yīng)使用基類構(gòu)造函數(shù)初始化,因此必須向基類傳遞參數(shù),傳遞時(shí)直接使用基類名;
    (3)主要考查對(duì)基類函數(shù)調(diào)用方法的掌握,為了調(diào)用基類的函數(shù)應(yīng)該使用作用域符“::”以限定訪問的位置。
    二、簡(jiǎn)單應(yīng)用題
    請(qǐng)編寫一個(gè)函數(shù)intpattern_index(charsubstr[],charstr[]),該函數(shù)執(zhí)行含通配符"?"的字符串的查找時(shí),該通配符可以與任一個(gè)字符匹配成功。當(dāng)子串substr在str中匹配查找成功時(shí),返回子串substr在str中的位置,否則返回值為0。要求使用for循環(huán)實(shí)現(xiàn)。輸出結(jié)果如下:
    子串起始位置:5
    注意:部分源程序已存在文件kt5_2.cpp中。
    請(qǐng)勿修改主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)pattern_index的花括號(hào)中填寫若干語(yǔ)句。
    文件kt5_2.cpp的內(nèi)容如下:
    #include
    intpattern_index(charsubstr[],charstr[])
    {
    }
    voidmain()
    {
    char*substring,*string;
    intsame;
    substring="???gram";
    string="thisprogramreturnindexofsubstring";
    same=pattern_index(substring,string);
    if(same)
    cout<<"子串起始位置:"<
    else
    cout<<"匹配不成功"<
    }
    【參考答案】
    int pattern_index(char substr[],char str[])
    {int i,j,k;
    for(i=0;str[i];i++)
    for(j=i,k=0;(str[j]==substr[k])||(substr[k]=='?');j++,k++)
    if(!substr[k+1])
    return(i);
    return(0);}
    【試題解析】
    本題主要考查使用for循環(huán)和一維數(shù)組的能力。對(duì)于復(fù)雜查找,往往使用for的多重循環(huán)。
       三、綜合應(yīng)用題
    使用VC6打開考生文件夾下的工程kt5_3,此工程包含一個(gè)源程序文件kt5_3.cpp,其中定義了用于表示復(fù)數(shù)的類comp,但類comp的定義并不完整。請(qǐng)按要求完成下列操作,將類comp的定義補(bǔ)充完整。
    (1)定義comp的構(gòu)造函數(shù),函數(shù)含參數(shù)x和y,它們都是int型的數(shù)據(jù),默認(rèn)值都為0,請(qǐng)使用參數(shù)列表的形式分別將類數(shù)據(jù)成員a和b初始化x和y的值。請(qǐng)?jiān)谧⑨尅?/**1**”之后添加適當(dāng)?shù)恼Z(yǔ)句。
    (2)完成類comp的成員函數(shù)input(intx,inty)的定義,將int型的參數(shù)x和y分別賦值給數(shù)據(jù)成員a和b,請(qǐng)?jiān)谧⑨尅?/**2**”之后添加適當(dāng)?shù)恼Z(yǔ)句;
    (3)完成類comp的友元函數(shù)friendcompplus(comp&x,comp&y)的定義,該函數(shù)首先要定義一個(gè)comp類的對(duì)象c,然后將參數(shù)x和y的數(shù)據(jù)成員a與b分別相加并分別賦值給c的成員a和b,最后返回c的值,請(qǐng)?jiān)谧⑨尅?/**3**”之后添加適當(dāng)?shù)恼Z(yǔ)句。輸出結(jié)果如下:
    10+20i
    2+3i
    result:12+23i
    注意:除在指定位置添加語(yǔ)句之外,請(qǐng)不要改動(dòng)程序中的其他內(nèi)容。
    源程序文件kt5_3.cpp清單如下:
    #include
    classcomp
    {inta;
    intb;
    public:
    //**1**
    friendcompplus(comp&x,comp&y);
    voidinput(intx,inty)
    {//**2**}
    voidoutput()
    {cout<
    compplus(comp&x,comp&y)
    {//**3**
    c.b=x.b+y.b;
    returnc;}
    voidmain()
    {compx(10,20),y,z;
    y.input(2,3);
    z=plus(x,y);
    x.output();
    y.output();
    cout<<"result:";
    z.output();}
    【參考答案】
    (1)comp(int x=0,int y=0):a(x),b(y){}
    (2)a=x;
    b=y;
    (3)comp c;
    c.a=x.a+y.a;
    【試題解析】
    本題主要考查類的定義和友元函數(shù)定義的。