当前位置:文档之家› Visual_C++程序设计与应用教程课后答案

Visual_C++程序设计与应用教程课后答案

Visual_C++程序设计与应用教程课后答案
Visual_C++程序设计与应用教程课后答案

1.6 习题

1. 填空题

(1) 项目工作区一般在集成开发环境的左侧。它展示一个项目的几个方面,它们分别是ClassView、ResourceView和FileView。

(2) 编译程序的快捷键是Ctrl+F7,链接程序的快捷键是F7,运行程序的快捷键是Ctrl+F5。

(3) 项目工作区文件的扩展名为.dsw 。

(4) 应用程序向导AppWizard的作用是帮助用户一步步生成一个新的应用程序,并且自动生成应用程序所需的基本代码。通过ClassWizard 可以增加消息映射和成员变量。

(5) 菜单选择可以通过两种方法来进行:一种是鼠标操作;另一种是键盘操作。

(6) 编译微型条工具栏最右边按钮的功能是Insert/Remove Breakpoint 。

(7) 快捷键或菜单及相关资源的资源符号的前缀是IDR_。

(8) 用户可以通过项目工作区窗口的ResourceView视图来查看资源。

2. 选择题

(1) 项目文件的扩展名是( )。

A. .exe

B. .dsp

C. .dsw

D. .cpp

(2) 设置断点的默认方式是( )。(第2章)

A. Location

B. Data

C. Message

D. Breakpoints

(3) 用应用程序向导AppWizard创建C++源文件,应选择( )选项卡。

A. Files

B. Projects

C. Workspaces

D. Other Documents

(4)Standard工具栏中最左边按钮与( )菜单命令的功能一样。

A. New

B. New File

C. New Text File

D. New Workspace

(5) Windows资源提供的资源编辑器不能编辑( )。

A. 菜单

B. 工具栏

C. 状态栏

D. 位图

3. 判断题

(1) 打开一个项目,只需打开对应的项目工作区文件。( T )

(2) 用户可以通过Tools | Customize菜单命令设置集成开发环境的工具栏。( T )

(3) 通过应用程序向导AppWizard建立的程序不能被立即执行。( F )

(4) 在同一项目中,Visual C++在内部用来标识资源的资源符号不能重复。( T )

(5) 在Windows环境下,资源与程序源代码紧密相关。( F )

4. 简答题

(1) 什么是项目? 它是由什么组成的?

在Visual C++集成开发环境中,把实现程序设计功能的一组相互关联的C++源文件、资源文件以及支撑这些文件的类的集合称为一个项目。项目是Visual C++ IDE开发程序的基本单位,一个项目至少包含一个项目文件,项目文件的扩展名为.dsp。项目文件保存了项目中所用到的源代码文件和资源文件的信息,如文件名和路径等。同时,项目文件还保存了项目的编译设置等信息,如调试版(debug)和发布版(release)。另外,根据项目类型的不同,一个项目包含有不同的源文件、资源文件和其他类别的文件。

(2) 解释项目工作区中各个视图的功能。

ClassView用于显示项目中定义的类;ResourceView用于显示项目中所包含的资源文件;FileView 用于显示所创建的项目。

(3) WizardBar工具栏的作用是什么?

WizardBar工具栏可以对ClassView和ClassWizard中的命令进行快速访问,使类和成员函数的操作更加方便,WizardBar会自动跟踪用户程序的上下文。

(4) 简述向项目添加一个资源的方法。

用户可以通过在Insert菜单中选择Resource菜单项来创建新的资源。单击Resource菜单项,弹出Insert Resource对话框。首先在对话框的左侧选择资源类型,然后根据具体情况,单击右侧的不同按钮。若资源需要临时创建,则单击New按钮,在打开的相应资源编辑器中创建资源。若资源文件已经存在,则单击Import按钮,在Import Resource对话框中选择资源文件,然后单击Import按钮。

2.5 习题

1.填空题

(1) MFC的全称是Microsoft Foundation Class 。

(2) Windows是一个基于事件的消息驱动系统。

(3)句柄是Windows使用的一种无重复整数,主要用来标识应用程序中的一个对象。

(4)利用MFC AppWizard[exe]可以创建三种类型的应用程序,即单文档、多文档和基于对话框的应用程序。

(5)一个单文档的MFC应用程序框架一般包括5个类,它们分别是应用程序类、框架窗口类、视图类、文档类和文档模板类。

(6) Windows消息主要有3种类型,即标准Windows消息、控件消息和命令消息。

(7) MFC采用消息映射来处理消息。

(8) CWinApp提供4个成员函数来实现传统SDK应用程序WinMain( )函数完成的工作。

2.选择题

(1) Windows应用程序是按照()非顺序的机制运行的。

A.事件→消息→处理

B.消息→事件→处理

C.事件→处理→消息

D.以上都不对

(2) 下面( )不是MFC应用程序外观的选项。

A.Docking toolbar B.Context-sensitive Help

C.ActiveX Controls D.Printing and print preview

(3)对MFC类的下列描述中,( )是错误的。

A.应用程序类CWinApp是CWinThread的子类

B.窗口类CWnd提供了MFC中所有窗口类的基本功能

C.CView是CWnd类的子类

D.CDocTemplate类是Template类的子类

(4)下列( )不是MFC消息映射机制有关的宏。

A.DECLARE_MESSAGE_MAP( )宏

B.BEGIN_MESSAGE_MAP( )宏

C.DECLARE_SERIAL( )宏

D.END_MESSAGE_MAP( )宏

3.判断题

(1) 窗口是Windows应用程序的基本操作单元,是应用程序与用户之间交互的接口环境,也是系统管理应用程序的基本单位。( t )

(2)所有的Windows应用程序都是消息驱动的。(t )

(3) 所有的Windows应用程序都是用MFC AppWizard[exe]向导创建的。( f )

(4)使用MFC AppWizard[exe]向导创建应用程序框架时,向导生成的文件名和类名是不可更改的。( f )

(5)消息映射是将消息处理函数与它要处理的特定消息连接起来的一种机制。

(t )

(6) 命令消息是由菜单项、工具栏按钮、快捷键等用户界面对象发出的WM_COMMAND 消息。( t )

(7) 利用MFC编程时,所有的消息与消息处理函数的添加都必须采用ClassWizard类向导来完成。( f )

(8) WinMain函数是所有Windows应用程序的入口。( t )

(9)用快捷键F9既可设置断点,又可取消断点。( t )

(10)调式程序时,会同时出现Variable窗口和Watch窗口。( t )

4.简答题

(1)简述MFC应用程序的执行过程。

MFC应用程序启动时,首先创建应用程序对象theApp。这时将自动调用应用程序类的构造函数初始化对象theApp,然后由应用程序框架调用MFC提供的WinMain( )主函数。在WinMain( )主函数中,首先通过调用全局函数GetApp( )来获取theApp的指针pApp,然后通过该指针调用theApp的成员函数InitInstance( )来初始化应用程序。在应用程序的初始化过程中,同时还构造了文档模板,产生最初的文档、视图和主框架窗口,并生成工具栏和状态栏。当InitInstance( )函数执行完毕后,WinMain( )函数将调用成员函数Run( ),进入消息处理循环,直到函数Run( )收到WM_QUIT消息。MFC首先调用CWinApp类的成员函数ExitInstance( ),然后调用静态对象的析构函数,包括CWinApp对象,最后退出应用程序,将控制权交给操作系统。

在初始化的最后,应用程序将收到WM_PAINT消息,框架会自动调用视图类的OnDraw()函数绘制程序客户区窗口。这时,应用程序的基本窗口已经生成,应用程序准备接收系统或用户的消息,以便完成用户需要的功能。如果消息队列中有消息且不是WM_QUIT消息,则将消息分发给窗口函数,以便通过MFC消息映射宏调用指定对象的消息处理函数。如果消息队列中没有消息,函数Run( )就调用函数OnIdle( )进行空闲时间的处理。

(2)简述文档/视图与其他类对象的关系。

在MFC应用程序中,文档类和视图类是用户最常用的两个类,它们之间是密切相关的。文档/视图体系结构是MFC应用程序框架结构的基石,它定义了一种程序结构,这种结构利用文档对象保存应用程序的数据,依靠视图对象控制视图显示数据,文档与视图的关系是一对多的关系,也就是说,文档中的数据可以以不同的方式显示。MFC在类CDocument和CView中为文档和视图提供了基础结构。CWinApp、CFrameWnd和其他类与CDocument 和CView共同把所有的程序片段连在一起。文档/视图与其他类对象的关系如下图所示。

(3) 简述MFC消息映射机制。

MFC采用消息映射来处理消息。这种消息映射机制包括一组消息映射宏,用于把一个Windows消息和其消息处理函数联系起来。MFC应用程序框架提供了消息映射功能,所有从CCmdTarget类派生出来的类都能够拥有自己的消息映射。

(4) 消息WM_LBUTTONDOWN的消息映射宏和消息处理函数是什么?

消息WM_LBUTTONDOWN的消息映射宏是ON_WM_LBUTTONDOWN( ) ,消息处理函数是OnRButtonDown()。

(5) 如何自定义消息?如何发送自定义消息?

Windows将所有的消息值分为4段:0x0000~0x03FF消息值范围段用于Windows系统消息,0x0400~0x7FFF段用于用户自定义的窗口消息,0x8000~0xBFFF段为Windows保留值,0xC000~0xFFFF段用于应用程序的字符串消息。

常量WM_USER(为0x0400)与第一个自定义消息值相对应,用户必须为自己的消息定义相对于WM_USER的偏移值,利用#define语句直接定义自己的消息,如下所示:#define WM_USER WM_USER+3 ;// 自定义消息WM_USER

也可以调用窗口消息注册函数RegisterWindowMessage( )来定义一个Windows消息,由系统分配消息一个整数值。该函数原型为:

UINT RegisterWindowMessage(LPCTSTR lpString);

其中参数lpString是要定义的消息名,调用成功后将返回该消息的ID值。

发送自定义消息消息采用的函数是SendMessage( )函数。(文中未讲清楚)

3.7 习题

1.填空题

(1) Windows引入GDI的主要目的是为了实现设备无关性。

(2) 与DOS字符方式下的输出文本不同,Windows是按图形方式输出的。

(3) 为了体现Windows的设备无关性,应用程序的输出面向一个称之为设备环境的虚拟逻辑设备。

(4) 在一个MFC应用程序中获得DC的方法主要有两种:一种是接受一个参数为指向CDC对象的指针;另一种是声明一个MFC设备环境类的对象,并使用this 指针为该对象赋值。

(5) Windows用COLORREF 类型的数据存放颜色,它实际上是一个32 位整数。

它采用3个参数表示红、绿、蓝分量值,这3个值的取值范围为0~255 。

(6) 库存对象是由操作系统维护的用于绘制屏幕的常用对象,包括库存画笔、画刷、字体等。

