全國2012年1月04737C++程序設計自考試卷
2025-07-08 來源:中國教育在線
全國2012年1月高等教育自學考試
C++程序設計試題
課程代碼:04737
一、單項選擇題(本大題共20小題,每小題1分,共20分)
在每小題列出的四個備選項中只有一個是符合題目要求的,請將其代碼填寫在題后的括號內。錯選、多選或未選均無分。
1.如聲明對象數組,則下列描述正確的是( )
A.對每個元素均調用一次構造函數
B.部分元素調用構造函數,其它元素不需調用
C.均不需要調用構造函數
D.只是首元素調用構造函數
2.不同對象調用同一成員函數時,this指針指向( )
A.不同對象 B.相同對象
C.無對象 D.不確定
3.設存在函數intmax(int,int)返回兩參數中較大值,若求22,59,70三者中最大值,下列表達式正確的是( )
A.int m=max(22,max(59,70));
B.int m=max(max(22,59),max(59,70));
C.int m=max(max(22,70),59);
D.以上皆正確
4.一個類可擁有多少個構造函數( )
A.0個 B.1個
C.1或多個 D.以上皆對
5.在編譯指令中,嵌入指令是指( )
A.#include B.#define
C.#if D.#else
6.設存在數組a,其長度為Len,下列哪項操作是將a中元素復制到數組b中( )
A.reverse(a+a,Len,b); B.sort(a,a+Len,b);
C.find(a,a+Len,b); D.copy(a,a+Len,b);
7.下列哪個要素不是面向對象的關鍵要素( )
A.模塊化 B.抽象性
C.封裝性 D.繼承性
8.下列對于類的描述錯誤的是( )
A.類要先聲明后使用
B.類是具有僅有標識的實體
C.兩個類可以使用同一個名稱
D.組成類的不僅有數據,還可以有對數據進行操作的函數
9.使用引用調用方式將實參傳給形參,下列說法正確的是( )
A.形參是實參的備份 B.實參是形參的備份
C.形參和實參共享同一對象 D.形參和實參無聯系
10.關于對象的性質,下列描述錯誤的是( )
A.同一類對象之間可相互賦值
B.不能使用對象數組
C.對象可以用作函數參數
D.一個對象可以用作另一個類的成員
11.類的私有成員可在哪里被賦值( )
A.類體中 B.該類的成員函數中
C.A和B D.以上都不是
1 2.設存在數組a,其長度為Len,則下列哪個泛型算法用于反轉a中各元素( )
A.reverse(a,a+Len); B.sort(a,a+Len);
C.find(a,a+Len,value); D.copy(a,a+Len,b);
13.用于標識八進制常量的前綴或后綴是( )
A.無 B.后綴L或1
C.前綴零 D.前綴Ox
14.派生類中繼承的基類成員初始化如何進行( )
A.由派生類構造函數調用基類的構造函數進行
B.由派生類構造函數進行
C.由基類構造函數進行,無需派生類構造函數調用
D.以上皆不正確
1 5.對于多重繼承,下列描述正確的是( )
A.所有基類使用相同的派生方式 B.每個基類可使用不同派生方式
C.只能是public派生 D.只能是protected派生
16.下列關于類的權限描述錯誤的是( )
A.類本身的成員函數可以訪問自身的任何成員
B.類的對象可以訪問該類的所有成員
C.普通函數不能直接訪問類的公有成員,必須通過成員函數對其訪問
D.一個類可以將另一個類的對象作為成員
17.運算符delete與哪個函數一起運行( )
A.構造函數 B.析構函數
C.主函數 D.不與任何函數一起工作
18.一個類可以獲得另一個類的特性的機制稱為( )
A.抽象 B.封裝
C.繼承 D.多態性
19.使用下列哪個格式控制符可設置轉換十六進制為十進制( )
A.dec B.oct
C.hex D.endl
20.對引用調用描述正確的是( )
A.分配新存儲空間
B.修改已存儲空間的名稱為引用名
C.引用名與已存在存儲空間無任何關聯
D.將引用名標識符與一塊已存在儲區域相關聯,沒有分配新存儲空間
二、填空題(本大題共20小題,每小題1分,共20分)
請在每小題的空格中填上正確答案,錯填、不填均無分。
21.公共派生中,基類的公有成員在派生類中是______。
22.若要使用標準輸入流機制從鍵盤輸入一個整數賦給整型變量a,相應的C++語句是______。
23.UML中對象行為之間的動態關系是通過對象行為之間的依賴關系表現的,稱之為______。
24.C++函數中按引用調用傳遞參數時使用______作為參數。
25.在C++中除具有______語句和switch語句的函數外,其它函數都可以說明為內聯函數。
26.C++中規定模板以______關鍵字和一個形參表示開頭。
27.構造函數不能被繼承,一個派生類只能調用它的______基類的構造函數。
28.vector類中用于獲取存放的元素個數的方法是______。
29.C++中istream類的直接基類是______。
30.要關閉一個文件輸出流對象myFile,所用的C++語句是______。
31.執行下列代碼
double pi=3.141592
cout<
32.在私有派生中,基類的權限為private的成員,在派生類中______。
33.C++總共有3種文件流,分別是輸入文件流、輸出文件流和______。
34.C++使用流進行輸入輸出,其中能捕獲鍵盤輸入的對象是______。
35.在vector類中刪除向量中最后一個對象的方法是______。
36.函數重載可使一個函數名具有多種功能,稱這種特性為______。
37.C++語言對C語言做了很多改進,C++語言相對于C語言的最根本的變化是引進了______概念。
38.______指令定義一個標識符及串,在源程序中每次遇到該標識符時,編譯器均用定義的串代替之。
39.在C++標準輸出方式中,要設置輸出數據字段寬度width所使用的操控符是______。
40.設有定義int x;float y;,則10+x+y值的數據類型是______。
三、改錯題(本大題共5小題,每小題2分,共10分)
下面的類定義中有一處錯誤,請用下橫線標出錯誤所在行并給出修改意見。
41.#include
main(){
int x=9,y=8,z=7;
const int * p=z;
cout<< * p<
}
42.#include
main(){
int x=8,y=6;
const int*const p=&x;
p=&y;
cout<<* p<
}
43.#include
main(){
folat p;
p=new folat[5];
for(int i=0;i<5;i++)
{cin>> * (p+i);cout<< * (p+i)<
delete p;
}
44.template
T f(T x){
T y;
y=x+T;
return y;
}
45.#include
class point{
int x;
public:void init(int a){x=a;}
int getx(){return x;}
void setx(int a){x=a;}
};
main(){
point a;
a.init(20,30);
cout<
}
四、完成程序題(本大題共5小題,每小題4分,共20分)
46.在下面程序的下劃線處填上正確的語句,使其得到下面的輸出結果。
x=2,y=3
#include
class Sample
{
int x,y;
public:
Sample( ){
x=y=0;
}
Sample(int a,int b){
x=a;
(__________)
}
void disp( )
{
cout<<"x="<
}
}(____-_______)
void main( )
{
Sample s(2,3),*p=&s;
p - >disp();
}
47.在下劃線處填上適當的語句,使程序的輸出結果如下:
n=30
#include< iostream.h >
template< class T >
class Sample
{
T n;
public:
Sample( ){ }
Sample(T i){_________}
Sample&operator+(const Sample&);
void disp( ){cout<<"n="<
};
template
Sample&Sample::operator+(const Sample&s)
{
static Sampletemp;
return temp;
}
void main( )
{
Samples1(10),s2(20),s3;
s3=s1+s2;
s3.disp();
}
48.在下劃線處填上適當的語句,使程序的輸出結果如下:
1 2 3 4 5 6 7 8 9 10
#include
class Sample
{
int A[10][10];
public:
int &operator()(int,int);
};
int &Sample::operator()(int x,int y)
{
return A[x][y];
}
void main()
{
Sample a;
int i,j;
_________
for(j=0;j<10;j++)
_________
for(i=0;i
cout<
cout<
}
49.在下劃線處填上適當的句子,完成函數的定義。
#include
class Sample
{
int x;
public:
Sample( ){ };
_________{x=a;}
_________{x=a.x++ +10;}
void disp( ){cout<<"x="<
};
void main( )
{
Sample s1(2),s2(s1);
s1.disp( );
s2.disp( );
}
50.輸入一個字符串,將其逆序后輸出。
#include
using namespace std;
void main()
{
char a[50];memset(a,0,sizeof(a));
int i=0,j;
char t;
cin.getline(a,50,'\ n';
for(i=0,j=strlen(a)-1;i<_________;i++,j ―― )
{
t=a[i];
a [j]=t;
}
cout<
}
五、程序分析題(本大題共4小題,每小題5分,共20分)
51.(給出下面程序的輸出結果
#include
class example
{
int a;
public:
example(int b){a=b++;}
void print( ){a=a+1;cout<
void print( )const{cout<
};
void main( )
{
example x(3);
const example y(2);
x.print( );
y.print( );
}
52.給出下面程序的輸出結果
#include
class Sample
{
int x,y;
public:
Sample( ){x=y=0;}
Sample(int a,int b){x=a;y=b;}
~Sample()
{
if(x==y)
cout<<"x=y"<
else
cout<<"x!=y"<
}
void disp()
{
cout<<"x="<
}
};
void main()
{
Sample sl(2,3);
s1.disp();
}
53.給出下面程序的輸出結果
#include
class Sample
{
int n;
static int sum;
public:
Sample(int x){n=x;}
void add( ){sum+=n;}
void disp( )
{
cout<<"n="<
}
};
int Sample::sum=0;
void main( )
{
Sample a(2),b(3),c(5);
a.add( );
a.disp( );
b.add( );
b.disp( );
c.add( );
c.disp( );
}
54.給出下面程序的輸出結果
#include
class A{
private:
friend class B;
A(int val=0):data(val),use(1){}
int use,data;
};
class B{
public:
A*pa;
B(int val=0):pa(new A(val)){ }
~B( ){if( -- pa ->use==0)delete pa;}
B(B&rhs){ + + rhs ->use;pa=rhs.pa;}
B&operator=(B&rhs);
A*operator ->( ){return pa;}
void Display( ){
cout<<"data="<data
<<",use="<use<
}
};
B&B::operator=(B&rhs)
{
if(this = = &rhs)return*this;
if( -- pa ->use = =0)delete pa;
+ + rhs ->use;
pa=rhs.pa;
return * this;
}
int main( ){
B b1(1),b2(b1),b3(3);
b1.Display( );
b2.Display( );
b3.Display( );
b3=b1;
b1.Display( );
b3.Display( );
return 0;
六、程序設計題(本大題共1小題,每小題10分,共10分)
55.已知一個student類,包括學姓名,成績和等級,不含任何成員函數.process為學生信息處理類.
class student{
char name[ 10 ];
int deg;
char level[ 7 ];
friend class process:
public:
student(char na[ ],int d){strcpy(name,na);deg=d;}
} ;
class process{
public:
void trans(student s[ ]){…}//根據學生成績計算學生等級(優大于89分,良大于79分,中大于69分,及格大于59分,不及格小于60分).
void disp(student s[ ]){...}//根據成績降序打印所有學生信息
};
要求實現process類中的兩個函數: