C++筆試試題及答案 計算機等級考試二級c++_第1頁
C++筆試試題及答案 計算機等級考試二級c++_第2頁
C++筆試試題及答案 計算機等級考試二級c++_第3頁
C++筆試試題及答案 計算機等級考試二級c++_第4頁
C++筆試試題及答案 計算機等級考試二級c++_第5頁
已閱讀5頁,還剩50頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、1改錯題使用VC6翻開考生文件夾下的工程test1_1,此工程包含一個源程序文件,但該程序運行有問題,請改正main函數中的錯誤,使該程序的輸出結果如下:Constructor called.Default constructor called.Area is 6Area is 0Area is 6源程序文件清單如下:#includeclass RectAngleprivate:double ledge,sedge;public:RectAngle()coutDefault constructor called.n;RectAngle(double l,double s)ledge=l;sed

2、ge=s;coutConstructor called.n;void Set(double l,double s)ledge=l;sedge=s;void Area()coutArea is ledge*sedgeendl; ;void main()/* found */RectAngle Rect1(2,3);RectAngle Rect2(1);/* found */RectAngle Rect3;Rect1.Area();/* found */dge=0;Rect2.Area();Rect3.Area();【答案】1錯誤:Rect2(1)正確:Rect22錯誤:Rect3正確:Rect3

3、(Rect1)3錯誤:Rect2.ledge=0;Rect2.sedge=0;正確:Rect2.Set(0,0); 2簡單應用題請編寫一個函數long Fibo(int n),該函數返回n的Fibonacci數,規那么如下:n等于1或者2時,Fibonacci數為1,之后每個Fibonacci數均為其前兩個數之和,即:F(n)=F (n-1)+F(n-2)。注意:請使用遞歸算法實現該函數。局部源程序已存在文件中。請勿修改主函數main和其他函數中的任何內容,僅在函數Fibo的花括號中填寫假設干語句。如n=8時,結果是21。文件清單如下:#includeconst int N=8;long Fi

4、bo(int n);void main()long f=Fibo(N);coutfendl;long Fibo(int n)【答案】long Fibo(int n)if(n=1) return 1L;else if(n=2) return 1L;elsereturn Fibo(n-1)+Fibo(n-2);3綜合應用題使用VC6翻開考生文件夾下的工程test1_3。此工程包含一個,其中定義了類circle和column,其中column類由circle類protected派生,但兩個類的定義并不完整。請按要求完成以下操作,將程序補充完整。1定義類circle的保護數據成員r和area,它們都是

5、double型的數據。請在注釋/ * 1 * 之后添加適當的語句。2添加類circle的無參數的構造函數,使circle對象的r默認值為0,請在注釋/ * 2 * 之后添加適當的語句。3添加派生類column構造函數的定義,傳入的參數為double型的height和radius,并將其分別賦值給數據成員h和基類的r,請在注釋/ * 3 * 之后添加適當的語句。4完成派生類column的成員函數print的定義,使其以格式r=_area=_先輸出半徑r和底面積area,再以格式h=_vol=_輸出高h和體積vol的值,請在注釋/ * 4 * 之后添加適當的語句。輸出結果如下:注意:除在指定的位置

6、添加語句外,請不要改動程序中的其他語句。源程序文件清單如下:#includeconst double pi=3.1416;class circle protected: / * 1 *public: / * 2 *circle(double radius) r=radius; void print()area=r*r*pi;coutr=r area=areaendl;class column: protected circleprotected:double h;public: / * 3 * void print() / * 4 * ;void main()column Col(1.0,2.

7、0);Col.print();【答案】1double r;double area;2circle( ) r=0; 3column(double radius, double height):circle(radius) h=height;4circle:print( );couth=h vol=area*hendl;1改錯題使用VC6翻開考生文件夾下的工程test2_1,此工程包含一個源程序文件,但該程序運行有問題,請改正程序中的錯誤,使該程序的輸出結果如下:調用基類BASE的構造函數:1調用基類BASE的構造函數:2調用派生類A的構造函數:3調用派生類A的析構函數調用基類BASE的析構函數調

