全國2012年1月04737C++程序設(shè)計自考試卷
2025-07-08 來源:中國教育在線
全國2012年1月高等教育自學(xué)考試
C++程序設(shè)計試題
課程代碼:04737
一、單項選擇題(本大題共20小題,每小題1分,共20分)
在每小題列出的四個備選項中只有一個是符合題目要求的,請將其代碼填寫在題后的括號內(nèi)。錯選、多選或未選均無分。
1.如聲明對象數(shù)組,則下列描述正確的是( )
A.對每個元素均調(diào)用一次構(gòu)造函數(shù)
B.部分元素調(diào)用構(gòu)造函數(shù),其它元素不需調(diào)用
C.均不需要調(diào)用構(gòu)造函數(shù)
D.只是首元素調(diào)用構(gòu)造函數(shù)
2.不同對象調(diào)用同一成員函數(shù)時,this指針指向( )
A.不同對象 B.相同對象
C.無對象 D.不確定
3.設(shè)存在函數(shù)intmax(int,int)返回兩參數(shù)中較大值,若求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.一個類可擁有多少個構(gòu)造函數(shù)( )
A.0個 B.1個
C.1或多個 D.以上皆對
5.在編譯指令中,嵌入指令是指( )
A.#include B.#define
C.#if D.#else
6.設(shè)存在數(shù)組a,其長度為Len,下列哪項操作是將a中元素復(fù)制到數(shù)組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.下列哪個要素不是面向?qū)ο蟮年P(guān)鍵要素( )
A.模塊化 B.抽象性
C.封裝性 D.繼承性
8.下列對于類的描述錯誤的是( )
A.類要先聲明后使用
B.類是具有僅有標識的實體
C.兩個類可以使用同一個名稱
D.組成類的不僅有數(shù)據(jù),還可以有對數(shù)據(jù)進行操作的函數(shù)
9.使用引用調(diào)用方式將實參傳給形參,下列說法正確的是( )
A.形參是實參的備份 B.實參是形參的備份
C.形參和實參共享同一對象 D.形參和實參無聯(lián)系
10.關(guān)于對象的性質(zhì),下列描述錯誤的是( )
A.同一類對象之間可相互賦值
B.不能使用對象數(shù)組
C.對象可以用作函數(shù)參數(shù)
D.一個對象可以用作另一個類的成員
11.類的私有成員可在哪里被賦值( )
A.類體中 B.該類的成員函數(shù)中
C.A和B D.以上都不是
1 2.設(shè)存在數(shù)組a,其長度為Len,則下列哪個泛型算法用于反轉(zhuǎn)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.由派生類構(gòu)造函數(shù)調(diào)用基類的構(gòu)造函數(shù)進行
B.由派生類構(gòu)造函數(shù)進行
C.由基類構(gòu)造函數(shù)進行,無需派生類構(gòu)造函數(shù)調(diào)用
D.以上皆不正確
1 5.對于多重繼承,下列描述正確的是( )
A.所有基類使用相同的派生方式 B.每個基類可使用不同派生方式
C.只能是public派生 D.只能是protected派生
16.下列關(guān)于類的權(quán)限描述錯誤的是( )
A.類本身的成員函數(shù)可以訪問自身的任何成員
B.類的對象可以訪問該類的所有成員
C.普通函數(shù)不能直接訪問類的公有成員,必須通過成員函數(shù)對其訪問
D.一個類可以將另一個類的對象作為成員
17.運算符delete與哪個函數(shù)一起運行( )
A.構(gòu)造函數(shù) B.析構(gòu)函數(shù)
C.主函數(shù) D.不與任何函數(shù)一起工作
18.一個類可以獲得另一個類的特性的機制稱為( )
A.抽象 B.封裝
C.繼承 D.多態(tài)性
19.使用下列哪個格式控制符可設(shè)置轉(zhuǎn)換十六進制為十進制( )
A.dec B.oct
C.hex D.endl
20.對引用調(diào)用描述正確的是( )
A.分配新存儲空間
B.修改已存儲空間的名稱為引用名
C.引用名與已存在存儲空間無任何關(guān)聯(lián)
D.將引用名標識符與一塊已存在儲區(qū)域相關(guān)聯(lián),沒有分配新存儲空間
二、填空題(本大題共20小題,每小題1分,共20分)
請在每小題的空格中填上正確答案,錯填、不填均無分。
21.公共派生中,基類的公有成員在派生類中是______。
22.若要使用標準輸入流機制從鍵盤輸入一個整數(shù)賦給整型變量a,相應(yīng)的C++語句是______。
23.UML中對象行為之間的動態(tài)關(guān)系是通過對象行為之間的依賴關(guān)系表現(xiàn)的,稱之為______。
24.C++函數(shù)中按引用調(diào)用傳遞參數(shù)時使用______作為參數(shù)。
25.在C++中除具有______語句和switch語句的函數(shù)外,其它函數(shù)都可以說明為內(nèi)聯(lián)函數(shù)。
26.C++中規(guī)定模板以______關(guān)鍵字和一個形參表示開頭。
27.構(gòu)造函數(shù)不能被繼承,一個派生類只能調(diào)用它的______基類的構(gòu)造函數(shù)。
28.vector類中用于獲取存放的元素個數(shù)的方法是______。
29.C++中istream類的直接基類是______。
30.要關(guān)閉一個文件輸出流對象myFile,所用的C++語句是______。
31.執(zhí)行下列代碼
double pi=3.141592
cout<
32.在私有派生中,基類的權(quán)限為private的成員,在派生類中______。
33.C++總共有3種文件流,分別是輸入文件流、輸出文件流和______。
34.C++使用流進行輸入輸出,其中能捕獲鍵盤輸入的對象是______。
35.在vector類中刪除向量中最后一個對象的方法是______。
36.函數(shù)重載可使一個函數(shù)名具有多種功能,稱這種特性為______。
37.C++語言對C語言做了很多改進,C++語言相對于C語言的最根本的變化是引進了______概念。
38.______指令定義一個標識符及串,在源程序中每次遇到該標識符時,編譯器均用定義的串代替之。
39.在C++標準輸出方式中,要設(shè)置輸出數(shù)據(jù)字段寬度width所使用的操控符是______。
40.設(shè)有定義int x;float y;,則10+x+y值的數(shù)據(jù)類型是______。
三、改錯題(本大題共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.在下面程序的下劃線處填上正確的語句,使其得到下面的輸出結(jié)果。
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.在下劃線處填上適當?shù)恼Z句,使程序的輸出結(jié)果如下:
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.在下劃線處填上適當?shù)恼Z句,使程序的輸出結(jié)果如下:
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.在下劃線處填上適當?shù)木渥?,完成函?shù)的定義。
#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.(給出下面程序的輸出結(jié)果
#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.給出下面程序的輸出結(jié)果
#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.給出下面程序的輸出結(jié)果
#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.給出下面程序的輸出結(jié)果
#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;
六、程序設(shè)計題(本大題共1小題,每小題10分,共10分)
55.已知一個student類,包括學(xué)姓名,成績和等級,不含任何成員函數(shù).process為學(xué)生信息處理類.
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[ ]){…}//根據(jù)學(xué)生成績計算學(xué)生等級(優(yōu)大于89分,良大于79分,中大于69分,及格大于59分,不及格小于60分).
void disp(student s[ ]){...}//根據(jù)成績降序打印所有學(xué)生信息
};
要求實現(xiàn)process類中的兩個函數(shù):