资源描述
2012 年春季学期C+程序设计作业 作业提交格式要求:请同学们把答案集中单独写在一个.doc 文档中,作为附件上传(不 要把答案直接填写在题目的空中)。特规定格式如下: 一、 ABCDD AAAAA 二、 题号 1 2 3 4 5 6 7 8 9 10 结果 三、 (1) BeiJing ShangHai (2) x=8,y=7 (3) r=k:i+j=90 以上只是举例,不是正确的输出结果。请按上述规定书写和提交作业结果,不符合以 上规定的作业将作为 0 分处理。 鼓励独立完成作业,严惩抄袭。 第一部分(C+第 1-7、8、9 章) 一、单选题 1、C+是从早期的 C 语言逐渐发展演变来的,与 C 语言相比,它在求解问题方法上最大 的改进是( B ) 。 A 面向过程 B. 面向对象 C. 安全性 D. 复用性 2、下列关于 this 指针的叙述中,正确的是 ( D ) A. 任何与类相关的函数都有 this 指针 B. 类的成员函数都有 this 指针 C. 类的友元函数都有 this 指针 D. 类的非静态成员函数才有 this 指针 3、若有以下类 Z 声明,函数 fStatic 的正确定义是( B )。 class Z int a; public: void fStatic(Z ; A. void Z:fStatic(Z B. void Z:fStatic(Z C. void Z:fStatic(Z D. void Z:fStatic(Z 4、在 C+中,关于下列设置缺省参数值的描述中, ( D)是正确的。 A不允许设置缺省参数值; B只能在函数的定义中指定参数的缺省值; C在指定了缺省值的参数右边,不能出现没有指定缺省值的参数; D设置缺省参数值时,必须全部都设置; 5、关于友元函数的描述中,错误的是( D ) 。 A友元函数说明在类体内 B友元函数不是成员函数 C友元函数必须用对象来引用 D友元函数可以直接访问类中的私有成员 6、对于类,下面哪个是不正确的( D )。 A. 类是对象的设计蓝图 B. 使用关键字 Class 创建类结构 C. 类被声明后,类名成为类型名并且可以用来声明变量 D. 类与结构体相同,它们之间没有区别 7、下列是构造函数的特点,( C )是错误的。 A. 构造函数是一种成员函数,它具有一般成员函数的特点。 B. 构造函数的名称与其类名相同。 C. 构造函数必须指明其类型。 D. 一个类中可以定义一个或多个构造函数。 8、已知:p 是一个指向类 A 数据成员 m 的指针,a 是类 A 的一个对象。在给 m 赋值为 5 的下列表达式中,( C )是正确的。 A. a.p=5 B. a-p=5 C. a.*p=5 D. *a.p=5 9、下面对静态数据成员的描述中,正确的选项是( C )。 A. 静态成员可以在类体内进行初始化 B. 静态数据成员不可以被类的对象调用 C. 静态数据成员可以直接用类名调用 D. 静态数据成员不可以直接用类名调用 10、下列关于 new 运算符的描述中,错误的是(B )。 A. new 运算符组成的表达式的值是地址值 B. 创建对象时不调用构造函数 C.用它创建的对象须用 delete 来删除 D.可用它来创建动态的对象和对象数组 二、判断题 1. 子对象的初始化可以不放在该类的构造函数中。T 2. 如果一个类中没有定义任何构造函数,则该类的对象便无法初始化。F 3. 构造函数和析构函数都不能重载。F 4. 如果一个成员函数只存取一个类的静态数据成员,则可将该成员函数说明为静态 成员函数。T 5. 构造函数和析构函数都是系统自动调用的。F 6. 可以在类的构造函数中对静态数据成员进行初始化。F 7. 友元函数是成员函数,它可以访问类中私有成员。F 8. 对象数组的元素必须是同一个类的对象。T 9. 用 class 定义的类中,默认的访问权限是公有的。F 10. 运算符 new 可以创建变量或对象, 也可以创建数组。 F 三、写出下列程序的输出结果: 1、 #include using namespace std; class Test public: Test() cout”constructor of Test”endl; ; Test a; int main() cout”main() start”endl; Test b; return 0; constructor of Test main()start constructor of Test 2、 #include class Student public: Student(int i=0,double j=0) num=i;score=j; void print() coutnum,scoreendl; friend void fun(Student private: int num; double score; ; void fun(Student rs.score=80; rs.print(); void main() Student s1(1002,50),s2; s1.print(); fun(s2); 1002,50 1100,80 3、 #include class A private: int a; public: A(int aa)a=aa; A()cout”Destructor A!”aendl; ; class B:public A private: int b; public: B(int aa = 0, int bb = 0):A(aa) b = bb; B()cout”Destructor B!”bendl; ; void main() B obj1(5), obj2(6,7); return; ; Destructor B!7 Destructor A!6 Destructor B!0 Destructor A!5 4、 #include class A public: A(int i=0) m=i; cout”Constructor called.”mendl; void Set(int i) m=i; void Print() const coutmendl; A() cout”Destructor called.”mendl; private: int m; ; void main() const int N=5; A my; my=N; my.Print(); Constructor called.0 Constructor called.5 5 Destructor called.5 Destructor called.5 第二部分(C+第 10、11 章) 一、单选题 1、在 C+中,类与类之间的继承关系具有( C )。 A. 自反性 B. 对称性 C. 传递性 D. 反对称性 2、int Func(int,int);不可与下列哪个函数构成重载( A ) 。 A INT FUNC(INT,INT , INT) B DOUBLE FUNC(INT,INT) C DOUBLE FUNC(DOUBLE,DOUBLE) D DOUBLE FUNC(INT,DOUBLE); 3、关于基类和派生类的描述中,错误的是( A ) 。 A 基类和派生类间是包含关系 B派生类中可以定义自己的成员 C基类成员在派生类中的访问权限与继承方式有关 D一个派生类可以从一个基类派生,也可以从多个基类派生。 4、下列对运算符重载的描述中,正确的是( D )。 A. 运算符重载可以改变结合性 B. 运算符重载可以改变优先级 C. 运算符重载可以改变操作数的个数 D. 运算符重载不改变优先级和结合性 5、下列函数中,( D )不能重载。 A. 成员函数 B. 非成员函数 C. 构造函数 D. 析构函数 6、当一个类某个函数被说明为 virtual 时,该函数在该类的所有派生类中( A )。 A. 都是虚函数 B. 只有 被重新说明时才识虚函数 C. 只有被重新说明为 virtual 时才是虚函数 D. 都不是虚函数 7、实现运行时的多态性采用( D ) A. 重载函数 B. 构造函数 C. 析构函数 D. 虚函数 8、关于动态联编的下列描述中,( A )是错误的。 动态联编是在编译时确定操作函数的 动态联编是以虚函数为基础的 动态联编是在继承的前提下的一种多态性 动态联编时要求类的继承是公有的 二、判断题 1C+支持运算符重载,所有运算符都可以重载。 2在公有继承中,基类中的公有成员和私有成员在派生类中都是可见的。 3基类中的保护成员在其派生类中可以访问,而派生类对象不可访问。 4运算符重载不能改变运算符的运算优先级、结合方向。 5派生类的对象不可以给基类对象赋值。 6静态联编是在运行时进行的,动态联编是在编译时进行的。 7. 派生类的构造函数中应包含直接基类的构造函数。 8私有继承方式下,基类中公有成员和保护成员在派生类中都是私有的。 9抽象类不能定义对象,可以定义对象引用和对象指针。 10一个对象在创建时,总是要被初始化的。 三、写出下面程序的输出结果。 1、 #include class BASE public: void get( int i,int j,int k,int l ) a = i; b = j; x = k; y = l; void print() cout a = a t b = b t x = x t y = y endl; int a,b; protected: int x, y; ; class A: public BASE public: void get( int i, int j, int k, int l ) BASE obj3; obj3.get( 50, 60, 70, 80 ); obj3.print(); a = i; b = j; x = k; y = l; u = a + b + obj3.a ; v = y - x + obj3.b; void print() cout a = a t b = b t x = x t y = y endl; cout u = u t v = v endl; private: int u, v ; ; void main() BASE obj1; A obj2; obj1.get( 10, 20, 30, 40 ); obj2.get( 30, 40, 50, 60 ); obj1.print(); obj2.print(); 2、 #include class A public: A(int i,int j) a1=i; a2=j; virtual void Print() couta1+a2endl; protected: int a1,a2; ; class B:public A public: B(int i,int j):A(i,j) void Print() couta1*a2endl; ; void fun(A void main() int m=10,n=2; B b(m,n); fun(b); 3、 #include class B public: B() B(int i) b=i; virtual void virfun() cout”B:virfun() called.n”; private: int b; ; class D:public B public: D() D(int i,int j):B(i) d=j; private: int d; void virfun() coutvirfun(); void main() B *pb=new B; fun(pb); D *pd=new D; fun(pd); 第三部分(VC+ ) 一、单选题 1.下面关于API的描述错误的是( ) A.API是用来控制Windows各个元素的外观和行为的一套预定义的Windows函数。 B .创建应用程序,打开窗口、描绘图形都要调用API函数。 C .Windows操作系统构建在API函数上 D.早期,windows程序员编写程序只能使用API函数 2.下面关于API的描述错误的是( ) AAPI函数构建在Windows操作系统上 B创建应用程序,打开窗口、描绘图形都要调用API函数。 CAPI是用来控制Windows各个元素的外观和行为的一套预定义的Windows函数D Windows应 用程序构建在API函数上。 D.现在,Windows程序员编写程序只能使用API函数。 3.下面描述句柄的语句,错误的是() A 句柄是WINDOWS用来标识被应用程序所建立或使用的对象的唯一整数 B 句柄中存放了Windows对象的数据 C 句柄能区分不同的应用程序对象 D句柄具有多种类型 4.在Windows中,窗口句柄的类型是 () A.HINSTANCE B. HFONT C.HDC D.HWND 5.在Windows中,字体句柄的类型是 () A.HINSTANCE B. HFONT C.HDC D.HWND 6.对消息循环描述错误的是() AGetMessage函数在消息队列非空时,取得消息并返回。 B.若GetMessage取得的是WM_CLOSE消息则返回0,否则返回非0. CGetMessage函数在消息队列为空时,将一直空闲。 DDispatchMessage 将当前消息发送到对应的窗口过程中去。 7.下面四个MFC类中哪一个是管理MFC应用程序的 ( ) A. CWinApp B. CMainFrame C. CDocument D. CView 8.下列类中不属于MFC框架基本类的是 ( ) A. CWinApp B. CFrameWnd C. CView D. CObject 9.关于GDI的描述错误的是( ) A.GDI指图像设备接口。 B.GDI 负责用户和绘图程序之间的信息交换 C.GDI控制在输出设备上显示图形或文字。 D采用了GDI,编程时还需关心显示卡或打印机的驱动程序。 10.关于设备上下文的描述错误的是( ) A.设备上下文是一种包含有关某个设备的绘制属性的Windows数据结构。 B.设备上下文允许在Windows中进行与设备无关的绘制。 C.设备上下文可以用于绘制到屏幕,打印机但不能绘制到图元文件。 D.设备上下文对象封装了绘制线条、形状和文本等的 Windows API. 二、填空题 1.SendMessage 和 PostMessage 都会向窗体发送一个消息,但 SendMessage 而 PostMessage 。 2.使用 MFC AppWizard 产生的应用程序的类型主要包括 、 、 . 3、VC+的工作区窗口包含 3 个视图,分别是 , , 。 4. 封装画刷的 GDI 类是 ,封装画笔的 GDI 类是 ,封装字体的 GDI 类是 ,封 装位图的 GDI 类是 。 5. Windows应用程序的消息来源主要包括 和 6.Windows 应用程序的消息按处理方式主要包括 、 和 。 7. 在 Visual C+中,创建控件有两种方法:一种是 ,另一种是 。 8、按钮控件对应 类,静态文本控件对应 类,单选和复选按钮对应 类。 9、在 MFC 的众多类中, 是所有 MFC 类的原始基类。 10、消息处理函数 OnLButtonDown 响应 消息。 三、简答题 1.什么是句柄?它在 Windows 程序中的作用是什么? 2. CPaintDC, CClientDC,CWindowDC 的区别?
展开阅读全文