(7) 可以利用CGdiObject类的成员函数CreateStockObject( ) 将GDI对象设置成指定的库存对象。

(8) 创建画笔后必须调用CDC类的成员函数SelectOject( ) 将创建的画笔选入当前设备环境。

(9) 在默认情况下输出文本时,字体颜色是黑色,背景颜色是白色,背景模式为不透明模式。

(10) 创建画笔的方法有两种,一种是定义画笔对象时直接创建,另一种是先定义一个没有初始化的画笔对象,再调用CreatePen( )函数创建指定画笔。

2.选择题

(1) 下面( )不是MFC设备环境类CDC类的派生类。

A.GDI 类B.CPaintDC类C.CClientDC类D.CWindowDC类

(2) 下面( )不是GDI对象。

A.CFont类B.CPalette类C.CClientDC类D.CBitmap类

(3) 下列描述中,( )是错误的。

A.CreatePointFont( )是CFont类提供的创建函数

B.可使用SetTextAlign( )函数改变文本对齐方式

C.使用函数GetTextMetrics( )可以获得所选字体中指定字符串的宽度和高度

D.可使用DrawText( )函数在给定的矩形区域内输出文本

(4) 下列( )不是MFC CDC类中常用的文本输出函数。

A.TextOut( ) B.DrawText( ) C.ExtTextOut( ) D.ExtDrawText( )

3.判断题

(1) CDC类是MFC设备环境类的基类。( t )

(2) CClientDC代表整个窗口的设备环境。( f )

(3) CPen和CFont均是GDI对象。( t )

(4) 深绿色RGB值为(0,128,0) ( t )

(5) 删除CPen对象可调用CPen对象的DeleteObject( )函数。( f )

(6) 创建阴影画刷函数是CreateHatchBrush( )。( t )

(7) 默认的对齐方式是TA_LEFT| TA_BOTTOM。( f )

(8) DDB又称GDI位图,它依赖于具体设备,只能存在于内存中。( t )

4.简答题

(1) GDI创建哪几种类型的图形输出?

应用程序可以使用GDI创建3种类型的图形输出:矢量图形、光栅图形和文本。

(2) 什么是设备环境?它的主要功能有哪些?

设备环境DC也称设备描述表或设备上下文。设备环境DC是由GDI创建、用来代表设备连接的数据结构。DC的主要功能有以下几种:

●允许应用程序使用一个输出设备。

●提供Windows应用程序、设备驱动和输出设备之间的连接。

●保存当前信息,例如当前的画笔、画刷、字体和位图等图形对象及其属性,以及颜

色和背景等影响图形输出的绘图模式。

●保存窗口剪切区域(Clipping Region),限制程序输出到输出设备中窗口覆盖的区域。

(3) 什么是GDI,它有什么功能?MFC将GDI函数封装在哪个类中?

GDI是Windows提供了一个图形设备接口的抽象接口。GDI负责管理用户绘图操作时功能的转换,其主要功能是实现设备无关性。MFC将GDI函数封装在CDC类中。

(4) 请叙述设备无关性的含义,实现设备无关性需要哪几个环节?

所谓设备无关性,是指操作系统屏蔽了硬件设备的差异,使用户编程时一般无须考虑设备的类型,如不同种类的显示器或打印机。当然,实现设备无关性的另一个重要环节是设备驱动程序。不同设备根据其自身不同的特点(如分辨率和色彩数目)提供相应的驱动程序。下图描述了Windows应用程序的绘图过程。

(5)MFC提供了哪几种设备环境类?它们各自有什么用途?

MFC提供的设备环境类包括CDC、CPaintDC、CClientDC、CWindowDC和CMetaFileDC 等,其中CDC类是MFC设备环境类的基类,其他MFC设备环境类都是CDC类的派生类,各个设备环境类的功能如下表所示。

设备环境类功能描述

CDC 所有设备环境类的基类,对GDI的所有绘图函数进行了封装;可用来直接访问

整个显示器或非显示设备(如打印机等)的上下文

CPaintDC CPaintDC用于响应窗口重绘消息(WM_PAINT)的绘图输出,不仅可对客户区进行

操作,还可以对非客户区进行操作

CClientDC 代表窗口客户区的设备环境,一般在响应非窗口消息并对客户区绘图时要用到

该类

CWindowDC 代表整个窗口的设备环境,包括客户区和非客户区;除非要自己绘制窗口边框和

按钮,否则一般不用它

CMetaFileDC 代表Windows图元文件的设备环境;一个Windows图元文件包括一系列的图形

设备接口命令,可以通过重放这些命令来创建图形;对CMetaFileDC对象进行的

各种绘制操作可以被记录到一个图元文件中

(6) 简述传统的SDK获取设备环境的方法。

传统的SDK获取设备环境的方法有两种。在WM_PAINT消息处理函数中通过调用API 函数BeginPaint( )获取设备环境,在消息处理函数返回前调用API函数EndPaint( )释放设备环境。如果绘图操作不是在WM_PAINT消息处理函数中,需要通过调用API函数GetDC( )获取设备环境,调用API函数ReleaseDC( )释放设备环境。

(7) 简述创建和使用自定义画笔的步骤。

如果要在设备环境中使用自己的画笔绘图,首先需要创建一个指定风格的画笔,然后选择所创建的画笔,最后还原画笔。

(8) 简述采用MFC方法编程时,显示一个DDB位图的步骤。

采用MFC方法编程时,显示一个DDB位图需要执行以下几个步骤。

●声明一个CBitmap类的对象,使用LoadBitmap( )函数将位图装入内存。

●声明一个CDC类的对象,使用CreateCompatibleDC( )函数创建一个与显示设备环境

兼容的内存设备环境。

●使用CDC::SelectObject( )函数将位图对象选入设备环境中,并保存原来设备环境的指

针。

●利用CDC的相关输出函数输出位图。

●使用CDC::SelectObject( )函数恢复原来设备环境。

4.6 习题

1. 填空题

(1) 常见的菜单类型有主菜单、弹出菜单和快捷菜单3种。

(2) 在Visual C++中,每一个快捷键除了ID属性外,还有两个属性:键和

类型。

(3) 基于对话框的应用程序在运行时没有菜单栏。

(4) 在MFC中,工具栏的功能由类CToolBar 实现。

(5) 调用CToolBar类的成员函数CToolBar::Create( )或CreateEx( ) 创建并初始化工具栏窗口对象。

(6) 设置工具栏停靠特性,需要调用EnableDocking( ) 函数。

(7) 状态栏实际上是一个窗口,一般分为几个窗格,用来显示不同的信息。

(8) 在MFC中,状态栏的功能由CStatusBar 类实现。

(9) 状态栏显示的内容由数组indicators 决定,需要在状态栏中显示各窗格的标识符、位置以及个数。

(10) CStatusBar类的成员函数SetPaneInfo() 用来设置给定索引值的窗格ID、风格和宽度,成员函数SetPaneText() 用来更新窗格的文本

2. 选择题

(1) 在编辑某菜单项时,若要指明该菜单项是一个弹出式子菜单,必须选择属性对话框中的( )。

A.Separator B.Pop-up C.Inactive D.Grayed

(2) 要使鼠标箭头在按钮上暂停时能显示工具栏按钮提示,必须设置工具栏的风格为( )。

A.CBRS_TOOLTIPS B.CBRS_FLYBY

C.CBRS_NOALIGN D.WS_VISIBLE

(3) MFC应用程序框架为状态栏定义的静态数组indicators放在文件( )中。

A.MainFrm.cpp B.MainFrm.h C.stdAfx.cpp D.stdAfx.h

(4) 下列有关菜单的叙述中不确的是( )。

A.“&”字符的作用是使其后的字符加上下划线

B.“\t”转移字符表示使快捷键按右对齐显示

C.自定义菜单项ID不能与系统菜单项ID相同

D.选中菜单项属性对话框中的Separator,指明菜单项是一个水平线分隔条

3. 判断题

(1) 给菜单项定义快捷键,只需在菜单项属性设置对话框的Caption文本框中说明

即可。( f )

(2) 弹出快捷菜单一般出现在鼠标箭头的位置。( t )

(3) UPDATE_COMMAND是更新命令用户接口消息。( t )

(4) 工具栏停靠特性只能设置一次。( t )

(5) 状态栏的功能由CStatusBar类实现。( t )

(6) CMenu类、CToolBar类和CStatusBar类的根基类是相同的。( t ) 4. 简答题

(1) 简述菜单设计的主要步骤。

菜单设计一般需要经过下面两步:

●使用菜单编辑器编辑菜单资源;

●使用ClassWizard进行消息映射,编辑成员函数,完成菜单所要实现的功能。

(2) 为应用程序创建快捷菜单主要有哪些方法?

为应用程序创建快捷菜单主要有以下两种方法:

●使用Component Gallery创建快捷菜单

●使用TrackPopupMenu( )函数创建快捷菜单

(3) 如何动态创建菜单?

动态创建菜单分为以下3个步骤。

●利用CreateMenu( )函数创建一个空的弹出式菜单

●调用AppendMenu( )或InsertMenu( )函数在菜单中加入菜单项

●调用函数SetMenu( )加载动态菜单

(4) 创建工具栏的基本步骤有哪些?

创建工具栏的基本步骤是:

●创建工具栏资源;

●构建一个CToolBar对象;

●调用CToolBar::Create( )或CreateEx( )函数创建工具栏窗口;

●调用CToolBar::LoadToolBar()载入工具栏资源。

(5) 简述MFC创建状态栏所做的工作。

首先构造一个CToolBar类的对象,然后调用CToolBar::Create( )或CreateEx( )函数创建工具栏窗口,最后调用CToolBar::LoadToolBar( )函数载入工具栏资源。

5.7 习题

1.填空题

(1) 对话框的主要功能是输出信息和接收用户的输入。

(2) 从对话框的工作方式看,对话框可分为模态对话框和非模态对话框两种类型。

(3) 对话框主要由对话框模板资源与对话框类两部分组成。

(4) 使用DoModal()函数可以创建模式对话框,使用Create()函数可以创建非模式对

话框。

(5) 为了支持属性页对话框,MFC提供了CPropertySheet类和CPropertyPage类。

2.选择题

(1) 对话框的功能被封装在( )类中。

A. CWnd

B. CDialog

C. CObject

D. CCmdTarget

(2) ( )是非模式对话框。

A.“查找”对话框

B.“字体”对话框

C.“段落”对话框

D.“颜色”对话框

(3) 要将模式对话框在屏幕上显示需要用到函数( )。

A. Create

B. DoModal

C. OnOK

D. 构造函数

(4) 通常将对话框的初始化工作在( )函数中进行。

A. OnOK

B. OnCancel

C. OnInitDialog

D. DoModal

(5) 使用( )通用对话框类可以打开文件。

A. CFileDialog

