2016年計(jì)算機(jī)二級考試《C++》備考練習(xí)題及答案

字號:

1[判斷題] C++語言程序的實(shí)現(xiàn)也要經(jīng)過編輯、編譯連接和運(yùn)行3個步驟。
    參考答案:對
    2[單選題]在公有派生情況下,有關(guān)派生類對象和基類對象的關(guān)系,不正確的敘述是(  )。
    A.派生類的對象可以賦給基類的對象
    B.派生類的對象可以初始化基類的引用
    C.派生類的對象可以直接訪問基類中的成員
    D.派生類的對象的地址可以賦給指向基類的指針
    參考答案:C
    3[單選題] 有如下函數(shù)定義:
    void funC(int a,int&B.{a++;b++;} 若執(zhí)行代碼段:
    int x=0,Y=1: funC(X,y);
    則變量X和y的值分別是( )。
    A.0和1B.1和1C.0和2D.1和2
    參考答案:C
    參考解析:函數(shù)參數(shù)的3種傳遞方式:①將變量名作為形參和實(shí)參,即傳值方式;②傳遞變量指針;③引用形參。本題中實(shí)參x為傳值方式,所以X的值不會改變;Y為引用形參,所以會改變。故本題答案為C。
    4[單選題]下面程序的結(jié)果為
    #include
    int c;
    class A
    {
    private:
    int a;
    static int b;
    public;
    A(){a=0;c=0;}
    void seta(){a++;}
    void setb(){b++;}
    void setc(){c++;}
    void display(){cout <<<<
    int A::b=0;
    void main()
    {
    A al,a2;
    al.seta();
    al.setb();
    al.setc();
    a2.seta();
    a2.setb();
    a3.setc();
    a2.display();
    A.121 B.122 C.112 D.222
    參考答案:B
    6[單選題]已知char a;int b;float c;double d;則表達(dá)式a*b+c-d結(jié)果為(  )。
    A.doubleB.intC.floatD.char
    參考答案:A
    參考解析:本題考察混合運(yùn)算表達(dá)式類型,由表達(dá)式中具有優(yōu)先級的類型所確定,所以答案為A。
    8[單選題] 下列敘述中正確的是(  )。
    A.循環(huán)隊(duì)列有隊(duì)頭和隊(duì)尾兩個指針,因此循環(huán)隊(duì)列是非線性結(jié)構(gòu)
    B.在循環(huán)隊(duì)列中,只需要隊(duì)頭指針就能反映隊(duì)列中元素的動態(tài)變化情況
    C.在循環(huán)隊(duì)列中,只需要隊(duì)尾指針就能反映隊(duì)列中元素的動態(tài)變化情況
    D.循環(huán)隊(duì)列中元素的個數(shù)是由隊(duì)頭指針和隊(duì)尾指針共同決定
    參考答案:D
    參考解析:循環(huán)隊(duì)列中元素的個數(shù)是由隊(duì)首指針和隊(duì)尾指針共同決定的,元素的動態(tài)變化也是通過隊(duì)首指針和隊(duì)尾指針來反映的,當(dāng)隊(duì)首等于隊(duì)尾時,隊(duì)列為空。
    9[簡答題]使用VC++6.0打開考生文件夾下的源程序文件1.cpp,該程序運(yùn)行時有錯誤,請改正其中的錯誤,使得程序正確運(yùn)行。
    程序輸出:
    s1:n=20
    s2:n=10
    執(zhí)行s3.add(s1,s2)
    s3:n=30
    s4:n=30
    注意:不要改動main函數(shù),不能增加或刪除行,也不能更改程序的結(jié)構(gòu),錯誤的語句在//******error******的下面。
    試題程序:
    #include
    classTC
    {
    intn;
    public:
    TC(){}
    TC(intm)
    {
    n=m:
    }
    //********error********
    TCadd(TCs1,s2)
    {
    this->n=s1.n+s2.n;
    //********error********
    return(this);
    }
    voiddisp()
    {
    cout<<"n一="<
    }
    //********error********
    }
    voidmain()
    {
    TCs1(20),s2(10),s3,s4;
    cout<<"s1:";
    s1.disp();
    cout<<"s2:";
    s2.disp();
    s4=s3.add(s1,s2);
    cout<("執(zhí)行s3.add(s1,s2)\ns3:";
    s3.disp();
    COUt<<"s4:";s4.disp();
    }
    參考解析:
    (1)應(yīng)改為“TCadd(TCs1,TCs2)”。
    (2)應(yīng)改為“return(*this);”。
    (3)應(yīng)改為“};”。
    【解析】本題中的變量“s2”沒有聲明類型,所以補(bǔ)充“s2”的類型,即“TCadd(TCs1,TCs2)”,“this->n=s1.n+s2.n;”語句中的this變量為指針變量,所以第2處的“return(this);”返回語句中的this變量,應(yīng)該返回指針型,所以修改為“return(*this);”。C++中類的定義格式應(yīng)為“class類名{};”,以分號為結(jié)尾,所以在第3處的類結(jié)尾處補(bǔ)充分號“;”,即修改為“};”。
    10[簡答題]使用VC++6.0打開考生文件夾下的源程序文件2.cpp。請完成函數(shù)fun(char*str,charch)的定義,本函數(shù)采用二分法,在已按字母次序從小到大排序的字符數(shù)組str中,查找字符ch,若ch在數(shù)組中,函數(shù)返回字符ch在數(shù)組中的下標(biāo),否則返回1。
    二分法查找的思想是初始查找區(qū)間的下界為0,上界為len-1,查找區(qū)間的中部后,k=(下界+上界)/2;若list[k]等于ch,查找成功;若list[k]>ch,則新的查找區(qū)間的下界不變,上界改為k-1;否則新的查找區(qū)間的下界改為k+1,上界不變。在新區(qū)間內(nèi)繼續(xù)用二分法查找。
    注意:請勿改動主函數(shù)main與其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號中填入所編寫的若干語句。
    試題程序:
    #include(iostream.h>
    intfun(char*str,charch)
    {
    }
    voidmain()
    {
    charstr[]={'a','b','C','d','e','f','9','h','i,'
    j','k');
    charch;
    cout<<"請輸入一個字符:"<
    cin>>ch;
    cout<<"輸入字符的位置是:"<
    return;
    }
    參考解析:
    intlow=0;//初始查找區(qū)間的下界
    inthigh;
    intk;
    for(high=0;str[high]!=0;high++)//求字符串長度
    while(10w
    {
    k=(low+high)/2;
    if(str[k]==ch)
    returnk;
    elseif(str[k]>ch)
    high=k-l:
    elselow=k+1:
    }
    if(str[low]==ch)
    returnlow;
    return-1:
    【解析】本題首先初始查找區(qū)間的下界為0,然后求得字符串長度len,上界為len-1,查找區(qū)間的中部后,k=(下界+上界)/2;若list[k]等于ch,查找成功。若list[k]>ch,則新的查找區(qū)間的下界不變,上界改為k-1;否則新的查找區(qū)間的下界改為k+1,上界不變。