c++模拟题14.docx

上传人:b****4 文档编号:27035840 上传时间:2023-06-26 格式:DOCX 页数:41 大小:31.19KB
下载 相关 举报
c++模拟题14.docx_第1页
第1页 / 共41页
c++模拟题14.docx_第2页
第2页 / 共41页
c++模拟题14.docx_第3页
第3页 / 共41页
c++模拟题14.docx_第4页
第4页 / 共41页
c++模拟题14.docx_第5页
第5页 / 共41页
点击查看更多>>
下载资源
资源描述

c++模拟题14.docx

《c++模拟题14.docx》由会员分享,可在线阅读,更多相关《c++模拟题14.docx(41页珍藏版)》请在冰豆网上搜索。

c++模拟题14.docx

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

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > PPT模板 > 其它模板

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1