B. CColorDialog

C. CPrintDialog

D. CFontDialog

3.简答题

(1) 简述创建和使用模态对话框的主要步骤。

●使用对话框编辑器来创建包含不同控件的对话框模板资源

●从MFC的CDialog中派生出一个类,用来负责对话框行为。

●利用ClassWizard把这个类和先前你产生的对话框资源连接起来。

●对话框的初始化。

●创建一个对话框对象,调用CDialog::DoModal()函数打开对话框。

(2) 如何向对话框模板资源添加控件?如何添加与控件关联的成员变量?

在一个对话框资源中增加控件的操作十分方便,只需从控件工具栏中选中要增加的控件,再将此控件拖动至对话框模板中的确定位置上,松开鼠标按键即添加了一个控件。调整控件的位置和大小的操作与Word中对文本框的操作完全一样。

可以利用ClassWizard类向导的Member Variables页面为对话框类添加与对话框控件关联的成员变量。在Member Variables页面中,双击一个ID或选定ID后,单击Add Variable 按钮,将弹出Add Member Variable对话框。在Member variable name框用于输入成员变量名,在Category下拉框选择成员变量的类别。

(3) 什么是DDX和DDV?编程时如何使用MFC提供的DDX功能?

DDX为对话框数据交换,它用于将成员变量与对话框控件相连接,完成数据在成员变量和控件之间的交换。DDV为对话框数据验证,它能自动校验输入的数据是否符合设计要求。我们只需通过ClassWizard为对话框类添加与对话框控件关联的成员变量即可使用MFC 提供的DDX功能。

(4) 简述创建属性页对话框的主要步骤。

●设计对话框资源。分别为各个页创建对话框模板,每页的模板最好具有相同尺寸,

如果尺寸不统一,则框架将根据尺寸最大的页来确定属性页对话框的大小。

●用ClassWizard为每页创建新类,并加入与控件对应的成员变量。

●打开属性页对话框

6.11 习题

1.填空题

(1) Windows系统提供的标准控件主要包括静态控件、编辑框、按钮、列表框、组合框和滚动条等。

(2) Windows标准控件的属性设置通常由General、Style及Extend Styles三个属性页构成。

(3) 当编辑框中的文本已被修改,在新的文本显示之后发送EN_CHANGE通知消息。

(4) CButton类控件包括按键按钮、单选按钮、复选框和组框等4种类型。

(5) 一组单选按钮在对话框类中只能映射一个int类型值变量,对应单选按钮在组中的序号,序号从0开始。

(6) 向列表框增加列表项使用CListBox类成员函数AddString或InsertString。

(7) 组合框是多个控件的组合,包括编辑框、列表框和按钮。

(8) —个旋转按钮控件通常是与一个相伴的控件一起使用的,这个控件称为“伙伴窗口”。该控件的Tab键次序必须小于旋转按钮。

(9) 当滑块滑动时,滑块控件将发送滚动消息来通知父窗口。垂直滑块发送WM_VSCROLL消息,水平滑块发送WM_HSCROLL消息。

(10) MFC的CProgressCtrl类封装了进度条控件的各种操作,该类的成员函数SetRange()用来设置进度条的范围。

2.简答题

(1) 在应用程序中访问控件的方法有哪些?

应用程序访问控件一般有3种方法:

●利用对话框的数据交换功能访问控件

●通过控件对象来访问控件

●利用CWnd类的一些用于管理控件的成员函数来访问控件

(2) 单选按钮控件如何成组?

将一组单选按钮放在一个组框控件中,并为同组中的第一个单选按钮设置Group属性。

(3) 组合框与列表框相比有什么不同?如何给组合框添加初始的列表项?

列表框可列出各种可能的选项,但用户却不能在列表框中输入新的列表项。而组合框不仅可以显示列表项供用户进行选择,而且允许用户输入新的列表项。

可以通过组合框控件属性对话框的Data选项卡添加初始的列表项。

7.7 习题

1.填空题

(1) 在文档/视图结构中,文档是用来管理和组织数据的,视图的作用是显示和编辑文档数据。文档与视图的关系是一对多的关系。

(2) 在文档/视图应用程序中,文档模板负责创建文档/视图结构,而应用程序对象管理文档模板,可以在应用程序的InitInstance()函数中创建一个和多个文档模板。

(3) 在通常情况下,视图派生类的成员函数中通过调用GetDocument()函数得到当前文档对象的指针。

(4) 文档类的数据成员初始化和文档的清理工作分别在OnNewDocument()成员函数和DeleteContents()成员函数中完成。

(5) MFC提供了两种集合类,一种是基于模板的集合类,另一种是非模板集合类。

(6) MFC应用程序通过CDocument的protected类型成员变量m_bModified的逻辑值来判断程序员是否对文档进行过修改。程序员可以通过CDocument的SetModifiedFlag()成员函数来设置该值。

(7) MFC AppWizard在创建文档应用程序框架时已在文档类中重载了Serialize()函数,通过在该函数中添加代码可以达到实现文档序列化的目的。

(8) 调用create()成员函数创建动态分割窗口,而静态分割窗口是调用CreateStatic()成员函数创建的。

2.简答题

(1) 通过哪几个主要成员函数完成文档与视图之间的相互作用?并简述这些成员函数的功能。

文档与视图的交互是通过下面几个主要的成员函数完成的:

●视图类CView的成员函数GetDocument()

该函数得到与之相关联的文档对象的指针,利用这个指针就可以访问文档类及其派生类的公有数据成员和成员函数。

●CDocument类的成员函数UpdateAllViews()

该函数通知与文档相关联的所有或部分试图,更新窗口内容。

●视图类的成员函数OnUpdate()

当应用程序调用CDocument::UpdateAllViews()函数时,实际上是调用了所有相关视图的OnUpdate()函数,以更新相关的视图。需要时,可以直接在视图派生类的成员函数中调用该函数刷新当前视图。另外,在初始化视图成员函数CView::OnInitialUpdate()中也调用了OnUpdate()函数。

●CView类的OnInitialUpdate()函数

当应用程序被启动,或用户从“文件”菜单中选择了“新建”或“打开”命令时,CView 的OnInitialUpdate()函数会被调用,该函数是虚函数。CView的OnInitialUpdate()函数除了调用OnUpdate()函数之外,不做其他任何事情。

也可以利用派生类的OnInitialUpdate()函数对视图对象进行初始化。

(2) 简述文档序列化与一般文件处理的区别。

一般文件处理是通过文件句柄来实现磁盘输入和输出,一个文件句柄与一个磁盘文件相关联。而文档序列化与一般文件处理最大的不同在于:在序列化中,对象本身对读和写负责。CArchive类对象并不知道也不需要知道它所读写数的内部结构,CArchive类对象为读写CFile类对象中的可序列化数据提供了一种安全的缓冲机制,它们之间形成了如下关系:Serialize()函数CArchive类对象CFile类对象磁盘文件

可见序列化使得程序员可以不直接面对一个物理文件而进行文档的读写。

(3) 如何让用户定义的类支持序列化?

要让用户定义的类支持序列化,必须满足以下5个条件:

●从CObject类派生,这样派生类就具有RTTI(Run-time type information)、Dynamic

Creation等功能。

●类的声明部分必须有DECLARE_SERIAL宏,此宏需要1个参数:类名称。

●类的实现部分必须有IMPLEMENT_SERIAL宏,此宏需要3个参数:一是类名称,

二是基类名称,三是版本号。

●重新定义Serialize( )虚函数,使它能够适当地把类的成员变量写入文件中。

●为此类加上一个默认构造函数,这是因为如果一个对象来自文件,MFC必须先动态

地创建它,而且在没有任何参数的情况下调用构造函数,然后才从文件中读取对象

数据。

8.5 习题

1.填空题

(1) MFC通过CView类提供打印功能和打印预览功能。

(2) 在打印过程中,CPrintInfo类的主要作用是在框架窗口和CView类之间传递消息。

(3) CPrintInfo类中的成员变量m_nCurPage表示当前打印/预览的页号,成员函数SetMaxPage( )设置文档的最大打印页数。

(4) 在Windows操作系统中,存在两种类型的坐标:设备坐标和逻辑坐标。

(5) 不同的映射模式将影响输出设备显示的图形尺寸因子,Windows的缺省映射模式是MM_TEXT,在该映射方式中,每一个逻辑单位对应一个设备像素。

(6) 在MFC应用程序中,通过调用CDC类的SetMapMode()函数设置映射方式。

(7) 如果要使程序支持多页打印功能,首先在打印之前设置要打印的页数,然后设置每一页视图原点的打印坐标。

(8) 一般在OnBeginPrinting()函数中设置要打印的页数,在OnPrepareDC()函数中通过调用CDC类成员函数SetViewPortOrg( )设置当前页的视图原点坐标。

2.简答题

(1) 打印和屏幕显示有何异同?

相同点:在MFC应用程序中,打印和屏幕显示最终都是通过调用视图类的OnDraw()函数来完成的。OnDraw()函数有一个指向CDC类对象指针的参数,该对象代表了接收OnDraw()函数输出的设备上下文,它可以是代表显示器的显示设备上下文,也可以是代表打印机的打印设备上下文。

不同点:当窗口显示文档内容时,视图窗口将收到WM_PAINT消息,程序框架将调用OnPaint()函数,OnPaint()函数会调用OnDraw()函数,此时传递给OnDraw()函数的设备上下文参数为显示设备上下文,OnDraw()函数的绘制结果将会输出到显示器。进行打印时,用于打印和打印预览的OnPrint()函数也会调用OnDraw()函数,而此时传递给OnDraw()函数的设备上下文参数为打印机设备上下文,OnDraw()函数的绘制结果也会输出到打印机。

(2) 如何在打印和屏幕显示时输出不同内容?

有两种方法:

●分别在OnPaint()和OnPrint()这两个函数中完成屏幕输出和打印输出工作,而不必依

赖于OnDraw()函数。

●OnDraw()函数中,调用pDC->IsPrinting()或设置变量来识别目前进行的输出工作并区

别对待。

(3) 打印预览和打印有何异同?

相同点:在MFC应用程序中,打印和屏幕显示最终都是通过调用视图类的OnDraw()函数来完成的。

不同点:打印预览和打印不同,它是应用程序利用屏幕来模拟打印机输出的过程。进行打印时,传递给OnDraw()函数的设备上下文参数为打印机设备上下文。而为了实现打印预览的功能,MFC类库从CDC类中派生出CPreviewDC类。在进行打印预览时,传给OnDraw()

函数的是一个指向CPreviewDC对象的指针。一般CDC类中保存有两套相同的设备描述表,而CPreviewDC类则保存有两套不同的设备描述表,其中的属性设备描述表指向打印机,而输出设备描述表指向屏幕。

(4) MM_LOMETRIC映射方式有何特点?

