?自考C++程序設計2018年10月試題
摘要:自考C++程序設計2018年10月試題及答案解析,該試卷為自考C++程序設計歷年真題試卷,包含答案及詳細解析。
自考C++程序設計2018年10月試題及答案解析
自考C++程序設計2018年10月試題及答案解析,該試卷為自考C++程序設計歷年真題試卷,包含答案及詳細解析。
一、單項選擇題(本大題共20小題,每小題1分,共20分。)在每小題列出的備選項中只有一項是最符合題目要求的,請將其代碼填寫在題后的括號內。錯選、多選或未選均不得分。
1.若有以下類型標識符定義:char c="c"; int a=4; float f=3.14; double d=1.212; 則表達式C+a/(int)d+f的結果類型是( )
A.float
B.char
C.int
D.double
2.設x和y均為bool量,則x&&y為真的條件是( )
A.它們均為真
B.其中一個為真
C.它們均為假
D.其中一個為假
3.拷貝構造函數應該是( )
A.不帶參數的構造函數
B.帶有一個參數的構造函數
C.帶有兩個參數的構造函數
D.缺省構造函數
4.以下說法中正確的是( )
A.C++程序總是從第一個定義的函數開始執行
B.C++程序總是從main函數開始執行
C.C++中函數必須有返回值
D.C++中函數名必須唯一
5.下列虛基類的聲明中,正確的是( )
A.class virtual B:public A
B.class B:virtual public A
C.class B:public A virtual
D.virtual class B:public A
6.下列哪個類型函數不適合聲明為內聯函數( )
A.函數體語句較多
B.函數體語句較少
C.函數執行時間較短
D.函數被頻繁調用
7.以下類模板定義正確的為( )
A.template﹤class T﹥
B.template﹤class T, class int i﹥
C.template﹤class T, typename T﹥
D.template﹤class T1,T2﹥
8.C++中要實現動態聯編,調用虛函數時必須使用( )
A.基類指針
B.類名
C.派生類指針
D.對象名
9.下列對靜態成員的描述中,不正確的是( )
A.靜態成員不屬于對象,是類的共享成員
B.靜態數據成員要在類外定義和初始化
C.調用靜態成員函數時要通過類或對象激活,所以靜態成員函數擁有this指針
D.非靜態成員函數也可以操作靜態數據成員
10.下列對派生類的描述中,錯誤的是( )
A.一個派生類可以作為另一個派生類的基類
B.派生類至少有一個基類
C.派生類的成員除了它自己的成員外,還包含了它的基類的成員
D.派生類中繼承的基類成員的訪問權限到派生類保持不變
11.下列函數原型聲明語句中,錯誤的是( )
A.int f(void);
B.void f(hat);
C.int f(a);
D.void f(double a);
12.如果有int型變量a,則定義指向變量a的指針p正確的寫法是( )
A.int p=&a
B.int * P=&a
C.int&p=*a
D.int*p = a
13.假定指針變量P定義為“int *P=new int(100);”,要釋放P所指向的動態內存,應使用語句( )
A.delete p;
B.delete* p;
C.delete&p;
D.delete[ ]p;
14.假定A為一個類,則執行“A a[3], b(3);”語句時調用該類構造函數的次數為( )
A.3
B.4
C.5
D.9
15.C++中定義標準輸入輸出的庫為( )
A.stdio
B.math
C.iostream
D.stdlib
16.允許用戶為類定義一種模式,使得類中的某些數據成員及某些成員函數的返函值能取任意類型,這是一個( )
A.類模板
B.模板類
C.函數模板
D.模板函數
17.下列關于運算符重載的敘述中,正確的是( )
A.通過運算符重載,可以定義新的運算符
B.有的運算符只能作為成員函數重載
C.若重載運算符+,則相應的運算符函數名是+
D.重載一個二元運算符時,必須聲明兩個形參
18.當使用ofstream流類定義一個流對象并打開一個磁盤文件時,文件的隱含打開方式為( )
A.ios::out | ios::binary
B.ios::in | ios::binary
C.ios::out
D.ios::in
19.有關函數模板和模板函數說法錯誤的是( )
A.函數模板只是對函數的描述,編譯器不為其產生任何執行代碼,所以它不是一個實實在在的函數
B.模板函數是實實在在的函數,它由編譯系統在遇到具體函數調用時所生成,并調用執行
C.函數模板需要實例化為模板函數后才能執行
D.當函數模板和一般函數同名時,系統先去匹配函數模板,將其實例化后進行調用
20.對類的構造函數和析構函數描述正確的是( )
A.構造函數可以重載,析構函數不能重載
B.構造函數不能重載,析構函數可以重載
C.構造函數可以重載,析構函數也可以重載
D.構造函數不能重載,析構函數也不能重載
二、填空題(本大題共20小題,每小題1分,共20分)請在每小題的空格中填上正確答案。錯填、不填均無分。
11.將int類型指針p轉換為char類型指針,則強制轉換語句為_________。
12.當一個成員函數被調用時,該成員函數的_________指向調用它的對象。
13.在_________繼承的情況下,基類數據成員在派生類中的訪問權限保持不變。
14. Windows環境下,由C++源程序文件編譯而成的目標文件的擴展名是_________。
15.具有至少一個純虛函數的類是_________。
16. C++中字符串是通過字符數組來表示的,每一個字符串都有一個結尾字符_________。
17.C++中定義重載函數時,應至少使重載函數的參數個數或_________不同。
18.假定x=15,則表達式X﹤=10?20:30的值為_________。
19.不同對象可以調用相同名稱的函數,但執行完全不同行為的現象稱為_________。
110.假設類F的對象f是類A的成員對象,則“A a”語句執行時,先調用類_________的構造函數。
111.設"int a=3,b=4,C=5;",表達式“(a+b)﹥c&&b==c”的值是_________。
112.描述命題“A小于8或小于C”的表達式為_________。
113.C++中字符串"a+b=12 "的長度為_________。
114.C++類中構造函數的個數最多是無限個,析構函數的個數最多是_________個。
115.C++的靜態數據成員需要在_________進行初始化,可以被該類的所有對象共享。
116.C++中一般的程序都要有兩條語句,包含頭文件“#include ﹤iostream﹥”語句和使用命名空間“_________”語句。
117.用new申請某一個類的動態對象數組時,在該類中必須能夠匹配到沒有形參的或缺省參數的_________,否則應用程序會產生一個編譯錯誤。
118.C++中解決命名沖突的機制是_________。
119.拷貝構造函數使_________作為參數初始化創建中的對象。
120.假如一個類的名稱為F,使用這個類的一個對象初始化該類的另一個對象時,可以調用_________構造函數來完成此功能。
三、改錯題(本大題共5小題,每小題2分,共10分)
21.#include ﹤iostream.h﹥using namespace std;void setzero(int &a) {a=0; }int main( ){int x1=10; setzero(&x1);cout ﹤﹤x1﹤﹤ endl;return 0;}
22.改正后程序輸出結果為2 5 8 11 14#include ﹤iostream. h﹥using namespace std;void main( ){int i=1;while(i﹤=15){i++; if(i%3==2) continue;else cout ﹤﹤1﹤﹤" ";}}
23.#include ﹤iostream. h﹥using namespace std;class Point{public: void init( ) { }static void output( ) { }};void main( ){Point P;Point:: init( );P. output( );}
24.#include ﹤iostream. h﹥using namespace std;class A{int x, y; public: void set(int a, int b){ x=a; y=b;}int getx( ){return x; }int gety( ){return y;}int sum( ){return x+y;}}; int main( ) {A a; a. set(3, 4);cout﹤﹤a.x﹤﹤a.y﹤﹤ a.sum( )﹤﹤ endl;return 0;}
25.申請一個長度為10的int型空間,之后釋放該空間。#include ﹤iostream. h﹥using namespace std;int main( ){int *p=new int[ 10];delete p;return 0;}
四、完成程序題(本大題共5小題,每小題4分,共20分)
31.把從鍵盤上輸入的一批整數(以-1作為終止輸入的標志)保存到文本文件“a:xxk1.dat”中。#include ﹤iostream﹥#include ﹤fstream.h﹥#include ﹤stdlib. h﹥void main( ){ofstream fout("a: xxk1.dat");if( _____________ ) {cout﹤﹤"文件沒有打開!"﹤﹤end;exit(1);}int x; cin﹥﹥x;while(x! =-1){fout ﹤﹤x﹤﹤' ';cin ﹥﹥x;}_____________; //關閉文件}
32.#include ﹤iostream. h﹥using namespace std;_____________;_____________;{T tmp =x*x+y*y+x*y; return tmp;}int main( ){int x1=1, y1 =4;float x2=1.1, y2=2.2;double x3=2.0, y3=3.1;cout﹤﹤fun(x1, y1)﹤﹤endl;cout ﹤﹤fun(x2, y2)﹤﹤endl;cout ﹤﹤fun(x3, y3)﹤﹤ endl;return 0;}
33.完成程序,使其輸出結果為79#include ﹤iostream. h﹥using namespace std;int main( ){int a[6]={23,15,64,33,40,58};_____________;s1=s2=a[0];for(int *p=a+1; p﹤a+6; p++) {if(s1﹥*p) s1=*p;if _____________;}cout ﹤﹤s1 +s2 ﹤﹤endl;return 0;}
34.#include ﹤iostream.h﹥class Point{int X,Y;public:Point(int x=0, int y=0){ X=x; Y=y; Countp ++;}Point( point &p){X=p. X; Y=p.Y; }~Point( ){ Countp--; }_____________;static int Countp; void display( ){ cout ﹤﹤X﹤﹤", "﹤﹤Y﹤﹤", "; }};Point myfun( Point p1, Point p2, Point p3){ Point tmp(p1. X+p2. X+P3. X, p1. Y+p2.Y+p3. Y);return tmp;}int Point:: Countp =0;void main( ){ Point pp,p1(1,2),p2(1);Point p=myfun(pp0, pp1, pp2);p. display ( );_____________; //輸出Countp的值}
35.完成程序,使其結果為 x=6,y=10 x=11,y=10#include ﹤iostream.h﹥using namespace std;class Sample{private: int x;_____________;public:Sample (int a);void print( );};Sample:Sample( _____________ ){ x=a; y=x++;}void Sample:: print( ){cout ﹤﹤"x="﹤﹤x﹤﹤",y="﹤﹤y﹤﹤end;}int Sample: : y =25;void main( ){ Sample s1(5);Sample s2(10);s1. print( );s2. print( );}
五、程序分析題(本大題共2小題,每小題10分,共20分)
41.#include ﹤iostream﹥using namespace std;void Result(char ch){switch(ch){case 'A':case 'a': cout ﹤﹤"well!";break;case 'B': case 'b':cout ﹤﹤"good!"; break;case 'C':case 'c':cout ﹤﹤"pass!";break;default:cout ﹤﹤"bad!"; break;}}void main( ){char a1='b', a2='C', a3='f';cout ﹤﹤"Results:"﹤ endl;Result(a1);Result(a2 );Result(a3);Result('A');}
42.#include ﹤iostream.h﹥using namespace std;class Sample {protected:int x;public:Sample( ) {x=0; }Sample(int val) { x=val;}void operator++( ){ x++;}};class Derived:public Sample{int y;public:Derived( ):Sample( ) { y=0;}Derived ( int val1, int val2):Sample(val1 ) { y=val2;}void operator--( ) {x--; y--;}void disp( ){cout﹤﹤"x="﹤﹤x﹤﹤",y="﹤﹤y﹤﹤ endl;}};void main( ) {Derived d(3, 5);D. disp( ); d++;D. disp( ); d--; d--;D. disp( );}
六、程序設計題(本大題共1小題,共10分)
51.設計一個圓類circle和一個桌子類table。circle類包含私有數據成員radius和求圓面積的成員函數getarea( );table類包含私有數據成員height和返回高度的成員函數getheight( )。roundtable類繼承所有上述類的數據成員和成員函數,添加了私有數據成員color和相應的成員函數。其中,main函數已給出。請完成程序的其他部分。void main( ) { roundtable rt(0.8,1.2,"黑色");cout﹤"圓桌屬性數據"﹤endl; cout﹤﹤"高度:"﹤﹤rt.getheight( )﹤"米"﹤﹤endl;cout﹤"面積:"﹤﹤tr. geared( )﹤"平方米"﹤﹤endl;cout﹤﹤"顏色"﹤﹤rt. getcolor( )﹤﹤endl; }
延伸閱讀
- 2025年4月自考政治經濟學(中級)全真模擬試題
- 2023年10月自考00257票據法真題
- 2023年10月自考00249國際私法真題
- 2023年10月自考00246國際經濟法概論真題
- 2023年10月自考00245刑法學真題
- 2023年10月自考00186國際商務談判真題
自考微信公眾號
掃碼添加
自考備考資料免費領取
去領取