8、用基類BASE的析構函數源程序文件清單如下:#includeclass BASEpublic:BASE(int i)cout調用基類BASE的構造函數:iendl;BASE()cout調用基類BASE的析構函數endl;/*found*/class A: public BASEpublic:/*found*/A(int a,int b):i(a),b(b)cout調用派生類A的構造函數:a+bendl;A()cout調用派生類A的析構函數endl;private:BASE b;void main()/*found*/BASE obj(1,2);【答案】1錯誤:類BASE的定義缺少;正確:;2錯

9、誤:A(int a,int b):i(a),b(b)正確:A(int a,int b):BASE(a),b(b) 3錯誤:BASE obj(1,2);正確:A obj(1,2); 2簡單應用題請編寫兩個函數void sort(int &x, &y)和void sort(int x,int y,int z),實現對2個和3個元素的排序并在屏幕上輸出排序結果數字之間使用跳格。注意:局部源程序已存放在文件中。請勿修改主函數main和其他函數中的任何內容,僅在函數的花括號中填寫假設干語句。輸出結果如下:3 42 3 4文件的內容如下:#includevoid sort(int &x,int &y) /

10、*1*/void sort(int x,int y,int z)/*2*/void main()int a=4,b=3,c=2;sort(a,b);sort(a,b,c);【答案】1void sort(int &x,int &y)int t;if (xy)t=x;x=y;y=t;coutxtyy) t=x; x=y; y=t;if(xz) t=x; x=z; z=t;if(yz) t=y; y=z; z=t;coutxtytzendl;3綜合應用題使用VC6翻開考生文件夾下的工程test2_3。此工程包含一個,其中定義了類Stud,但類的定義并不完整。請按要求完成以下操作,將程序補充完整。1定

11、義類的公有數據成員no,name10,其中no是int型的數據,name10是字符型一維數組。請在注釋/ * 1 * 之后添加適當的語句。2完成函數set的定義,分別將參數n,na的值賦給數據成員no,name。注意:請使用this指針完成對no的賦值,使用字符串函數實現對name和cname的賦值。請在注釋/ * 2 * 之后添加適當的語句。3完成類的成員函數disp的定義,使其按no,deg,name和cname的順序輸出類的數據成員的值,中間使用跳格符分隔,請在注釋/ * 3 * 之后添加適當的語句。輸出結果如下:1 李華 95 9907012 王東 83 990702注意:除在指定的位

12、置添加語句外,請不要改動程序中的其他語句。源程序文件清單如下:#include#includeclass Studpublic: / * 1 * int deg; char cname10;Stud()void set(int n,char na,int d,char cn)/ * 2 * deg=d;strcpy(cname,cn);void disp()/ * 3 *;void main()Stud obj2;obj0.set(1,李華,95,990701);obj1.set(2,王東,83,990702);obj0.disp();obj1.disp();【答案】1int no; char

13、 name10; 2this-no=n;strcpy(name,na);3coutnotnametdegtcnameendl;1改錯題使用VC6翻開考生文件夾下的工程test3_1,此工程包含一個源程序文件,但該程序運行有問題,請改正程序中的錯誤,使程序的輸出結果如下:A:a=5display1:a=6display2:a=5源程序文件清單如下:#includeclass Apublic:/*found*/A()void printa()coutA:a=aendl;private:int a;/*found*/class B; ;class Bpublic:/*found*/void disp

14、lay1(A t)(*t).a+;coutdisplay1:a=(*t).aendl;void display2(A t)t.a-;coutdisplay2:a=t.aendl;void main()A obj1;B obj2;obj1.printa();obj2.display1(&obj1);obj2.display2(obj1);【答案】1錯誤:A() 正確:A()a=5;2錯誤:class B;正確:friend class B;3錯誤:void display1(A t)正確:void display1(A *t)2簡單應用題請編寫函數fun,其功能是將兩個兩位數的正整數a,b合并形

