习题一一、填空(每题2分,共10分)1、从结构化程序设计的观点考虑,任何算法功能都可以通过,和3种流程控制结构来实现。
2、当利用MFC AppWizard[exe]创建一个项目时,它能自动生成一个MFC 。
3、一个视图只能拥有,但一个文档可以拥有。
4、Windows是一个基于事件的消息驱动系统,Windows应用程序是按照非顺序的机制运行。
5、对话框是Windows应用程序中一种常用的资源,其主要功能是。
二、改错题(每题10分,共20分)1、下列程序能找出一维数组中的最大值,及其下标main(){int x[10], *p1, *p2;for(int k=0; k<10; ++k)scanf(“%d”, x+k);for(p1=x, p2=x; p1-x<10; ++p1){if(*p1>*p2) p2 = p1;}printf(“max=%d, index=%d\n”,p1,k );}2、下列程序能为结构赋值struct worker{long int num;char* name;char sex;int age;};worker.num=187045;strcpy(, “ZhangFun”);worker.sex=‘M’;worker.age=18;三、写出下列程序运行后的输出结果(每题10分,共20分)1、#include<iostream.h>class Time{private:int hour, minute, second;public:void setTime(int h, int m, int s){hour=(h>=0&&h<24)? h:0;minute=(m>=0&&m<60)?m:0;second=(s>=0&&s<60)?s:0;}void showTime(){cout<<hour<<‘:’<<minute <<‘:’<<second<<endl;};};void main(){Time t1;t1.setTime(14,52,66);cout<<”The time is :”;}2、#include<iostream.h>class Box{public:Box(int,int);int volume();static int height;int width;int length;};Box::Box(int w,int len){width =w;length=len;}int Box::volume(){return (height*width*length);}int Box::height=10;void main(){Box a(15,20),b(20,30);cout<<a.height<<endl;cout<<b.height<<endl;cout<<Box::height<<endl;cout<<a.volume()<<endl;}四、简答题(每题10分,共20分)1、简述MFC的消息映射机制。
2、什么是对象,什么是类,简述对象与类之间的关系。
五、编程 (每题15分,共30分)1、写一个程序,定义抽象基类Shape,由它派生出3个派生类:circle(圆形)、square(正方形)和Rectangle(矩形)。
用虚函数分别计算几种图形面积,并求它们的和。
2、定义一个类(包括年、月、日),编程序,要求输入年、月、日,程序能计算并输出该日在本年中是第几天。
注意闰年问题。
习题二一、填空(每题2分,共10分)1、C++中的数据结构主要可分为,和三类。
2、面向对象程序设计方法具有4个基本特征、、和。
3、ClassWizard类向导主要用来定制现有的类和建立新的类,如把,把一个控件与类的成员变量对应起来。
4、更新与文档数据有关的所有视图的方法是调用成员函数。
5、Windows消息分为3种类型,和。
二、分析程序并改错(每题10分,共20分)1、输入两个整数a和b,按先小后大的顺序输出结果。
void swap(int* p1, int* p2){int p;p = *p1; *p1 = *p2; *p2 = p;}main(){int a, b;cin>>a; cin>>b;if(a>b) swap(a,b);cout<< “min =” <<a<< “max =”<<b<<“\n”;}2、输出x、y中最大的一个数。
main(){float x,y,z;x=3.5;y=-7.6;z=max(x,y);printf(“%f\n:”, z);}float max(float x,float y){return(z=x>y?x:y);}三、写出下列程序运行后的输出结果(每题10分,共20分)1、#include<iostream.h>class Time{private:int hour, minute, second;public:void setTime(int h, int m, int s){hour=(h>=0&&h<24)? h:0;minute=(m>=0&&m<60)?m:0;second=(s>=0&&s<60)?s:0;}void showTime(){cout<<hour<<‘:’<<minute <<‘:’<<second<<endl;};};void main(){Time t1;t1.setTime(14,52,66);cout<<”The time is :”;}2、#include<iostream.h>class Box{public:Box(int,int);int volume();static int height;int width;int length;};Box::Box(int w,int len){width =w;length=len;}int Box::volume(){return (height*width*length);}int Box::height=10;void main(){Box a(15,20),b(20,30);cout<<a.height<<endl;cout<<b.height<<endl;cout<<Box::height<<endl;cout<<a.volume()<<endl;}四、简答题(每题10分,共20分)1、MFC应用程序中的文档和视图分别完成什么程序功能?他们之间有什么关系?。
2、什么是面向对象的程序设计,并简述对象与类之间的关系。
五、编程 (每题15分,共30分)1、写一个程序,定义抽象基类Shape,由它派生出3个派生类:circle(圆形)、square(正方形)和Rectangle(矩形)。
用虚函数分别计算几种图形面积,并求它们的和。
2、有10个学生,每个学生的数据包括学号、姓名、3门课的成绩,要求输出3门课总平均成绩,以及最高分的学生的数据(包括学号、姓名、3门课成绩、平均分数)。
习题三一、单选题(每题2分,共14分)1、下面哪个说法是不正确的()。
A、API是指应用程序编程接口(Application Programming Interface)B、MFC是指微软基础类库(Microsoft Foundation Class)C、C++语言是一门高级编程语言,能支持面向对象编程D、VC是一门编程语言,能开发Windows程序2、对定义重载函数的下列要求中,错误是()。
A、要求参数的个数不同B、要求参数中至少有一个类型不同C、要求参数个数相同时,参数类型不同D、要求函数的返回值不同3、函数原型语句正确的是()。
A、int Function(void a);B、void Function (int);C、int Function(a);D、void enum(double a,int b=1);4、下面有关析构函数的描述不正确是( )。
A、析构函数可以带参数B、析构函数不能重载C、析构函数无任何返回类型D、析构函数可以为虚函数5、假定A,Z分别为一个类,则( )为类A的拷贝构造函数的原型说明。
A、A(Z & x);B、A(A & x);C、void A(A & x);D、A(A x);6、有关运算符(操作符)重载的描述错误的是()。
A、+ * == new都可以重载B、不能改变操作数的数目C、不可以改变优先级数D、++、--不能被重载7、int Function(){static int a = 6;return a+=6; }void main( ){std::cout <<Function(); std::cout << ","; std::cout <<Function();}输出结果是()A、6,12B、12,18C、12,12D、6,6二、判断题(每题2分,共16分)1、数组可以作为函数参数。
(对)2、派生类对象可以赋值给基类对象。
(对)3、派生类的成员函数可以直接访问基类的所有成员。
(错)4、用new动态申请的内存空间,如果不释放,在程序结束后会发生内存泄漏。
(对)5、基类中被说明为protected和private的成员能被其派生类的成员函数访问(错)6、当将一个函数定义为另一个类A的友元函数时,此函数可以直接访问类A的所有成员。
(对)7、C++是一门完全面向对象的程序设计语言。
(错)8、下面两个语句是等价的:char str[ ]="hello, world"; char str[11]="hello, world"。
(错)三、阅读程序,写结果。
(每题11分,共22分)ing namespace std;class Base {public:void f() { cout << "Base::f() accessed." <<endl; }Base() {cout<<endl<<"Base() accessed"<<endl;p = new char[20];};~Base() {cout<<"~Base() accessed"<<endl;delete [ ] p;}private:char* p;};class Derive : public Base {public:void f() { cout << "Derive::f() accessed." <<endl; } Derive() {cout<<"Derive() accessed"<<endl;q = new char[30];}~ Derive () {cout<<"~Derive() accessed"<<endl;delete [] q;}private:char* q;};void g(){Base* ptr;ptr = new Derive();ptr->f();delete ptr;}int main( ){Base obj;g();return 0;}2.#include <iostream>using namespace std;class ClassA{public:virtual void TestV(){ cout<<"TestV class A."<<endl;}~ClassA(){ cout << "析构class A.\n"; }};class ClassB : public ClassA{public:void TestV(){ cout<<"TestV class B."<<endl; }~ClassB(){ cout << "析构class B.\n"; }};class ClassC : public ClassB{public:void TestV(){ cout<<"TestV class C."<<endl; }~ClassC(){ cout << "析构class C.\n"; }};int main(){ClassA aObject;aObject.TestV();ClassB bObject;bObject.TestV();ClassC cObject;cObject.TestV();int nFlag=2;ClassA* pa;if (nFlag == 1){ pa = new ClassB(); }else if (nFlag == 2){ pa = new ClassC(); }else{ cout << "Exit now.\n";return 1; }pa->TestV();delete pa;return 0;}四、简答题(每题8分,共32分)1、类的构造函数与析构函数各自的特点以及其区别和联系。