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

字號(hào):

一、改錯(cuò)題
    使用VC6打開考生文件夾下的工程kt12_1,此工程包含一個(gè)源程序文件kt12_1.cpp,但該程序運(yùn)行有問題,請(qǐng)改正函數(shù)中的錯(cuò)誤,使該程序的輸出結(jié)果為:
    100
    源程序文件kt12_1.cpp清單如下:
    #include
    template
    classpair
    { Tvalue1,value2;
    public:
    pair(Tfirst,Tsecond)
    {value1=first;value2=second;}
    /*****************found*****************/
    chargetmax(); };
    /*****************found*****************/
    Tpair::getmax()
    { Tretval;
    /*****************found*****************/
    retval=value1>value2??value1:value2;
    returnretval; }
    voidmain()
    { pairmyobject(100,75);
    cout<  【參考答案】
    (1)將char getmax ();改為:T getmax ();
    (2)缺少模板的聲明,應(yīng)改為:template
    (3)將retval = value1>value2?? value1 : value2;
    改為:retval = value1>value2? value1 : value2;
    【試題解析】
    (1)主要考查對(duì)模板使用的理解,該函數(shù)屬于模板類定義的一
    部分,對(duì)于返回值類型,應(yīng)該使用模板類名稱T,這樣編譯的時(shí)候才能被接受;
    (2)主要考查是模板的使用,前面的模板類已經(jīng)聲明完成了,在類的外面定義類的成員函數(shù)時(shí)仍然需要使用模板的聲明,這樣在后面的函數(shù)定義體中才能使用模板類;
    (3)主要考查對(duì)“表達(dá)式1? 表達(dá)式2 : 表達(dá)式3”語句的掌握,這個(gè)語句是一個(gè)復(fù)合語句,先計(jì)算第一個(gè)表達(dá)式,如果為真則整個(gè)式子值為表達(dá)式2的值,否則為表達(dá)式3的值,題目中錯(cuò)誤的使用了兩個(gè)問號(hào)。
    二、簡單應(yīng)用題
    請(qǐng)編寫函數(shù)fun(),其功能是將s所指字符串中除了下標(biāo)為奇數(shù)、同時(shí)ASCII值也為奇數(shù)的字符之外,其余的所有字符都刪除。字符串中剩余的字符所形成的一個(gè)新的字符串放在t所指的數(shù)組中。
    例如:s所指字符串中的內(nèi)容為ABCDEFG12345,其中字符A的ASCII碼值雖為奇數(shù),但元素所在的下標(biāo)為偶數(shù),因此必需刪除;字符1的ASCII碼值為奇數(shù),所在數(shù)組中的下標(biāo)也為奇數(shù),不刪除,最后t所指的數(shù)組中的內(nèi)容應(yīng)是135。
    請(qǐng)勿修改主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)su的花括號(hào)中填寫若干語句。
    文件kt12_2.cpp的內(nèi)容如下:
    #include
    #include
    #include
    #include
    voidfun(char*s,chart[])
    {
    }
    voidmain()
    { chars[100],t[100];
    cout<<"PleaseenterstringS:"<  gets(s);
    fun(s,t);
    puts(t); }
    【參考答案】
    void fun(char *s,char t[ ])
    { int i,j=0,n;
    n=strlen(s);
    for(i=0;i  if(i%2!=0&&s[i]%2!=0)
    { t[j]=s[i];j++;}
    t[j]='\0'; }
    【試題解析】
    本體的解題思路是要先搞清楚在字符參與數(shù)值運(yùn)算時(shí),用的是其ASCII碼值來進(jìn)行計(jì)算。其次是判斷某數(shù)是奇數(shù)的方法,即判斷該數(shù)
    與2的余數(shù)是否為0。
    三、綜合應(yīng)用題
    使用VC6打開考生文件夾下的工程kt12_3。此工程包含一個(gè)kt12_3.cpp,其中定義了類ARRAY,但類的定義并不完整。請(qǐng)按要求完成下列操作,將程序補(bǔ)充完整。
    (1)完成類ARRAY的帶一個(gè)參數(shù)的構(gòu)造函數(shù),參數(shù)i為int型,如果i不是正數(shù)則輸出錯(cuò)誤信息并退出,否則申請(qǐng)int型的大小為i的空間,然后把i賦值給類的數(shù)據(jù)成員num。請(qǐng)?jiān)谧⑨尅?/**1**”之后添加適當(dāng)?shù)恼Z句。
    (2)完成類ARRAY的拷貝初始化構(gòu)造函數(shù),注意解決重復(fù)刪除的問題,請(qǐng)?jiān)谧⑨尅?/**2**”之后添加適當(dāng)?shù)恼Z句。
    (3)完成類ARRAY的重載的運(yùn)算符函數(shù)[],參數(shù)i為int型,如果i超界則輸出錯(cuò)誤信息并退出,否則把下標(biāo)為i的元素返回,請(qǐng)?jiān)谧⑨尅?/**3**”之后添加適當(dāng)?shù)恼Z句。
    (4)完成類ARRAY的重載的運(yùn)算符函數(shù)=,同樣需要注意解決重復(fù)刪除的問題,不能只是簡單的賦值,請(qǐng)?jiān)谧⑨尅?/**4**”之后添加適當(dāng)?shù)恼Z句。
    注意:除在指定位置添加語句之外,請(qǐng)不要改動(dòng)程序中的其他內(nèi)容。
    源程序文件kt12_3.cpp清單如下:
    #include
    #include
    classARRAY
    { private:
    int*p,num;
    public:
    ARRAY(){p=newint[10],num=10;}
    ARRAY(inti)
    { //**1**
    { cout<<"錯(cuò)誤!數(shù)組長度應(yīng)為正。\n";
    exit(0); }
    p=newint[i];
    num=i; }
    ARRAY(constARRAY&a);
    int&operator[](inti);
    ~ARRAY(){deletep;}
    ARRAY&operator=(constARRAY&a);
    friendARRAYoperator+(ARRAY&a,ARRAY&b);
    friendostream&operator<<(ostream&os,ARRAY&a); };
    ARRAY::ARRAY(constARRAY&a)
    { //**2**
    for(inti=0;i  p[i]=a.p[i]; }
    int&ARRAY::operator[](inti)
    { //**3**
    { cout<<"越界訪問!";
    exit(0); }
    returnp[i]; }
    ARRAY&ARRAY::operator=(constARRAY&a)
    { num=a.num;
    p=newint[num];
    for(inti=0;i  p[i]=a.p[i];
    //**4** }
    ARRAYoperator+(ARRAY&a,ARRAY&b)
    { if(a.num!=b.num)
    { cout<<"數(shù)組長度不相同!"<  exit(0); }
    ARRAYt(a.num);
    for(inti=0;i  t.p[i]=a.p[i]+b.p[i];
    returnt; }
    ostream&operator<<(ostream&os,ARRAY&a)
    { inti=0;
    for(;i  { cout<  if(!((i+1)))cout<  returnos; }
    voidmain()
    { ARRAYa(3);
    a[0]=a[1]=a[2]=3;
    cout<<'a'<  ARRAYb(a);
    cout<<'b'<  ARRAYc(2);
    c=a+b+b;
    cout<<'c'<  c=((b=(a+b))+c);
    cout<<'a'<  a[7]=3;
    cout<  【參考答案】
    (1)if(i<=0)
    (2)num=a.num;
    p=new int[num];
    (3)if(i>=num||i<0)
    (4)return *this;
    【試題解析】
    主要考查對(duì)一個(gè)特殊的類--安全數(shù)組的掌握,其中涉及了友元函數(shù)、重載函數(shù)等,其中(2)中必需申請(qǐng)新的空間,這樣可以使得兩個(gè)對(duì)象分別占用不同的兩個(gè)空間,在自動(dòng)調(diào)用析構(gòu)函數(shù)時(shí)不會(huì)遇到重復(fù)刪除的問題,這種方法要掌握。