c++期终考试2014-2015(2)-部分答案

更新时间:2024-03-23 18:37:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

浙江工业大学期终考试命题稿

2014 /2015 学年第 二 学期

课程名称 教师份数 命题人 命题总页数 C++程序设计Ⅱ 陈晋音 页

使用班级 学生份数 审核人 每份试卷需用白纸 信息学院 500 张健 大张 命题注意事项:

一、命题稿请用A4纸电脑打印,或用教务处印刷的命题纸,并用黑

墨水书写,保持字迹清晰,页码完整。

二、两份试题必须同等要求,卷面上不要注明A、B字样,由教务处

抽定A、B卷。

三、命题稿必须经学院审核,并在考试前两周交教务处。

1

浙江工业大学2014/2015学年

第二学期试卷

课程 C++程序设计 Ⅱ 姓名___________________________ 班级____________________________ 授课教师 题序 计分

试题一、选择题(每题1分,共20分) 1. 所谓数据封装就是将一组数据和与这组数据有关的操作组装在一起,形成一个实体,这个实体定义成( )。 A A. 类 B. 对象 C. 函数体 D. 数据块 2.假定A是一个类,则执行“A *p=new A[10];”语句时共调用该类构造函数的次数是( )。D A. 1 B. 2 C. 11 D. 10 3.已知定义了类Person,则Person类的复制构造函数声明应定义正确的是( )。B A. void Person(Person& p); B. Person(const Person& p); C. Person Person(Person& p) D. Person(Person p); 4.下列不能作为类的成员的是( )。B A. 自身类对象的指针 B. 自身类对象 C. 自身类对象的引用 D. 另一个类的对象 5.下述静态数据成员的特征中,( )是错误的。B A. 说明静态数据成员时前边要加修饰符static B. 静态数据成员在类内进行初始化 C. 引用静态数据成员时,要在静态数据成员名前加类名和作用域运算符 D. 静态数据成员是所有对象共用的 6.已知类A是类B的友元,类B是类C的友元,则( )。D A.类A一定是类C的友元 B.类C一定是类A的友元 C.类C的成员函数可以访问类B的对象的任何成员 D.类A的成员函数可以访问类B的对象的任何成员 7. 对于常成员函数,下面描述正确的选项是( )。C A. 类的成员函数可以操作常对象 B. 类的成员函数不能操作常对象 C. 只有常成员函数可以操作常对象 D. 在常成员函数中,常对象可以被更新 8.有如下类定义: class MyBASE{

2

一 二 三 四 五 六 七 八 总评

int k; public: void set(int n) {k=n;} int get( ) const {return k;} }; class MyDERIVED: protected MyBASE{ protected; int j; public: void set(int m,int n){MyBASE::set(m);j=n;} int get( ) const{return MyBASE::get( )+j;} }; 则类MyDERIVED中保护成员个数是( )。B A.4 B.3 C.2 9. 有下列代码: 1 class Fred; 2 class Barney { 3 Fred x; 4 Fred *p; 5 }; 6 class Fred { 7 Barney y; 8 }; 有错误的地方是( )。B D.1 A. 第1行: class Fred; B. 第3行: Fred x; C. 第4行: Fred *p; D. 第7行: Barney y; 10. 需要一种逻辑功能一样的函数,而编制这些函数的程序文本完全一样,区别只是数据类型不同。对于这种函数,下面不能用来实现这一功能的选项是( )。 D A.宏函数 B.为各种类型都重载这一函数 C.模板 D.友元函数 11.为正确执行以下程序,则函数定义正确的是( )。B #include void main() { print(2,3.4);} A. template void print(T arg1, T arg2) { cout << \ cout << \} B. template

3

