vc 复习题答案
- 格式:doc
- 大小:95.00 KB
- 文档页数:10
武汉大学2021—2021学年上学期面向对象程序设计试卷〔B〕学号:姓名:院系:专业:得分:一、名词解释〔每题5分,共计25分〕〔1〕构造函数:是一种特殊成员函数,它提供了对成员变量进展初始化方法,使得在声明对象时能自动初始化对象〔+2〕;构造函数名称与类名一样〔+1〕;构造函数不能指定任何返回值类型〔+1〕;构造函数可以重载〔+1〕。
〔2〕多态:多态性是面向对象编程一个重要特征〔+1〕,主要表现在函数调用时实现“一种接口,多种方法〞〔+2〕。
多态又分为编译时多态和运行时多态两种〔+2〕。
〔3〕抽象类:抽象类是指这样类,它一些行为〔成员函数〕不给出具体定义〔+2〕,抽象类至少带有一个纯虚函数〔+1〕,抽象类不能用来申明对象,只能作为基类使用,因此它又称为抽象基类〔+2〕。
〔4〕文档模板:在文档/视图构造应用程序中,数据以文档类对象形式存在〔+1〕。
文档对象通过视图对象显示出来,而视图大对象又是框架窗口一个子窗口,并且涉及文档操作菜单和工具栏等资源也是建立在框架窗口上〔+2〕。
这样文档、视图、框架和所涉及资源形成了一种固定关系,这种固定关系就成为文档模板〔+1〕。
也就是说,文档模板描述了对应于每一种类型文档视图和窗口类型〔+1〕。
〔5〕序列化:对象保存和恢复过程称为序列化〔+2〕。
即对象具有保存和加载其状态能力〔+1〕,对象能够在程序运行完毕前将对象当前状态写入永久存储体中,以后在程序运行时通过数据读取而恢复对象状态〔+2〕。
二、简答题〔每题10分,共计40分〕1.简述文档、视图和应用程序框架之间如何相互作用?答:文档、视图和应用程序包含了一系列复杂相互作用过程〔+1〕,稳当和视图交互式通过类共有数据成员和成员函数实现〔+1〕。
一个视图对象只与一个文档对象关联,一个文档可以与多个视图关联,但一个文档对象只反映当前视图变化〔+2〕。
视图中用GetDocument()获取文档对象进展操作〔+1〕;在文档中利用Invalidate(), UpdateAllViews()或SendMessage(WM_PAINT,a,b)调用视图中OnDraw()对文档数据进展绘图〔+3〕;在程序任何地方可以调用AfxGetApp()得到程序框架对象指针,利用框架对象指针可进一步利用GetActiveView()获取程序视图对象,并对其进展操作〔+2〕。
复习题一、单选题1、以下选项中不能用做用户自定义标识符的是()。
CA. length_B. _lengthC. length.dD. For2、以下选项中能用做用户自定义标识符的是()。
CA. voidB. if-elseC. NameD. a+bc3、下列字符串中,正确的C++标识符是()。
DA. too-BB. 2bC. newD. _2564、以下选项中不能用做变量名的是()。
AA. forB. _lengthC. lengthD. Else5、下列不正确的int型常数是()。
CA. 32450B. 0C. 0387D. 0xA1L6、以下选项中不合法的常量是()。
BA. ‘a’B. 058C. “a\0b”D. 12L7、下列的常量定义中,错误的是()。
AA. const double dl;B. const char c=67;C. const int i=250;D. const long ld=0x326;8、整型变量a、b的值分别为3和4,执行语句“a=a && b++ ;”后,a和b的值分别是( )。
BA. 3 4B. 1 5C. 1 4D. 0 59、设有变量说明: int a=3,b=4,c=5; 下列表达式中,值为0的表达式是()。
DA. ‘a’&&‘b’B. a<=bC. a | | b+c&&b–cD. !(c<b | | a<b)10、下列哪个表达式结果不是逻辑类型(只能取0或1)()。
AA. x<=y?x&y:x|yB. a>b&&cC. a>b||c<dD. ‘a’+’b’>’z’11、设有变量说明:“short int a=0,b=0;”,则表达式sizeof('a'+'b')的值为()。
CA. 1B. 2C. 4D. 812、表示关系x<=y<=z的C++语言表达式为()。
VC++复习题(选择题)Visual C++程序设计复习题(选择题)注:选项中的蓝色文字为正确答案第一章 C/C++概述1、在Visual C++中,项目工作区文件的扩展名为______。
A. .obj B .dsp C. .dsw D. .cpp2、在下面关王C语言与C++关系的说法中,不正确的是A. C语言是C++的子集B. C++对C语言进行了改进C. C++和C语言都是面向对象的D. C++继承了C语言的众多优点3、通过cout输出时,设置数据输出的宽度使用的是______。
A. setbase(int n)B. setw( int n)C. setfill(int n)D. setprecision(int n)4、C/C++规定,在一个源程序中,main()函数的位置。
A. 必须在最开始B. 必须在最后C. 可以任意D. 必须在系统调用的库函数后面第二章基本数据类型、运算符和表达式1、以下选项不是C/C++双精度常量的是____。
A. 2.7B. 1.0E+3C. 3.5E-3.0D. 3.4e-52、以下不正确的变量定义方法是______。
A. int a, &b=a;B. float a, *b=&aC. int a(4), b(0);D. int a=b=5;3、运算符优先级按由高到低的顺序排列正确的是A. *=、&&、!=、%B. *=、%、&&、!=C. %、!=、&&、*=D. &&、!=、%、=4、已知x、y为整型,z为实型,ch为字符型,下列表达式中合法的是_______。
A. z=(y+x)++B. x+y=z:C. y=ch+ xD. y=z%x5、若有int x=13, y=5,则表达式: x++, y+=2, x / y的值为______。
A. 1B. 2C. 0D. 136、以下______是C/C++合法的标识符。
《VC程序设计》试卷1一、单项选择题(每小题1分,共20分)1、假定MyClass为一个类,则执行“” MyClass a[3],*p[2];”语句时,自动调用该类构造函数的次数为( B )A、2B、3C、4D、52、对于类中定义的成员,其隐含访问权限为( B )A、protectedB、privateC、publicD、static3、一个类的友元函数或友元类能够通过成员操作符访问该类的( B )A、私有成员B、所有成员C、公用成员D、保护成员4、下面说法正确的是(A )A、构造函数可以重载,析构函数不能重载。
B、构造函数不能重载,析构函数可以重载。
C、构造函数可以重载,析构函数也可以重载。
D、构造函数和析构函数都不可以重载。
5、下列语句的运行结果为( D )#include <iostream.h>srtuct COMPLEX{int x;int y;} cNum[2]={1,3,2,7};void main(){cout<< cNum[0].y*cNum[1] x<<endl;}A、3B、2C、21D、66、类AB的缺省构造函数和析构函数是( A )A、AB( )和~AB( )B、AB(int)和~AB( )C、AB( )和~AB(delete )D、AB( )和int~AB( )7、在C++中,若对函数未加说明,则函数的隐含类型是( A )A、intB、doubleC、voidD、char8、已知类A是类B的友元,类B是类C的友元,则( D )A、类A一定是类C的友元B、类C一定是类A的友元C、类C的成员函数可以访问类B的对象的任何成员D、类A的成员函数可以访问类B的对象的任何成员9、下列说法中正确的是( B )A、类定义中只能说明函数成员的函数头,不能定义函数体B、类中的函数成员可以在类体中定义,也可以在类体之外定义C、类中的函数成员在类体之外定义时必须要与类声明在同一文件中D、在类体之外定义的函数成员不能操作该类的私有数据成员10、以下不属于成员函数的是( B )A、静态成员函数B、友元函数C、构造函数D、析构函数11、对于消息队列的描述正确的是( D )A、在Windows中只有一个消息系统,即系统消息队列。
《VC程序设计》试卷1一、单项选择题(每小题1分,共20分)1、假定MyClass为一个类,则执行“” MyClass a[3],*p[2];”语句时,自动调用该类构造函数的次数为()A、2B、3C、4D、52、对于类中定义的成员,其隐含访问权限为()A、protectedB、privateC、publicD、static3、一个类的友元函数或友元类能够通过成员操作符访问该类的()A、私有成员B、所有成员C、公用成员D、保护成员4、下面说法正确的是()A、构造函数可以重载,析构函数不能重载。
B、构造函数不能重载,析构函数可以重载。
C、构造函数可以重载,析构函数也可以重载。
D、构造函数和析构函数都不可以重载。
5、下列语句的运行结果为()#include <iostream.h>srtuct COMPLEX{int x;int y;} cNum[2]={1,3,2,7};void main(){cout<< cNum[0].y*cNum[1] x<<endl;}A、3B、2C、21D、66、类AB的缺省构造函数和析构函数是()A、AB( )和~AB( )B、AB(int)和~AB( )C、AB( )和~AB(delete )D、AB( )和int~AB( )7、在C++中,若对函数未加说明,则函数的隐含类型是()A、intB、doubleC、voidD、char8、已知类A是类B的友元,类B是类C的友元,则( )A、类A一定是类C的友元B、类C一定是类A的友元C、类C的成员函数可以访问类B的对象的任何成员D、类A的成员函数可以访问类B的对象的任何成员9、下列说法中正确的是( )A、类定义中只能说明函数成员的函数头,不能定义函数体B、类中的函数成员可以在类体中定义,也可以在类体之外定义C、类中的函数成员在类体之外定义时必须要与类声明在同一文件中D、在类体之外定义的函数成员不能操作该类的私有数据成员10、以下不属于成员函数的是( )A、静态成员函数B、友元函数C、构造函数D、析构函数11、对于消息队列的描述正确的是()A、在Windows中只有一个消息系统,即系统消息队列。
使用前注意保密江苏科技大学非计算机专业学生Visual C++ 程序设计语言期末考试试卷代号:VC09说明:1、本试卷为笔试题,含选择、填空、及编程三部分。
2、本试卷满分为100分,考试时间为120分钟。
3、所有答案必须写在答题纸上,否则不计成绩。
3、填写答案时,注意题号;特别是填空题,做到答案、填空号与试题对应。
4、答题纸上必须写明学号(含班级号)、姓名。
1、设a,b为整型变量,且均不为0,以下关系表达式中恒成立的是。
:A、 a*b/a*b==1B、 a/b*b/a==1C、 a/b*b==aD、 a/b*b+a%b==a2、在C++中,判断char型变量ch是否为大写字母的正确表达式是。
:A、’A’<=ch<=’Z’B、 (ch>=’A’)&(ch<=’Z’)C、 (ch>=’A’)&&(ch<=’Z’)D、 (‘A’<=ch)AND(‘z’>=ch)3、设有说明语句:char str[]="abcde"; int a[5];下列选项中,存在语法错误的是:A.cout<<str; B.cin>>str; C.cin>>a; D.cin>>a[0];4、下列二维数组的定义中,不正确的是:A、 int i[][4]={{1,2,3},4,5};B、 int i[4][]={1,2,3,4,5,6};C、 int i[][4]={1,2};D、int i[4][4]={{1},{2},{3},{4}};5、设有宏定义如下,则变量x的值为:# define A 4# define B A+6# define C(x) x*B/2int x=C(2+8);A、 50B、43C、42D、376、设有说明语句:void fun(int *t1,int &t2); int a=5,b=10;以下对函数fun的调用语句中,正确的是:A. f(a,b); B.f(&x,&y); C.f(a,&b); D.f(&a,b);7、设有说明: int a=5,b=5,c;执行语句:c= a>b && (c=b)&& (b*=a++); 则a、b、c的值分别为:A.6,25, 0 B.5,5,0 C.5, 5,5 D.6,25,58、关于类的访问特性的说明,下列说法正确的是()A 在同一个类中,说明访问特性的关键字可以多次使用B 成员数据必须说明为私有的C 必须在每一个成员前单独标明访问特性D 必须首先说明私有特性的成员9、用友元函数进行单目运算符重载时,该友元函数的参数表中参数的个数为:A.0 B.1 C.2 D.1或 210、以下有关this指针的叙述中,不正确的是:A.类的非静态成员函数中存在一个this指针B.this指针缺省的初值为0C.类的非静态成员函数中可直接使用this指针D.this指针指向当前对象1、设有int a,b;执行语句:b=(a=2+3,a*4),a+5;后,a+b的值为 (1) 。
《VC程序设计》试卷1一、单项选择题(每小题1分,共20分)1、假定MyClass为一个类,则执行“” MyClass a[3],*p[2];”语句时,自动调用该类构造函数的次数为(B)A、2B、3C、4D、52、对于类中定义的成员,其隐含访问权限为(B)A、protectedB、privateC、publicD、static3、一个类的友元函数或友元类能够通过成员操作符访问该类的(B)A、私有成员B、所有成员C、公用成员D、保护成员4、下面说法正确的是(A)A、构造函数可以重载,析构函数不能重载。
B、构造函数不能重载,析构函数可以重载。
C、构造函数可以重载,析构函数也可以重载。
D、构造函数和析构函数都不可以重载。
5、下列语句的运行结果为(D)#include <iostream.h>srtuct COMPLEX{int x;int y;} cNum[2]={1,3,2,7};void main(){cout<< cNum[0].y*cNum[1] x<<endl;}A、3B、2C、21D、66、类AB的造缺省构函数和析构函数是( A )A、AB( )和~AB( )B、AB(int)和~AB( )C、AB( )和~AB(delete )D、AB( )和int~AB( )7、在C++中,若对函数未加说明,则函数的隐含类型是(A)A、intB、doubleC、voidD、char8、已知类A是类B的友元,类B是类C的友元,则( D )A、类A一定是类C的友元B、类C一定是类A的友元C、类C的成员函数可以访问类B的对象的任何成员D、类A的成员函数可以访问类B的对象的任何成员9、下列说法中正确的是( B )A、类定义中只能说明函数成员的函数头,不能定义函数体B、类中的函数成员可以在类体中定义,也可以在类体之外定义C、类中的函数成员在类体之外定义时必须要与类声明在同一文件中D、在类体之外定义的函数成员不能操作该类的私有数据成员10、以下不属于成员函数的是( B)A、静态成员函数B、友元函数C、构造函数D、析构函数11、对于消息队列的描述正确的是(D)A、在Windows中只有一个消息系统,即系统消息队列。
VC习题参考答案1.7指针和引用55.已知intd=5,某pd=&d,b=3;求下列表达式的值。
A.某pd某bB.++某pd-bC.某pd++D.++(某pd)答:15,3,5,656.选择填充。
(1)选择正确的说明语句为()。
A.intN['b'];B.intN[4,9];C.intN[][];D.int某N[10];答:B(2)若有定义:inta=100,某p=&a;则某p的值是()。
A.变量p的地址B.变量a的地址值C.变量a的值D.无意义答:C.(3)下述程序的输出结果是()。
#includevoidmain(){inta[5]={2,4,6,8,10};int某p=a,某某q=&p;cout<A.4,4B.2,2C.4,2D.4,5答:B(4)下述程序片段的输出是()。
inta[3][4]={{1,2,3,4},{5,6,7,8}};int某,某p=a[0];某=(某p)某(某p+2)某(某p+4);cout<A.15B.14C.16D.13答:A(5)若有以下定义,则下列对数组引用正确的是()。
int(某q)[3]=newint[2][3];A.q[2][3]B.某qC.某(某q+2)D.某(某(q+2)+3)答:C(6)若要用如下程序片段使指针变量p指向一个存储动态分配的存储单元:float某p;p=(float某)newfloat;则空白处应填入:A.float某B.某floatC省略;D.(float)(7)下列表示引用的方法中,()是正确的。
已知:intm=10;A.int&某=m;B.int&y=10;C.int&z;D.float&t=&m;答:A57.分析下列程序的结果。
#includeint&fun(intn,int[]){int&m=[n];returnm;}voidmain(){int[]={15,4,3,2,1,0};fun(3,)=10;cout<答:1058.用指针作为函数的参数,设计一个实现两个参数交换的函数。
第一套一、改错题1.题目要求下列给定程序中函数fun的功能是:计算函数F(x,y,z)=(x+y)/(x-y)+(z+y)/(z-y)的值。
其中x和y 的值不相等,z和y的值不相等。
例如,当x的值为9,y的值为11,z的值为15时,函数值为-3.50。
请改正程序中的错误,使它能得出正确的结果。
注意:部分源程序在文件MODI1.C中,不得增行或删行,也不得更改程序的结构。
#include <stdio.h>#include <math.h>#include <stdlib.h>/************found************/#define FU(m,n) ((m/n))float fun(float a,float b,float c){ float value;value=FU(a+b,a-b)+FU(c+b,c-b);/************found************/Return(Value);}main(){ float x,y,z,sum;printf("Input x y z: ");scanf("%f%f%f",&x,&y,&z);printf("x=%f,y=%f,z=%f\n",x,y,z);if (x==y||y==z){printf("Data error!\n");exit(0);}sum=fun(x,y,z);printf("The result is : %5.2f\n",sum);}2.算法分析①#define FU(m,n) ((m/n))错误这样定义FU(m,n)造成语句value=FU(a+b,a-b)+FU(c+b,c-b)执行为value=(a+b/a-b)+(c+b/c-b),所以应该将语句#define FU(m,n) ((m/n))改为#define FU(m,n) (m)/(n) ②语句Return(Value);错误 C语言中大小写字母有不同的含义,此处希望执行返回value的值的操作,所以应该改为return(value);二、填空题1.题目要求下列给定程序中,函数fun的功能是:有N×N矩阵,以主对角线为对称线,对称元素相加并将结果存放在左下三角元素中,右上三角元素置为0。
参考答案作业1 VC++基本程序结构一、填空题1.(1)函数(2)main()2.(1)函数体(2)分号3.(1)两或二或2 (2)大小写4.(1)cin (2)cout5.(1)//6.(1)/* (2)*/7.(1)#include8.(1)#9.(1).h (2).cpp10.(1)用户(或编程者)二、单选题1.A 2.D 3.A 4.A 5.C 6.B 7.B 8.C 9.D作业2 数据类型、常量、变量、运算符一、单选题1.D 2.B 3.B 4.D 5.D 6.D 7.C 8.B 9.B 10.C 11.C 12.B二、阅读程序题1.10 12 19 412.I say:”C++” He says:”C++ is very interstiing!”三、程序设计题1.#include <iostream.h>void main(){char c1='C', c2='h', c3='i', c4='n', c5='a';c1+=4;c2+=4;c3+=4;c4+=4;c5+=4;cout<<"password is:"<<c1<<c2<<c3<<c4<<c5<<endl;}作业3 表达式一、单选题1.B 2.D 3.A 4.C 5.C 6.A 7.B 8.C二、填空题1. (1)352.(1)253.(1)6 (2)304.(1)4 (2)115.(1)(x+y)/(2*x*y)6.(1)1/(a*x*x+b*y*y)7.(1)208.(1)1 (2)39.(1)3 (2)3.210.(1)6 (2)6011.(1)x12.(1)true(或1)13.(1)false(或0)14.(1)x15.(1)!x16.(1)false(或0)17.(1)true(或1)三、写出下面各逻辑表达式的值1.(1)-72.5 (2)11.5 (3)23 (4)9 (5)6 (6)6 (7)4 2.(1)24 (2)9 (3)60 (4)0 (5)0 (6)03.(1)0 (2)1 (3)1 (4)0 (5)1作业4 简单的输入输出一、阅读程序题1.ThisisaC++program.2.a+b=333.a=3 b=2 x=1.8 y=7.0 ch1=a ch2=’ ’ ch3=b4.a=19 b=19 c=35 d=235.19 13 43二、程序改错1.1)#define pi 3.14162)去掉此句r=2.8;3)cout<<c2<<s2;三、程序设计1.# include <iostream.h>main(){ cout<<" ***************"<<'\n';cout<<" Hello!"<<'\n';cout<<" ***************"<<'\n';}2.# include <iostream.h>main(){ int s1,s2,s3,sum;cout<<"请输入三个学生的成绩:";cin>>s1>>s2>>s3;sum=s1+s2+s3;cout<<"sum="<<sum<<'\n';}3.# include <iostream.h>void main(){cout<<"please input a small character :";char a;cin>>a;char b=a-32;cout<<b<<endl;}4.#include <iostream.h>void main (){float c,f;int a;cout<<"请输入一个华氏温度:";cin>>f;c=(5.0/9.0)*(f-32); //注意5和9要用实型表示,否则5/9值为0 a=c*100+0.5; c= a/100.0; //保留保留两位小数,对第三小数位四舍五入cout<<"摄氏温度为:"<<c <<endl;}作业5 选择结构语句一、填空题1.(1)顺序结构(2)循环结构2.(1)常量3.(1)if4.(1)switch5.(1)不停止二、阅读程序题1.132.121a,b,c=7,12,303.11 14 switch end.4.10 6 4三、程序设计1.//方法一:#include <iostream.h>void main ( ){int a,b,c;cout<<"please enter three integer numbers:";cin>>a>>b>>c;if(a<b)if(b<c)cout<<"max="<<c;elsecout<<"max="<<b;else if (a<c)cout<<"max="<<c;elsecout<<"max="<<a;cout<<endl;}//方法二:#include <iostream.h>void main ( ){int a,b,c,temp,max ;cout<<"please enter three integer numbers:";cin>>a>>b>>c;temp=(a>b)?a:b; //将a和b中的大者存入temp中max=(temp>c)?temp:c; // 将a和b中的大者与c比较,最大者存入max cout<<"max="<<max<<endl;}2.#include <iostream.h>void main (){float score;char grade;cout<<"please enter score of student:";cin>>score;while (score>100||score<0){cout<<"data error,enter data again.";cin>>score;}switch(int(score/10)){case 10:case 9: grade='A';break;case 8: grade='B';break;case 7: grade='C';break;case 6: grade='D';break;default:grade='E';}cout<<"score is "<<score<<", grade is "<<grade<<endl;}3.#include <iostream.h>#include <stdio.h>void main (){char c;int letters=0,space=0,digit=0,other=0;cout<<"enter one line::"<<endl;while((c=getchar())!='\n'){if (c>='a' && c<='z'||c>='A' && c<='Z')letters++;else if (c==' ')space++;else if (c>='0' && c<='9')digit++;elseother++;}cout<<"letter:"<<letters<<", space:"<<space<<", digit:"<<digit<<", other:"<<other<<endl;}4.#include <iostream.h>void main ( ){int x,y;cout<<"enter x:";cin>>x;if (x<1){y=x;cout<<"x="<<x<<", y=x="<<y;}else if (x<10) // 1≤x<10{y=2*x-1;cout<<"x="<<x<<", y=2*x-1="<<y;}else // x≥10{y=3*x-11;cout<<"x="<<x<<", y=3*x-11="<<y;}cout<<endl;}5. #include <iostream.h>void main (){int t,a,b,c,d;cout<<"enter four numbers:";cin>>a>>b>>c>>d;cout<<"a="<<a<<", b="<<b<<", c="<<c<<",d="<<d<<endl;if (a>b){t=a;a=b;b=t;}if (a>c){t=a; a=c; c=t;}if (a>d){t=a; a=d; d=t;}if (b>c){t=b; b=c; c=t;}if (b>d){t=b; b=d; d=t;}if (c>d){t=c; c=d; d=t;}cout<<"the sorted sequence:"<<endl;cout<<a<<", "<<b<<", "<<c<<", "<<d<<endl;}作业6 循环结构语句一、单选题1.C 2.C 3.A 4.C 5.B 6.D二、写出程序的结果1.3332.s=60三、程序填空题1.(1)f1+f2 (2)i%5==0 (3)f2.(1)b<=0 (2)a=b (3)b=r四、程序设计1.#include<iostream.h>void main(){int i=0; double s=0;while(s<5) s+=double(1)/++i;cout<<"n="<<i<<endl;}//若采用for循环编写程序,则如下所示:#include<iostream.h>void main(){int i; double s=0;for(i=1; s<5; i++) s+=1.0/i;cout<<"n="<<i-1<<endl;//注意:此i-1的值为所求的n值}2. #include <iostream.h>void main (){int i,j,k,n;cout<<"narcissus numbers are:"<<endl;for (n=100;n<1000;n++){i=n/100;j=n/10-i*10;k=n%10;if (n == i*i*i + j*j*j + k*k*k)cout<<n<<" ";}cout<<endl;}3. #include <iostream.h>void main(){int day,x1,x2;day=9;x2=1;while(day>0){x1=(x2+1)*2; // 第1天的桃子数是第2天桃子数加1后的2倍 x2=x1;day--;}cout<<"total="<<x1<<endl; //1534}4.#include <iostream.h>void main(){int i,k;for (i=0;i<=3;i++) // 输出上面4行*号{for (k=0;k<=2*i;k++)cout<<"*"; // 输出*号cout<<endl; //输出完一行*号后换行}for (i=0;i<=2;i++) // 输出下面3行*号{ for (k=0;k<=4-2*i;k++)cout<<"*"; // 输出*号cout<<endl; // 输出完一行*号后换行}}5.#include <iostream.h>void main(){int i,t,n=20;double a=2,b=1,s=0;for (i=1;i<=n;i++){s=s+a/b;t=a;a=a+b; // 将前一项分子与分母之和作为下一项的分子 b=t; // 将前一项的分子作为下一项的分母}cout<<"sum="<<s<<endl;}作业7 控制执行顺序的语句一、填空题1.(1)break2.(1)continue3.(1)return4.(1)主(或main)5.(1)n/2+1二、写出程序的运行结果1.32.1 5 7 11 13 373.a=2b=8三、程序填空题1.(1)j<=temp (2)break (3)j>temp四、程序设计1.//方法一:#include <iostream.h>void main(){int m,s,i;for (m=2;m<1000;m++){s=0;for (i=1;i<m;i++)if ((m%i)==0) s=s+i;if(s==m){cout<<m<<" is a完数"<<endl;cout<<"its factors are:";for (i=1;i<m;i++)if (m%i==0) cout<<i<<" ";cout<<endl;}}}//方法二:#include <iostream.h>void main(){const int m=1000; // 定义寻找范围int k1,k2,k3,k4,k5,k6,k7,k8,k9,k10;int i,a,n,s;for (a=2;a<=m;a++) // a是2~1000之间的整数,检查它是否为完数{n=0; // n用来累计a的因子的个数s=a; // s用来存放尚未求出的因子之和,开始时等于afor (i=1;i<a;i++) // 检查i是否为a的因子if (a%i==0) // 如果i是a的因子{n++; // n加1,表示新找到一个因子s=s-i; // s减去已找到的因子,s的新值是尚未求出的因子之和switch(n) // 将找到的因子赋给k1,...,k10{case 1:k1=i; break; // 找出的笫1个因子赋给k1case 2:k2=i; break; // 找出的笫2个因子赋给k2case 3:k3=i; break; // 找出的笫3个因子赋给k3case 4:k4=i; break; // 找出的笫4个因子赋给k4case 5:k5=i; break; // 找出的笫5个因子赋给k5case 6:k6=i; break; // 找出的笫6个因子赋给k6case 7:k7=i; break; // 找出的笫7个因子赋给k7case 8:k8=i; break; // 找出的笫8个因子赋给k8case 9:k9=i; break; // 找出的笫9个因子赋给k9case 10:k10=i; break; // 找出的笫10个因子赋给k10}}if (s==0) // s=0表示全部因子都已找到了{cout<<a<<" is a 完数"<<endl;cout<<"its factors are:";if (n>1) cout<<k1<<","<<k2; // n>1表示a至少有2个因子if (n>2) cout<<","<<k3; // n>2表示至少有3个因子,故应再输出一个因子if (n>3) cout<<","<<k4; // n>3表示至少有4个因子,故应再输出一个因子if (n>4) cout<<","<<k5; // 以下类似if (n>5) cout<<","<<k6;if (n>6) cout<<","<<k7;if (n>7) cout<<","<<k8;if (n>8) cout<<","<<k9;if (n>9) cout<<","<<k10;cout<<endl<<endl;}}}//方法三:#include <iostream.h>void main(){int k[11];int i,a,n,s;for (a=2;a<=1000;a++){n=0;s=a;for (i=1;i<a;i++)if ((a%i)==0){n++;s=s-i;k[n]=i; // 将找到的因子赋给k[1]┅k[10]}if (s==0){cout<<a<<" is a 完数"<<endl;cout<<"its factors are:";for (i=1;i<n;i++)cout<<k[i]<<" ";cout<<k[n]<<endl;}}}2.#include <iostream.h>void main(void ){cout << "The primes in [3,20] are:"<<endl;for(int i=3;i<=20;i++) //从3到20的循环体{ int p=1; //1=素数;0=非素数for(int j=2; j<=i/2; j++) //从1到i/2的循环体{if(i%j==0) // i被j整除{ p=0; //是非素数break; } //中止对j的循环}if(p==0)continue; //若是非素数转向到i++cout << i << " , "; //输出素数i }}3.#include <iostream.h>void main(void){ for( int n=100; n<=200; n++){ if (n%3 == 0)continue; //break;cout<<n<<" ";}}作业8 函数的定义和调用一、单选题1.B2.B3.B4.A5.A6.A7.A二、填空题1.(1)float fun(int,int,int=5,int=5)2.(1)值传递(2)地址传递(3)引用传递3.(1)94.(1)245.(1)150*50=0(2)值传递三、程序设计题1.#include <iostream.h>#include <stdlib.h>int jc(int n){int j=1,i;if(n<0){cout<<"n应为正数!"<<'\n';exit(1);}if(n==0)return 1;for(i=2;i<=n;i++)j*=i;return j;}int zh(int m,int r){int c;if(m<=r){cout<<"m必须大于r!"<<'\n';exit(1);}c=jc(m)/(jc(r)*jc(m-r));return c;}void main(void){cout<<"C(4,2)="<<zh(4,2)<<'\n';cout<<"C(6,4)="<<zh(6,4)<<'\n';cout<<"C(8,7)="<<zh(8,7)<<'\n';}2.作业9 作用域与存储类一、单选题1.A2.C二、填空题1.(1)15,15,5 (2)5,15,152.(1)3 43.(1)11 (2)184.(1)95.12 25 25作业10 函数的重载、编译预处理一、单选题1.C2.A3.C4.B5.B二、填空题1.(1)宏定义(2)文件包含2.(1)#define area(a) ((a)*(a))3.(1)F=34.(1)505.(1)3行(2)3行函数的调用产生了二义性,或1行和2行定义的函数不能构成重载函数6.(1)3行(2)3行函数的调用产生了二义性,或1行和2行定义的函数不能构成重载函数三、改错题1.#define MAX 102.四、程序设计题1.作业11 一维数组的定义及应用一、单选题1.D2.D3.C4.D二、填空题1.(1)p=0 (2)p=i2.(1) int min=f[i] (2)min=f[j](3)f[i]> min3.(1)j+=2 (2)prime[j]&&prime[j]%prime[i]==0 或prime[j]%prime[i]==0(3) j=0(4) j%8==0四、程序设计题1.#include <iostream.h>void main(){int a[100],b[100],c[100];int max2,max1,j=0,k=0,t;float avg,s=0;cout<<"请输入一组整数(0结束):";int i=0;do{cin>>a[i];s+=a[i];i++;}while(a[i-1]);t=i-1;cout<<"共输入"<<t<<"个整数!"<<endl;for(i=0;i<=t;i++)if(a[i]>0)j++;else if(a[i]<0) k++;avg=s/t;cout<<"这组数的平均值为"<<avg<<endl;cout<<"其中输入的正整数个数为:"<<j<<endl;cout<<"其中输入的负整数个数为:"<<k<<endl;}作业12 二维数组的定义及应用一、单选题1.D2.B3.D4.B5.D6.D二、填空题1.(1)n* i +j+12.(1)357三、程序填空题1.(1)j=i+1 (2)a[i][j]!=a[j][i]四、改错题1.(1)void find(int a[][4],int n) (2)int max=a[i][0];(3)if(a[i][j]>max) (4)break;五、程序设计题1.作业13 字符数组的定义及应用一、单选题1.C2.C3.C4.D5.D6.A7.D二、填空题1.(1)d2.(1)45493.(1)a (2)d三、程序填空题1.(1)!(s[i]>='0'&&s[i]<='9') (2)s[j]='\0'四、程序设计题1.#include<iostream.h>int fun(char str1[],char str2[]){int i,j,k;for(i=0;str1[i];i++)for(j=i,k=0;str2[k]==str1[j];k++,j++)if(str2[k+1]=='\0')return i+1;return 0;}void main(){int m=0;char s1[100],s2[100];cin.getline(s1,100);cin.getline(s2,100);if(fun(s1,s2))cout<<s2<<"是"<<s1<<"的子串,位置在:"<<fun(s1,s2)<<endl;else cout<<s2<<"不是"<<s1<<"的子串。
(09717)《面向对象程序设计C++》复习题一、单选题1.对类成员访问权限的控制,是通过设置成员的访问控制属性实现的,下列不是访问控制属性的是(D )A. 公有类型B. 私有类型C. 保护类型D. 友元类型2.下列关于多态性的描述,错误的是( C )A. C++语言的多态性分为编译时的多态性和运行时的多态性B. 编译时的多态性可通过函数重载实现C. 运行时的多态性可通过模板和虚函数实现D. 实现运行时多态性的机制称为动态绑定3.在C++语言中,数据封装要解决的问题是( D )A. 数据的规范化B. 便于数据转换C. 避免数据丢失D. 防止不同模块之间数据的非法访问4.使用private修饰的成员变量,以下说法正确的是(A )A. 只能由本类中的函数使用,不能被外面的程序所访问。
B.可以由本类中的函数使用,也可以被外面的程序所访问。
C. 只能由本类和派生类中的函数使用。
D. 可以在主函数中使用。
5.对类的构造函数和析构函数描述正确的是(A )A.构造函数可以重载,析构函数不能重载B.构造函数不能重载,析构函数可以重载C.构造函数可以重载,析构函数也可以重载D.构造函数不能重载,析构函数也不能重载6.下面对静态数据成员的描述中,正确的是(A )A. 静态数据成员是类的所有对象共享的数据B.类的每个对象都有自己的静态数据成员C.类的不同对象有不同的静态数据成员值D.静态数据成员不能通过类的对象调用7.在VC++语言类体系中,不能被派生类继承的有(B )A. 转换函数B.构造函数C.虚函数D.静态成员函数8.下面关于句柄正确的说法是(A )A. 句柄是一个标识Windows资源和设备等对象的变量。
B. 句柄是用户程序自定义的数据类型。
C. 用户程序使用句柄时不需要定义。
D. 句柄仅仅是一个抽象的概念,程序中不能使用句柄。
9.下面关于动态链接库正确的说法是(B )A. 动态链接库提供的函数,在编译阶段能够连接到应用程序中。
VC++复习newVC++复习题一、单项选择题1.以下四个特性中哪一个不属于面向对象的三大特性 (C )A. 封装性B. 多态性C. 抽象性D. 继承性2. 下面四个MFC类中哪一个是管理MFC应用程序的 (A )A. CWinAppB. CMainFrameC. CDocumentD. CView3. 下列类中哪一个不是GDI对象类 (B)A. CPenB. CWndC.CBrushD. CRgn4. 下列关键字中哪一个不是用于类的访问控制的 (B)A. publicB. friendC. privateD. protected5. 下列类中不属于MFC框架基本类的是 ( D)A. CWinAppB. CFrameWndC. CViewD. CObject6. 下列选项中哪一个不是命令消息的产生途径 (C)A. 选择菜单项B. 单击工具栏C. 点击对话框的按钮D. 程序产生命令7. 以下四个关于类的访问控制的描述哪一个是错误的 (D )A.子类不能访问其父类的私有数据成员和成员函数B.子类的对象不能访问其父类的保护数据成员或者成员函数C.类的对象不能访问类的保护数据成员或者成员函数D.类的成员函数不能访问类中的私有数据8. 下面有关重载函数的说法中正确的是 (C )A.重载函数必须有不同的返回值类型B.重载函数形参个数必须不同C.重载函数必须有不同的形参列表D.重载函数名可以不同9. 下列关于构造函数的描述中,错误的是 (D)A.构造函数可以设置默认参数B.构造函数在定义类对象时自动执行C.默认构造函数可以没有D.构造函数不可以重载10. 用于描述矩形的类是 (D )A.CPoint B.CSize C.CRectangle D.CRect11. 所有GDI类均从一个GDI基类派生,这个基类是( D )A.CBrush B.CPalette C.CRgn D.CGdiObject12. 视图类中支持绘图的成员函数是( A )。
一、选择题A(1)下列的()是引用调用。
A.形参是引用,实参是变量;B.形参和实参都是变量;C.形参是指针,实参是地址值;D.形参是数组名,实参是数组名。
C(2)作用域运算符的功能是()A.给定作用域的大小;B.表示作用域的级别的;C.某个成员是属于哪个类的;D.指出作用域的范围的。
D(3)下列的各函数中,()不是类的成员函数。
A.构造函数;B.析构函数;C.拷贝初始化构造函数;D.友元函数。
D(4)下面()不是构造函数的特征。
A.构造函数可以重载;B.构造函数可以设置缺省参数;C.构造函数的函数名和类名相同;D.构造函数必须指定返回值类型。
C(5)下述静态数据成员的特性中,()是错误的。
A.静态数据成员要在类体外进行初始化;B.说明静态数据成员时前边要加修饰符static;C.静态数据成员不是所有对象所共有的;D.引用静态数据成员时,要在静态数据成员名前加<类名>和作用域运算符。
C(6)已知类A有三个公有成员:void f1(int), void f2(int) 和int a,则()是指向类A成员函数的指针。
A.A *p; B. int A::*pc=&A::a;C.void(A ::*pa)(int);D. A **p;C(7)下列关于对象数组的描述中,()是错的。
A.对象数组的数组名是一个地址常量;B.对象数组的下标是从0开始的;C.对象数组只能赋初值,不能被赋值;D.对象数组的数组元素是同一个类的对象.B(8)下列定义中,()是定义指向类A的对象数组的指针。
A.A *p[5];B.A (*p)[ 5];C.(A *) p[5]; D.A *p[ ];A(9)说明语句const char *ptr;中,ptr是()。
A.指向字符常量的指针;B.指向字符的常量指针;C.指向字符串常量的指针;D.指向字符串的常量指针。
B(10)关于new运算符的下列描述中,( )是错的.A.使用它创建对象时要调用构造函数;B.使用它创建对象数组时必须指定初始值;C.它可以用来动态创建对象和对象数组;D.使用它创建的对象或对象数组可以使用运算符delete删除。
第一章【随堂练习1-2】1.下面哪些标识符属于合法的用户自定义标识符:Main、void、_num、my$、a*、N4、3m、a-2答:合法的用户自定义标识符是:Main、_num、N42.结合【例1.2】指出程序代码中所用到的标识符哪些是关键字,哪些是预定义标识符,哪些是用户自定义标识符。
答:关键字:void、int预定义标识符:include、main、printf、scanf用户自定义标识符:a、b、c3.分析【例1.2】中函数的结构,包括函数首部(函数返回值类型、函数名、形式参数)、函数体语句(说明语句、可执行语句)。
答:函数首部:void main( ),其中函数返回值类型为void、函数名为main、形式参数无;函数体语句:{}内的语句为函数体,其中:说明语句为int a,b,c;,其余为可执行语句。
3.标识符是用来标识程序中的某个对象名字的字符序列。
C语言把标识符分为三类,即关键字、预定义标识符、用户自定义标识符。
对于用户自定义标识符的命名C语言规定:(1)所有的用户标识符必须先定义后使用;(2)用户标识符由字母(A~Z,a~z)、数字(0~9)、下划线“_”组成,并且首字符不能是数字;(3)区分大小写;(4)不能用关键字作为用户自定义标识符,通常不使用预定义标识符作为用户自定义标识符。
4.理论上讲,程序开发过程分为四个步骤,分别为:(1)编辑源程序(2)编译源程序,生成目标程序(3)连接目标程序及其相关模块,生成可执行文件(4)运行可执行文件一.单元练习一.选择题1.构成C语言程序的基本单位是()。
A.框架B.预处理C.函数D.语句2.在程序开发过程中,把文本文件格式源程序转化为二进制格式的目标程序的过程称之为()。
A.编辑B.编译C.连接D.运行3.关于主函数,下列说法不正确的是()。
A.一个完整的C语言应用程序有唯一的主函数B.主函数的名称只能是mainC.主函数可以被其他自定义函数调用D.C语言程序的运行从主函数开始,以主函数为核心展开4.关于标识符,下列说法不正确的是()。
《VC程序设计》期末复习题集(学生用)《程序设计(VC++)》考试试卷一选择题(在A、B、C、D中选择一个正确的,每题1分,共30分。
用答题纸答题,二、填空题(每个空格1分,共30分。
请将答案填写在答题纸的相应答题号内,每个答案只占一行)●基本概念题,共5分1.执行语句cout<2.用new运算符申请动态对象时,系统将自动调用该对象的构造函数。
3.定义内联函数的方法是在函数的返回值类型之前增加关键字inline4.在多重继承时,若欲使公共基类只在派生类中产生一个拷贝,则应在派生类中将该基类用关键字virtual5.在C++的I/O流类库中,预定义了4个流,即cin、cout、cerr和clog,其中cerr和clog不可重定向。
●阅读程序题,共13分6.[程序](2分)#includeintm[3][3]={{1},{2},{3}},n[3][3]={1,2,3};voidmain(void){cout<7.[程序](2分)#includeintf(char某){char某p=;while(某p)p++;returnp-;}voidmain(void){cout<程序的输出是6,函数f的功能是求字符串的长度8.[程序](2分)#includevoidf(int某){taticintj;do{[j]+=[j+1];}while(++j<2);}voidmain(void){intk,a[10]={1,2,3,4,5};for(f(a),k=0;k<5;k++)cout<程序输出的第一行是35345,程序输出的第二行是357459.[程序](3分)#includeintk=1;voidf(intm){m+=k;k+=m;{chark=B;cout<<k-A<voidmain(void){inti=4;f(i);cout<程序的输出第一行是1,第二行是5,6,第三行是4,610.[程序](2分)#includeclaA{protected:int某;public:int&Acce(){return某;}};claB{protected:int某;public:int&Acce(){return某;}};claC:publicA,publicB{inty;public:C(inta,intb,intc){A::某=a;B::某=b;y=c;}int&Accey(){returny;}};claD:publicC{intz;public:D(inta,intb,intc,intd):C(a,b,c){z=d ;}int&Accez(){returnz;}};共7页,第1页。
一、名词1.面向对象技术:全称Oriented Object Technology, 是以对象为单位描述客观世界的一种新技术,其领域包括OO-PL(程序设计语言)、OO-DB。
2.对象:object,是对现实世界任何实体的抽象描述,包含数据以及对数据的操作。
3.类与类库:类(class)是对一组性质相近的客观对象的抽象归纳,它将对象的共性集中起来,形成一个集合。
类库:类(class)——是一种C++数据类型,它能够提供访问某个“类对象”的接口,这个“类对象”由一个名字来标识。
一个类定义包括类的变量和方法,以及实例的变量和方法,它还包含着它的父类的所有变量和方法。
类库(class library)——支持相同应用程序的相关C++类的集合。
对象(object)——是“类”的实例,它对能够修改类状态的属性(数据)和行为(函数)都作了具体实现。
4.MFC:微软基础类(Microsoft Foundation Classes),类库是一些类的集合,其中封装了大量的有用的函数和数据结构,一个成熟的软件开发工具都有一个功能庞大的类库与他匹配,与Visual C++捆绑在一起的是微软基础类MFC。
5.匈牙利命名法:是匈牙利人查尔斯·西蒙尼提出的。
有两条规则:标识符的名字以一个或者多个小写字母开头,用这些字母来指定数据类型。
在标识符内,前缀以后就是一个或者多个第一个字母大写的单词,这些单词清楚地指出了源代码内那个对象的用途。
如,nCount为一整型变量,bFlag为一Boolean型变量。
基类(base class)——指C++中的一些抽象的、基础性的“大”类,其它类能够通过继承关系由它派生。
派生类(derived class)——由一个基类派生出来的类,它由基类创建,并且继承了该基类的所有特性。
6.类的继承性与派生性:类的派生类:在已有类的基础上定义一个新类,新定义的类称为原有类的派生类或子类,原有的类称为新定义的类的基类或父类,派生类继承了基类所有的属性和行为。
派生性指的是由原有类可以派生出具有其特性的新类类的继承性——与类的派生性相反,类的继承性是指新类可以继承基类的所有特性。
有单继承和多继承之分。
类的继承性是子类自动共享父类数据结构和方法的机制,这是类之间的一种关系7.类的封装性:类的封装就是只允许类设计人员检查赋予数据成员的任何数值的有效性,从而防止编程错误的发生。
控制内置数据结构访问的另一个好处是,类的作者可以随便改变这些数据结构的设计而不会影响使用该类的程序的其他部分。
类的封装是通过关键字public、private、protected来实现的。
8.构造函数与析构函数:构造函数:用于构造类的“对象”,是类的特殊成员函数。
当类对象被创建时,它首先被执行。
其功能是为类的数据成员设置初值,但其本身参数却只能在定义对象时指定。
类标识名(可赋值形参表)。
析构函数:所起作用与构造函数完全相反,用来在对象删除前做一些清理工作和数据保存工作。
~类标识名()9.图形设备接口(GDI):Graphics Deserve Interface,是Windows提供的一个支持图形编程处理的抽象接口,它内含各种绘图工具,程序员通过使用这些抽象工具,避免了直接与各式各样的设备硬件打交道,实现了编程中的“设备无关性”。
10.序列化函数:持久性是指对象所具有的保存和加载其状态的能力,在程序运行结束之前通过将对象的当前状态写入永久性存储体中,在下次再运行时通过数据的读取而恢复对象的状态。
这种保存和回复的过程称为序列化(serialize)。
序列化是通过文档派生类的Serialize()函数来完成,该函数由CArchive类的ar对象指针作为参数,由一个if-else结构完成序列化的文档读写功能。
11.数据成员与成员函数:数据成员:C++将对象的属性抽象成为数据成员;成员函数:C++将对象的行为抽象为成员函数。
成员函数的定义:1)将成员函数的定义直接写在类中,在类中直接定义成员函数的情况一般适合于成员函数规模较小的情况,也就是说它们一般为内联函数,即使没有明确用inline关键字。
(2)在类的定义体中只写出成员函数的原型说明,而成员函数的定义写在类的定义之后,这种情况比较适合于成员函数体较大的情况;但这时要求在定义成员函数时,在函数的名称之前加上其所属性类名及作用域运算符“::”。
定义成员函数的一般类型为:返回值类型类名::成员函数名(参数说明){ 成员函数体 }二、简述与列举1.类与对象的关系类是对象的集合,对象可视作类的“实例”。
对象与类,就好比客观世界中的物质与意识,树木——森林。
2.面向对象程序设计的特点模块性、封装性、复用性、灵活性、易维护性、增量设计性。
3.面向对象程序设计的优点–方法学上更近自然–围绕对象,完成软件设计与实现–开发周期短,代码效率高,可复用性强–系统测试与维护简便4.VC++开发环境的常用工具Visual C++的集成开发环境Developer Studio提供了大量的实用工具以支持可视化编程特性,如AppWizard、项目工作区、ClassWizard、WizardBar、Component Gallery等。
在由AppWizard所创建的应用程序框架基础之上,用户应根据最终软件功能的实际需要来完善程序界面并实现各种人机交互功能。
完善界面的工作一般包括:添加菜单项、增加工具栏按钮、添加工具条、添加对话框等Windows程序资源。
实现人机交互主要依赖于“Windows消息映射机制”来完成,其操作是主要通过利用ClassWizard工具创建消息宏和函数来进行5.应用程序向导与类向导应用程序向导相当于一个源程序生成器,它能够根据用户在各向导步骤对话框中的选项生成一系列文件,这些文件通过一个项目互相关联,并最终生成一个可执行程序。
ClassWizard用于建立新类,定制类,把消息映射成类的成员函数,或者把控制框映射为类变量成员。
ClassWizard所能识别的类全部被保存于数据库文件(.CLW)中。
6.类向导在VC编程中的作用创建新类把消息映射为类的成员函数新建或删除消息处理函数察看已被处理的消息并跳到消息处理代码处定义成员变量创建新类时,自动加入方法和属性处理现有的类和类库7.VC++工作区窗口的功能项目工作区是Developer Studio的一个最重要的组成部分,程序员的大部分工作都在此完成。
Developer Studio使用项目工作区来组织项目、元素以及项目信息在屏幕上的出现方式。
一个项目工作区中,可以处理:一个工程和它所包含的文件一个工程的子工程多个相互独立的工程多个相互依赖的工程8.利用VC++完善应用程序用户界面的常见工作有哪些?完善界面的工作一般包括:添加菜单项、增加工具栏按钮、添加工具条、添加对话框等Windows程序资源。
9.简述利用VC++创建一个基于数据库支持应用程序的一般步骤(1)用自己熟悉的DBMS创建一个数据库;(2)自定义ODBC数据源名(DSN)在“控制面板”中双击“ODBC数据源”图标打开数据源管理器;单击“添加”按钮,弹出“创建DSN”对话框;选择好用户拟添加的DSN驱动程序,如“Microsoft Access Driver”,单击“完成”;在新弹出的“ODBC数据源安装”对话框内,键入“数据源名”和“描述”项,单击“选取”钮,选好刚创建好的“DSN”;依次“确定”、“确定”,退出对话框,结束设置。
(3)使用应用程序向导创建一个“基于数据库支持”的SDI或MDI(注意:在向导的第2步设置中必须选择“无文件支持的数据库视图”或“有文件支持的数据库视图”);同时,单击“数据源”按钮,进入下层对话框。
在ODBC下拉列表中选取以前创建的“DSN”,单击“确定”,进入下层;在“选择数据库表名称”对话框中,选取指定“表名”,单击“确定”;单击“完成”,返回第2步;向导的其它步骤缺省,编译运行。
完成程序框架的创建。
创建“浏览数据库记录”的对话框。
(4)通过以上步骤,MFC自动为用户创建了浏览数据库记录的工具按钮和“记录”主菜单项,但要想在视图中看到数据库的记录,则需要进一步添加对话框控件,使之与数据表的字段相关联。
操作如下:切换到“ResourceView”标签页,定位并打开表单视图类的对话框资源IDD_EX_ODBC_FORM;为对话框添加相关控件(如:P209上图表);打开“类向导”对话框,切换到“成员函数”标签页,选择“用户视图类”,一一为以上“控件”添加相关联的数据成员;(注意:这里的数据变量已经自动被设置好了,用户只需要从下拉列表中选择即可);编译并运行,即可在视图中实现数据库表的浏览。
10.列举至少6种MFC控件类CruntimeClass Cobject类 CcmdTarget类 CwinApp类 CWnd类 CframeWnd类 Cview类 Cdocument类11.列举至少6种常用Windows控件类型(Windows提供两种控件:标准控件和公共控件。
)标准控件有:静态控件、编辑框、按钮、列表框、组合框和滚动条各控件的功能:静态控件——用于提示文字或美工图片;编辑框——接受键盘输入信息;按钮中的单选钮——提供排他型选择;复选框——提供多项选择;列表框——以列表方式显示各选项;组合框——是编辑框与列表框之集成;滚动条——控制文档的显示范围。
12.简述利用VC++创建菜单栏和工具栏按钮的方法(1)创建菜单栏的方法:建立菜单资源、添加菜单命令的处理函数、为菜单命令设置加速键‘为新菜单添加“弹出式快捷菜单”(2)添加工具栏按钮的方法:工具栏是由形象化的位图按钮所组成,它结合了菜单和快捷键的共同优点,具有操作直观快捷,使用方便的特点。
工具栏内的按钮一般都与某一特定的菜单命令相对应,从功能上讲,它与特定菜单命令一致。
在具体编程实现上,程序员应当先利用资源视图设计出新按钮图形图标,后将其ID值设置成与对应菜单项ID相同即可。
(不再需要添加对应的命令消息处理函数。
如果工具栏按钮没有对应的菜单项,必须利用ClassWizard类向导为工具栏添加命令消息处理函数。
)13.举例说明为应用程序添加模式对话框的方法创建对话框模板资源和相关控件;用类向导创建对话框类和与控件相关联的成员变量和消息处理函数;设计程序访问接口来显示对话框并获取与控件相关联的程序数据。
14.简述在状态栏显示字符串信息的方法状态栏是位于主窗口底部,用于显示当前操作提示信息和键盘状态的长条型子窗口,一般由状态信息行和状态指示器两部分组成。
前者用于动态地显示APP串表资源中的字符串,后者用于显示键盘的状态信息。
通常,MFC程序将状态条自左向右分成4个窗格:(1)窗格显示菜单或工具栏的提示信息;(2)窗格显示键盘的大小写状态;(3)窗格显示数字键盘状态; (4)窗格显示键盘的Scroll Lock状态。