收藏 分销(赏)

华侨大学C--试卷.doc

上传人:仙人****88 文档编号:11987682 上传时间:2025-08-25 格式:DOC 页数:16 大小:158.50KB 下载积分:10 金币
下载 相关 举报
华侨大学C--试卷.doc_第1页
第1页 / 共16页
华侨大学C--试卷.doc_第2页
第2页 / 共16页


点击查看更多>>
资源描述
华侨大学 面向对象程序设计(二) 试卷B 班 级 学 号 姓 名 成 绩 注意:请将所有答案写在答卷上! 一、填空题(15分,每小题1分) 1. 如果用户自定义的函数在调用点之后再定义,则在调用点之前,必须用(1)对被调函数进行说明。 2. 函数的递归调用可以有直接递归调用和(2)递归调用。 3. 静态全局变量的作用域是(3) 。 4. 若将某函数定义为静态型(static),则该函数只能被(4)所调用。 5. main(int argc,char *argv[]))函数中的参数argv用于(5) 。 6. (6)提供了一种在程序内和程序之间组织和使用名称的技术。 7. 用“const 类型标识符& 引用名=目标变量名;”声明引用,此处const的含义是(7) 。 8. C++语言中,(8)定义一个结构体类型,该结构类型中包含指向自身结构类型的指针成员。(填“可以”或“不可以”) 9. 若有类型定义“typedef char STRING[80]; STRING s;”,则s的类型为(9) 。 10. 类的对象可以直接访问类中的(10)成员。(private/protected/public) 11. 在定义类时,若没有为类提供析构函数,则编译系统会自动为该类创建一个默认的析构函数,其形式为(11) 。 12. 拷贝构造函数的功能是实现对象值的拷贝,通过将一个同类对象的值拷贝给一个新对象,来完成对新对象的初始化。定义一个拷贝构造函数的方式是(12) 。 13. 当希望一个类(如A)可以存取另一个类(如B)的私有成员时,可以将该类(A)声明为另一类(B)的友元类,友元类(A)的所有成员函数都可视为该类(B)的(13)函数。 14. 在静态成员函数的实现中不能直接引用类中说明的非静态成员,但可以引用类中说明的(14)成员。 15. C++支持两种不同类型的多态:一种是编译时的多态,另一种是(15)时的多态。 二、选择题(18分,每小题2分) 1. 进行文件操作时,需要包含(1)_文件。 A) iostream B) fstream C) stdio.h D) stdlib.h 2. 若有定义:enum Weekday { sun=7,mon=1,tue,wed,thu,fri,sat }day;,以下正确的语句是(2) 。 A) mon++; B)int k=mon+1; C) day=7; D)day++; 3. 若有定义:int (*p)(int,int); ,则错误的叙述是(3) 。 A) p是一个指向返回值类型为int,带有两个int型参数的函数的指针 B) 该类型的变量p可以作为另外一个函数的参数 C) 若已定义了函数int Sum(int x,int y),则p可以指向函数Sum。 D) p可以作自增运算p++ 4. 若已有定义:struct Student{ char *name,int age,float mark;}s[8]; Student* p=s;,以下语句(组),正确的是(4) 。 A) cin>>s[0].name>>s[0].age>>s[0].mark; B) cin>>p->age>>p->mark;p->name="Liuhua"; C) s[1].name=new char[10];strcpy(p->name, "Liuhua"); D) p->name=new char[10]; strcpy(p->name, "Liuhua"); 5.若有定义:int a,b;,下面引用变量的声明中,(5)是正确的。 A) int& ra=a; int& &rra=ra; B) int& y=10; C) int& z=int; D) int &x=a; int &y=b; 6. 对于下面定义的类Myclass,在函数f中可以将对象obj的成员data值修改为50的语句是(6)。 class Myclass{ public: Myclass(int x){ data=x; } void SetNum(int value){ data=value; } private: int data; }; void f(void){ Myclass obj(45),*ptr=&obj; (6) } A) obj.data=50; B)obj.Myclass(50); C)ptr->SetNum(50); D)ptr->data=50; 7.下面叙述正确的是(7) 。 A) 基类的protected成员不能被派生类的成员函数访问 B) 基类的public成员能被派生类的对象直接访问 C) 基类的protected成员在派生类中可能是privated的 D) 基类的private成员不能被基类的成员函数访问 8. 构造函数不具备的特征的是 (8) 。 A) 构造函数的函数名与类名相同 B)构造函数可以重载 C) 构造函数必须有返回值类型 D)构造函数可以设置默认参数 9. 下面叙述错误的是(9) 。 A) 基类指针可以指向派生类对象 B) 基类指针可以指向基类对象 C) 派生类指针可以指向派生类对象 D) 派生类指针可以指向基类对象 三、阅读程序题(45分) 1.阅读下面程序,给出程序的运行结果。(15分,每小题5分) 1) #include<iostream> using namespace std; void Fun(int x,int *py,int& z){ x++; (*py)--; z*=2; cout<<"x="<<x<<","<<"*py="<<*py<<","<<"z="<<z<<endl; } void main(void){ int a=1,b=2,c=3; Fun(a,&b,c); cout<<"a="<<a<<","<<"b="<<b<<","<<"c="<<c<<endl; } 2) #include<iostream> using namespace std; void P(int w){ if (w==0) return; P(w-1); cout<<w; P(w-1); } void main(void){ P(3); } 3) #include<iostream> using namespace std; void print(int,int,int (*p_fun)(int,int)); int add(int,int); int substract(int,int); void main(void){ int a=10,b=-20,Choice; int(*p)(int,int); cout<<"Enter your choice:"; cin>>Choice; switch(Choice){ case 1: p=add; break; default: p=substract; } print(a,b,p); } int add(int x,int y){ return x+y; } int substract(int x,int y){ return x-y; } void print(int i,int j,int (*p_fun)(int,int)){ cout<<"The result is "<<p_fun(i,j)<<endl; } 程序运行时: Enter your Choice:1 2.阅读下面程序,回答相关问题。(30分) 1)(7分) #include <iostream> using namespace std; struct Student{ int num; char name[20]; char sex; int age; }; void main(void){ Student* Fun(Student *,int); Student stu[]={ {11,"lilin",'M',18},{3,"sunny",'M',24}, {2,"zhao",'M',20}, {4,"Liu yanhong",'F',30} }; int size=sizeof(stu)/sizeof(Student); Student *p=Fun(stu,size); cout<<p->num<<'\t'<<p->name<<'\t'<<p->age<<endl; } Student* Fun(Student *s, int n){ //问题a和b int index=0,i; for(i=1;i<n;i++) if(s[i].num>s[index].num) index=i; return s+index; } a) (3分)给出函数Fun()的功能; b) (4分)若将函数Student* Fun(Student *s, int n)的返回值类型改为Student& ,要完成相同的功能,给出源程序中其它需要修改的语句并作相应的修改。 2)(6分) #include<iostream> using namespace std; class Student{ char* name; int age; float score; public: Student(char* n,int a,float s):age(a),score(s){ cout<<"constructing..."<<n<<endl; name=new char[strlen(n)+1]; strcpy(name,n); } ~Student(){ cout<<"destructing..."<<name<<endl;; delete[] name; } }; void main(void){ Student s("Liu",18,86.5); Student *p_st1=new Student("Chen",18,86.5); delete p_st1; //问题b) } a)(4分)给出程序的运行结果; b)(2分)若去掉语句delete p_st1;,程序运行结果会不同吗? 3)(9分) #include<iostream> using namespace std; class Point{ private: char *name; float X,Y; public: Point(char* s,float a,float b){ X=a;Y=b; name=new char[strlen(s)+1]; strcpy(name,s); cout<<"Initializing Point: "<<name <<", X="<<X<<" ,Y="<<Y<<endl; } Point(Point &p); float GetX(){ return X; } float GetY(){ return Y; } void Show(){ cout<<"name:"<<name<<", X="<<X<<",Y="<<Y<<endl; } ~Point(){ cout<<"deleting Point: "<<name<<", "<<X<<","<<Y<<endl; delete []name; } }; class Line{ Point p1,p2; public: Line(char* p1name,float x1,float y1,char* p2name,float x2, float y2):p1(p1name,x1,y1),p2(p2name,x2,y2){ cout<<"Line constructor."<<endl; } ~Line(){ cout<<"Line destructor."<<endl; } }; Point::Point(Point &p){ //问题b name=new char[strlen(p.name)+1]; strcpy(name,p.name); X=p.X; Y=p.Y; cout<<"Coping Point: "<<p.name<<","<<X<<","<<Y<<endl; } void fun(Point p){ p.Show(); } void main(void){ Point A("objA",12,24); fun(A); Line L1("p1",1,2,"p2",3,4); } a)(6分)给出程序的运行结果; b)(3分)给出拷贝构造函数Point(Point &p)的功能。是否可以去掉该函数? 4)(8分) #include<iostream> using namespace std; class Base{ public: int Bvalue; Base(int v){ Bvalue=v; cout<<"Base constructor."<<endl; } int getBvalue(){ return Bvalue; } }; class D1:public Base{ public: int D1value; D1(int v,int b):Base(v){ D1value=b; cout<<"D1 constructor."<<endl; } int getD1value(){ return D1value; } }; class D:public D1{ public : int Dvalue; int getDvalue(){ return Dvalue; } D(int v1,int v2,int a):D1(v1,v2){ Dvalue=a; cout<<"D constructor."<<endl; } }; void main(void){ D obj(1,2,3); cout<<obj.getDvalue()<<endl; cout<<obj.getBvalue()<<endl; //问题b) cout<<obj.getD1value()<<endl; } a)(6分)给出程序的运行结果; b)(2分)能否将表达式obj.getBvalue()改为obj.Bvalue? 四、编程题(22分) 1. 一个简单分数类的结构如下,请补充相应代码,使之完成程序功能。 #include<iostream.h> int gcd(int m,int n){ //(1)完成求两个数的最大公因数(5分) ? } class FractionalNumber{ //分数类的定义 int numerator; //分子 int denominator; //分母 public: FractionalNumber(int n=0,int d=1){ //完成构造函数的实现(5分) ? } ~FractionalNumber(){ cout<<"Destructor is called."<<endl; } FractionalNumber(const FractionalNumber& x){//拷贝构造函数 numerator=x.numerator; denominator=x.denominator; Simplify(); cout<<"Copy constructor is called."<<endl; } void Simplify(void){ //对分数的分子和分母进行化简 int g=gcd(denominator,numerator); numerator/=g; denominator/=g; } void Output(){ cout<<numerator<<"/"<<denominator<<endl; } //分数的输出 void add(const FractionalNumber& x){ //分数的加法(5分) ? } friend FractionalNumber operator+(FractionalNumber& num1, FractionalNumber& num2); //友元函数的声明 };//类定义结束 FractionalNumber operator+(FractionalNumber& num1,FractionalNumber& num2){ int nresult,dresult; dresult=num1.denominator*num2.denominator; nresult=num1.numerator*num2.denominator+ num1.denominator*num2.numerator; return FractionalNumber(nresult,dresult); } void main(void){ //设计测试程序,创建类对象,使用output()、add()和运算符‘+’(7分) ? }//end of main() 华侨大学 面向对象程序设计(二) 答卷 姓 名 学号 成绩 一、填空题(15分,每小题1分) (1) (2) (3) (4) (5) (6) (7) (8) (9) (10) (11) (12) (13) (14) (15) 二、选择题(18分,每小题2分) (1) (2) (3) (4) (5) (6) (7) (8) (9) 三、阅读程序题(45分) 1.阅读下面程序,给出程序的运行结果。(15分,每小题5分) 1) 运行结果: 2)运行结果: 3)运行结果: 2.阅读下面程序,回答相关问题。(30分) 1)(7分) a) (3分)函数Fun()的功能: b) (4分)需要修改: 2)(6分) a)(4分)运行结果: b)(2分) 3)(9分) a)(6分)运行结果: b) (3分) 4)(8分) 1)(6分)运行结果: 2) 四、编程题(22分) 1. 一个简单分数类的结构如下,请补充相应代码,使之完成程序功能。 int gcd(int m,int n){ //(1)完成求两个数的最大公因数(5分) } FractionalNumber(int n=0,int d=1){ //完成构造函数的实现(5分) } void add(const FractionalNumber& x){ //分数的加法(5分) } void main(void){ //设计测试程序,创建类对象,使用output()、add()和运算符‘+’(7分) }//end of main() 参考答案 一、填空题(15分,每小题1分) (1)函数原型 (2)间接 (3)定义它所在的源程序文件 (4)定义该函数的源程序所在文件的其他函数 (5)指针数组中各元素分别指向命令行中的各个字符串(6)命名空间 (7)引用的目标变量是常量 (8)可以 9.字符数组 10.public 11.~类名{} 12.类名(const 类名& 对象名){…} 13.友元函数 14.静态 15.运行 二、选择题(18分,每小题2分) (1)B (2)B (3)D (4)D (5)D (6)C (7)C (8)C (9)D 三、阅读程序题(45分) 1.阅读下面程序,给出程序的运行结果。(15分,每小题5分) 1) 2) 1 2 1 3 1 2 1 3) 2.阅读下面程序,回答相关问题。(30分) 1)(7分) a)函数返回最大学号的学生指针; b)需要修改的地方: Student& Fun(Student *,int);//修改1 Student p=Fun(stu,size); //修改2 cout<<p.num<<'\t'<<p.name<<'\t'<<p.age<<endl;//修改3 return s[index];//修改4 2)(6分) a) b)去掉语句后,结果不同: 3)(9分) a) b) 拷贝构造函数Point(Point &p)实现点类对象的拷贝。不能去掉该函数。否则会因“浅拷贝”出现异常。 4)(8分) a) b) 可以。 四、编程题(22分) 1. 一个简单分数类的结构如下,请补充相应代码,使之完成程序功能。 int gcd(int m,int n){ //求最大公因数-------------------5分 if(m%n==0) return n; return gcd(n,m%n); } FractionalNumber(int n=0,int d=1){ //完成构造函数的实现---5分 numerator=n; denominator=d; Simplify(); cout<<"Constructor is called."<<endl; } void add(const FractionalNumber& x){ //分数的加法------5分 int a=x.numerator,b=x.denominator; int c=numerator,d=denominator; numerator=c*b+a*d; denominator=b*d; Simplify(); } void main(void){ //设计测试程序,创建类对象,使用output()、add()和运算符‘+’(7分) FractionalNumber f1(10,50),f2(2,10),f3(20,5); f1.Output(); f2.Output();f3.Output(); cout<<"-----------------"<<endl; f1.add(f3); f1.Output(); cout<<"---------------"<<endl; f3=f2+f1; f3.Output(); } 16 第 页
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 教育专区 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服