C++语言程序设计期末复习题(含答案)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
C++语言程序设计期末复习题
一、单项选择题
1、面向对象程序设计数据与_____放在一起,作为一个相互依存、不可分割的整
体来处理。
A、对数据的操作
B、信息
C、数据隐藏
D、数据抽象
2、已知:int a=1,b=2,c=3,d=4,则表达式a<b?a:c<d?c:d 的值为_____。
A、1
B、2
C、3
D、4
3、下列while循环的次数是_____。
while( int i=0 ) i- -;
A、0
B、1
C、5
D、无限
4、以下程序的输出结果是_____。
#include <iostream.h>
fuc( char* s)
{
char* p=s;
while( *p)
p++;
return (p-s);
}
main()
{
cout<<fuc("ABCDEF");
}
A、3
B、6
C、8
D、0
5、_____的功能是对对象进行初始化。
A、析构函数
B、数据成员
C、构造函数
D、静态成员函数
6、下列引用的定义中,_____是错误的。
A、int i;
B、int i;
C、float i;
D、char d;
int& j=i;int &j;float& j=i;j=i;char &k=d;
7、若类A和类B的定义如下:
class A
{
int i,j;
public:
void get();
//...
};
class B:public A
{
int k;
public:
make();
//...
};
void B::make()
{
k=i*j;
}
则上述定义中,_____是非法的表达式。
A、void get();
B、int k;
C、void make();
D、k=i*j;
8、以下程序段_____。
int x = -1;
do
{
x = x*x;
}while( !x );
A、是死循环
B、循环执行2次
C、循环执行1次
D、有语法错误
9、对定义重载函数的下列要求中,_____是错误的。
A、要求参数的个数不同
B、要求参数中至少有一个类型不同
C、要求参数个数相同时,参数类型不同
D、要求函数的返回值不同
10、一个_____允许用户为类定义一种模式,使得类中的某些数据成员及某些成员函数的返回值能取任意类型。
A、函数模板
B、模板函数
C、类模板
D、模板类(Key:1-5:AAABC 6-10:BDCDC)
二、填空题
1、在C++类中可以包含[ ]、[ ]和[ ]三种具有不同访问控制权的成员。
(Key:公有或public,保护或protected,私有或private)
2、以下程序的执行结果是_____。
#include <iostream.h>
void func( int );
void func( double );
void main( )
{
double a=88.18;
func(a);
int b=97;
func(b);
}
void func( int x )
{
cout<<x<<endl;
}
void func( double x )
{
cout<<x<<",";
}
(Key: 88.18,97)
3、类中的数据和成员函数默认访问类型为_____。
(Key:私有或private)
4、以下程序的执行结果是_____。
#include <iostream>
using namespace std;
f(int b[],int n)
{
int i,r=1;
for( i=0;i<=n;i++ )
r=r*b[i];
return r;
}
int _tmain()
{
int x,a[] = {2,3,4,5,6,7,8,9};
x=f(a,3);
cout<<"x="<<x<<endl;
return 0;
}
(Key: x=120)
5、在类内部定义的_____数据不能被不属于该类的函数来存取,定义为_____的数据则可以在类外部进行存取。
(Key:private或私有或protected 或保护;public 或公有)
6、下列程序输出的结果是_____。
#include <iostream>
using namespace std;
void sub( char a,char b )
{
char c=a;
a=b;
b=c;
}
void sub( char* a,char b )
{
char c=*a;
*a=b;
b=c;
}
void sub( char* a,char* b )
{
char c=*a;
*a=*b;
*b=c;
}
int _tmain()
{
char a='A',b='B';
sub(&a,&b);
cout<<a<<b<<endl;
return 0;
}
(Ke y:BA)
7、下列程序输出的结果是_____。
#include <iostream>
using namespace std;
void Exchange( int* pFirst,int* pLast )
{
if( pFirst<pLast )
{
int Change = *pFirst;
*pFirst = *pLast;
*pLast = Change;
Exchange(++pFirst,--pLast);
}
}
void Print( int Integer[],int HowMany)
{
for( int Index=0; Index<HowMany; Index++ ) cout<<Integer[Index]<<" ";
cout<<endl;
}
int _tmain()
{
int Integer[] = {1,2,3,4};
Exchange(&Integer[0],&Integer[3]);
Print(Integer,4);
return 0;
}
(Key: 4 3 2 1)
8、下列程序输出的结果是_____。
#include <iostream>
using namespace std;
int _tmain()
{
int nInteger = 5, &rInteger = nInteger;
rInteger = nInteger+1;
cout<<nInteger<<","<<rInteger<<endl;
return 0;
}
(Key: 6,6)
9、___________是一种特殊的成员函数,它主要用来为对象分配内存空间,对类的数据成员进行初始化并进行对象的其他内部管理操作。
(构造函数)
10、下列程序输出的结果是_____。
#include <iostream>
using namespace std;
int _tmain()
{
int x=2,y=3,z=4;
cout<<(( x<y ) && ( !z ) || (x*y) )<<endl;
return 0;
}
(Key:1)
三、程序分析:给出程序运行后的输出结果(每小题5分,共20分)
1、#include <iostream>
using namespace std;
int _tmain()
{
int x=1,y=2,z=3;
x+=y+=z;
cout<<(x<y?y:x)<<",";
cout<<(x<y?x++:y++)<<",";
cout<<y<<endl;
return 0;
}
Key: 6,5,6
2、#include <iostream>
using namespace std;
void func( int b[ ] );
void main()
{
int a[ ]={ 5,6,7,8 },i;
func(a);
for( i=0;i<4;i++ )
cout<<a[i]<<" ";
}
void func( int b[ ] )
{
int j;
for( j=0;j<4;j++ )
b[j] = 2*j;
}
Key: 0 2 4 6
3、#include <iostream>
using namespace std;
class CSample
{
int i;
public:
CSample(void);
~CSample(void);
CSample(int val);
void Print(void);
};
CSample::CSample(void)
{
cout<<"Constructor1"<<endl;
i=0;
}
CSample::CSample(int val) {
cout<<"Constructor2"<<endl;
i=val;
}
void CSample::Print(void) {
cout<<"i="<<i<<endl;
}
CSample::~CSample(void) {
cout<<"Destructor"<<endl; }
int _tmain()
{
CSample a,b(10);
a.Print();
b.Print();
return 0;
}
Key: Constructor1
Constructor2
i=0
i=10
Destructor
Destructor
4、#include <iostream>
using namespace std;
class CData
{
protected:
int nInteger;
public:
CData( int Integer );
~CData( void );
void Print(void);
};
CData::CData( int Integer )
: nInteger(Integer)
{
cout<<"Constructing a data"<<endl;
}
CData::~CData( void )
{
cout<<"Destructing a data"<<endl;
}
void CData::Print(void)
{
cout<<"The data is "<<nInteger<<endl;
}
class CNumber :
public CData
{
protected:
double fNumber;
public:
CNumber(int Integer,double Number);
~CNumber(void);
void Print(void);
};
CNumber::CNumber( int Integer,double Number ) : CData( Integer )
, fNumber(Number)
{
cout<<"Constructing a number"<<endl;;
}
CNumber::~CNumber( void )
{
cout<<"Destructing a number"<<endl;;
}
void CNumber::Print(void)
{
CData::Print();
cout<<"The number is "<<fNumber<<endl;
}
int _tmain()
{
CNumber Number(1,3.8);
Number.Print();
return 0;
}
Key: Constructing a data
Constructing a number
The data is 1
The number is 3.8
Destructing a number
Destructing a data
四、根据要求完成程序
1、完成以下程序,求1!+2!+3!+4!+5!+6!+7!+8!+9!+10!之和。
#include <iostream>
using namespace std;
int _tmain()
{
long Term=________________ ,Sum=________________;
for( int Index=1;Index<=________________;Index++)
{
Term *=________________;
Sum +=________________;
}
cout<<"Sum of factorial from 1 to 10 is ";
cout<<Sum<<endl;
return 0;
}
Key:1 0 10 Index Term
2、完成下面程序,计算三角形和正方形的面积。
设三角形和正方形的宽为fWidth,高为fHeight,则三角形的面积为fWidth*fHeigth/2。
#include <iostream>
using namespace std;
class CShape
{
public:
CSquare::CSquare(double Width,double Height)
:____________________________________
}
double CSquare::Area(void)
{
____________________________________;
}
int _tmain()
{
CTriangle Triangle(16,8);
cout<<"The area of triangle is "<<Triangle.Area()<<endl;
CSquare Square(13,8);
cout<<"The area of square is "<<Square.Area()<<endl;
return 0;
}
Key: fWidth(Width) CShape(Width,Height) return fWidth*fHeight/2
CShape(Width,Height) return fWidth*fHeight
五、用面向对象方法设计一个阶乘类CFactorial,在CFactorial类的构造函数CFactorial(long Integer)中,将Integer的值赋给nInteger;在主函数int _tmain(),键盘输入任一整数Integer,以Integer的值为实际参数构造一个阶乘对象Factorial,调用对象Factorial的相应成员函数输出nInteger的阶乘值fFactorial。
完成以下函数的代码设计:
(1)、设计构造函数CFactorial(long Integer),求出nInteger的阶乘值fFactorial。
若nInteger没有阶乘值,则fFactorial赋值为0。
(2)、设计CFactorial类的成员函数void Print(void),输出nInteger的阶乘值fFactorial。
若nInteger没有阶乘,则输出nInteger没有阶乘的信息。
#include <iostream>
using namespace std;
class CFactorial
{
public:
CFactorial(long Integer);
protected:
long nInteger;
float fFactorial;
public:
void Print(void);
};
CFactorial::CFactorial(long Integer)
: nInteger(Integer)
{
//作答处
}
void CFactorial::Print(void)
{
//作答处
}
int _tmain()
{
long Integer;
cout<<"Enter a integer: ";
cin>>Integer;
CFactorial Factorial(Integer);
Factorial.Print();
return 0;
}
Key: 解:参考程序:
#include <iostream>
using namespace std;
class CFactorial
{
public:
CFactorial(long Integer);
protected:
long nInteger;
float fFactorial;
public:
void Print(void);
};
CFactorial::CFactorial(long Integer)
: nInteger(Integer)
{
if( nInteger<0 ) //1分fFactorial = 0;//1分else //1分{
fFactorial=1;//1分
while( Integer>1 ) //1分
{
fFactorial*=Integer;//1分
Integer--;//1分
}
}
}
void CFactorial::Print(void)
{
if( fFactorial ) //0.5分cout<<"The factorial of "<<nInteger<<" is "<<fFactorial<<endl;
//1分else //0.5分cout<<"There is not any factorial for "<<nInteger<<endl;//1分
}
int _tmain()
{
long Integer;
cout<<"Enter a integer: ";
cin>>Integer;
CFactorial Factorial(Integer);
Factorial.Print();
return 0;
}。