《C++语言程序设计》模拟试卷
一、单选题(21分,每空1.5分)
1.在C++中,函数原型不能标识()
A.函数的返回类型B.函数参数的个数
C.函数参数类型D.函数的功能
2.可以用p.a的形式访问派生类对象p的基类成员a,其中a是()
A.私有继承的公有成员B.公有继承的私有成员
C.公有继承的保护成员D.公有继承的公有成员
3. 以下关于switch语句和break描述中
,
是正确的。
A. switch语句中必须用break语句
B. break语句只能用于switch语句
C. 在switch语句中,可以根据需要使用或不使用break语句
D. break语句是switch语句必须的一部分
4.
若以下语句,则正确描述是
char c1[]="boy";
char c2[]={'b','o','y'};
A. c1,c2数组等价
B. c1,c2数粗元素个数相同
C. c1数组元素个数大于c2数组元素个数
D. c1数组元素个数小于c2数组元素个数
5.派生类的对象对它的基类成员中
是可以访问的。
A.
公有继承的public成员。
B.
公有继承的private成员。
C.
公有继承的protected成员。
D. 私有继承的public成员。
6.若有语句: int x[]={1,2,3,4,5};
int *ptr;
ptr=x;
则
是对数组元素x[1]的正确引用。
A.
ptr+1B.*ptr+1C.*(ptr+1)
D.*ptr++
7.对于任意一个类,析构函数的个数最多为()
A.0B.1C.2D.3
8.
如执行以下语句,,循环结束后cout语句输出值是
for (i=1;i<=100;i++)
sum=sum+i;
cout<< B>
A. 100B.
99C. 101D.
102
9. 若有定义:int
a=8,b=5,C;,执行语句C=a/b+0.4;后,c的值为
A)
1.4B)
1C)
2.0D) 2
10.
是析构函数的特征
A.
一个类中只能定义一个析构函数
B.
析构函数与类名相同
C.
析构函数的定义只能在类体中
D.
析构函数可以有一个或多个参数
11.通常拷贝构造函数的参数是
A. 对象B.对象的引用
C.对象的成员D. 对象的指针
12.一段程序的定义如下,在函数f(
)中将对象的成员n的值改为34的语句应该为
class A {
Private: int n;
public:
setn(int nl) {n=nl;}
A(int x) {n = x; }
};
int f( )
{A * ptr = new A(45);
... }
A、 A(34);B、
ptr.setn(34);C、
ptr->setn(34); D、setn(34);
13.
在调用函数时,如果实参是简单变量,它与对应形参之间的数据传递方式是
A) 地址传递
B)
单向值传递
C) 由实参传给形参,再由形参传回实参 D)
传递方式由用户指定
14.下列常量中,哪个的类型为float类型?
A 2.F B .2L
C 0.2E100 D
0.0
二、填空题(10分,每空1分)
1、在堆中动态分配、释放内存,可以使用
和delete运算符。也可使用malloc( )和
函数。
2、表达式cout<< B>
3、 类的三大特点是:1)________2)______________3)_____________。
4、创建类对象时,系统自动调用________函数,在类对象生命期结束时,自动调用__________函数。
5.C++中语句const char * const
p=″hello″;所定义的指针p和它所指的内容都不能被_________。
6.定义类的动态对象数组时,系统只能够自动调用该类的_________构造函数对其进行初始化。
三、改错题(本大题共4小题,每小题3分,共12分)
1.指出下面程序段中的错误,并说明出错原因。
class A{
private:
int a,b;
public:
A(int aa,int bb)
{a=aa;b=bb;}
};
void main()
{
A x(2,3),y(4);
}
2.指出下面程序段中的错误,并说明出错原因。
#include
class A
{public:
void fun( ){cout<
};
class B
{public:
void fun(
){cout<
void gun( ){cout<
};
class C:public A,public B
{private:
int b;
public:
void gun( )
{cout<
void hun( )
{fun( );}
};
3.要求下面循环体中的语句x+=3执行30次,请改正程序。
for(j=0; j<90; j++)
if(j/3=0) x+=3;
4.请指出程序片段的语法错误。
int * age_ptr;
int m = 3;
*age_ptr = &m;
四、判断题(10分)
1、_MyInt 是一个合法的变量名。(Y)
2、使用关键字class地定义的类缺省的访问权限是private。(
Y )
3、函数的原型说明和函数定义的作用不一样,可以进行多次的函数原型说明。(
Y )
4、构造函数和析构函数都不可以重载。
(N)
5、
递归调用是指一个函数在执行时直接或间接的又调用该函数自身的调用过程。(
Y)
6、
各种类型的指针表示的是内存的地址,所以指针加1,总是内存的地址加1。(N )
7、 对于int a[10];
,a[5]与*(a+5)是同一个元素。(Y)
8、 友元的作用是实现数据的隐藏性。(
N)
9、
函数可能有左值(出现在=的左边),数组名不能够有左值。(
Y)
10、虚函数一定是类的成员函数。(Y)
五、简答题(7分,每小题4分)
1、
C++语言提供了那些分支语句?
break、continue的作用是什么?
2、
单一继承和多重继承的区别?列表显示基类的成员访问权限在公有继承,私有继承后的访问权限?
访问权限
继承方式
public
protected
private
公有继承
私有继承
六、读程序写出运行结果(16分)(每小题4分)
1.#include
using namespace std;
void main()
{
char
a[]="abcdabcabfgacd";
int
i1=0,i2=0,i=0;
while
(a[i]!='\0')
{
if (a[i]=='a') i1++;
if (a[i]=='b') i2++;
i++;
}
cout
<
cout<
}
}
2、写一个程序计算1!-2! +3! –4!+5!....-10!
(5分)
#include
void main()
{
int f=1,n,s=0,t=1;
n=10;
for(int i=1;i<=n;i++)
{t= -t;
f=f*i*t;
s=s+f;
}
cout<< B>
}
4.(6分)#include
class Tdate
{
private:
int year;int month;int day;
public:
void Show();
void add();
Tdate(int y,int m,int d);
};
void Tdate::Show()
{
cout<
?<
}
void
Tdate::add(){day++;}
Tdate:: Tdate(int y,int m,int d)
{year=y;month=m;day=d; }
void main()
{ Tdate a(,3,23);
a.Show();
a.add();
a.Show();}
5.(8分)
#include
class complex
{
public:
complex() { real=imag=0; }
complex(double r, double i)
{real = r,
imag = i;
}
complex operator +(const complex &c);
complex operator +(double c);
void
print();
private:
double
real, imag;
};
inline complex complex::operator +(const complex
&c)
{return complex(real + c.real, imag + c.imag);}
inline complex complex::operator +(double c)
{return complex(real + c, imag);}
void complex::print()
{
if(imag<0)
cout<
else
cout<
cout<< B>
}
void main()
{
complex a(2.0, 3.0), b(4.0, -2.0),c;
c=a+b;c.print();
c=a+4.2; c.print();
}
编程题(40分)
1.输出以下图形:(必须用循环语句编写,不能用cout直接显示,否则不给分)
* * * * *
* * *
*
*
* * *
* * * * *
2.编写程序,输入10个double型数据,并对这10个数从小到大排序,最后显示排序结果。
3.编写程序,实现两个字符串比较的自定义版;
函数原形为:int strcmp(char * str1,char *str2)
//当str1>str2时,返回正数
//当str1= =str2时,返回0
//当str1时,返回负数
4.封装一个CStudent类,用来描述学生的属性和行为。
具体要求如下:
1)学生有姓名、籍贯、学号、年龄、成绩五个成员数据,编写构造函数,拷贝构造函数,同时编写Display()成员函数显示学生的信息;(6分)
2)编写“+”运算符重载函数,使类CStudent的两个对象相加返回两个对象总成绩相加的和;(4分)
3)编写主函数,定义两个CStudent类对象(初始化值任定),分别调用成员函数Display()显示两个对象的学生信息,同时显示两个对象相加的结果。(2分)
5.声明一个Shape抽象类,在此基础上派生出正方形和圆类,两者都由GetArea()函数计算对象面积,由GetPerim()函数计算对象的周长。