void print(T1 arg1, T2 arg2) { cout << \ cout << \} C. void print(int arg1, int arg2) { cout << \ cout << \} D. template void print(T arg1, int arg2) { cout << \ cout << \} 12.以下基类哪个表示抽象类( )。C A.class MyClass{virtual void vf(int);}; B.class MyClass{void vf(int)=0;}; C.class MyClass{virtual void vf( )=0;}; D.class MyClass{virtual void vf(int){ }}; 13.下面关于虚函数和函数重载的叙述不正确的是( A. 虚函数不是类的成员函数 B. 虚函数实现了C++的多态性 C. 函数重载允许非成员函数,而虚函数则不行 D. 函数重载的调用根据参数的个数、序列来确定,而虚函数依据对象确定 14.如果表达式++i*k时中的“++”和“*”都是重载的友元运算符,则采用运算符函数调用格式,该表达式还可表示为( )。B B)operator*(operator++(i),k) D)k.operator*(operator++(i)) )。A A)operator*(i.operator++(),k) C)i.operator++().operator*(k) 15.下列关于虚函数的说法,错误的是( )。B A. 需要通过基类的对象、指针或者引用来调用虚函数 B. 派生类中的虚函数必须与基类中的虚函数同名,但参数的个数可以不一样 C. 一个函数如果被定义成虚函数,经历多次派生后,其虚特性将不会保持 D. 设置虚函数的目的是消除二义性 16.有如下程序: #include using namespace std; class Base{ 4

private: void fun1( ) const {cout<<”fun1”;} protected: void fun2( ) const {cout<<”fun2”;} public: void fun3( ) const {cout<<”fun3”;} }; class Derived : protected Base{ public: void fun4( ) const {cout<<”fun4”;} }; int main(){ Derived obj; obj.fun1( ); //① obj.fun2( ); //② obj.fun3( ); //③ obj.fun4( ); //④ } 其中没有语法错误的语句是( )。D A.① B.② C.③ 17. 有如下类定义: class AA{ int a; public: int getRef( ) const {return &a;} //① int getValue( ) const {return a;} //② void set(int n) const{a=n;} //③ friend void show(AA aa) const {cout< int main( ) { long *p , i; p=new long; if(!p) {cout<<”Allocation error\\n”; return 1; } *p=1000; i=(long)p; cout<<”Here is integer at p:”<<*p<<”\\n”; cout<<”Here is i: “<

5

D.④ D.④ 18. 下面程序使用new与delete命令,下面是对这段程序的叙述,其中正确的是( )。C

delete p; return 0; } A. 有错误,编译不能通过 B. 正确,执行结果为:1000 1000 C. 正确,但执行结果的第二个数值不定 D. 正确,执行结果的各个数值均不为1000 19. 要求打开文件test.dat,可读出数据,正确的语句是( )D A. ifstream myFile(“test.dat”, ios::in); B. fstream myFile (“test.dat”, ios::in); C. ifstream myFile; myFile.open(“test.dat”, ios::in); D. 以上都正确 20. read函数的功能是从输入流中读取( A.一个字符 试题二、程序填空题(每空1 分,共20 分)。 1.【程序说明】以下程序能实现求a2+b2+c2 。其中a、b、c 的值由对象的初始化值提供。该程序使用静态成员实现。 运行结果: Number=5 Number=10 Number=15 Result=350 #include using namespace std; class myclass{ public: myclass(int x); void getnumber(); static void Result(); )。 D D. 指定若干字节 B. 当前字符 C. 一行字符 private: }; myclass::myclass(int x){

int a; (1) ; //定义静态数据成员sum a=x; 6

} (2) ; void myclass::getnumber(){ } void myclass:: Result() { } (3) ; int main() } (1)______________ (2)_________________ (3)________________ (4)________________ 2.【程序说明】请完成该类的实现。 #include using namespace std; class point { public: (5) ; point(int x, int y) { (6) ; (7) ; } (8) {return x;} int getY(){return y;} void setX(int xx){x=xx;} void setY(int yy){y=yy;} private: { myclass ob1(5),ob2(10),ob3(15); ob1.getnumber(); ob2.getnumber(); ob3.getnumber(); (4) ; //调用Result输出结果 return 0; cout<<\cout<<\ 7

}; int x,y; class ArrayofPoints { public: ArrayofPoint(int n):numofPoints(n) { (9) ;} (10) Elements(int n) { return array[n];} private: point* array; int numofPoints; }; void main() { ArrayofPoints a(5); a.Elements(0).setX(3); cout<< (11) ; // 输出第一个点的横坐标 } (5)_________________ (6)_________________ (7)________________ (8)________________ (9)_________________ (10)_________________ (11)________________ 3.【程序说明】已知定义了Clock类,请派生一个带“AM”、“PM”的新时钟类NewClock。以下程序输出为:8:23:34 PM #include using namespace std; enum AMPM{AM=1,PM}; class Clock{ public: Clock(int=0, int=0, int s=0); void ShowTime() {cout<

{Hour=h;Minute=m;Second=s;} class (13) { public: NewClock(); NewClock(Clock c,AMPM ap) (14) {} void ShowTime(){ } (15) ; // (16) ; private: }; int main(){ } (12)_________________ (13)_________________ (14)________________ (15)________________ (16)_________________ 4.【程序说明】文件Test1.txt中有一批非负整数,结尾以“-1”结束,要求将Test1.txt中的非负偶数挑出来,写到文件Test2.txt中。请将下列程序补充完整。 (17) ; #include using namespace std; int main() { int b; ifstream infile; (18) (19) outfile.open(\infile>>b; while(b>=0) { NewClock nc(Clock(8,23,34),AMPM(2)); nc.ShowTime(); return 0; AMPM Ap; 9

} } (20) outfile<>b; infile.close(); outfile.close(); return 0; (17)_________________ (18)________________ (19)________________ (20)________________ 答案:(17) include (18) ofstream outfile;(19)infile.open(\ (20)if(b%2==0); 试题三、程序阅读题(每题5分,共20分) ⒈ 程序1 下面程序的运行结果是________。 #include using namespace std; class B{ public: void f1(){cout<<\}; class D:public B{ public: void f1(){cout<<\}; void f(B& rb){ rb.f1(); } int main( ){ D d; B b,&rb1=b,&rb2=d; f(rb1); f(rb2); return 0; } B::f1 B::f1 2. 程序2 下面程序的运行结果是________。 #include using namespace std; class myclass{ private: 10

int x,y; static long sum; public: }; long myclass :: sum=1; int main() { myclass ob1(1,2); myclass(int a,int b) { } void getxy() { } sum*=x*y; cout<<\ x=a; y=b; ob1.getxy(); } sum=2 sum=24 sum=720 3 程序3 下面程序的运行结果是________。 #include class B { public: B(){} B(int i){b=i;} virtual void virfun() {

