x=a[i];a[i]=a[n-1-i];a[n-1-i]=x;
}
returnthis;
}
C语言程序设计A期末模拟试题二
一、单项选择题(每小题2分,共20分)
1.编写C++程序一般需经过的几个步骤依次是()。
A.编译、编辑、连接、调试
B.编辑、编译、连接、调试
C.编译、调试、编辑、连接
D.编辑、调试、编辑、连接
2.假定一个二维数组的定义语句为“inta[3][4]={{3,4},{2,8,6}};”,则元素a[2][1]的值为(A)。
A.0B.4C.8D.6
3.函数重载是指(A)。
A.两个或两个以上的函数取相同的函数名,但形参的个数或类型不同
B.两个以上的函数取相同的名字和具有相同的参数个数,但形参的类型可以不同
C.两个以上的函数名字不同,但形参的个数或类型相同
D.两个以上的函数取相同的函数名,并且函数的返回类型相同
4.假定p指向的字符串为”string”,若要输出这个字符串的地址值,则使用(D)。
A.cout<<*s;B.cout<
5.在类作用域中能够通过直接使用该类的()成员名进行访问。
A.私有B.公用C.保护D.任何
6.假定AA为一个类,a为该类公有的数据成员,若要在该类的一个成员函数中访问它,则书写格式为()。
A.aB.AA:
:
aC.a()D.AA:
:
a()
7.在一个用数组实现的队列类中,假定数组长度为MS,队首元素位置为first,队列长度为length,则队尾(即最后一个)元素的位置为()。
A.length+1B.first+length
C.(first+length-1)%MSD.(first+length)%MS
8.假定AB为一个类,则执行“ABr1=r2;”语句时将自动调用该类的()。
A.无参构造函数B.带参构造函数C.赋值重载函数D.拷贝构造函数
9.双目运算符重载为普通函数时,其参数表中应带有()个参数。
A.0B.1C.2D.3
10.当派生类中有和基类一样名字的成员时,一般来说,()。
A.将产生二义性B.派生类的同名成员将覆盖基类的成员
C.是不能允许的D.基类的同名成员将覆盖派生类的成员
二、填空题(每题2分,共20分)
1.行尾使用注释的开始标记符为__________。
2.设enumPrintstatus{ready=2,busy,error};则cout<3.重载一个函数的条件是:
该函数必须在参数的个数或参数的___类型_上与其它同名函数有所不同。
4.定义一个函数模板要用到的第一个修饰符是_template_。
5.与结构成员访问表达式p->name等价的表达式是____________。
6.如果一个派生类的基类不止一个,则这种继承称为____________。
7.在一个用数组实现的队列类中,假定数组长度为MS,队首元素位置为first,队列长度为length,则插入一个新元素的位置为__________。
8.向一个队列中插入元素就是把该元素放到________元素的后一位置上。
9.假定用户只为类AB定义了一个构造函数“AB():
a(0),b(0){}”,则定义该类对象x的定义语句“ABx;”是_________(正确/错误)的。
10.除了__________运算符外,其他重载的运算符都可以被派生类继承。
三、程序填充题(对程序、函数或类中划有横线的位置,根据题意按标号把合适的容填写到程序下面相应标号的后面。
每小题6分,共24分)
1.统计字符串中英文字母个数的程序。
#include
intcount(charstr[]);
voidmain(){
chars1[80];
cout<<”Enteraline:
”;
cin>>s1;
cout<<”count=”<}
intcount(charstr[]){
intnum=0;//给统计变量赋初值
for(inti=0;str[i];i++)
if(str[i]>=’a’&&str[i]<=’z’||___
(1)___)
___
(2)___;
___(3)___;
}
(1)
(2)(3)
2.从键盘上输入一个正整数,然后把它转换成的二进制数的每一位存放到一维数组中,最后输出该二进制数。
注意二进制数的存放是按照从低位到高位的次序进行的。
#include
voidmain()
{
intx;
cout<<"输入一个整数:
";
cin>>x;
inta[20],k=0,r;
do{
r=x%2;
a[k++]=r;
x=___
(1)___;
}while(___
(2)___);
for(--k;k>=0;k--)___(3)___;
cout<}
(1)
(2)(3)
3.假定有定义为“structNODE{intdata;NODE*next;};”,下面算法根据table数组中的n个元素建立一个表头指针为L的链表,链表中结点值的顺序与数组元素值的顺序正好相反。
voidf6(NODE*&L,inttable[],intn)
{
L=NULL;
if(n<=0)return;
inti=0;
NODE*p;
while(___
(1)___){
p=newNODE;
p->data=___
(2)___;
p->next=L;
___(3)___;
i++;
}
}
(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){
cout<<"栈空!
"<exit
(1);//中止运行
}
return___
(2)___;
}
voidStack:
:
Print(){
while(!
Empty())
cout<<___(3)___<<'';
}
(1)
(2)(3)
四、理解问答题(写出前两小题的程序运行结果和指出后两小题的程序(或函数)所实现的功能。
每小题6分,共24分)
1.#include
constintN=5;
voidmain()
{
inti,p=1,s=0;
for(i=1;ip=p*i;
s=s+p;
cout<cout<}
}
2.#include
#include
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<};
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();
}
3.#include
#include
#include
voidmain()
{
inti=10,a;
while(i>0){
a=rand()%100+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<}
}
4.intf8(constchar*str1,constchar*str2)
{
inti=0;
while(str1[i]&&str2[i])
if(str1[i]==str2[i])i++;
elseif(str1[i]>str2[i])return1;
elsereturn-1;
if(str1[i]==str2[i])return0;
elseif(str1[i]>str2[i])return1;
elsereturn-1;
}
五、编程题(每小题6分,共12分)
1.按照下面函数原型语句编写一个函数,返回二维数组a[m][n]中所有元素的平均值,假定采用变量v存放平均值。
2.根据下面类中MaxMin函数成员的原型和注释写出它的类外定义。
classAA{
int*a;
intn;
intMS;
public:
voidInitAA(intaa[],intnn,intms){
if(nn>ms){cout<<"Error!
"<(1);}
MS=ms;
n=nn;
a=newint[MS];
for(inti=0;i}
intMaxMin(int&x,int&y);//从数组a的前n个元素中求出
//最大值和最小值,并分别由引用参数x和y带回,
//同时若n大于0则返回1,否则返回0。
};
C语言程序设计A期末模拟试题二
参考答案
三、单选题
1.B2.A3.A4.D5.B6.A7.C8.D9.C10.B
四、填空题
1.//2.33.类型4.template5.(*p).name6.多继承
7.(