MM_LOMETRIC映射方式将一个逻辑单位映射到0.l mm,MM_LOMETRIC坐标系统Y轴方向与默认的MM_TEXT相反。

(5) 简述添加打印页眉、页脚的程序代码的步骤。

添加打印页眉、页脚的程序代码可以分两步进行:

●在OnPrint()函数中利用CPrintInfo*pInfo的成员变量m_rectDraw来设置打印页上打

印区域的大小。

●在m_rectDraw范围之外打印页眉和页脚。

9.5 习题

1.填空题

(1) Windows的库类型主要有静态链接库和动态链接库。

(2) DLL中一般定义有导出函数和内部函数两种类型的函数,其中导出函数可以被外部程序调用。

(3) 每个DLL都含有一个入口函数DllMain(),就像我们编写的应用程序必须有main()或WinMain()函数一样。该函数的作用是初始化DLL,并在卸载时清理DLL。

(4) Visual C++ 6.0支持多种DLL,包括非MFC DLL、MFC常规DLL和MFC扩展DLL。

(5) 非MFC DLL的内部不使用MFC,其导出函数为标准的C接口,能被非MFC或MFC编写的应用程序调用。

(6) 在MFC规则DLL的内部可以使用MFC,但是它与应用程序的接口不能是MFC,而是C函数或者C++类。

(7) MFC扩展DLL的主要功能是实现从现有MFC类库中派生出可重用的类。

(8) 从MFC DLL中导出函数常用使用模块定义文件和使用关键字_declspec(dllexport)两种方法。后者不仅可以导出函数,还可以导出一个完整的类。

(9) DEF文件是一个包含EXE文件或DLL文件声明的文本文件。每个.DEF文件至少必须包含LIBRARY语句和EXPORTS 语句。

(10) 应用程序与DLL链接的方式主要有隐式链接和显式链接。

(11) 应用程序分别使用AfxLoadLibrary()和AfxFreeLibrary()函数来加载和释放MFC扩展DLL。

(12) MFC扩展DLL除了可使用关键字_declspec(dllexport) 导出类外,还可以使用宏AFX_EXT_CLASS来导出类。

2.简答题

(1) 什么是动态链接库?它和静态链接库有何区别?生成的动态链接库应放在哪些目录下才能被应用程序使用?

动态链接库是一种用来为其它可执行文件(包括EXE文件和其它DLL)提供共享的函数库。它和静态链接库的主要区别是与应用程序的链接方式不同,前者进行的是动态链接,后者进行的是静态链接。

生成的动态链接库必须位于下面4个目录之一中:

●当前目录

●Windows的系统的目录,如Windows\system

●Windows所在的目录,如WINNT

●环境变量PATH中所指定的目录

(2) Visual C++支持哪几种DLL?如何选择选择DLL的类型?

Visual C++支持多种DLL,包括:

●非MFC DLL

●MFC常规DLL(MFC Regular DLL)

●MFC扩展DLL(MFC Extension DLL)

我们选择哪一种DLL的类型可以从以下几个方面来考虑:

如果DLL不需要使用MFC,那么使用非MFC DLL是一个很好的选择。如果需要创建使用了MFC的DLL,并希望MFC和非MFC应用程序都能使用所创建的DLL,那么可以选择MFC常规DLL。如果希望在DLL中实现从MFC派生的可重用的类,或者是希望在应用程序和DLL之间传递MFC的派生对象时,必须选择MFC扩展DLL。

(3) MFC常规DLL实际上包含哪两方面的含义?

MFC常规DLL实际上包含有两方面的含义。一方面它是“MFC的”,这意味着可以在这种DLL的内部使用MFC,另一方面它是“常规的”,这意味着它不同于MFC扩展DLL,在MFC规则DLL的内部虽然可以使用MFC,但是它与应用程序的接口不能是MFC,而是C函数或者C++类。

(4) 如何从MFC DLL中导出函数?

从MFC DLL中导出函数常用的有两种方法。

第一种是使用模块定义文件(.DEF)。DEF文件常用的模块语句如下:

(1) 第一个语句必须是LIBRARY语句,这个语句指出DLL的名字,链接器将这个名字放到DLL导入库(import library)中,DLL导入库包含了指向外部DLL的函数索引指针。

(2) EXPORTS 语句列出被导出函数的名字,以及导出函数的数值(由@号与数字构成)。序数值可以省略,编译器(Compiler)会为每个导出函数指定一个,但这样指定的值不如自己指定的明确。

(3) 使用DESCRIPTION语句描述DLL的用途,这个语句可以省略。

(4) 使用“;”开头的注释语句。

使用AppWizard创建一个MFC DLL时,AppWizard将创建一个.DEF文件的框架,并自动添加到项目中。建立DLL时,链接器使用.DEF文件来创建一个导出文件(.EXP)和一个导入库文件(.LIB),然后使用导出文件来创建.DLL文件。

另一种方法是在定义函数时使用关键字_declspec(dllexport)。这种情况下,不需要.DEF 文件。导出函数的形式为:

declspec(dllexport) <返回类型> <导出函数名>(<函数参数>);

(5) 应用程序与DLL链接的方式有哪两种?它们之间有何区别?

应用程序与DLL链接的方式主要有如下两种:隐式链接和显式链接。

隐式链接又称为静态加载,指的是使用DLL的应用程序先链接到编译DLL时生成的导入库LIB文件,执行应用程序的同时系统也加载所需的DLL。在应用程序退出之前,DLL 一直存在于该程序运行进程的地址空间中。

显式链接又称为动态加载,使用显式链接DLL的应用程序必须在代码中动态地加载所使用的DLL,并使用指针调用DLL中的导出函数,在使用完毕后,应用程序必须卸载所使用的DLL。使用显式链接的一个非常明显的好处是,应用程序可以在运行过程中决定需要

加载的DLL。

10.6 习题

1.填空题

(1) 进程和线程都是操作系统的概念,进程是操作系统分配资源单位,线程是操作系统分配处理器的最基本单元。

(2) 可以用VC++所带的工具Spy++来观察操作系统管理的进程和线程。

(3) 每一个进程至少有一个主线程,该线程由系统创建。

(4) 一般可以使用全局变量和自定义消息进行线程间通信。

(5) 常用的同步对象有临界区、互斥、信号量和事件。

(6) 为了使用同步类,需要手动将头文件Afxmt.h加到应用程序中。

(7) 使用CSingleLock类的成员函数Lock()请求获得临界区。

(8) CEvent 类对象有人工事件和自动事件两种类型。

2.简答题

(1) 什么叫进程?什么叫线程?它们有什么区别和联系?

进程和线程都是操作系统的概念。进程是应用程序的执行实例,它是操作系统分配资源单位,每个进程是由私有的虚拟地址空间、代码、数据和其它各种系统资源组成,进程在运行过程中创建的资源随着进程的终止而被销毁,所使用的系统资源在进程终止时被释放或关闭。线程是操作系统分配处理器的最基本单元,它是进程内部的一个独立的执行单元。

进程是没有活力的,它是一个静态的概念。一个程序运行时,由系统自动创建一个进程。系统创建好进程后,实际上就启动执行了该进程的主线程,主线程以函数地址形式(一般为main()或WinMain()函数),将程序的启动点提供给操作系统。主线程终止了,进程也就随之终止。

每一个进程至少有一个主线程,它无需由用户去主动创建,是由系统自动创建的。用户根据需要在应用程序中创建其它线程,多个线程并发地运行于同一个进程中。一个进程中的所有线程都在该进程的虚拟地址空间中,共同使用这些虚拟地址空间、全局变量和系统资源。

(2) MFC中线程有哪两种类型?它们有何区别?如何创建它们?

MFC中有两类线程,分别称之为工作者线程和用户界面线程。

创建一个工作者线程,首先需要编写一个希望与应用程序的其余部分并行运行的自定义函数,该函数称为线程函数。然后,在程序中合适的地方调用全局函数AfxBeginThread()创建线程,以启动线程函数。

创建用户界面线程,首先需要从CWinThread类派生一个新类,并重写派生类的InitInstance()、ExitInstance()及Run()等函数,然后使用AfxBeginThread()函数的另一个版本创建并启动用户界面线程。

(3) 什么是线程函数?其作用是什么?如何给线程函数传递参数?

线程函数是新线程创建后要执行的函数,新线程要实现的功能是由线程函数实现的。线程函数带有一个参数LPVOID pParam,创建线程的AfxBeginThread()全局函数的第二个参数LPVOID pParam的类型与线程函数的参数类型完全一致,该参数为启动线程时传递给线程函数的入口参数。

(4) 如何终止线程?

当一个工作者线程的线程函数执行一个返回语句或者调用AfxEndThread()成员函数时,这个工作者线程就终止。对于用户界面线程,当一个WM_QUIT消息发送到它的消息队列中,或者该线程中的一个函数调用AfxEndThread()成员函数时,该线程就被终止。

一般来说,线程只能自我终止。如果要从另一个线程来终止线程,必须在这两个线程之间设置通信方式。

(5) 如何使用自定义消息进行通信?

使用Windows消息来进行通讯,首先需要定义一个自定义消息,然后,需要时在一个线程中调用全局函数::PostMessage()向另一个线程发送自定义消息。

(6) 什么叫线程的同步?为什么需要同步?

使隶属于同一进程的各线程协调一致地工作称为线程的同步。这是因为在多线程处理时线程之间经常要同时访问一些资源,这有可能导致错误。例如,对于像磁盘驱动器这样独占性系统资源,由于线程可以执行进程的任何代码段,且线程的运行是由系统调度自动完成的,具有一定的不确定性,因此就有可能出现两个线程同时对磁盘驱动器进行操作,从而出现操作错误;又例如,对于银行系统的计算机来说,可能使用一个线程来更新其用户数据库,而用另外一个线程来读取数据库以响应储户的需要,极有可能读数据库的线程读取的是未完全更新的数据库,因为可能在读的时候只有一部分数据被更新过。

(7) MFC提供了哪些类来支持线程的同步?它们分别用在什么场合?

MFC为我们提供了几个同步类和同步辅助类来支持线程的同步,这些类及其适用场合如下表所示。

类名说明

同步对象基类CSyncObject 纯虚类,为Win32中的同步对象提供通用性能

临界区类CCriticalSection 当在一个时间内仅有一个线程可被允许修改数据或某些其他控制资源

时使用,用于保护共享资源。

互斥类CMutex 有多个应用(多个进程)同时存取相应资源时使用,用于保护共享资源。

信号类CSemaphore 一个应用允许同时有多个线程访问相应资源时使用,主要功能用于资

源计数。

事件类CEvent 某个线程必须等待某些事件发生后才能存取相应资源时使用,以协调

线程之间的动作。

同步辅助类CSingleLock、CMultiLock 用于在一个多线程程序中控制对资源的访问。当在一个时间只需等待一个同步化对象时使用CSingleLock,否则使用CMultiLock