11

myclass ob2(3,4); ob2.getxy(); myclass ob3(5,6); ob3.getxy(); return 0;

cout<<\ } private: int b; }; class D:public B { public: D(){} D(int i,int j):B(i){d=j;} private: int d; void virfun() { cout<<\ } }; void fun(B *obj) { obj->virfun(); } void main() { D *pd=new D; fun(pd); } 4. 程序4 下面程序的运行结果是________ 程序: #include using namespace std; class Sample { int n; public: Sample(){} Sample(int i){n=i;} Sample &operator =(Sample s); int disp() { cout<<\ 12

}; } return 0; Sample &Sample::operator=(Sample s) { } int main() { } n=10 试题四、程序设计题(第一题10分,第二、三题各15分,共40分) 1. 利用函数模板设计一个求数组元素中和的函数,并定义main函数测试。 2. 定义一个汽车类vehicle,有车轮个数wheels和车重weight两个属性。小车类car是它的私有派生类,有载人数passenger_load属性。卡车类truck也是vehicle的私有派生类,有含载人数passenger_load和载重量payload这两个属性,每个类都有相关数据的输出的成员函数。编写主函数测试所定义的类结构,实现对每个类中数据属性的输出。 3. 设计如下类:(1)建立一个Point类,表示平面中的一个点;建立一个Line类,表示平面中的一条线端,内含两个Point类的对象;建立Triangle类,表示一个三角形,内含三个Line类的对象构成一个三角形。(2)设计三个类的相应的构造函数、复制构造函数,完成初始化和对象复制。(3)设计Triangle类的成员函数完成三条边是否能构成三角形的检验和三角形面积计算,面积显示。 提示:已知三角形的三个点,求三角形面积方法为:S=distance(p1,p2)*distance(p3,Line(p1,p2))/2。 Sample s1(10),s2; s2=s1; s2.disp(); return 0; Sample::n=s.n; return *this; 13

本文来源:https://www.bwwdw.com/article/vcg8.html

Top