c++模拟题14.docx
《c++模拟题14.docx》由会员分享,可在线阅读,更多相关《c++模拟题14.docx(41页珍藏版)》请在冰豆网上搜索。
c++模拟题14
模拟题一
一、判断对错题(10%)(对√,错×)
()1.自动变量用堆方式创建,它与块共存亡。
()2.运算符+=是右结合的。
()3.表达式cout<<99的类型为int。
()4.++i是左值,但i++不是左值。
()5.Y[I][J]与*(*Y+I)+J不等价。
()6.从外部看类的private成员和protected成员有区别。
()7.运算符&不可以重载。
()8.基类的protected成员经过protected派生,在派生类中它变成了private成员。
()9.2.0/-3.0是一个正确的表达式。
()10.字符'\12'的ASCII为12。
二、填空题(20%)
#include
typedefstructnode
{
longdata;
node*next;
};
classstack
{
private:
node*head;
①__________
stack();
~stack();
voidpush(②__________);
③__________pop();
④__________print();
};
stack:
:
stack()
{head=new⑤__________
head->next=⑥__________}
stack:
:
~stack()
{
node*p;
p=head;
while(p)
{
head=head->next;
⑦__________
p=head;
}
}
voidstack:
:
push(longx)
{
node*p=newnode;
p->data=x;
p->next=head->next;
⑧__________=p;
cout<<"Push"<"<}
longstack:
:
pop()
{
node*p=head->next;
if(p!
=NULL)
{
longx=p->data;
head->next=p->next;
⑨__________
cout<<"pop"<"<returnx;
}
else
cout<<"Stackisempty!
"<return0;
}
voidstack:
:
print()
{
node*p=head->next;
cout<<"Stack_Top"<while(p)
{
cout<data<⑩__________;
}
cout<<"Stack_bottom"<}
三、简答题(20%)(按条列出论点)
1.注解。
2.new运算。
3.宏定义。
4.private成员。
5.构造函数。
四、程序设计题(50%)
1.写一基于文件流的程序,删除C++源程序中的单行注解。
要求:
C++源程序文件名和删除单行注解后的文件名均在命令行中给出。
2.已知A[N]是整数数组,试以递归函数实现求N个整数之和。
3.请为Fraction类(分数类)定义下列重载运算符函数(注意函数原型)
⑴复合赋值运算+=。
⑵等于运算=。
⑶插入运算<<。
classFraction
{
private:
intfz;//分子
intfm;//分母
public:
…
};
模拟题一参考答案
一、判断对错题(10%)
本题共10分,每题1分。
①×
②√
③×
④√
⑤√
⑥√
⑦×
⑧√
⑨√
⑩×
二、填空题(20%)
本题共20分,每空2分。
答案只少“;”或“:
”等符号的给1分。
①public:
②long
③long
④void
⑤node;
⑥NULL;
⑦deletep;
⑧head->next
⑨deletep;
⑩p=p->next
三、简要论述题(20%)
本题共20分,每题4分。
概念解释正确给2分;论述要求有两条论点,每条给1分
(非参考答案中的论点只要正确同样给分)。
⑴注解
。
写程序者为读程序者作的说明。
。
C++编译器把所有的注解视为空白。
。
注解有多行注解(/**/)和单行注解(//)。
。
注解通常用来说明程序或模块的名称、用途、编写时间、编写人、变量说明和算法说明等。
⑵new运算
。
new是个单目运算,功能是给程序实体动态地分配空间。
。
语法格式X类型指针=newX类型。
。
用new申请空间的同时还可以进行初始化。
。
用new申请的空间可用delete运算收回。
⑶宏定义
。
宏定义就是用一个宏名字来命名一个字符串。
。
编译预处理时宏名将被用宏体简单替换。
。
使用宏定义可以提高程序的可读性、可修改性与可移植性。
。
宏定义可以带参数。
⑷private成员
。
private成员为类成员的一种类型。
。
private成员只能由类作用域中的函数访问。
。
基类的private成员在派生类中也是不可见的。
。
private成员只能通过public成员访问。
⑸构造函数
。
构造函数是类的一种特殊成员。
。
构造函数用来创建类的对象(实例)。
。
构造函数具有特定的名字-与类名相同。
。
构造函数可以重载。
四、程序设计题(50%)
本题共50分。
(第1、2题各10分;第3题有3小题,每小题10,分共计30分。
)
每题评分细则:
①函数原型正确3分(函数返回值类型1分,函数参数类型和个数2分)。
②函数总体结构正确4分(函数的总体结构指主要的循环结构和选择结构)。
③其他3分(实现的细节)。
1.
#include
#include
voidmain(intargc,char*argv[])
{
if(argc!
=3)exit
(1);
charc0,c1='';
intk=1;
ifstreamin(argv[1],ios:
:
in|ios:
:
binary);
ofstreamout(argv[2],ios:
:
out|ios:
:
binary);
while(!
in.eof())
{
in.read(&c0,1);
if(k&&c0=='/'&&c1=='/')k=0;
if(!
k&&c0=='\x0d')k=1;
if(k&&c1=='/'&&c0!
='/')out.write(&c1,1);
if(k&&c0!
='/')out.write(&c0,1);
c1=c0;
}
in.close();
out.close();
}
2.
inttga(int*a,intn)
{
if(n<1)return(0);
elsereturn(a[n-1]+tga(a,n-1));
}
3.
①
fraction&fraction:
:
operator+=(fraction&f)
{
fz=fz*f.fm+fm*f.fz;
fm=fm*f.fm;
return*this;
}
②intoperator==(fraction&f1,fraction&f2)
{
if(f1.fz==f2.fz&&f1.fm==f2.fm)
return1;
else
return0;
}
③ostream&operator<<(ostream&os,fraction&f)
{
os<returnos;
}
模拟题二
一、判断对错题(10分)(对√,错×)
()1.在类定义中不允许对所定义的数据成员进行初始化。
()2.程序中不能直接调用构造函数,在创建对象时系统自动调用构造函数。
()3.从外部看类的private成员和protected成员没有区别。
()4.可以将派生类对象赋给基类对象,也可以将基类对象赋给派生类对象。
()5.构造函数和析构函数都不能为虚函数。
()6.C++按列优先存放数组元素。
()7.1/2的值等于0.5。
()8.基类的protected成员经过protected派生后,在派生类中仍为protected成员。
()9.所有运算符都可以重载。
()10.表达式cout<<99的类型为int。
二、单项选择题(20分)
1.下列有关类的说法不正确的是()。
A.类是一种用户自定义的数据类型
B.只有类中的成员函数才能存取类中的私有数据
C.在类中,如果不作特别说明,所有的数据均为私有类型
D.在类中,如果不作特别说明,所有的成员函数均为公有类型
2.在C++程序中,对象之间的相互通信通过()。
A.继承实现B.调用成员函数实现
C.封装实现D.函数重载实现
3.对于任意一个类,析构函数的个数有()。
A.0B.1C.不确定D.2
4.在下列各函数中,不是类的成员函数的是( )。
A.构造函数B.析构函数
C.友元函数D.拷贝构造函数
5.在多基继承的构造函数定义中,几个基类的构造函数之间用()分隔。
A. :
B. ; C. , D. :
:
6.若类A和类B的定义如下:
classA
{
inti,j;
public:
voidget();
//...
};
classB:
A
{
intk;
public:
voidmake(int);
//...
};
voidB:
:
make(intj)
{
k=i*j;
}
则上述定义中,非法的表达式是()。
A.voidget();B.intk;C.voidmake(int)D.k=i*j;
7.已知:
print函数是一个类的常成员函数,它无返回值,下列表示中正确的是( )。
A.constvoidprint()B.voidconstprint()
C.voidprint(const)D.voidprint()const
8.在类外部可以用p.a的形式访问派生类对象p的基类成员a,则a应是()。
A.私有继承的公有成员B.公有继承的私有成员
C.公有继承的保护成员D.公有继承的公有成员
9.下列关于运算符重载的描述中,正确的叙述是()。
A.运算符重载可以改变运算数的个数
B.运算符重载可以改变语法结构
C.运算符重载可以构造新的运算符
D.运算符重载不可以改变优先级和结合性
10.下列带缺省值参数的函数说明中,正确的说明是()。
A.intFun(intx=1,inty=2,intz);
B.intFun(intx,inty=2,intz=3);
C.intFun(intx,inty=2,intz);
D.intFun(intx=1,inty,intz=3);
三、完成程序题:
根据题目要求,完成程序填空。
(20分)
1.本程序在3位正整数中寻找符合下列条件的整数:
它既是完全平方数,又有两位数字相同,例如144,676等。
用程序找出所有满足上述条件的3位数并输出。
intflag(inta,intb,intc)
{
return!
((__________)*(__________)*(__________));
}
voidmain()
{
intn,k,a,b,c;
for(k=1;;k++)
{
___________;
if(n<100)_________;
if(n>999)_________;
a=n/100;
b=(n/10)%10;
c=n%10;
if(flag(a,b,c))
cout<}
}
2.类CPoint中的成员函数Init的功能是用已知对象给另一对象赋值,请将其补充完整。
classCPoint
{
intx,y;
public:
CPoint(inti,intj){x=i;y=j;}
voidInit(CPoint&k)
{
if(________)return;//防止自身赋值
_______=k;
}
};
3.补充以下类,使其能正确运行。
#include
classP
{
private:
intx1,x2;
staticinty;
public:
P(__________________){x1=i;x2=j;}
};
___________=0;//对静态成员y赋值
voidmain()
{
Pdata[20];
}
4.在下面程序横线处填上适当的字句,使其输出结果为0,56,56。
#include
classbase
{
public:
intfunc(){return0;}
};
classderived:
publicbase
{
public:
inta,b,c;
setValue(intx,inty,intz){a=x;b=y;c=z;}
intfunc(){return(a+b)*c;}
};
voidmain()
{baseb;
derivedd;
cout<d.setValue(3,5,7);
cout<base&pb=d;
cout<}
四、程序分析题:
给出下面程序输出结果。
(15分)
1.#include
intf(inti){return--i;}
intg(int&i){return--i;}
voidmain()
{
inta,b,c,d,e;
a=b=c=d=10;
a+=f(g(a));
b+=g(e=g(b));
c+=g(e=f(c));
d+=f(f(d));
cout<<"a="<cout<<"b="<
cout<<"c="<cout<<"d="<cout<<"e="<}
输出为:
2.#include
classSample
{
intx;
public:
Sample(inta){x=a;}
frienddoublesquare(Sample&s);
};
doublesquare(Sample&s){returns.x*s.x;}
voidmain()
{
Samples1(20);
Samples2(30);
cout<<″s1.square=″<cout<<″s2.square=″<}
输出为:
3.#include
classbase1
{
intx;
public:
base1(inti){x=i;cout<<"base1constructorcalled!
"<~base1(){cout<<"base1destructorcalled!
"<};
classbase2
{
inty;
public:
base2(inti){y=i;cout<<"base2constructorcalled!
"<~base2(){cout<<"base2destructorcalled!
"<};
classderivate:
publicbase2,publicbase1
{
public:
derivate(inti,intj):
base1(i),base2(j)
{cout<<"derivateconstructorcalled!
"<~derivate(){cout<<"derivatedestructorcalled!
"<};
voidmain()
{
derivated(3,4);
}
输出为:
五、程序设计题(35分)
1.(10分)写一递归函数计算F(n)=1+
+
+…+
2.(10分)写一基于文件流的程序将文件中大写字母转换成小写字母。
要求:
输入和输出文件名均在命令行中给出。
3.(15分)编写一个程序输入3个学生的英语和计算机成绩,并按总分从高到低排序。
要求设计一个学生类Student,其定义如下:
classStudent
{
intenglish,computer,total;
public:
voidgetscore();//获取一个学生的成绩
voiddisplay();//显示一个学生的成绩
voidsort(Student*);//将若干个学生按总分从高到低排序
~Student();
};
模拟题二参考答案
一、判断对错题(10分,每题1分)(对√,错×)
1.√2.×3.√4.×5.×6.×7.×8.√9.×10.×
二、单项选择题(20分,每题2分)
1.D2.B3.B4.C5.C6.D7.D8.D9.D10.A
三、完成程序题:
根据题目要求,完成程序填空。
(20分)
(前四空(指:
1.①②)每空1分,其余每空2分)
1.①a-ba-cb-c②n=k*k③continue④break
2.①this==&k②*this
3.①inti=0,intj=0(说明:
默认值可为任何合法的整形值)
②intp:
:
y
4.①virtual②void
四、程序分析题:
给出下面程序输出结果。
(15分)
1.(5分,每个1分)
a=17
b=17
c=18
d=18
e=8
2.(4分,每个2分)
s1.square=400
s2.square=900
3.(6分,每个1分)
base2constructorcalled!
base1constructorcalled!
derivateconstructorcalled!
derivatedestructorcalled!
base1destructorcalled!
base2destructorcalled!
五、程序设计题(35分)
第1、2题每题评分细则:
①函数原型正确3分(函数返回值类型1分,函数参数类型和个数2分)。
②函数总体结构正确4分(函数的总体结构指主要的循环结构和选择结构)。
③其他3分(实现的细节)。
第3题每题评分细则:
①函数原型正确2分(函数返回值类型1分,函数参数类型和个数1分)。
②函数总体结构正确2分(函数的总体结构指主要的循环结构和选择结构)。
③其它2分(实现的细节)。
1.(10分)
doublesum(intn)
{
if(n==1)return1;
returnsum(n-1)+(double)1/n;
}
2.(10分)
<参考程序1>:
#include
#include
voidmain(intargc,char*argv[])
{
if(argc!
=3){cerr<<"wrong!
"<(1);}
charc;
ifstreamin(argv[1],ios:
:
in|ios:
:
binary);
ofstreamout(argv[2],ios:
:
out|ios:
:
binary);
while(!
in.eof())
{
in.read(&c,1);
if(c>='A'&&c<='Z')c=c+32;
out.write(&c,1);
}
in.close();
out.close();
}
<参考程序2>:
voidmain(intargc,char*argv[])
{
if(argc!
=3){cerr<<"wrong!
"<(1);}
charc;
ifstreamin(argv[1]);
ofstreamout(argv[2]);
while(in.get(c))
{
if(c>='A'&&c<='Z')c+=32;
out<}
in.close();
out.close();
}
3.(15分)
#include
classStudent
{
intenglish,computer,total;
public:
voidgetscore();//获取一个学生成绩
voiddisplay();//显示一个学生成绩
voidsort(Student*);//将若干个学生按总分从高到低排序
~Student();
};
voidStudent:
:
getscore()
{
cout<<"输入英语成绩:
";
cin>>english;
cout<<"输入计算机成绩:
";
cin>>computer;
total=english+computer;
}
voidStudent:
:
sort(Student*p)
{
inttmp,i,j;
for(j=0;j<2;j++)
for(i=0;i<2;i++)
if(totaltotal)
{
tmp=total;
total=p->total;
p->total=tmp;
tmp=english;
english=p->english;
p->english=tmp;
tmp=computer;
computer=p->computer;
p->comp