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

字號(hào):

  一、選擇題
    1.數(shù)據(jù)結(jié)構(gòu)作為計(jì)算機(jī)的一門學(xué)科,主要研究數(shù)據(jù)邏輯結(jié)構(gòu)、對(duì)各種數(shù)據(jù)結(jié)構(gòu)進(jìn)行運(yùn)算,及( )
    A.數(shù)據(jù)的存儲(chǔ)結(jié)構(gòu) B.計(jì)算方法
    C.數(shù)據(jù)映象 D.邏輯存儲(chǔ)
    【參考答案】 A
    2.在計(jì)算機(jī)中,算法是指( )
    A.加工方法 B.解題方案的準(zhǔn)確而完整的描述 C.排序方法 D.查詢方法
    【參考答案】 B
    3.開發(fā)軟件所需高成本和產(chǎn)品的低質(zhì)量之間有著尖銳的矛盾,這種現(xiàn)象稱做( )
    A.軟件投機(jī) B.軟件危機(jī) C.軟件工程 D.軟件產(chǎn)生
    【參考答案】 B
    4.開發(fā)大型軟件時(shí),產(chǎn)生困難的根本原因是( )
    A.大系統(tǒng)的復(fù)雜性 B.人員知識(shí)不足 C.客觀世界千變?nèi)f化 D.時(shí)間緊、任務(wù)重
    【參考答案】 A
    5.數(shù)據(jù)庫、數(shù)據(jù)庫系統(tǒng)和數(shù)據(jù)庫管理系統(tǒng)之間的關(guān)系是( )
    A.數(shù)據(jù)庫包括數(shù)據(jù)庫系統(tǒng)和數(shù)據(jù)庫管理系統(tǒng)
    B.數(shù)據(jù)庫系統(tǒng)包括數(shù)據(jù)庫和數(shù)據(jù)庫管理系統(tǒng)
    C.數(shù)據(jù)庫管理系統(tǒng)包括數(shù)據(jù)庫和數(shù)據(jù)庫系統(tǒng)
    D.3者沒有明顯的包含關(guān)系
    【參考答案】 B
    6.下列敘述中正確的是( )
    A.線性表是線性結(jié)構(gòu) B.棧與隊(duì)列是非線性結(jié)構(gòu)
    C.線性鏈表是非線性結(jié)構(gòu) D.二叉樹是線性結(jié)構(gòu)
    【參考答案】 A
    7.已知數(shù)據(jù)表A中每個(gè)元素距其最終位置不遠(yuǎn),為節(jié)省時(shí)間,應(yīng)采用的算法是( )
    A.堆排序 B.直接插入排序 C.快速排序 D.直接選擇排序
    【參考答案】 B
    8.下列不屬于結(jié)構(gòu)化分析的常用工具的是( )
    A.數(shù)據(jù)流圖 B.數(shù)據(jù)字典 C.判定樹 D.PAD圖
    【參考答案】 A
    9.下列工具中為需求分析常用工具的是( )
    A.PAD B.PFD C.N-S D.DFD
    【參考答案】 D
    10.數(shù)據(jù)庫的故障恢復(fù)一般是由( )
    A.數(shù)據(jù)流圖完成的 B.數(shù)據(jù)字典完成的
    C.DBA完成的 D.PAD圖完成的
    【參考答案】 C
       11.關(guān)于C++與C語言關(guān)系描述中錯(cuò)誤的是( )
    A.C++語言是C語言的超集
    B.C++語言對(duì)C語言進(jìn)行了擴(kuò)充
    C.C++語言包含C語言的全部語法特征
    D.C++語言與C語言都是面向?qū)ο蟮某绦蛟O(shè)計(jì)語言
    【參考答案】 D
    12.在C++語言中,不合法的實(shí)型數(shù)據(jù)的是( )
    A.0.123 B.123e3 C.2.1e3.5 D.123.0
    【參考答案】 C
    13.下面有關(guān)于for循環(huán)的正確描述是( )
    A.for循環(huán)只能用于循環(huán)次數(shù)已經(jīng)確定的情況
    B.for循環(huán)是先執(zhí)行循環(huán)體語句,后判斷表達(dá)式
    C.在for循環(huán)中,不能用break語句跳出循環(huán)體
    D.for循環(huán)的循環(huán)體語句中,可以包含多條語句,但必須用花括號(hào)括起來
    【參考答案】 D
    14.假定int類型變量占用兩個(gè)字節(jié),其有定義int x[10]={0,2,4};,則數(shù)組x在內(nèi)存中所占字節(jié)數(shù)是( )
    A.3 B.6 C.10 D.20
    【參考答案】 D
    15.以下敘述正確的是( )
    A.函數(shù)可以嵌套定義但不能嵌套調(diào)用
    B.函數(shù)既可以嵌套調(diào)用也可以嵌套定義
    C.函數(shù)既不可以嵌套定義也不可以嵌套調(diào)用
    D.函數(shù)可以嵌套調(diào)用但不可以嵌套定義
    【參考答案】 D
    16.下面的語句中錯(cuò)誤的是( )
    A.int a=5;int x[a]; B.const int a=5;int x[a];
    C.int n=5;int *p=new int[a]; D.const int n=5;int *p=new int[a];
    【參考答案】 A
    17.關(guān)于二義性的描述錯(cuò)誤的是( )
    A.一個(gè)子類的兩個(gè)父類中都有某個(gè)同名成員,在子類中對(duì)該成員訪問可能出現(xiàn)二義性 B.解決二義性可以用對(duì)成員名的限定法
    C.父類和子類中同時(shí)出現(xiàn)同名函數(shù),也可能存在二義性
    D.一個(gè)子類是從兩個(gè)父類派生出來的,而這兩個(gè)父類又有一個(gè)共同的父類,對(duì)該父類成員進(jìn)行訪問時(shí),可能出現(xiàn)二義性
    【參考答案】 C
    18.函數(shù)模板:template   T add(T x,T y) {return x+y;}
    下列對(duì)add函數(shù)的調(diào)用不正確的是( )
    A.add< >(1,2) B.add(1,2)
    C.add(1.0,2) D.add(1.0,2.0)
    【參考答案】 C
    19.this指針是C++實(shí)現(xiàn)什么的一種機(jī)制?( )
    A.抽象 B.封裝 C.繼承 D.重載
    【參考答案】 B
    20.下列程序的輸出結(jié)果是( )
    #include   class Myclass{
    public:Myclass(int i=0,int j=0)
    {
    y=j;
    }
    void show(){cout<<″x=″<
    void show()const{cout<<″x=″<<″ ″<<″y=″<
    privated:
    int x;int y;
    };
    void main()
    {yclass my1(3,4);
    const my2(7,8);
    my1.show();my2.show();}
    A.x=4,y=3;x=7,y=8 B.x=3,y=4;x=7,y=8 C.x=7,y=8;x=4,y=3 D.x=8,y=7;x=7,y=8
    【參考答案】 A
       21.在C++語言中,打開一個(gè)文件就是將這個(gè)文件與一個(gè)什么建立關(guān)聯(lián)( )
    A.流 B.類 C.結(jié)構(gòu) D.對(duì)象
    【參考答案】 A
    22.執(zhí)行語句for(i=1;i++<4;);,后變量i的值是( )
    A.3 B.4 C.5 D.不定
    【參考答案】 C
    23.下列哪個(gè)是C++語言的有效標(biāo)識(shí)符?( )
    A._No1 B.No.1 C.12345 D.int
    【參考答案】 A
    24.下列程序的執(zhí)行結(jié)果為( )
    #include   void main()
    {int a=3,b=0;
    int *p=&a;
    b=+a++;
    cout<<*p<<″,″<
    A.3,4 B.4,3 C.3,-4 D.4,4
    【參考答案】 B
    25.下列選項(xiàng),不正確的是( )
    A.for(int a=1;a<=10;a++); B.int a=1;
    do
     {a++}
     while(a<=10)
    C.int a=1; D.for(int a=1;a<=10;a++)a++;
    while(a<=10)
    {a++}
    【參考答案】 B
    26.下列程序的輸出結(jié)果為( )
    #include   void main()
    {char *a[]={″hello″,″the″,″world″};
    char **pa=a;
    pa++;
    cout<<*pa<
    A.hello B.the C.world D.hellotheworld
    【參考答案】 B
    27.下列程序的輸出結(jié)果是( )
    #include   int min(int a,int b)
    {if(a
    else return b;
    return 0;}
    void main()
    {cout<
    A.0 B.1 C.2 D.3
    【參考答案】 B
    28.對(duì)類成員訪問權(quán)限的控制,是通過設(shè)置成員的訪問控制屬性實(shí)現(xiàn)的,下列不是訪問控制屬性的是( )
    A.公有類型 B.私有類型
    C.保護(hù)類型 D.友元類型
    【參考答案】 D
    29.類的析構(gòu)函數(shù)的作用是( )
    A.一般成員函數(shù)的初始化      B.類的初始化
    C.對(duì)象的初始化          D.刪除類創(chuàng)建的對(duì)象
    【參考答案】 D
    30.下面對(duì)靜態(tài)數(shù)據(jù)成員的描述中,正確的是( )
    A.靜態(tài)數(shù)據(jù)成員可以在類體內(nèi)進(jìn)行初始化
    B.靜態(tài)數(shù)據(jù)成員不可以被類的對(duì)象調(diào)用
    C.靜態(tài)數(shù)據(jù)成員不能受private控制符的作用
    D.靜態(tài)數(shù)據(jù)成員可以直接用類名調(diào)用
    【參考答案】 D
       31.在公有派生情況下,有關(guān)派生類對(duì)象和基類對(duì)象的關(guān)系,下列敘述不正確的是( )
    A.派生類的對(duì)象可以賦給基類的對(duì)象
    B.派生類的對(duì)象可以初始化基類的引用
    C.派生類的對(duì)象可以直接訪問基類中的成員
    D.派生類的對(duì)象的地址可以賦給指向基類的指針
    【參考答案】 C
    32.下列關(guān)于虛基類的描述,錯(cuò)誤的是( )
    A.設(shè)置虛基類的目的是為了消除二義性
    B.虛基類的構(gòu)造函數(shù)在非虛基類之后調(diào)用
    C.若同一層中包含多個(gè)虛基類,這些基類的構(gòu)造函數(shù)按它們說明的次序調(diào)用
    D.若虛基類由非虛基類派生而來,則仍然先調(diào)用基類構(gòu)造函數(shù),再調(diào)用派生類的構(gòu)造函數(shù)
    【參考答案】 B
    33.下列運(yùn)算符中,在C++語言中不能重載的是( )
    A.* B.>= C.:: D./
    【參考答案】 C
    34.下列程序的運(yùn)行結(jié)果是( )
    #include   class A
    { int a;
    public:
    A() {a=0;}
    A(int aa)
    {a=aa;
    cout<
    void main()
    {A x,y(2),z(3);
    cout<
    A.00 B.23 C.34 D.25
    【參考答案】 B
    35.判斷char型變量c是否為小寫字母的正確表達(dá)式是( )
    A.′a′<=c<=′z′ B.(c>+A)&&(c<=z)
    C.(′a′>=c)||(′z′<=c) D.(c>=′a′)&&(c<=′z′)
    【參考答案】 D
    二、填空題
    1.長(zhǎng)度為n的順序存儲(chǔ)線性表中,當(dāng)在任何位置上插入一個(gè)元素概率都相等時(shí),插入一個(gè)元素所需移動(dòng)元素的平均個(gè)數(shù)為【1】。
    【參考答案】
    【1】n/2
    2.類是一個(gè)支持集成的抽象數(shù)據(jù)類型,而對(duì)象的類的【2】。
    【參考答案】
    【2】實(shí)例
    3.當(dāng)數(shù)據(jù)的物理結(jié)構(gòu)(存儲(chǔ)結(jié)構(gòu)、存取方式等)改變時(shí),不影響數(shù)據(jù)庫的邏輯結(jié)構(gòu),從而不致引起應(yīng)用程序的變化,這是指數(shù)據(jù)的【3】。
    【參考答案】
    【3】物理獨(dú)立性
    4.若串s=″MathTypes″,則其子串的數(shù)目是【4】。
    【參考答案】
    【4】46
    5.關(guān)系數(shù)據(jù)庫的關(guān)系演算語言是以【5】為基礎(chǔ)的DML語言。
    【參考答案】
    【5】謂詞演算
    6.程序
    #include″inostream.h″
    void main()
    {int i=10;
    int j=5;
    cout<
    的結(jié)果為【6】。
    【參考答案】
    【6】15
    7.語句int *i;i=new int[10];,釋放指針i的語句是【7】。
    【參考答案】
    【7】delete[]I
    8.在C++語言中每個(gè)類都有一個(gè)【8】指針,該指針指向正在調(diào)用成員函數(shù)的對(duì)象。
    【參考答案】
    【8】this
    9.程序的結(jié)果為【9】。
    #include ″iostream.h″
    template   T total(T *data)
    { T s=0;
    while( *data)
    {s+=*data++;}
    return s; }
    int main()
    { int x[]={2,4,6,8,0,12,14,16,18};
    cout<
    return 0;
    cout<
    【參考答案】
    【9】20
    10.一個(gè)C++語言程序的開發(fā)步驟通常包括編輯、【10】、鏈接、運(yùn)行和調(diào)試。
    【參考答案】
    【10】編譯
    11.下面程序的運(yùn)行結(jié)果是【11】和【12】。
    #include   #define N 10
    #define s(x)x*x
    #define f(x)(x*x)
    void main()
    { int i1,i2;
    i1=1000/s(N);i2=1000/f(N);
    cout<
    【參考答案】
    【11】1000 【12】10
    12.【13】是實(shí)現(xiàn)C++語言編譯時(shí)多態(tài)性的機(jī)制,【14】是實(shí)現(xiàn)C++語言運(yùn)行時(shí)多態(tài)性的要制。
    【參考答案】
    【13】靜態(tài)聯(lián)編或靜態(tài)綁定 【14】動(dòng)態(tài)聯(lián)編或動(dòng)態(tài)綁定
    13.以下程序的輸出結(jié)果是【15】。
    #include   void main()
    { int a=0;
    a+=(a=8);
    cout<
    【參考答案】
    【15】16
    上機(jī)部分
    一、改錯(cuò)題
    使用VC6打開考生文件夾下的工程kt8_1,此工程包含一個(gè)源程序文件kt8_1.cpp,但該程序運(yùn)行有問題,請(qǐng)改正程序中的錯(cuò)誤,使程序的輸出結(jié)果如下:
    f1functionofderive
    f2functionofbase
    f4functionofbase
    源程序文件kt8_1.cpp清單如下:
    #include   classbase
    { public:
    /**********found**********/
    voidf1(){cout<<"f1functionofbase"<
    virtualvoidf2(){cout<<"f2functionofbase"<
    virtualvoidf3(){cout<<"f3functionofbase"<
    voidf4(){cout<<"f4functionofbase"<
    /**********found**********/
    classderive::publicbase
    { voidf1(){cout<<"f1functionofderive"<
    voidf2(intx){cout<<"f2functionofderive"<
    voidf4(){cout<<"f4functionofderive"<
    voidmain()
    { base*p;
    deriveobj2;
    /**********found**********/
    p=obj2;
    p->f1();
    p->f2();
    p->f4(); }
    【參考答案】
    (1)將void f1(){ cout<<"f1 function of base"<
    改為:virtual void f1(){ cout<<"f1 function of base"<
    (2)將class derive::public base
    改為:class derive:public base
    (3)將p=obj2;
    改為:p=&obj2;
    【試題解析】
    (1)主要考查對(duì)虛函數(shù)的深刻理解,虛函數(shù)是動(dòng)態(tài)聯(lián)編的基礎(chǔ),也是實(shí)現(xiàn)多態(tài)性的重要方法,它可以根據(jù)不同的情況動(dòng)態(tài)的選擇執(zhí)行哪一個(gè)函數(shù)。在派生類中實(shí)現(xiàn)虛函數(shù)應(yīng)該滿足與基類的同名函數(shù)完全相同,并且使用關(guān)鍵字virtual修飾,本題中由輸出結(jié)果中的f1 function of derive可知,必須將基類base的成員函數(shù)f1()定義為虛函數(shù);
    (2)主要考查對(duì)派生類定義格式的掌握,應(yīng)該使用“:”后面是繼承列表,而“::”是作用域符;
    (3)主要考查類對(duì)象的定義與使用,p是一個(gè)指針類型的變量,給它的賦值應(yīng)該是一個(gè)地址,即使用取地址操作符&。
    二、簡(jiǎn)單應(yīng)用題
    已知考生的記錄由學(xué)號(hào)和學(xué)習(xí)成績(jī)構(gòu)成,N名考生的數(shù)據(jù)已存入a結(jié)構(gòu)體數(shù)組中。請(qǐng)編寫函數(shù)fun,該函數(shù)的功能是:找出成績(jī)最低的考生記錄,通過形參返回主函數(shù)(規(guī)定只有一個(gè)最低分)。已給予出函數(shù)的首部,請(qǐng)完成該函數(shù)。
    注意:部分源程序已存在文件kt8_2.cpp中。
    請(qǐng)勿改動(dòng)主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號(hào)中填入所編寫的若干語句。
    文件kt8_2.cpp的內(nèi)容如下:
    #include   #include   #include   #defineN10
    typedefstructss
    {charnum[10];
    ints;
    }STU;
    voidfun(STUa[],STU*s)
    {
    }
    voidmain()
    {STU
    a[N]={{"A01",81},{"A02",89},{"A03",66},{"A04",87},{"A05",77},{"A06",90},{"A07",79},{"A08",61},{"A09",80},{"A10",71}},m;
    fun(a,&m);
    cout<<"*****Theoriginaldate*****"<
    cout<<"Thelowest:"<
    【參考答案】
    fun(STU a[],STU *s)
    {int i, min;
    min=a[0].s;
    for(i=0;i
    if(a[i].s
    {min=a[i].s;
    *s=a[i];}}
    【試題解析】
    解題思路為:先假設(shè)第一個(gè)考生的成績(jī),通過循環(huán)找到最低成績(jī),并將最低成績(jī)的考生記錄傳給指針s,帶回主函數(shù)。
    三、綜合應(yīng)用題
    使用VC6打開考生文件夾下的工程kt8_3,此工程包含一個(gè)源程序文件kt8_3.cpp,該文件設(shè)計(jì)了用于輸出乘法九九表的類。請(qǐng)認(rèn)真閱讀已有的代碼,按要求完成下列操作,將程序補(bǔ)充完整。
    (1)定義類Table的私有數(shù)據(jù)成員x和y,分別用于表示九九表中的兩個(gè)乘數(shù)(x*y),它們都是int型的數(shù)據(jù)。請(qǐng)?jiān)谧⑨尅?/**1**”之后添加適當(dāng)?shù)恼Z句;
    (2)完成類Table的成員函數(shù)print()的定義,該函數(shù)以"x*y=z"的格式打印出九九表中的一個(gè)乘法算式,請(qǐng)使用格式化輸出函數(shù)printf實(shí)現(xiàn),在注釋“//**2**”之后添加適當(dāng)?shù)恼Z句;
    (3)完成類Table9的成員函數(shù)print()的定義,該函數(shù)調(diào)用基類Table的print()函數(shù),將九九表輸出到屏幕,請(qǐng)?jiān)谧⑨尅?/**3**”之后添加適當(dāng)?shù)恼Z句;
    (4)補(bǔ)充主函數(shù),在屏幕上輸出九九表,以便測(cè)試所定義的類的正確性。請(qǐng)?jiān)谧⑨尅?/**4**”之后添加適當(dāng)?shù)恼Z句。
    注意:除在指定位置添加語句之外,請(qǐng)不要改動(dòng)程序中的其他內(nèi)容。
    源程序文件kt8_3.cpp清單如下:
    #include   #include   classTable
    {//**1**
    intz;
    public:
    voidprint(intx,inty,intz);};
    voidTable::print(intx,inty,intz)
    {//**2**}
    classTable9:publicTable
    {public:
    voidprint();};
    voidTable9::print()
    {//**3**
    intx,y,z;
    for(i=1;i<10;i++)
    {for(j=1;j
    {x=i;
    y=j;
    z=i*j;
    Table::print(y,x,z);}
    printf("\n");}}
    main()
    {//**4**
    return0;}
    【參考答案】
    (1)int x;
    int y;
    (2)printf( "%d*%d=%d ",x,y,z);
    if(z<10) printf(" ");
    (3)int i,j;
    (4)Table9 t_9;
    t_9.print();
    【試題解析】
    主要考查將具體問題抽象為類,將類的定義補(bǔ)充完整,并進(jìn)行類定義測(cè)試的能力。