15、成一個整數放在c中。合并的方式是將a數的個位和十位數依次在c數千位和十位上,b數的十位和個位數依次放在c數的個位和百位。注意:局部源程序以存在文件中。請勿修改主函數main和其他函數中的任何內容,僅在函數fun的花括號中填寫假設干語句。文件的內容如下:#includevoid fun(int a ,int b,long *c)void main()int a,b; long c;coutInput a,b;ab;fun(a,b,&c);coutThe result is:ncendl;【答案】void fun(int a, int b , long *c)*c=(a%10)*1000+(b%1

16、0)*100+(a/10)*10+b/10; 3綜合應用題使用VC6翻開考生文件夾下的工程test3_3,此工程包含一個源程序文件,其中建立了普通的基類base用于存儲邊的信息,建立派生類triangle和square,用于存儲三角形和正方形的信息。請按要求完成以下操作,將類定義補充完整。1定義基類base的保護數據成員x和y用于記錄邊的長度,它們都是int型的數據。請在注釋/*1*之后添加適當的語句。2完成基類base默認構造函數的定義,把數據成員x和y分別初始化為參數a和b的值,要求使用作用域符:。請在注釋/*2*之后添加適當的語句。3完成派生類triangle函數disp的定義,使其以三

17、角形面積:的格式將三角形的面積輸出到屏幕上。請在注釋/*3*之后添加適當的語句。4添寫派生類square的默認構造函數的定義,使其調用基類的構造函數,記錄下正方形的邊長信息a,其缺省值為0。請在注釋/*4*之后添加適當的語句。輸出結果如下:三角形面積:200正方形面積:400注意:除在指定位置添加語句之外,請不要改動程序中的其他內容。源程序文件清單如下:#includeclass baseprotected:/*1*public:base(int a,int b)/*2*virtual void disp()cout調用base基類endl;class triangle:public base

18、public:triangle(int a,int b):base(a,b); void disp()/*3*;class square:public basepublic:/*4*void disp()cout正方形面積:x*ydisp();p=&s;p-disp();【答案】1int x;int y;2base:x=a;base:y=b;3cout三角形面積:x*y*0.5endl;4square(int a=0):base(a,a);1改錯題使用VC6翻開考生文件夾下的工程test4_1,此工程包含一個源程序文件,但該程序在類的定義中存在問題,請改正類定義中的錯誤,使程序的輸出結果如下:

19、a=3 b=13a=5 b=13注意:請勿修改主函數main中的任何內容。源程序文件清單如下:#includeclass Tpublic:/*found*/T(int x)a=x; b+=x; /*found*/void display(T c) couta=c.atb=c.bendl;private:const int a;static int b;/*found*/int b=5; void main()T A(3),B(5);T:display(A);T:display(B);【答案】1錯誤:T(int x)a=x; b+=x; 正確:T(int x):a(x)b+=x;2錯誤:void

20、 display(T c)正確:static void display(T c)3錯誤:int b=5;正確:int T:b=5;2簡單應用題常用字符串函數strcat(s1,s2)可將字符串s2添加到字符串s1的末端,但其使用必須保證字符串s1足夠大,以便保存它自己的內容和字符串s2中的內容。請編寫一個函數char *append(char *s1,char *s2),其可將字符串s2添加到字符串s1的末端,而且不受s1空間大小的限制。請利用常用字符串函數實現。常用字符串函數說明:strcpy(to,form):將form字符串復制到to字符串;strcat(s1,s2):將字符串s2添加到

21、字符串s1的末端,但必須保證字符串s1足夠大;strlen(s):返回字符串s的長度;注意:局部源程序已存在文件中。請勿修改主函數main和其他函數中的任何內容,僅在函數append的花括號中填寫假設干語句。輸出結果如下: this is a string.文件的內容如下:#include#includechar *append(char *s1,char *s2)void main()char *s,*s1,*s2;s1=this is ;s2=a string.;s=append(s1,s2);coutsendl;【答案】char *append(char *s1,char *s2)cha

