二級(jí)C++上機(jī)考試指導(dǎo)

字號(hào):

1.二級(jí)C++語言程序設(shè)計(jì)上機(jī)考試包括基本操作、簡單應(yīng)用和綜合應(yīng)用。
    2.C++上機(jī)操作主要是要求考生能夠閱讀和分析C++程序,能夠采用面向?qū)ο蟮姆椒ň帉懗绦?,能熟練使用Visual C++ 6.0集成開發(fā)環(huán)境編寫和調(diào)試程序。
    3.上機(jī)考試總時(shí)間為90分鐘,滿分100分,共有3種類型的考題:基本操作題、簡單應(yīng)用題、綜合應(yīng)用題。
    4.基本操作題主要以改作題的形式出現(xiàn),其出題范圍主要是C++中有關(guān)類與對(duì)象的操作,如考核對(duì)象的定義、對(duì)象成員的訪問方式等;簡單應(yīng)用題主要是考察考生編寫應(yīng)用程序的能力,如題目要求的功能實(shí)現(xiàn)某個(gè)函數(shù)的定義,或考核某種算法的C++實(shí)現(xiàn)等;綜合應(yīng)用題的出題范圍主要集中在類和對(duì)象以及類的繼承與派生這些知識(shí)點(diǎn)上。出題形式通常是要求考生按照題目要求將程序補(bǔ)充完整,并調(diào)試程序使之輸出正確的結(jié)果。
    例1 使用VC6打開考生文件夾下的工程proj1,此工程包含一個(gè)源程序文件main.cpp,但該程序運(yùn)行有問題,請(qǐng)改正main函數(shù)中的錯(cuò)誤。
    源程序文件main.cpp清單如下:
    #include
    class MyClass
    {
    public:
    MyClass(int m)
    {
    member=m;
    }
    ~MyClass(){}
    int GetMember()
    {
    return member;
    }
    private:
    int member;
    };
    MyClass Makeobject(int m)
    {
    MyClass *pMyClass=new MyClass(m);
    return *pMyClass;
    }
    int main()
    {
    int x=7;
    /*********found**********/
    MyClass *myobj=Makeobject(x);
    /*********found**********/
    cout< <″My object has member″< <&NBSP;
    return 0;
    分析: 本題考核對(duì)象指針的應(yīng)用,屬于改錯(cuò)題。
    程序中出現(xiàn)了2個(gè)出錯(cuò)標(biāo)識(shí)符,說明此程序有2處錯(cuò)誤。
    第1處錯(cuò)誤:MyClass*myobj=Makeobject(x);,myobj是對(duì)象指針,而函數(shù)Makeobject的返回值是類MyClass的對(duì)象,所以應(yīng)改為:MyClass*my0bj=&Make0bject(x);。
    第2處錯(cuò)誤是:cout< <″My object has member″< <&NBSP;成員名;和(*對(duì)象指針名).成員名;,顯然上述語句的對(duì)象指針的使用方式是錯(cuò)誤的。
    答案: 應(yīng)改為:cout< <″My object has member″< GetMember()< <&NBSP; < <(*myobj).GetMember()<
    例2 請(qǐng)編寫一個(gè)函數(shù)int find(char s[],char t[]),該函數(shù)在字符串s中查找字符串t,如果找到,則返回字符串t在字符串s中的位置(整數(shù)值):否則返回-1。注意:用數(shù)組方式及兩重循環(huán)來實(shí)現(xiàn)該函數(shù)。
    注意:部分源程序已存在文件PROC2.cpp中。
    請(qǐng)勿修改主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)find的花括號(hào)中填寫若干語句。
    文件PROC2.cpp的內(nèi)容如下:
    #include
    int find(char s[],char t[] );
    const int MAXLINE=256;
    int main()
    {
    char source[MAXLINE],target[MAXLINE];
    cout< <″please input a string for searching:\n″;
    cin.getline(source,[MAXLINE]);
    cout< <″please input a string you want to find:\n″;
    cin.getline(target,MAXLINE);
    int intpos=find(source,target);
    if(intpos>=0)
    cout< <″Finding it,The target string is at index ″
    < <&NBSP;
    else
    cout< <″Not finding it \n″;
    return 0;
    }
    int find(char s[],char t[])
    {
    }
    分析: 本題是一道簡單應(yīng)用題。
    函數(shù)int find(char s[],char t[])的功能是在字符串s中查找字符串t,如果找到,則返回字符串t在字符串s中的位置(整數(shù)值);否則返回-1。而且用數(shù)組方式及兩重循環(huán)來實(shí)現(xiàn)該函數(shù)。
    答案:
    int find(char s[],char t[])
    {
    int i=0,j=0;
    for( i=0;s[i]!=′\0′;i+ +)
    {
    if(t[0]= =s[i])
    {
    while(t[j]!=′\0′&&s[i+j]!=′\0′)
    {
    j+ +;
    if(t[j]!=s[i+j])
    break;
    }
    }
    if(t[j]= =′\0′)
    return i;
    }
    return -1;
    }
    例3 請(qǐng)編寫一個(gè)函數(shù)void fun(int aa[],int n,int x),其中n表示數(shù)組aa中元素的個(gè)數(shù),函數(shù)的功能是:計(jì)算前x為的和并放在aa[x]中,aa數(shù)組中的元素值和x的值由主函數(shù)通過鍵盤讀入。
    部分源程序如下:
    #include
    #define MAX 100
    void main()
    {
    void fun(int aa[],int n,int x);
    int bb[MAX],i,x,n;
    cout< <″please enter the counter of the number:\n″;
    cin> >n;
    cout< <″please enter the number:\n″;
    for(i=0;i
    cin> >bb[i];