资源描述
计算机专业 面向对象程序设计 试题
一、单项选择题(每小题1分,共20分)
1.C++源程序文献的缺省扩展名为( A )。
A.cpp B.exe C.obj D.lik
2.x>0||y==5的相反表达式为( B )。
A. x<=0 || y!=5 B.x<=0 && y!=5
C. x>0 || y!=5 D.x>0 && y==5
3.在下面的字符数组定义中,( D )的语法错误。
A.char a[20]=”abcdefg”; B.char a[]=”x+y=55.”;
C.char a[15]; D.char a[10]=’5’;
4.以下对的的函数原型语句是( A )。
A.double fun(int x,int y); B.double fun(int x;int y);
C.double fun(int x=5,int y); D.double fun(int x,y);
5.软件产品可被所有或部分重用于新的应用的能力叫做软件的( B )。
A.可维护性 B.可复用性
C.兼容性 D.对的性;
6.在多文献结构的程序中,通常把具有main()函数的文献称为( A )。
A.主文献 B. 实现文献 C.程序文献 D.头文献
7.在一个用链表实现的队列类中,假定每个结点包含的值域用elem表达,包含的指针域用next表达,链队的队首指针用elemHead表达,队尾指针用elemTail表达,若链队为空,则进行插入时必须把新的地址赋给( C )。
A.elemHead B.elemTail
C.elemHead和elemTail D. elemHead或elemTail
8.假定AB为一个类,则执行“AB a,b(2),c[3],*p=&a;”语句时共调用该类无参构造函数的次数为( 4 )次。
A.5 B.6 C.3 D.4
9.引入友元的重要目的是为了( C )。
A. 增强数据的安全性 B. 提高程序的可靠性
C. 提高程序的效率的灵活性 D. 保证类的封装性
10.假定类B是在类A的基础上扩充而得到的,那么就称( B )。
A. 类A为基类或父类,类B为超类或子类
B. 类A为基类、父类或超类,类B为派生类或子类
C. 类A为派生类,类B为基类
D. 类A为派生类或子类,类B为基类、父类或超类
二、填空题(每空2分,共20分)
1.由函数原型语句“int fun1(void);”可知,该函数的返回类型为整型,该函数带有 0 个参数。
2.假定x是一个逻辑量,则x||false的值与x的值 相同 。
3.作为语句桔标号使用的C++保存字case和default只能用于 switch 语句的定义体中。
4.对一个二维字符数组a进行初始化的数据表为{“123”,”456”,”789”},则a[1]元素相应的字符串为 456 。
5.NULL是一个符号常量,通常作为空指针值,它的具体值为 ‘\0’。
6.内联函数的定义模块与所属的 类 模块必须放在同一个文献中。
7.一个类的 构造函数 实现对该类对象进行初始化的功能。
8.假定为类AB定义了一个构造函数“AB(int aa=0):a(aa){ }”,则定义该类的对象时,可以有 2种不同的定义格式。
9.重载抽取运算符>>时,其运算符函数的返回值类型应当是 istream & 。
10.若多个基类及其派生类中都定义了同名的函数成员,要访问一个类中该成员函数时,就需要在函数名前加上 类名 和 类区分符:: 。
三、程序填充题,对程序、函数或类中划有横线的位置,根据题意按标号把合适的内容填写到程序后面的标号处。(每小题5分,共20分)
1.下面程序算出的值。
#include<iostream.h>
void main()
{
double x,p1=1,p2=1,s=0;
int i,j=1;
cout<<"输入x的值:";
cin>>x;
for(i=1; ⑴ ;i++){
p1*=x;
p2*= ⑵ ;
s+=j*p1/p2;
j= ⑶ ;
}
cout<<s<<endl;
}
⑴i<=10
⑵i
⑶-j
2.假定结点类型的定义为“struct NODE{int data;NODE *next;};”,下面算法是依次输出以L为表头指针的单链表中各结点的值。
void ff(NODE *L)
{
for( ⑴ ;p!=NULL; ⑵ )
cout<< ⑶ <<' ';
cout<<endl;
}
⑴NODE *p=L
⑵p=p->next
⑶p->data
3.一个带类的程序如下:
class A{
int a,b;
public:
A(int aa=0,int bb=0): ⑴ { }//分别用bb和bb初始化a和b
};
void main(){
⑵ ;//定义类A的对象x并用5初始化,定义y并用x初始化
⑶ ;//定义p指针,指向对象x
}
⑴a(aa),b(bb)
⑵A x(5),y(x)
⑶A *p=&x
4. 一个带类的程序如下:
class A{
int a,b;
public:
⑴ //定义构造函数,使参数aa和bb的默认值为0,
//在函数体中用aa初始化a,用bb初始化b
};
void main(){
A *p1,*p2;
⑵ ;//调用无参构造函数生成由p1指向的动态对象
⑶ ;// 调用带参构造函数生成由p2指向的动态对象,
//使a和b成员分别被初始化为4和5
}
⑴A(int aa=0,int bb=0){a=aa;b=bb;}
⑵p1=new A
⑶p2=new A(4,5)
四、理解问答题,写出前三小题的程序运营结果和指出后两小题的程序(或函数)所能实现的功能。(每小题6分,共30分)
1. #include<iomanip.h>
const int M=20;
void main()
{
int c2,c3,c5;
c2=c3=c5=0;
for(int i=1;i<M;i++){
if(i%2==0)c2++;
if(i%3==0)c3++;
if(i%5==0)c5++;
}
cout<<c2<<' '<<c3<<' '<<c5<<endl;
}
运营结果:9 6 3
2. #include<iostream.h>
#include<string.h>
class CD{
char * a;
int b;
public:
void Init(char *aa,int bb)
{
a=new char[strlen(aa)+1];
strcpy(a,aa);
b=bb;
}
char * Geta(){return a;}
int Getb(){return b;}
void Output(){cout<<a<<' '<<b<<endl;}
};
void main()
{
CD dx,dy;
dx.Init("abcdef",30);
dy.Init("shenyafen",3*dx.Getb()+5);
dx.Output();
dy.Output();
}
运营结果:abcdef 30
Shenyafen 95
3. #include<iostream.h>
class Base
{
public:
Base(int i,int j){x0=i;y0=j;}
void Move(int x,int y){x0+=x;y0+=y;}
void Show(){cout<<"Base("<<x0<<","<<y0<<")"<<endl;}
private:[w1]
int x0,y0;
};
class Derived:public Base
{
public:
Derived(int i,int j,int m,int n):Base(i,j){x=m,y=n;}
void Show(){cout<<"NEXT("<<x+x0<<","<<y+y0<<")"<<endl;}
private:
int x,y;
};
void main()
{
Base b(1,2);
b.Show();
Derived d(3,4,10,15);
d.Move(5,6);
d.Show();
}
运营结果:Base(1,2)
NEXT(18,25)
4. #include<iostream.h>
void main()
{
int i,s=0;
int N;
cout<<"输入一个整数:";
cin>>N;
for(i=1;i<=N;i++)s+=i*i;
cout<<s<<endl;
}
程序功能:由键盘输入一个正整数N,计算并输出从1到N的各整数平方之和。
5. int f(const char *s)
{
int i=0;
while(*s++)i++;
return i;
}
程序功能:记录字符串中所包含的字符个数。
五、编程题(每小题5分,共10分)
1. 根据下面函数原型编写一个函数,求出并返回由字符指针s所指向的字符串中包含的字符’a’和’A’的总个数。
int void[w2] fun(char *a);
int fun( char *a)
{
int i=0;
for(;*a;*a++)if(*a=='a'||*a=='A')i++;
return i;
}或
int fun( char *a)
{
int i=0;
do{if(*a=='a'||*a=='A')i++;}while(*a++);
return i;
}
2. 根据下面类中拷贝构造函数的原型写出它的类外定义。
#include<iostream.h>
class Array{
int *a;//指向动态分派的整型数组空间
int n; //数组长度
public:
Array(int aa[],int nn){ //构造函数
n=nn;
a=new int [n];
for(int i=0;i<n;i++)a[i]=aa[i];
}
Array(Array&bb); //拷贝构造函数
Array& Give(Array& cc); //实现cc赋值给*thia的功能并返回*this
int Lenth(){return n;} //返回数组长度
};
Array::Array(Array& bb)
{
n=bb.n;
a=new int [n];
for(int i=0;i<n;i++)a[i]=bb.a[i];
}
展开阅读全文