(8) 如何使用CSemaphore类实现多线程同步?

使用CSemaphore类实现多线程同步,有两种用法。

方法一:单独使用CSemaphore对象,步骤如下:

●定义CSemaphore类的一个全局对象(以使各个线程均能访问)

●在访问临界区之前,调用CSemaphore类的成员Lock()获得临界区。

●在本线程中访问临界区中的共享资源。

●访问临界区完毕后,使用CSemaphore的成员函数UnLock()来释放临界区。

方法二:与同步辅助类CSingleLock或CMutiLock类一起使用,步骤如下(以类CSingleLock为例):

●定义CSemaphore类的一个全局对象,如critical_section

●在访问临界区之前,定义CSingleLock类的一个对象,并将critical_section的地址传

送给构造函数

●使用CSingleLock类的成员函数Lock()请求获得临界区。

●在本线程中访问临界区中的共享资源。

●调用CSingleLock类的成员函数UnLock()来释放临界区。

11.6 习题

1. 填空题

(1) MFC的ODBC类主要包括5个类,分别是CDatabase类、CRecordset类、CRecordView类、CFieldExchange类、CDBException类,其中CRecordset类是用户实际使用过程中最关心的。

(2) CDatabase类的作用是建立与数据源的连接。

(3) CRecordset类的功能是对表记录进行操作的许多功能,如添加记录、删除记录、修改记录、查询记录等,并能直接为数据源中的表映射一个CRecordset类对象,方便用户的操作。

(4) CRecordView的作用是显示数据库记录。利用对话框数据交换机制DDX在记录集与表单视图的控件之间传输数据。

(5) 可以利用CRecordset类的成员函数AddNew() 添加一条新记录;可以利用CRecordset类的成员函数MoveFirst() 将记录指针移动到第一条记录上;可以利用CRecordset 类的成员函数Update() 完成保存记录的功能。

(6) 在CRecordset类中提供了两个公有数据成员m_strFilter和m_strSort,分别用来设置对记录的查找和排序。

(7) ADO对象模型提供了7种对象,它们分别是连接对象、命令对象、记录集对象、域对象、参数对象、属性对象、错误对象。

(8) 在Visual C++中使用ADO开发数据库之前,需要用#import引入ADO,其语句格式为:#import "c:\Program Files\common files\system\ado\msado15.dll" no_namespace rename("EOF","adoEOF")

(9) 在使用ADO开发数据库时,常用的三个智能指针为:_ConnectionPtr 、_CommandPtr 和_RecordsetPtr。

(10) Connection对象的ConnectionString属性表示连接数据库的字符串,CursorLocation 属性用来指定光标引擎的位置。

2.简答题

(1) Visual C++中都提供了哪些访问数据库的技术?它们有何特点?

Visual C++中都提供了ODBC、DAO、OLE DB和ADO等访问数据库的技术。

●ODBC

ODBC是为应用程序访问关系数据库时提供的一个标准的基于SQL的统一接口。对于不同的数据库,ODBC提供了一套统一的API,使应用程序可以利用所提供的API来访问任何提供了ODBC驱动程序的数据库,而且,ODBC已经成为一种标准,目前所有的关系数据库都提供了ODBC驱动程序,这使得ODBC的应用非常广泛,基本上可用于所有的关系数据库。

由于ODBC是一种底层的访问技术,因此,ODBC API可以使客户应用程序从底层设置和控制数据库,完成一些高层数据库技术无法完成的功能。

直接使用ODBC API编写应用程序需要编制大量的代码,Visual C++6.0提供了MFC ODBC类,其中封装了ODBC API,因此,使得用MFC来创建ODBC的应用程序非常简单。

●DAO

DAO提供了一种通过程序代码创建和操作数据库的机制。DAO类似于用Access或Visual Basic编写的数据库应用程序,它使用微软公司的Jet数据库引擎形成一系列的数据访问对象:数据库对象、表和查询对象、记录集对象等,各个对象协同工作。

DAO支持以下4个数据库选项:可以打开一个Access数据库文件(*.mdb文件),直接打开一个ODBC数据源,使用Jet引擎打开一个ISAM (被索引的顺序访问方法)类型的数据源以及把外部表附属到Access数据库。

MFC DAO是微软公司提供的用于访问Microsoft Jet数据库文件(*.mdb)的强有力的数据库开发工具,它通过DAO的封装,向程序员提供了DAO丰富的操作数据库手段。

●OLE DB

OLE DB是Visual C++开发数据库应用中提供的新技术,它基于COM接口。因此,OLE DB对所有的文件系统包括关系型数据库和非关系型数据库都提供了统一的接口。这些特性使得OLE DB技术比传统的数据库访问技术更加优越。

与ODBC技术相似,OLE DB属于数据库访问技术中的底层接口。但直接使用OLE DB 来设计数据库应用程序需要编写大量的代码。

●ADO

ADO技术是基于OLE DB的访问接口,它继承了OLE DB技术的优点,并且ADO对OLE DB的接口进行封装,定义了ADO对象,使程序开发得到简化。ADO技术属于数据库访问的高层接口。

(2) 如何注册ODBC的数据源?

下面是以Visual FoxPro 6.0数据库StudentDB.dbc为例,注册ODBC的数据源的步骤。

●双击ODBC图标,进入ODBC数据源管理器。在这里用户可以设置ODBC数据源的

一些信息,其中的用户DSN选项卡中可以让用户定义的在本地计算机使用的数据

源名

●单击添加按钮,弹出创建新数据源对话框,为新的数据源选择数据库驱动程序。由

于使用的是Visual FoxPro6.0数据库,所以选择Microsoft Visual FoxPro Driver,并

单击“完成”按钮。

●在ODBC Visual FoxPro Setup对话框中,为该数据源起一个简短的名称。应用程序将

使用该名称来指定用于数据库连接的ODBC数据源配置,因此建议所起的名称能

反映出该数据库的用途,或者与使用该数据库的应用程序名称类似。对于该例,给

该数据源命名为Student,并在下一个编辑框中输入对该数据库的说明。

●指定数据库的位置。单击Browse按钮,出现Select Database文件选择对话框,定位

并选择StudentDB.dbc文件。

●单击“打开”按钮完成数据库选择,在ODBC Visual FoxPro Setup对话框中单击OK

按钮,完成数据源的创建。最后,单击ODBC数据源管理器对话框中的确定按钮,退出数据源管理器。

(3) 简述用MFC ODBC进行数据库编程的基本步骤。

Visual C++创建一个MFC ODBC数据库应用程序需要以下几个步骤:

●准备数据库

●在系统的数据源管理器中注册数据源

●用AppWizard创建基本的数据库应用程序

●向基本的数据库应用程序中添加代码,实现特定数据库功能

(4) 什么是动态记录集和快照集?它们的根本区别是什么?

动态集是与用户所做的更改保持同步的记录集,而快照集则是数据的一个静态视图。它

们的根本区别是:当在一个动态集中滚动一条记录时,由其他用户或应用程序中的其他记录集对该记录所做的更改会相应地显示出来,而快照集则不会。

(5) 在使用CRecordset类成员函数进行记录的编辑、添加和删除等操作时,如何使操作有效?

在编辑、添加和删除时,必须遵循一些特定步骤才能得到正确结果。

要编辑改当前记录,应该按下列步骤进行:

●调用Edit()成员函数。

调用该函数后就进入了编辑模式,程序可以修改域数据成员。注意不要在一个空的记录集中调用Edit(),否则会产生异常。

●设置域数据成员的新值。

●调用Update()完成编辑。

Update()把变化后的记录写入数据源并结束编辑模式。

要向记录集中添加新的记录,应该按下列步骤进行:

●调用AddNew()成员函数。

调用该函数后就进入了添加模式,该函数把所有的域数据成员都设置成NULL。

●设置域数据成员。

●调用Update()。

Update()把域数据成员中的内容作为新记录写入数据源,从而结束了添加。

如果记录集是快照,那么在添加一个新的记录后,需要调用Requery()函数重新查询,因为快照无法反映添加操作。

要删除记录集的当前记录,应按下面两步进行:

●调用Delete()成员函数。

该函数会同时给记录集和数据源中当前记录加上删除标记。注意不要在一个空记录集中调用Delete()函数,否则会产生一个异常。

●滚动到另一个记录上以跳过删除记录。

在对记录集进行更新以前,程序最好先调用CanUpdate()函数、CanAppend()函数来判断记录集是否是可以更新的,因为如果在不能更改的记录集中进行修改、添加或删除将导致异常的产生。

(6) CRecordset类的成员函数Requery()有哪两个重要用途?

Requery()有两个重要用途:

●使记录集能反映用户对数据源的改变

●按照新的查找条件或排序方法查询记录并重新建立记录集

(7) 简述MFC的ODBC应用程序中的DDX和RFX数据交换机制。

下图显示了MFC的ODBC应用程序中的DDX和RFX数据交换机制:

记录视图记录集数据源中的表

控件域数据成员表中的字段

(8) 简述用ADO进行数据库编程的基本步骤。

用ADO进行数据库编程下列基本步骤:

●引入ADO库

●初始化COM环境

●ADO与数据库的连接

●操作数据库

●断开连接

●释放COM环境

12.4 习题

1. 填空题

(1) Windows提供了3个特殊的播放声音的高级音频函数:MessageBeep()、PlaySound()和sndPlaySound(),其中MessageBeep()函数主要用来播放系统报警声音。

(2) Visual C++提供了一个用于多媒体应用程序开发的一个部件Windows Multimedia library。加入该部件后,将在应用程序中运行库winmm.lib和头文件mmsystem.h。

(3) MCI媒体控制接口是Microsoft提供的一组多媒体设备和文件的标准接口。

(4) MCI 使用MCI_PLAY命令消息使设备播放媒体文件。

(5) 在应用程序中使用MCIWnd窗口类,必须在调用MCIWnd函数所在的源文件的前面添加vfw.h的头文件。

2.简答题

(1) 简述利用高级音频函数播放声音文件的步骤。

答:利用高级音频函数播放声音文件需要下面3个步骤:

●引用头文件。对于大多数多媒体函数的引用必须在系统中包含头文件mmsystem.h,

该文件包含了有关多媒体函数的原型、数据结构及相关常数的定义。

●链接多媒体函数库winmm.lib。绝大多数的多媒体函数存在于独立的多媒体函数中,

因此,必须在应用程序中予以说明。

●在应用程序中写入执行多媒体调用的代码。

(2) 简述调用PlaySound()函数播放声音文件的方法。

答:调用PlaySound()函数播出这个声音文件可使用下面3种方法。

第一种方法是直接播出声音文件,相应的代码为:

PlaySound(“c:\\Windows\\media\Sound.wav”,NULL, SND_FILENAME|SND_ASYNC);

