2016年計(jì)算機(jī)二級(jí)考試C++過關(guān)練習(xí)試題及答案

字號(hào):

1[單選題]下列關(guān)于面向?qū)ο蟾拍畹拿枋鲋?,錯(cuò)誤的是(  )。
    A.面向?qū)ο蠓椒ū让嫦蜻^程方法更加先進(jìn)
    B.面向?qū)ο蠓椒ㄖ惺褂昧艘恍┟嫦蜻^程方法中沒有的概念
    C.面向?qū)ο蠓椒ㄌ娲私Y(jié)構(gòu)化程序設(shè)計(jì)方法
    D.面向?qū)ο蟪绦蛟O(shè)計(jì)方法要使用面向?qū)ο蟮某绦蛟O(shè)計(jì)語(yǔ)言
    參考答案:C
    2[簡(jiǎn)答題]編寫一程序,將兩個(gè)文件合并成一個(gè)文件。
    參考解析:
    #include
    #include
    using namespace std;
    int main(){
    int i=1;
    char c[1000];
    ifstream ifile1("D:\\10_4_3.cpp");
    ifstream ifile2("D:\\10_4_4.cpp");
    ofstream ofile("D:\\r10_4.cpp");
    while(!ifile1.eof()){
    ifile1.getline(c,999);
    ofile<
    }
    while(!ifile2.eof()){
    ifile2.getline(c,999);
    ofile<
    }
    ifile1.close();
    ifile2.close();
    ofile.close();
    return 0;
    }
    3[單選題]已知一棵二叉樹的先根序列為ABCDEFK,中根序列為DGBAFCK,則結(jié)點(diǎn)的后根序列為(  )。
    A.ACFKDBGB.GDBFKCAC.KCFAGDBD.ABCDFKG
    參考答案:B
    參考解析:通過兩種樹的遍歷序列來(lái)推斷第三種樹的遍歷時(shí),反復(fù)利用前序和中序遍歷的性質(zhì),就可以確定二叉樹,具體:前序遍歷的第一個(gè)結(jié)點(diǎn)A為樹的根結(jié)點(diǎn)。中序遍歷中A左邊的結(jié)點(diǎn)在A的左子樹中,A的右邊的結(jié)點(diǎn)在A的右子樹中。再分別對(duì)A的左右子樹進(jìn)行前麗步驟重復(fù)處理,直到每個(gè)結(jié)點(diǎn)都找到正確的位置。
    具體:前序遍歷的第一個(gè)結(jié)點(diǎn)A為樹的根結(jié)點(diǎn)。中序遍歷中A左邊的結(jié)點(diǎn)在A的左子樹中,A的右邊的結(jié)點(diǎn)在A的右子樹中。再分別對(duì)A的左右子樹進(jìn)行前面步驟重復(fù)處理,直到每個(gè)結(jié)點(diǎn)都找到正確的位置。
    4[單選題]下列的方法中,不屬于軟件調(diào)試技術(shù)的是(  )。
    A.強(qiáng)行排錯(cuò)法B.集成測(cè)試法C.回溯法D.原因排除法
    參考答案:B
    參考解析:調(diào)試的關(guān)鍵在于推斷程序內(nèi)部的錯(cuò)誤位置及原因。主要的調(diào)試方法有強(qiáng)行排錯(cuò)法、回溯法和原因排除法。
    5[單選題]已知大寫字母A的ASCII碼值是65,小寫字母a的ASCII碼是97,則用八進(jìn)制表示的字符常量"\101"是(  )。
    A.字符AB.字符aC.字符eD.非法的常量
    參考答案:A
    參考解析:首先將八進(jìn)制數(shù)轉(zhuǎn)換成十進(jìn)制數(shù),則發(fā)現(xiàn)是65,故答案為A。
    6[單選題]下面關(guān)于函數(shù)模板的表述中不正確的是(  )。
    A.類模板的成員函數(shù)都是模板函數(shù)
    B.類模板本身在編譯過程中不會(huì)產(chǎn)生任何代碼
    C.類模板只能有虛擬類型的參數(shù)
    D.用類模板定義一個(gè)對(duì)象時(shí),實(shí)參不能省略
    參考答案:C
    8[單選題] 有下列程序:
    #include
    voidmain(  )
    {inti=5;
    do
    {if(i%3=1)
    if(i%5==2)
    {printf("*%d",i);break;}
    i++:
    }while(i!=O);
    printf("\n");
    }
    程序的運(yùn)行結(jié)果是(  )。
    A.*7B.*3*5C.*5D.*2*6
    參考答案:A
    參考解析:本題考查d0…while循環(huán),先執(zhí)行循環(huán)體,再判斷條件是否成立,函數(shù)實(shí)現(xiàn)的功能是找出滿足一個(gè)數(shù),它除3時(shí)余1,除5時(shí)余2,然后打印“*”和這個(gè)數(shù)從5開始,等于7時(shí)恰好符合條件,輸出,最后循環(huán)結(jié)束。
    9[簡(jiǎn)答題]使用VC++6.0打開考生文件夾下的源程序文件1.cpp,該程序運(yùn)行時(shí)有錯(cuò),請(qǐng)改正其中的錯(cuò)誤,使程序正常運(yùn)行,并使程序輸出的結(jié)果為:
    sizeof(S1)=5
    sizeof(s2)=10
    sizeof(s3)=1
    注意:不要改動(dòng)main函數(shù),不能增加或刪除行,也不能更改程序的結(jié)構(gòu),錯(cuò)誤的語(yǔ)句在//******error******的下面。
    (1)不能刪除assert()語(yǔ)句。
    (2)只能修改后面的數(shù)字。
    提示:assert函數(shù)如果為假,則會(huì)產(chǎn)生一個(gè)中斷異常。
    試題程序:
    #include
    #include
    voidmain()
    {
    char*s1="abc":
    //********error********
    assert(sizeof(s1)==3):
    cout<<"sizeof(s1)=5"<
    chars2[10]="ab":
    //********error********
    assert(sizeof(s2)==2);
    cout<<"sizeof(s2)=10"<
    chars3=23:
    //********error********
    assert(sizeof(s3)==4);
    cout<<"sizeof(s3)=1"<
    return;
    }
    參考解析:
    (1)應(yīng)改為“assert(sizeof(s1)==4);”。
    (2)應(yīng)改為“assert(sizeof(s2)==1O);”。
    (3)應(yīng)改為“assert(sizeof(s3)==1);”。
    【解析】assert函數(shù)如果為假,則會(huì)產(chǎn)生一個(gè)中斷異常。所以要讓它正常執(zhí)行輸出結(jié)果,那么assert函數(shù)只有為真,才不會(huì)產(chǎn)生中斷異常?!癮ssert(sizeof(s1)==3);”語(yǔ)句中“sizeof(s1)==3”為假,這會(huì)使程序產(chǎn)生異常,不能正常執(zhí)行。因?yàn)閟tr1的值為abc,但是它還有一個(gè)尾符,它的長(zhǎng)度應(yīng)該是4,而不是3,所以在第1處修改為“assert(sizeof(s1)==4);”。str2[10]說(shuō)明,str2的空間為10,在第2處修改為“assert(sizeof(s2)==10);”。charstr3=23;語(yǔ)句說(shuō)明23是字符,所占存儲(chǔ)空間為1,所以修改為“assert(sizeof(s3)==1);”。
    10[簡(jiǎn)答題]請(qǐng)使用VC6或使用【答題】菜單打開考生文件夾proj3下的工程proj3,其中聲明的CDeepCopy是一個(gè)用于表示矩陣的類。請(qǐng)編寫這個(gè)類的賦值運(yùn)算符成員函數(shù)0perator=,以實(shí)現(xiàn)深層復(fù)制。
    要求:
    補(bǔ)充編制的內(nèi)容寫在“//************333************”與“//****************666*************”之間。不得修改程序的其他部分。
    注意:程序最后將結(jié)果輸出到文件out.dat中。輸出函數(shù)writeToFile已經(jīng)編譯為obj文件,并且在本程序中調(diào)用。
    //CDeepCopy.h
    #include
    #include
    using namespace std;
    class CDeepCopy
    {
    public:
    int n;//動(dòng)態(tài)數(shù)組的元素個(gè)數(shù)
    int *p;//動(dòng)態(tài)數(shù)組首地址
    CDeepCopy(int);
    ~CDeepCopy();
    CDeepCopy&operator=(const CDeepCopy&r);//賦值運(yùn)算符函數(shù)
    };
    void writeToFile(char});
    //main.cpp
    #include”CDeepCopy.h”
    CDeepCopy::一CDeepCopy(){delete[]P;}
    CDeepCopy::CDeepCopy(int k){n=k;p=new int[n];}//構(gòu)造函數(shù)實(shí)現(xiàn)
    CDeepCopy&CDeepCopy::0perator=(const CDeepCopy&r)//賦值運(yùn)算符函數(shù)實(shí)現(xiàn)
    {
    //***********333*********
    //***********666***********
    }
    int main()
    {
    CDeepCopy a(2),d(3);
    a.p[O]=1;d.p[O]=666;//對(duì)象a,d數(shù)組元素的賦值
    {
    CDeepCopy b(3);//調(diào)用賦值運(yùn)算符函數(shù)
    a.p[O]=88;b=a;
    cout<
    }
    cout<
    cout<<”d fade away;\n”;
    cout<
    writeToFile(””);
    return 0;
    }
    參考解析:
    lq=r.n;//把對(duì)象r字符長(zhǎng)度賦值給n
    delete[]P;//刪除動(dòng)態(tài)數(shù)組P
    P=new int[n];//給動(dòng)態(tài)數(shù)組P分配空間為n
    for(int i=0;i
    //遍歷對(duì)象r中的數(shù)組P
    P[i]=r.P[i];//把r.P[i]賦值給P[i]
    retum*this://返回被賦值的對(duì)象
    11[單選題]有如下程序:
     #include
     class BASE{
    char c;
     public:
    BASE(char n):c(n){}
    virtual~BASE(){cout<
     };
     class DERIVED:public BASE{
    char c;
     public:
    DERIVED(char n):BASE(n+1),c(n){}
    ~DERIVED(){cout<
     };
     int main()
     { DERIVED("X");
    return 0;
     }
     執(zhí)行上面的程序?qū)⑤敵? )
    A.XY B.YX C.X D.Y
    參考答案:A
    12[單選題]下列有關(guān)數(shù)據(jù)庫(kù)的描述,正確的是
    A.數(shù)據(jù)庫(kù)是一個(gè)DBF文件
    B.數(shù)據(jù)庫(kù)是一個(gè)關(guān)系
    C.數(shù)據(jù)庫(kù)是一個(gè)結(jié)構(gòu)化的數(shù)據(jù)集合
    D.數(shù)據(jù)庫(kù)是組文件
    參考答案:C
    13[判斷題]構(gòu)造函數(shù)和析構(gòu)函數(shù)都是系統(tǒng)自動(dòng)調(diào)用的成員函數(shù)。
    參考答案:對(duì)
    14[單選題]字面常量42、4.2、42L的數(shù)據(jù)類型分別是(  )。
    A.long、double int
    B.long、float、int
    C.int、double、long
    D.int、float、long
    參考答案:D
    15[單選題] 若有如下類聲明:
    Class MyClass{ publiC:
    MyClass(  ){Cout<<1;} };
    執(zhí)行下列語(yǔ)句
    MyClass a,b[2],*p[2]; 程序的輸出結(jié)果是(  )。
    A.11B.111C.1111D.11111
    參考答案:B
    參考解析:本題考查默認(rèn)構(gòu)造函數(shù)和帶參數(shù)的構(gòu)造函數(shù),題目中定義一一個(gè)對(duì)象a以及對(duì)象數(shù)組b[2],共執(zhí)行3次構(gòu)造函數(shù),對(duì)象指針不調(diào)用構(gòu)造函數(shù)。所以本題答案為B。
    16[單選題]下面程序段的正確輸出是:
    int w=4,=3,=2,=1;
    out<<(w
    A.OB.1C.2D.3
    參考答案:B
    參考解析:本題為表達(dá)式作為變量進(jìn)行輸出,而且表達(dá)式為兩個(gè)三目表達(dá)式的嵌套,只要掌握了 該三目表達(dá)式的含義,可以正確得出答案為B。
    17[單選題]下面的描述中,不屬于面向?qū)ο蠓椒ǖ氖?  )。
    A.多態(tài)B.繼承C.類D.過程調(diào)用
    參考答案:D
    參考解析:面向?qū)ο蠓椒ㄊ沁\(yùn)用對(duì)象、類和實(shí)例、消息、繼承、多態(tài)等概念來(lái)構(gòu)造。
    18[單選題] C++系統(tǒng)預(yù)定義了3個(gè)用于標(biāo)準(zhǔn)數(shù)據(jù)流的對(duì)象,下列選項(xiàng)中不屬于此類對(duì)象的是(  )。
    A.coutB.cinC.cerrD.cset
    參考答案:D
    參考解析:C++的標(biāo)準(zhǔn)數(shù)據(jù)流對(duì)象有3個(gè):cout標(biāo)注輸出流,cin標(biāo)準(zhǔn)輸入流,cerr標(biāo)準(zhǔn)錯(cuò)誤流。
    19[單選題]有如下程序:
    #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;
    }
    運(yùn)行時(shí)輸出的結(jié)果是(  )。
    A.3 B.4 C.6 D.7
    參考答案:D
    20[單選題] 在軟件開發(fā)中,需求分析階段產(chǎn)生的主要文檔是(  )。
    A.軟件集成測(cè)試計(jì)劃
    B.軟件詳細(xì)設(shè)計(jì)說(shuō)明書
    C.用戶手冊(cè)
    D.軟件需求規(guī)格說(shuō)明書
    參考答案:D
    參考解析:需求分析階段只能產(chǎn)生需求分析規(guī)格說(shuō)明書,A測(cè)試說(shuō)明書是軟件測(cè)試階段生成的,B軟件詳細(xì)設(shè)計(jì)說(shuō)明數(shù)是設(shè)計(jì)階段生產(chǎn),C用戶手冊(cè)是軟件發(fā)布時(shí)隨軟件一同交付給用戶的。