面向对象程序设计网上教学活动文本文档格式.docx
《面向对象程序设计网上教学活动文本文档格式.docx》由会员分享,可在线阅读,更多相关《面向对象程序设计网上教学活动文本文档格式.docx(24页珍藏版)》请在冰豆网上搜索。
![面向对象程序设计网上教学活动文本文档格式.docx](https://file1.bdocx.com/fileroot1/2023-1/23/7925f8a1-653b-4e10-97f7-251427aa5978/7925f8a1-653b-4e10-97f7-251427aa59781.gif)
4.关于局部变量,下面说法正确的是()。
A.定义该变量的程序文件中的函数都能够访问
B.定义该变量的函数中的定义处以下的任何语句都能够访问
C.定义该变量的复合语句中的定义处以下的任何语句都能够访问
D.定义该变量的函数中的定义处以上的任何语句都能够访问
5.假定p是具有int**类型的指针变量,则给p赋值的正确语句为()。
A.p=newint;
B.p=newint*;
C.p=newint**;
D.p=newint[10];
6.软件产品在需求发生变化、运行环境发生变化或发现软件产品本身的错误或不足时进行相应的软件更新的难易程度叫做软件的()。
A.可维护性B.可复用性C.兼容性D.正确性
7.若需要把一个类外定义的成员函数指明为内联函数,则必须把关键字()放在函数原型或函数头的前面。
A.inB.inlineC.inLineD.InLiner
8.在一个用数组实现的队列类中,假定数组长度为MS,队首元素位置为first,队列长度为length,则队尾的后一个位置为()。
A.length+1B.first+length
C.(first+length-1)%MSD.(first+length)%MS
9.假定一个类的构造函数为”A(intaa,intbb){a=aa;
b=aa*bb;
}”,则执行”Ax(4,5);
”语句后,x.a和x.b的值分别为()。
A.4和5B.5和4C.4和20D.20和5
10.假定AB为一个类,则执行”AB*p=newAB(1,2);
”语句时共调用该类构造函数的次数为()。
A.0B.1C.2D.3
11.一个类的成员函数也能够成为另一个类的友元函数,这时的友元说明()。
A.需加上类域的限定B.不需加上类域的限定
C.类域的限定可加可不加D.不需要任何限定
12.关于插入运算符<
<
的重载,下列说法不正确的是()。
A.运算符函数的返回值类型是ostream&
。
B.重载的运算符必须定义为类的成员函数。
C.运算符函数的第一个参数的类型是ostream&
D.运算符函数有两个参数。
二、填空(每空1分,共14分)
1.当执行cout语句输出endl数据项时,将使C++显示输出屏幕上的光标从当前位置移动到________的开始位置。
2.假定x和y为整型,其值分别为16和5,则x/y和double(x)/y的值分别为__________和__________。
3.执行switch语句时,在进行作为条件的表示式求值后,将从某个匹配的标号位置起向下执行,当碰到下一个标号位置时________执行。
4.strlen(”apple”)的值为________,strcmp(”a”,”A”)的值为________。
5.C++程序运行时的内存空间能够分成全局数据区,堆区,栈区和__________区。
6.假定a是一个一维指针数组,则a+i所指对象的地址比a大________字节。
7.已知语句”cout<
p;
”的输出是”Hello!
”,则语句”cout<
*p;
”输出的是__________。
8.如果一个派生类只有一个唯一的基类,则这样的继承关系称为__________。
9.假定AA是一个类,”AA*abc()const;
”是该类中一个成员函数的原型,在该函数体中__________向*this或其成员赋值。
10.假定用户没有给一个名为AB的类定义构造函数,则系统为其定义的构造函数为__________。
11.假定用户为类AB定义了一个构造函数"
AB(intaa){a=aa;
}"
该构造函数实现对数据成员_________的初始化。
12.作为类的成员函数重载一个运算符时,参数表中只有一个参数,说明该运算符有________个操作数。
三、程序填充,对程序、函数或类中划有横线的位置,根据题意按标号把合适的内容填写到程序下面相应标号的后面(每小题6分,共24分)
1.下面程序计算出
的值。
#include<
iostream.h>
voidmain()
{
doublex,p1=1,p2=1,s=0;
inti,j=1;
cout<
"
输入x的值:
;
cin>
>
x;
for(i=1;
i<
=10;
i++){
p1*=___
(1)_____;
p2*=____
(2)____;
s+=j*p1/p2;
//j的值为(-1)i+1
j=____(3)____;
}
s<
endl;
(1)
(2)(3)
2.假定有定义为”structNODE{intdata;
NODE*next;
};
”,下面算法是依次显示输出以L为表头指针的链表中各结点的值。
voidff(NODE*L)
{
for(___
(1)___;
p!
=NULL;
___
(2)___)
cout<
___(3)___<
'
'
}
3.假定有定义为”structNODE{intdata;
”,下面算法是把以L为表头指针的链表中各结点依次按相反次序链接并返回新链表的表头指针。
NODE*f8(NODE*L)
if(L==NULL)returnNULL;
NODE*p=NULL,*q=L,*t;
while(q!
=NULL){
t=q;
q=___
(1)___;
t->
next=___
(2)___;
p=t;
___(3)___;
(1)
(2)(3)
4.已知一个利用数组实现栈的类定义如下:
constintARRAY_SIZE=10;
classStack{
public:
voidInit(){top=-1;
}//初始化栈为空
voidPush(intnewElem);
//向栈中压入一个元素
intPop();
//从栈顶弹出一个元素
boolEmpty(){//判栈空
if(top==-1)returntrue;
elsereturnfalse;
intDepth(){returntop+1;
}//返回栈的深度
voidPrint();
//按照后进先出原则依次输出栈中每个元素,直到栈空为止
private:
intelem[ARRAY_SIZE];
//用于保存堆栈元素的数组
inttop;
//指明栈顶元素位置的指针
该类的Pop和Print函数的实现分别如下:
___
(1)___{
if(top==-1){
栈空!
exit
(1);
//中止运行
return___
(2)___;
voidStack:
:
Print(){
while(!
Empty())
(1)
(2)(3)
四、写出程序运行结果(每小题8分,共16分)
1.#include<
inta[8]={36,25,20,43,12,70,66,35};
ints0,s1,s2;
s0=s1=s2=0;
for(inti=0;
i<
8;
i++){
switch(a[i]%3){
case0:
s0+=a[i];
break;
case1:
s1+=a[i];
case2:
s2+=a[i];
}
}
s0<
’’<
s1<
s2<
2.#include<
string.h>
classCD{
char*a;
intb;
public:
voidInit(char*aa,intbb)
a=newchar[strlen(aa)+1];
strcpy(a,aa);
b=bb;
char*Geta(){returna;
intGetb(){returnb;
voidOutput(){cout<
a<
b<
};
voidmain()
CDdx,dy;
chara[20];
dx.Init("
abcdef"
30);
strcpy(a,dx.Geta());
strcat(a,"
xyz"
);
dy.Init(a,dx.Getb()+20);
dx.Output();
dy.Output();
五、指出程序或函数的功能(每小题6分,共12分)
1.#include<
stdlib.h>
math.h>
voidmain()
{
inti=10,a;
while(i>
0){
a=rand()%90+10;
intj,k=int(sqrt(a)+1e-5);
//sqrt(x)为求x的平方根函数
for(j=2;
j<
=k;
j++)
if(a%j==0)break;
if(j>
k){cout<
i--;
2.voidInput(IntNode*&
f)
{
intn;
”从键盘给n输入一个整数:
”;
docin>
n;
while(n<
0);
if(n==0){f=NULL;
return;
f=newIntNode;
IntNode*p=f;
”从键盘输入”<
n<
”个整数:
while(n--){
p=p->
next=newIntNode;
p->
data;
p->
next=NULL;
p=f;
f=f->
next;
deletep;
假定IntNode的类型定义为:
structIntNode{
intdata;
//结点值域
IntNode*next;
//结点指针域
六、程序改错,请根据程序段或函数模块的功能改写个别地方的错误(6分)。
假定要求下面程序的输出结果为”11/15”,其主函数中存在着三行语句错误,请指出错误语句行的行号并改正错误行。
classFranction{//定义分数类
intnume;
//定义分子
intdeno;
//定义分母
//把*this化简为最简分数,具体定义在另外文件中实现
voidFranSimp();
//返回两个分数*this和x之和,具体定义在另外文件中实现
FranctionFranAdd(constFranction&
x);
//置分数的分子和分母分别0和1
voidInitFranction(){nume=0;
deno=1;
//置分数的分子和分母分别n和d
voidInitFranction(intn,intd){nume=n;
deno=d;
//输出一个分数
voidFranOutput(){cout<
nume<
/'
deno<
voidmain()//1行
{//2行
Franctiona,b,c;
//3行
a.InitFranction(6,15);
//4行
b.InitFranction
(1);
//5行
c.InitFranction();
//6行
c=FranAdd(a,b);
//7行
c.nume<
’/’<
c.deno<
//8行
}//9行
错误行的行号为______、________和________。
分别改正为____________________、________________和___________________。
七、编程(每小题8分,共16分)
1.计算1+3+32+...+310的值并输出,假定分别用i,p,s作为循环变量、累乘变量和累加变量的标识符。
2.根据下面类中Uion函数的原型和注释写出它的类外定义。
classArray{
int*a;
//指向动态分配的整型数组空间
//记录数组长度
Array(intaa[],intnn);
//构造函数,利用aa数组长度nn初始化n,
//利用aa数组初始化a所指向的数组空间
Array(Array&
aa);
//拷贝构造函数
Array&
Give(Array&
//实现aa赋值给*this的功能并返回*this
ArrayUion(Array&
//实现*this和aa中的数组合并的功能,把合并
//结果(其长度为两数组长度之和)存入临时对象并返回
intLenth(){returnn;
}//返回数组长度
voidPrint(){//输出数组
i++)
cout<
a[i]<
计算机科学与技术专业面向对象程序设计试题
答案及评分标准
(供参考)
1.C2.C3.D4.C5.B6.A
7.B8.D9.C10.B11.A12.B
1.下一行2.33.23.不停止4.515.代码6.4*i
7.H8.单继承9.不能够10.AB(){}11.a12.2
1.
(1)x//2分
(2)i//2分
(3)–j//2分
2.
(1)NODE*p=L//2分
(2)p=p->
next//2分
(3)p->
data//2分
3.
(1)q->
(2)p//2分
(3)returnp//2分
4.
(a)intStack:
Pop()//2分
(b)elem[top--]//2分
(c)Pop()//2分
1.11413855//每个数据占3分,全对给8分
abcdef30//4分,每个数据2分
abcdefxyz50//4分,每个数据2分
1.随机产生出10个10至100(或99)之间的素数并显示出来。
2.首先从键盘上输入一个整数给n,然后依次输入n个整数建立以表头指针为f的链表。
评分标准:
根据叙述情况酌情给分。
错误行的行号为578
分别改正为b.InitFranction(1,3);
c=a.FranAdd(b);
c.FranOutput()
共6个数据,每个数据1分。
根据编程情况酌情给分。
1.
#include<
inti;
//用i作为循环变量
intp=1;
//用p作为累乘变量
ints=1;
//用s作为累加循环变量
i++){p*=3;
s+=p;
ArrayArray:
Uion(Array&
aa){
intk=n+aa.n;
int*w=newint[k];
inti;
for(i=0;
i++)w[i]=a[i];
aa.n;
i++)w[i+n]=aa.a[i];
Arrayr(w,k);
returnr;
计算机科学与技术专业面向对象程序设计试题(4)
一、单项选择(每小题1分,共13分)
1.字符串”a+b=12\n”的长度为()。
A.6B.7C.8D.9
”,则元素a[2][1]的值为()。
A.0B.4C.8D.6
3.以下正确的描述是()。
A.函数的定义能够嵌套,函数的调用不能够嵌套
B.函数的定义不能够嵌套,函数的调用能够嵌套
C.函数的定义和函数的调用均能够嵌套
D.函数的定义和函数的调用均不能够嵌套
4.设有定义”doublearray[10];
”,则表示式sizeof(array)/sizeof(array[0])的结果为()。
A.array数组首地址B.array数组中元素个数
C.array数组中每个元素所占的字节数D.array数组占的总字节数
5.要使p指向动态空间中的包含30个整数单元的数组使用的定义语句为()。
A.int*p=newint[30];
B.int*p=newint(30);
C.int*p=new[30];
D.*p=newint[30];
6.软件产品与其它软件产品组合成一个整体的难易程度叫做软件的()。
7.在多文件结构的程序中,一般把类的定义单独存放于()中。
A.主文件B.实现文件C.库文件D.头文件
8.在一个用数组实现的队列类中,假定数组长度为MS,队首元素位置为first,队列长度为length,则队首的后一个位置为()。
A.first+1B.(first+1)%MS
C.(first-1)%MSD.(first+length)%MS
9.假定一个类的构造函数为”A(intaa=1,intbb=0){a=aa;
b=bb;
}”,则执行”Ax(4);
A.1和0B.1和4C.4和1D.4和0
10.假定AB为一个类,则执行”ABa
(2),b[3],*p[4];
A.3B.4C.5D.9
11.在成员函数中进行双目运算符重载时,其参数表中应带有()个参数。
12.在重载一运算符时,若运算符函数的形参表中没有参数,则不可能的情况是()。
A.该运算符是一个单目运算符。
B.该运算符函数有一个隐含的参数this。
C.该运算符函数是类的成员函数。
D.该运算符函数是类的友元函数。
13.派生类的对象对其基类中()可直接访问。
A.公有继承的公有成员
B.公有继承的私有成员
C.公有继承的保护成员
D.私有继承的公有成员
二、填空(每空1分,共17分)
1.多行注释的开始标记符和结束标记符分别为__________和__________。
2.假定x=5,y=6,