第二种方法是把声音文件加入到资源中,然后从资源中播放声音。Visual C++支持WAVE型资源,用户在资源视图中单击鼠标右键并选择Import命令,然后在文件选择对话框的文件类型选择框中选择Wave File(*.wav)文件,然后在文件选择框中选择Sound.wav,则将Sound.wav文件加入到WAVE资源中。缺省时声音资源的ID为IDR_WAVE1,则下面的调用会播出该声音:

PlaySound(MAKEINTRESOURCE(IDR_WAVE1),AfxGetInstanceHandle(),

SND_RESOURCE|SND_ASYNC);

第三种方法是用PlaySound()函数播放系统声音,Windows启动的声音是由SystemStart定义的系统声音,因此可以用下面的方法播放启动声音:

PlaySound(“SystemStart”,NULL,SND_ALIAS|SND_ASYNC);

(3) 简单比较命令字符串接口mciSendString()和命令消息接口mciSendCommand()。

命令字符串接口mciSendString()具有简单易学的优点,但这种接口与C/C++的风格相距

C++程序设计基础课后答案 第八章

8.1 阅读下列程序,写出执行结果 1.#include class Bclass { public: Bclass( int i, int j ) { x = i; y = j; } virtual int fun() { return 0 ; } protected: int x, y ; }; class Iclass:public Bclass { public : Iclass(int i, int j, int k):Bclass(i, j) { z = k; } int fun() { return ( x + y + z ) / 3; } private : int z ; }; void main() { Iclass obj( 2, 4, 10 ); Bclass p1 = obj; cout << p1.fun() << endl; Bclass & p2 = obj ; cout << p2.fun() << endl; cout << p2.Bclass :: fun() << endl; Bclass *p3 = &obj;

cout << p3 -> fun() << endl; } 2.#include class Base { public: virtual void getxy( int i,int j = 0 ) { x = i; y = j; } virtual void fun() = 0 ; protected: int x , y; }; class A: public Base { public: void fun() { cout<<"x = "<=7) 7.A)6='A')&&(x<='Z') 9.A)0,0 10.C)1,0 11.C)2 12.B)1,0,0,1 13.C)1

计算机程序设计基础习题册(含答案)

《计算机程序设计基础》 习 题 册

班级学号姓名成绩一、单选题 1.C++源程序文件的默认扩展名为A。 A) cpp B) exe C) obj D) lik 2.由C++源程序文件编译而成的目标文件的默认扩展名为C。 A) cpp B) exe C) obj D) lik 3.由C++目标文件连接而成的可执行文件的默认扩展名为B。 A) cpp B) exe C) obj D) lik 4.编写C++程序一般需经过的几个步骤依次是B。 A)编译、编辑、连接、调试 B)编辑、编译、连接、调试 C)编译、调试、编辑、连接 D)编辑、调试、编辑、连接 5.程序中主函数的名字为 A 。 A) main B) MAIN C) Main D) 任意标识符 6.下面四个选项中,均是不合法的用户标识符的选项的是C。 A) A p_o do B)float lao _A C)b-a goto int D)_123 temp INT 7.下列变量名中合法的是C。 A) B)C)Tom B) 3a66 C) _6a7b D) $ABC 8.存储以下数据,占用存储字节最多的是 D 。 A) 0 B) ‘0’ C) “0” D) 0.0 9.在C++语言中,字符型数据在内存中的存储形式是D。 A) 补码 B) 反码 C) 原码 D) ASCII码 10.若有说明语句:char c =’\072’;则变量c A。 A) 包含1个字符 B) 包含2个字符 C) 包含3个字符 D) 说明不合法,变量的值不确定 二、填空题 1.C++头文件和源程序文件的扩展名分别为.h和.cpp 。 2.C++语言规定,标识符只能由字母、数字、下划线三种字符组成,而且第一个字符必须是字母或下划线。 3.一条表达式语句必须以__分号_;___作为结束符。 4.用于从键盘上为变量输入值的标准输入流对象是___cin____;用于输出表达式值的标准输出流对象是__cout____。 5.在一个C++程序文件中,若要包含另外一个头文件或程序文件,则应使用以_#include___标识符开始的预处理命令

vb程序设计实验教程习题答案

实验教材实验一 1:单项选择题: A A C C C D C B B C 2:填空题: (1).bas (2).vbp,.frm (3)视图工具箱 (4)对象 (5)属性对象事件方法 (6)Windows (7)事件行为 (8)窗体模块 实验二 1:单项选择题: A D C C A B A B D C B B C B C B A B D C 2:基本运算题: (1)27 (2)3.33333333333333 (3)3 (4)0 (5)-3 (6)2 (7)ab33 (8)类型不匹配 (9)3 (10)AB3 实验三 1:单项选择题: B C B D C 2:填空题: (1)300 (2)321456 (3)Shanghai (4)6 7 6 (5)True (6)2+3=5 (7)”area=” 12.56 (8)VISUAL 实验四 1:单项选择题: C A A C A 2:填空题: (1)7 (2)3 5

(3)输入的数小于0 (4)3 (5)False (6)2010 is not leap year. 试验五 1:单项选择题: A C C A B A C C C B 2:填空题: (1)9 (2)①n ②1 (3)①Len(a) ②n\2 ③Mid(a,(n-i+1),1) ④Mid(a,(n-i+1),1) (4)①n Mod 3=1 And n Mod 5=1 And n Mod 7=1 ②While CountN<5 (5)Mid(c1,1,i) 实验六 1:单项选择题: D B D C D A C A D D 2:填空题: (1)30 (2)3 (3)①a(2) ②a(3) ③a(1) (4)①1 ②2 ③a(i)=a(6-i) (5)①i+j ②0 ③a(i,j) (6)①Print ②k ③a(k,j)=a(j,k) ④a(k,j); 实验七 1:单项选择题: A B B A C B 2:填空题: (1)15 (2)①Preserve a(n+1) ②a(i+1)=a(i) ③Exit For ④a(i+1)=m⑤0 to n+1 (或LBound(a) to UBound(a)) (3)d,c,b,a 实验八 1:单项选择题: C A D B D C A C B 2:填空题: (1)a=9 b=4 (2) 36 25 16 9 4 1 (3)①a ②UBound(b) ③

VISUAL_C 程序设计与应用教程课后答案11111111111

1.6习题 1.填空题 (1)项目工作区一般在集成开发环境的左侧。它展示一个项目的几个方面,它们分别是ClassView、ResourceView和FileView。 (2)编译程序的快捷键是Ctrl+F7,链接程序的快捷键是F7,运行程序的快捷键是Ctrl+F5。 (3)项目工作区文件的扩展名为.dsw。 (4)应用程序向导AppWizard的作用是帮助用户一步步生成一个新的应用程序,并且自动生成应用程序所需的基本代码。通过ClassWizard可以增加消息映射和成员变量。 (5)菜单选择可以通过两种方法来进行:一种是鼠标操作;另一种是键盘操作。 (6)编译微型条工具栏最右边按钮的功能是Insert/Remove Breakpoint。 (7)快捷键或菜单及相关资源的资源符号的前缀是IDR_。 (8)用户可以通过项目工作区窗口的ResourceView视图来查看资源。 2.选择题 (1)项目文件的扩展名是()。 A..exe B..dsp C..dsw D..cpp (2)设置断点的默认方式是()。(第2章) A.Location B.Data C.Message D.Breakpoints (3)用应用程序向导AppWizard创建C++源文件,应选择()选项卡。 A.Files B.Projects C.Workspaces D.Other Documents (4)Standard工具栏中最左边按钮与()菜单命令的功能一样。 A.New B.New File C.New Text File D.New Workspace (5)Windows资源提供的资源编辑器不能编辑()。 A.菜单 B.工具栏 C.状态栏 D.位图 3.判断题 (1)打开一个项目,只需打开对应的项目工作区文件。(T) (2)用户可以通过Tools|Customize菜单命令设置集成开发环境的工具栏。(T) (3)通过应用程序向导AppWizard建立的程序不能被立即执行。(F) (4)在同一项目中,Visual C++在内部用来标识资源的资源符号不能重复。(T) (5)在Windows环境下,资源与程序源代码紧密相关。(F) 4.简答题 (1)什么是项目?它是由什么组成的? 在Visual C++集成开发环境中,把实现程序设计功能的一组相互关联的C++源文件、资源文件以及支撑这些文件的类的集合称为一个项目。项目是Visual C++IDE开发程序的基本单位,一个项目至少包含一个项目文件,项目文件的扩展名为.dsp。项目文件保存了项目中所用到的源代码文件和资源文件的信息,如文件名和路径等。同时,项目文件还保存了项目的编译设置等信息,如调试版(debug)和发布版(release)。另外,根据项目类型的不同,一个项目包含有不同的源文件、资源文件和其他类别的文件。

Java程序设计基础习题答案

Java程序设计基础课后习题参考答案 第2章 1、关于Java Application得入口方法main()得检验: main()方法得参数名就是否可以改变? main()方法得参数个数就是否可以改变? 该方法名就是否可以改变? 参考答案:(1)main()方法得参数名可以改变.(2)main()方法得参数个数不可以改变。(3)该方法名不可以改变。 2、当一个程序没有main()方法时,能编译吗?如果能编译,能运行吗? 参考答案:当一个程序没有main()方法就是,就是可以编译通过得,但就是不能给运行,因为找不到一个主函数入口。 3、下列语句能否编译通过? bytei =127; bytej = 128; longl1 = 999999; long l2= 9999999999; 参考答案:byte i 与long l1可以编译通过。而byte j 与longl2 超出自身数据类型范围,所以编译失败。 4、下列语句能否编译通过? float f1 =3、5; float f2 = 3.5f; 参考答案:java中浮点型得数据在不声明得情况下都就是double型得,如果要表示一个数据就是float型得,必须在数据后面加上“F”或“f”;因此,floatf1 无法编译通过。 5、验证int 与char,int与double等类型就是否可以相互转换。 参考答案:(1)char类型可以转换为int 类型得,但就是int类型无法转换为char类型得;(2)int 可以转换为double类型得,但就是double类型无法转换为int 类型得。 6、计算下列表达式,注意观察运算符优先级规则。若有表达式就是非法表达式,则指出不合法之处且进行解释。 (1)4+5 == 6*2 ?(2) (4=5)/6?? (3)9%2*7/3>17(4)(4+5)<=6/3 ? (5) 4+5%3!=7-2????(6)4+5/6〉=10%2 参考答案:表达式(2)为不合法表达式,只能将值赋值给一个变量,因此其中(4=5)将5赋值给4就是不合法得. 7、下列()就是合法得Java标识符。 (1)Counter1 ??(2)$index, (3) name-7 ??(4)_byte

VB程序设计教程(第3版)课后实验答案最新版2