22、r *tmp;int length;length=strlen(s1)+strlen(s2);tmp=new charlength+1;strcpy(tmp,s1);strcat(tmp,s2);return tmp;3綜合應用題使用VC6翻開考生文件夾下的工程test4_3。此工程包含一個源程序文件,其對一個學校的教師和考生情況進行了描述。由于教師和考生之間有相同的信息,如姓名、年齡等,所以可抽象出一個基類person,考生類student和教師類teacher作為person類的派生類。請按要求完成以下操作,將程序中的類定義補充完整。1定義基類person的私有數據成員name和age,分

23、別用于表示姓名和年齡,name為字符指針,age為int型的數據。請在注釋/*1*之后添加適當的語句。2完成基類person的重載構造函數person(char *n,int a)的定義,把數據成員name,age分別初始化為參數n,a的值,請在注釋/*2*之后添加適當的語句。3根據主函數main中對s1的聲明,定義派生類student的構造函數。在注釋/*3*之后添加適當的語句。4完成派生類teacher成員函數void setinf(char *n,int a,char *d,char *l)的定義,其功能為記錄教師的姓名、年齡、院系與職稱信息。請在注釋/*4*之后添加適當的語句。輸出結果

24、如下:劉雷45destructor蔣軍23destructor注意:除在指定位置添加語句之外,請不要改動程序中的其他內容。源程序文件清單如下:#includeclass person/*1*public:person()person(char *n,int a)/*2*void setname(char *n)name=n;void setage(int a)age=a;person()coutname(age)destructorendl;class student:public personchar *department;int code;public:/*3*department=d;

25、 code=c;class teacher:public personchar *department;char *level;public:teacher()void setinf(char *n,int a,char *d,char *l)/*4*department=d;level=l;void main()student s1(蔣軍,23,計算機學院,2);teacher t1;t1.setinf(劉雷,45,計算機學院,教授);【答案】1char *name;int age;2name=n;age=a;3student(char *n,int a,char *d,int c):per

26、son(n,a)4setname(n);setage(a);1改錯題使用VC6翻開考生文件夾下的工程test5_1,此工程包含一個源程序文件,但該程序運行有問題,請改正程序中的錯誤,使程序的輸出結果如下:x=3 y=5 z=08 源程序文件清單如下:#includestatic int x=5;int z=0;int *add(int x,int y) coutx=x y=y z=zendl;z=z+x+y;/*found*/return z;/*found*/;void main()int y=5;int x=3;/*found*/cout&(add(x,y)endl; 【答案】1錯誤:re

27、turn z;正確:return &z;2錯誤:;正確:3錯誤:cout&(add(x,y)endl;正確:cout*(add(x,y)endl;2簡單應用題請編寫函數void swap(int *px,int *py) 與void swap(int &px,int &py),實現主程序中變量a和b值的交換。輸出結果如下:3 22 3注意:局部源程序已存在文件中。請勿修改主函數main和其他函數中的任何內容,僅在函數相應的花括號中填寫假設干語句。文件的內容如下:#includevoid swap(int *px,int *py)/*1*/void swap(int &px,int &py)/*

28、2*/void main()int a=2,b=3;swap(a,b);couta bendl;swap(&a,&b);couta bendl;【答案】1void swap(int *px,int *py)int temp;temp=*px;*px=*py;*py=temp;2void swap(int &px,int &py)int temp;temp=px;px=py;py=temp;3綜合應用題使用VC6翻開考生文件夾下的工程test5_3。此工程包含一個源程序文件,其中定義了一個類Fn,用于求n!。請按要求完成以下操作,將程序補充完整。1定義私有數據成員value存放n和fact存放n

29、!,它們都是int型的數據。請在注釋/*1*之后添加適當的語句。2完成默認構造函數Fn的定義,使Fn對象的數據成員value值為i,fact值為1。請在注釋/*2*之后添加適當的語句。3完成函數Cal的定義,該函數計算value的階乘,并將運算結果保存在fact中,要求使用while循環實現。請在注釋/*3*之后添加適當的語句。4將主函數補充完整,直接調用類的成員函數,在界面上輸出value的階乘值。請在注釋/*4*之后添加適當的語句。注意:除在指定位置添加語句之外,請不要改動程序中的其他內容。源程序文件清單如下:#includeclass Fn /*1*public:Fn(int i);vo

30、id Cal();void disp(); ;Fn:Fn(int i)/*2*void Fn:Cal()/*3*fact*=i-;void Fn:disp()coutvalue!=factendl;void main()int value;coutvalue;Fn A(value);/*4*【答案】1int value;int fact;2value=i;fact=1;3int i=value;while(i1)4A.Cal();A.disp();1改錯題使用VC6翻開考生文件夾下的工程test6_1,此工程包含一個源程序文件,但該程序運行有問題,請改正程序中的錯誤,使程序的輸出結果如下:Co

31、nstructor2Constructor1i=0i=10Destructor源程序文件清單如下:#includeclass CSampleint i;public:CSample()coutConstructor1endl; i=0;CSample(int val)coutConstructor2endl; i=val;CSample()coutDestructorendl;void disp();/*found*/void disp() couti=idisp();/*found*/b-disp();【答案】1錯誤:void disp()正確:void CSample:disp()2錯誤:

32、a-disp();正確:a=new CSample; a-disp();3錯誤:b-disp();正確:b.disp();2簡單應用題編寫函數fun(),它的功能是利用以下所示的簡單迭代方法求方程cos(x)-x=0的一個實根。xn+1 =cos(xn)迭代步驟如下:(1)取x1初值為。(2)x0=x1,把x1的值賦給x0。(3)x1=cos(x0),求出一個新的x1。(4)假設x0-x1的絕對值小于0.000001, 那么執行步驟(5),否那么執行步驟(2)。(5)所求x1就是方程cos(x)-x=0的一個實根,做為函數值返回。程序輸出結果。注意:局部源程序已存在文件中。請勿改動主函數mai

33、n和其他函數中的任何內容,僅在函數fun的花括號中填入所編寫的假設干語句。文件test6_2的內容如下:#include#include#includefloat fun() void main() coutRoot=fun()=1e-6); return x1; 3綜合應用題使用VC6翻開考生文件夾下的工程test6_3,此工程包含一個源程序文件,其中定義了用于表示考生的類Student,請按要求完成以下操作,將程序補充完整。1定義私有數據成員code、english分別用于表示考生的編號、英語成績、它們都是int型的數據。請在注釋/*1*之后添加適當的語句。2完成成員函數void Stud

34、ent:inputinformation()的定義,該函數用于用戶輸入一個考生對象的信息,輸入格式如下所示:輸入編號: 英語成績: 計算機成績: 請在注釋/*2*之后添加適當的語句。3利用已實現的類Student的成員函數,完成函數void firstname(Student *A,int num)的定義,該函數根據考生信息A,輸出num個考生中總分最高者的編號及其相應的總分,在此不考慮總分相同的情況。請在注釋/*3*之后添加適當的語句。注意:除在指定位置添加語句之外,請不要改動程序中的其他內容。源程序文件清單如下:#includeclass Student/*1* int computer;

35、int total;public:void getinformation();void computesum();int getcode();int gettotalscore();Student();void Student:getinformation()/*2* coutenglish;coutcomputer;void Student:computesum()total=english+computer;cout編號code總分:totalendl;int Student:getcode()return code;int Student:gettotalscore()return to

36、tal; void firstname(Student *A,int num)/*3* tempsum=(*A0).gettotalscore();for(int i=1;itempsum)tempcode=(*Ai).getcode();tempsum=(*Ai).gettotalscore();cout總分最高者-tempcode: tempsumendl;void main()Student *A3;int i,n=3;for(i=0;igetinformation();for(i=0;icomputesum();firstname(A,3);【答案】1int code;int engl

37、ish;2coutcode;3int tempcode,tempsum;tempcode=(*A0).getcode();1改錯題使用VC6翻開考生文件夾下的工程test7_1,此工程包含一個源程序文件,但該程序運行有問題,請改正程序中的錯誤,使程序的輸出結果如下:Constructor1Constructor1Constructor1DestructorConstructor2Destructorx=0x=5DestructorDestructor源程序文件清單如下:#includeclass Bint x;public:B()x=0;coutConstructor1endl;B(int i

38、)x=i;coutConstructor2endl;B()coutDestructorendl;/*found*/B(int i)couti be Destructorendl;void print() coutx=xendl;void main()B *ptr;ptr=new B2;/*found*/ptr0=B(0); ptr1=B(5);/*found*/for(int i=0;i2;)ptri.print();delete ptr;【答案】1錯誤:B(int i)couti be Destructorendl;正確:應將其刪除2錯誤:ptr0=B(0);正確:ptr0=B();3錯誤:

39、for (int i=0;i2;)正確:for(int i=0;i2;i+)2簡單應用題編寫一個函數int charnum(char fn10),該函數以只讀方式翻開文件fn,,通過統計,返回文件中字符的個數,請使用while循環實現計數功能。注意:局部源程序已存在文件test中。請勿修改主函數main和其他函數中的任何內容,僅在函數charnum的花括號中填寫假設干語句。文件的內容如下:#include#include#includeint charnum(char fn10);void main()int num;num=charnum(abc.txt);coutnum=numendl;i

40、nt charnum(char fn10)【答案】int charnum(char fn10)fstream file;file.open(fn,ios:in);if(!file)coutabc.txt cant openendl;abort();char ch;int i=0;while(!file.eof()file.get(ch);i+;file.close();return i-1;3綜合應用題使用VC6翻開考生文件夾下的工程test7_3,此工程包含一個源程序文件,其中含有一個類Circle的定義,但該類的定義并不完整。請按要求完成以下操作,將類Circle的定義補充完整。1為類Ci

41、rcle增加一個構造函數,該函數有一個參數,并在構造時將該參數值賦給成員radius。將該函數實現為一個非內聯函數,并且使用參數列表的方式將類成員賦值。請在注釋/*1*之后添加適當的語句。2為類Circle增加一個成員函數print(),使得可以輸出有關圓的信息,比方以下程序Circle c;c.SetRadius(5);c.Print();將輸出:The circle has radius of 5!請在注釋/*2*之后添加適當的語句。3完成友元函數void CompareR(Circle *c1,Circle *c2)的定義,在屏幕中輸出c1與c2比擬radius大小結果,要求使用if-e

42、lse結構完成。請在注釋/*3*之后添加適當的語句。輸出結果如下:The circle has radus of 5!The circle has radius of 10!c1c2注意:除在指定位置添加語句之外,請不要改動程序中的其他內容。源程序文件清單如下:#includeclass Circlepublic:Circle():radius(5)/*1*void SetRadius(int r) radius=r; int GetRadius() return radius; /*2* friend void CompareR(Circle *c1,Circle *c2);private:

43、int radius; ;void CompareR(Circle *c1,Circle *c2)/*3*coutc2GetRadius()=(c2-GetRadius()coutc1=c2GetRadius()GetRadius()coutc1c2endl;void main()Circle c1;c1.SetRadius(5);c1.Print();Circle c2(10);c2.Print();CompareR(&c1,&c2);【答案】1Circle(int rad):radius(rad)2void Print()coutThe circle has radius of radiusGetRadius()(c2-GetRadius()1改錯題使用VC6翻開考生文件夾下的工程test8_1,此工程包含一個源程序文件,但該程序運行有問題,請改正程序中的錯誤,使程序的輸出結果如下:f1 f

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論