1、完成实验A(P.259)中的第1、 2、 3、5题。 2、参照第2章例2.6,建立一个类似记事本的应用程序,提供:(1) 剪切、复制和粘贴的编辑操作;(2) 字体大小的格式设置;此外,再对记事本的应用程序的功能进行一点扩允。 1.完成在实验B 顺序结构程序。(P.262)中的第1、2 、4 、5.、6题 2.完成实验C 选择结构(P.266)中的第1、2、4、5题 3.用上面实验B的第二题和实验C的第二题完成下面的实验报告。 1、完成实验D循环结构(P.268)中的第1、3、4、6题,其中第1题利用单循环结构显示如图D.1(P.268)所示的界面,而后将图形改为倒三角形。 2、选做实验E数组(P.271)中的第1、2、3题中的任意二题 3、以实验D中的第4题和实验E中的做完的某一题完成下面的实验报告。 A.1 Private Sub Command1_Click() Label3 = Text1 End Sub A.2 Private Sub Form_Load() Timer1.Interval = 0 End Sub Private Sub Command1_Click() '自动 Timer1.Interval = 200 End Sub Private Sub Command2_Click() '手动 Timer1.Interval = 0 Call MyMove End Sub Private Sub Timer1_Timer() Call MyMove End Sub Sub MyMove() Label1.Move Label1.Left - 50 If Label1.Left < 0 Then Label1.Left = Form1.Width End Sub A.3 Private Sub Form_Click() Text1 = Val(Text1) + 1 End Sub Private Sub Form_Load() Text1 = 0 End Sub A.5

《C语言程序设计实践教程》答案-完整版

4.2练习题 一、选择题 1.D 2.B 3.A 4.B和D 5.C 6.A 7.B 二、填空题 1.//或/* */ 2.主或main 3.函数首部和函数体4.编译和连接 5.分号 5.2练习题 一、选择题 1.A 2.D 3.B 4.B 5.C 6.C 7.D 8.A 9.B 10.B 11.D 12.B 13.A或B 14.C 15.B

17.D 18.D 19.C 20.D 21.B 22.A 23.D 24.C 25.C 26.B 27.C 28.D 29.A 30.B 二、填空题 1.102,10 2.#define 宏名字符串 3.1 4.n=1 5.-4 6.a=1,b= ,c=2 7.c=A 8.n1=%d\nn2=%d 9.a+b>c&&a+c>b&&b+c>a 10.ch>=’a’&&ch<=’z’|| ch>=’A’&&ch<=’Z’11.7 12.0 13.11110000 14.8,4 6.2练习题 一、选择题 1.A 2.C 3.D 4.C 5.A

7.A 8.D 9.B 10.C 11.A 12.A 13.C 14.B 15.正确答案为:12345678 二、填空题 1.10 2.y=1 x%i==0 3.屏幕中间输出一个由星号组成的菱形4.1 5.13 6.(cx=getchar())!=-1 front=cx; 7.m%n 8.4 9.*p px=&x py=&y 三、读程序,写结果 1.-1 2.3,1,-1, 3.a=16,y=60 4.x=12,y=4 5.59 7.2练习题 一、选择题 1.B 2.C 3.C 4.A 5.D

《C语言程序设计》试题一及答案

本文由yyq91111贡献 doc文档可能在WAP端浏览体验不佳。建议您优先选择TXT,或下载源文件到本机查看。 语言程序设计》试题一《C 语言程序设计》试题一 一、填空题 1.在 C 语言程序设计中,正确的标识符是由组成的。 2.设 x=4, y=(++x)+(++x);那么 y 的值为,表达式执行后,变量 x 的值为。 3.一个变量的指针是指。 4.能够构成一个数组,其元素满足的特点是;那么,构成结构体的成员可以是。 5.下面运算符 < % ++ = 按照优先级从高到低排列顺序为。 6.C 程序设计中语句后的符号 /*……*/ 所起作用是。 二、选择题 ⑴.在使用 TurboC2.0 环境编辑程序时,运行某程序使用的菜单项为( A.FILE B.RUN C.EDIT D.OPTION ) D.a++ ) ⑵.下列语句不具有赋值功能的是( A.a*=b B.x=1 C.a+b ⑶.C 语言程序中,当出现条件分支语句 if~else 时, else 与()组成配对关系 A.同一复合语句内部的 if C.在其之前未配对的最近的 if ⑷.下列数组定义方式不正确的语句是( A.char C. int x[5]; B.char B.在其之前任意的 if D.首行位置相同的 if ) y[]={‘h’, ‘e’, ‘l’, ‘l’, ‘o’}; D.int y[]; x[10]={12,13,14,15}; ⑸. 若有如下定义和语句,且 0<=i<5,下面( int p=a; A. *(a+2) ⑹. 下列( a=5; b=8; c=10; B.a&&d d=0 B.a[p-3] C.p+2 a[]={1,2,3,4,5},*p,i; )是对数值为 3 数组元素的引用 D.a+3 )表达式的值为真 A.a*2>8+2 C. (a*2-c)||d D.a-bm C.(*p).m D.p.stu.n student m; n; ) ⑽.下列函数中不能用于对文件进行输入输出操作的是( A.fscanf( ) B.printf( ) C.fgetc( ) D. fputs( ) ) 三、判断题 1.C 语言程序设计可以对计算机硬件进行操作。 2.在循环过程中,使用 break 语句和 continue 语句的作用是一样的。 3.在函数的定义和调用过程中,形式参数和实在参数数目可以不一致。 4.对于某一指针变量可以接收任何类型的值。 5.在 C 语言程序设计中,不同类型的数在计算机内存中所占空间是不同的。 6.文件指针是结构体类型,可以用表示file 来定义。 7.选择结构不可以使用嵌套形式,但是循环结构可以使用嵌套形式。 8.在定义数组时,有时可以将该数组的维数省略。 9.运算符 && + * 的优先级是 * 优先于 + 优

《计算机程序设计基础》课后练习题参考答案

《计算机程序设计基础》课后练习题1 一.判断题 (1)(错)事件过程由某个用户事件或系统事件触发执行,但不能被其他过程调用。 (2)(错)若X=2, Y=5,则表达式 Y-2>X AND X+2>Y 的结果为:True。 (3)(错)常量是指在程序运行过程中其值可以改变的那些量。 (4)(错,timer没有)VB工具箱中的所有控件都具有宽度(Width)和高度(Height)属 性。 (5)(错)定义变量:Dim max,min as Single , 则max 和 min 的数据类型均为Single。 (6)(对)如果创建的菜单项的标题是一个减号“-”,则该菜单项显示为一条分隔线。 (7)(错)标准模块文件的扩展名是“*.VBP”。 (8)(错,都不能)定时器控件可以响应Click事件,但不能响应DbClick事件。 (9)(错)在默认情况下,数组下标下界的缺省值为1。 (10)(对)在使用字体对话框时,需要对其Flags属性先进行相应设置。 二.单选题 (11)在Visual Basic中,表示鼠标单击事件的是 C 。 A)Activate B)DoubleClick C)Click D)MouseDown (12)用于设置计时器时间间隔的属性是 A 。 A)Interval B)Name C)Left D)Top (13)函数Int(10*Rnd)是在 D 范围内的整数。 A)[1,10] B)[1,10] C) [0,9) D)[0,9] (14)Select case语句结构的结尾应使用 D 。 A)End B) End Case C) End Sub D) End Select (15)改变了容器的坐标系后,该容器的 A 属性值不会改变。 A)left B)scaleleft C)scaletop D)scalewidth (16)执行下列语句后,列表框中各表项顺序为 D List1.Clear For i=1 to 4 : List1.AddItem i-1,0 :Next i A)B)C)D) (17)输入对话框InputBox的返回值的类型是 A 。

MATLAB程序设计教程课后答案

实验指导 1、 n=input('请输入一个三位数:'); a=fix(n/100); b=fix((n-a*100)/10); c=n-a*100-b*10; d=c*100+b*10+a 2(1) n=input('请输入成绩'); switch n case num2cell(90:100) p='A'; case num2cell(80:89) p='B'; case num2cell(70:79) p='C'; case num2cell(60:69) p='D'; otherwise p='E'; end price=p (2)n=input('请输入成绩'); if n>=90&n<=100 p='A'; elseif n>=80&n<=89 p='B'; elseif n>=70&n<=79 p='C'; elseif n>=60&n<=69 p='D'; else p='E'; end price=p (3)try n; catch price='erroe' end 3 n=[1,5,56,4,3,476,45,6,3,76,45,6,4,3,6,4,23,76,908,6]; a=n(1);

for m=2:20 if n(m)>a a=n(m); elseif n(m)=0 disp(A([n],:)); elseif n<0 disp(lasterr); else disp(A([6],:)); disp(lasterr); end 7(1) f=[]; for n=1:40

c程序设计教程与实验__吉顺如__实验一到七

实验1熟悉Visual C++环境及运行C程序 一、实验目的 1.掌握在Visual C++环境下C程序的建立、编辑、编译和执行过程。 2.掌握C程序的最基本框架结构,完成简单程序的编制与运行和调试。 3.掌握发现语法错误、逻辑错误的方法以及排除简单错误的操作技能。 二、实验内容 1.从键盘输入两个数a和b,求它们的平方和,并在屏幕上输出。输入该C程序,编译并运行之,记下屏幕的输出结果,以文件名保存。 #include <> main() { int a,b,sum; /*定义整型变量a、b、sum */ printf("Please Input a,b \n "); /*输出提示信息*/ scanf("%d%d",&a,&b); /*从键盘输入两个整数分别赋予a和b*/ sum=a*a+b*b; /*赋值语句,把a2+b2的结果赋给变量sum*/ printf("%d*%d+ %d*%d=%d\n",a,a,b,b,sum); /*输出语句*/ }

改错题 (1计算x*y 的值并将结果输出。试纠正程序中存在的错误,以实现其功能。程序以文件名保存。 #include <> main main () { int x=2;y=3;a int x=2,y=3,a ; A=x*y a =x*y ; print ('a=%d",A); print f ("a=%d",a ); printf("\n"); } (2)下程序的功能为:求两数中的较大数据并输出。纠正程序中存在的错误,以实现其功能。程序以文件名保存。 #include <> viod main() void main() { int a ,b , max; Scanf(“%d,%d ”,&a,&b); s canf(“%d,%d ”,&a,&b); Max=a; m ax=a; If (max

C程序设计与应用基础第三章重载习题答案

第三章重载 1、请完成下列填空题 1)在C++中,只能重载为类的成员函数的运算符是_=_、__[]__、__()__、__->__。 2)利用成员函数对二元运算符重载,其左操作数为___This___,右操作数为___成员函数参数___。 3)单目运算符作为类成员函数重载时___没有___的参数;双目运算符作为___类成员函数___重载时需声明其右操作数,作为___友元函数___重载时需声明全部操作数。 4)设a和b是两个整型变量,a+b表示这两个变量的和:设c和d为浮点型变量,c+d也表示这两个变量的和。这里的运算符+具有不同的用途,这是__运算符重载___的例子。 5)重载的运算符仍然保持其原来的优先级、___结合性___和___语法结构___。 6)C++中不能重载的运算符有、__*___、___::___、___?:___和___sizof___。 2、编程题 1)字符串连接需要两个操作数,即两个要被连接的字符串。请按照以平方式实现operator +操作: string1=string2+string3 答案: #include <> #include <> class String { public: String(int size=80) { length=size; buf=new char[length+1]; *buf='\0'; } String(char *s) { length=strlen(s); buf=new char[length+1]; strcpy(buf,s); } String(const String& str) { length=strlen; buf=new char[length+1]; strcpy(buf,; } ~String(){delete[]buf;}

程序设计基础练习题(全答案版)

《程序设计基础——C#.NET》练习 参考答案: 一、选择题 https://www.doczj.com/doc/939090728.html,的目的就是将____A____作为新一代操作系统的基础,对互联网的设计思想进行扩展。A.互联网 B. Windows C. C# D. 网络操作系统 2.假设变量x的值为10,要输出x值,下列正确的语句是__C__。 A.System.Console.writeline(“x”) B. System.Cosole.WriteLine(“x”) C. System.Console.WriteLine(“x={0}”,x) D. System.Console.WriteLine(“x={x}”) 3.要退出应用程序的执行,应执行下列的_A___语句。 A. Application.Exit(); B. Application.Exit; C. Application.Close(); D. Application.Close; 4.关于C#程序的书写,下列不正确的说法是__D________。 A.区分大小写 B.一行可以写多条语句 C.一条语句可以写成多行 D.一个类中只能有一个Main()方法,因此多个类中可以有多个Main()方法 5. 在C#语言中,下列能够作为变量名的是__C__。 A.if B. 3ab C. b_3a D. a-bc 7. 能正确表示逻辑关系“a≥5或a≤0”的C#语言表达方式是__D__。 A.a>=5 or a<=0 B. a>=5|a<=0 C. a>=5&&a<=0 D. a>=5||a<=0 8. 以下程序的输出结果是___C_____。 A. 5 B. 4 C. 6 D. 不确定 9. If语句后面的表达式应该是__A___。 A.逻辑表达式 B. 条件表达式 C. 算术表达式 D. 任意表达式10.有如下程序:

C语言程序设计实验答案

-前言- /*非常感谢度娘以及各位网上C语言高手的支持,才能让敝人完成此文档的整理。 本文档集合了本人、度娘、众网友的力量,其中代码的正确率约为90%(不正确的有标注)。为回报度娘及众网友的帮助,本文档免费下载。 */ /*配“电子科技大学出版社(周信东主编)”的C语言程序设计实验*/ /*努力吧,骚年以及学妹们!*/ /*整理ed by 口玉刀一 of GUET.*/ ===================== 实验一 C语言程序初步 ===================== 已知a=5,b=4,c=6,求出s并换行 #include"" main() { int a,b,c,s; a=5;b=4;c=6; s=(a+b+c)/3; printf("a=%d,b=%d,c=%d\n,s=%d",a,b,c,s); }

输入一个数字求他的平方#include<> main() { int r,s; scanf("%d",&r); s=r*r; printf("s=%d\n",s); } (1) #include<> main() { printf(" *\n"); printf("***\n"); printf(" *\n"); } (2) #include<> main() { int v;

int a,b,c; (2) #include<> main() { int m; double x; scanf("%d",&m); x=*m*m; printf("%f",x); } 入a,b,c三个变量,计算数学公式(a*b)/c main()

Visual Basic 程序设计基础教程-课后习题答案-范荣强

第一章程序与编程环境 一、填空题 1. 工程,Form_Load 2. 事件(触发) 3. 窗体,Name 4. CurrentX, CurrentY 5. maxButton, BorderStyle = 1 or 3 or 4 or 5 6. Alignment, 空缺,AutoSize 7. Style, LoadPicture 8. Line, Shape 9. 重画10. FillStyle ll. MultiLine, maxLength, Locked 12. Font 13. sub, 对象名,事件名14. 方法,Object.Method, text1.setfocus() 15. Name, minButtom, CurrentX(Y), Caption 16. Interval, Enable 17. timer, Interval, ms(毫秒) 18. Mouse Down, Click, LoastFocus 19. .Frm, .Frx, .bas. cls. Vbp 20. 注释, “Rem 语句”或者“’语句” 第二章数据的类型、表示以及运算 一、请指出下列哪些是VB的合法常量,并说明原因 (1)√(2)X 常量不能加类型说明符号改成123.4 (3)X与上题类似,如果是常量,则类型说明符放在后面(4)√等价于2E3 (5) √(6)√等于十进制的4113 (7)X 如果是16进制要写&符号(8)X 指数不能为小数(9)X 月份超过12,日超过31 (10)√(11)√(12)√等价于上一题(13)X 8进制数每一位不能超过8 (14)√(15)X 变量,常量要为基本数据类型的值(16)√ 二、找出合法变量 (1)√(2)√如果与控件Label1同在一个应用程序里面,该变量会屏蔽掉控件Label1 (3) X 保留字(4)√(5)X 变量不能以数字开头(6)变量不能有小数点 (7)√(8)√数组变量(9)X保留字(10)√可以,但rnd()不可以,rnd()是函数 (11) √(12)√(13)√(14)X ’符号表示注释(15)X 这是表达式,不是变量(16)X 同上,是表达式 三、指出下列数据x,y,z的声明是否正确,如果正确请指明其类型 (1)√ x--long, y—variant, z—integer (2) √ x—long, y—long, z—integer (3) √ x—double, y—double, z—integer (4) X 变量x &中间不能有空格 (5)√自动转换成字符串 (6)X 变量声明不能直接赋值 (7)√ (8)√自动转换成字符串 (9)X 常量不能把函数写上去 (10)√ 四、写出下列表达式的结果 (1)1 (2) 1 (3)false (4) ab12 (5)123 (6)出错,加法表达式中如果有一个是数值类型,则“+”表示加号,而不是字符的链接符号(7)False (8)true (9) true (10) false 默认转换成相同类型(数值),建议这里把2改成D试试 (P.S. 布尔类型TRUE = -1, FALSE = 0; 优先顺序:^(乘方)→-(求负)→*、/→\(整除)→MOD→+、-) 五、写出下列函数的结果

C语言程序设计习题及答案

C语言程序设计 一、选择题(共40分,每小题2分) 1、以下叙述不正确的是() A、一个C源程序可由一个或多个函数组成 B、一个C源程序必须包含一个main函数 C、C程序的基本组成单位是函数 D、在C程序中,注释说明只能位于一条语句的后面 2、下列四个选项中,是不合法的用户标识符的选项是() A、abc B、12AC C、sun D、 A2 3、设有语句int a=4;则执行了语句a+=a- =a*a后,变量a的值是() A、-24 B、0 C、4 D、16 4、下列运算符中优先级最高的是() A、< B、+ C、&& D、== 5、在C语言中,运算对象必须是整型数的运算符是() A、% B、/ C、%和/ D、 + 6、以下关于运算符的优先顺序的描述正确的是() A、关系运算符<算术运算符<赋值运算符<逻辑与运算符 B、逻辑与运算符<关系运算符<算术运算符<赋值运算符 C、赋值运算符<逻辑与运算符<关系运算符<算术运算符 D、算术运算符<关系运算符<赋值运算符<逻辑与运算符 7、在C语言中,如果下面的变量都是int类型,则输出的结果是()sum=pad=5;pAd=sum++,pAd++,++pAd; printf(“%d\n”,pad);

A、7 B、6 C、5 D、4 8、x、y、z被定义为int型变量,若从键盘给x、y、z输入数据,正确的输入语句是() A、 INPUT x、y、z; B、scanf(“%d%d%d”,&x,&y,&z); C、 scanf(“%d%d%d”,x,y,z); D、read(“%d%d%d”,&x,&y,&z); 9、假定从键盘输入23456< 回车 >,下面程序的输出结果是:() void main ( ) { int m,n; scanf(“%2d%3d”,&m,&n); printf(“m=%d n=%d\n”,m,n); } A、m=23 n=45 B、m=234 n=56 C、m=23 n=456 D、语句有错误 10、若运行时,给变量x输入12,则以下程序的运行结果是() main( ) { int x,y; scanf(“%d”,&x); y=x>12x+10:x-12; printf(“%d\n”,y); } A、 0 B、 22 C、 12 D、10 11、C语言中while和do-while循环的主要区别() A、do-while的循环体至少执行一次 B、while 的循环控制条件比do-while的循环控制条件严格 C、do-while允许从外部转到循环体内

C++程序设计基础(第4版)(上)习题解答

《C++程序设计基础》(第4版)(上) 习题与解答 第1章基本数据与表达式 1.1 选择题 1.一个最简单的C++程序,可以只有一个(C )。 (A)库函数(B)自定义函数(C)main函数(D)空函数 2.用C++语言编写的源程序要成为目标程序必须要经过(D )。 (A)解释(B)汇编(C)编辑(D)编译3.C++程序中的简单语句必须以(B )结束。 (A)冒号(B)分号(C)空格(D)花括号4.假设有说明int a=0; double x=5.16;,则在以下语句中,(C )属于编译错误。 (A)x=a/x; (B)x=x/a; (C)a=a%x; (D)x=x*a; 5.执行C++程序时出现的“溢出”错误属于(C )错误。 (A)编译(B)连接(C)运行(D)逻辑 6.在下列选项中,全部都是C++关键字的选项为(C )。 (A)while IF Static (B)break char go (C)sizeof case extern (D)switch float integer 7.按C++标识符的语法规定,合法的标识符是(A )。 (A)_abc (B)new (C)π(D)"age" 8.在C++语句中,两个标识符之间(A )不能 ..作为C++的分隔符。 (A)数字(B); (C): (D)+ 9.下列正确的八进制整型常量表示是(B )。 (A)0a0 (B)015 (C)080 (D)0x10 10.下列错误的十六进制整型常量表示是(C )。 (A)0x11 (B)0xaf (C)0xg (D)0x1f 11.在下列选项中,全部都合法的浮点型数据的选项为(B )。 (A)-1e3.5 15. 2e-4 (B)12.34 -1e+5 0.1E-12 (C)0.2e-2 -12345. e-5 (D)5.0e(1+4)0.1 8e+2 12.在下列选项中,正确的字符常量为(D )。 (A)"a" (B)'name' (C)a (D)'\101' 13.在下列选项中,(D )不能 ..交换变量a和b的值。 (A)t=b; b=a; a=t; (B)a=a+b; b=a-b; a=a–b; (C)t=a; a=b; b=t; (D)a=b; b=a; 14.关于下列语句,叙述错误的是(A )。

相关主题
文本预览
相关文档 最新文档