当前位置:首页 >> 其它课程 >> 第一章 计算机程序设计基础

第一章 计算机程序设计基础


计算机程序设计基础 1.1 编程语言及其发展 1.1.1 计算机编程语言 所谓计算机程序,是计算机所执行的一系列指令的集合,通过这些指令集合,计算机 可以实现数值计算、信息处理、信息显示等功能。 计算机系统采用电信号表示其内部的所有信息,而每个电信号往往采用通、断两个状 态表示,因而,计算机内的所有信息均采用二进制格式保存,无论是执行指令、需要处理的 数据,还是显示的文字符号。例

如,文字处理时,在屏幕某个位置显示字母“A” ,实际是 将 65 这个数据的二进制格式送给了显卡,则由显卡根据 65 对应的字母 A 的点阵特征,输 出视频信号给显示器,从而在显示器的某个位置“画”出字母“A” 。 从第一台电子计算机开始,就采用二进制格式存储计算机指令,这种格式的指令称为 机器语言,是 CPU 唯一能够识别的内容。例如,将数 18 送给普通微机 CPU 内部的某个寄 存器 BX(寄存器是 CPU 内部用于存放数据的单元) ,其机器语言格式如下: 10111011 00010010 00000000 这样以若干 0 和 1 组成的指令不利于记忆, 一般人往往无法记住 CPU 某个指令的二进 制格式,为此,引入了助记符的概念,即采用便于记忆的英文单词或其缩写格式代表相应的 机器语言,如,对上面的机器语言,采用下面格式表示: MOV BX,18 用“MOV”这样的缩写表示传送数据,一般程序员只要了解代表指令的这样助记符, 就可以编写程序。 但是,这样书写的计算机程序,计算机的 CPU 是没法识别的,为此需要把助记符格式 的程序翻译成对应的机器语言,这个过程称为编译(Compile) ,是由专门的工具实现的,如 微软公司提供的 MASM 工具就可以进行编译工作。 采用助记符格式的编程语言, 称为汇编语言, 所有的 CPU 系统都具有自己的汇编语言。 汇编语言虽然解决了程序设计的基本问题(不需要记忆那些 0、1 的组合) ,但仍然存在如下 问题: 汇编语言需要程序员了解 CPU 的结构和基本工作原理。 如果需要计算 18+20 的结果, 必须先将参与计算的一个数送到计算机内部的某个寄存器中(如上面的 BX 寄存器) ,然后 才能执行加法指令,加的结果还需要再送回内存的某个区域,以便 CPU 进行下一步的计算。 程序员必须知道 CPU 内部有哪些寄存器,其中又有哪些寄存器能够用于存放参与计算的数 据。 上面的例子用汇编书写如下: MOV BX,18 ADD BX,20 MOV [1000],BX 对编程人员来说, 仅仅需要确定让 CPU 计算加法, 不想了解其细节。 基于这样的目的, 发明了各种高级编程语言,如 Fortran、Basic、C 等,它们均采用符合人类自然描述语言的 语法书写计算机程序,如 Basic 语言实现上述计算的格式如下: A=10+20 高级语言简化了程序设计的难度,程序员不必了解细节,编写的程序由专门的编译工 具转换成机器语言。正是这些高级语言的产生,才使得计算机编程能够推广开来。 常见的高级编程语言包括: * DOS 应用程序:Fortran、Basic、Pascal、C * Windows 应用程序:Visual C++、Visual Basic、Delphi、C++ Builder、Java 编程语言除了进行简单的加、减、乘、除计算外,有时还需要进行更复杂的科学计算,

如三角、指数、对数等函数计算,而 CPU 并没有与这些函数对应的指令,只能采取一些近 似的数值算法。 这些数值算法并非每个编程人员都清楚, 因而每个编程语言都提供了这些函 数的通用算法,并以库函数的形式提供给程序员,程序员编程时,只需要简单地调用这些标 准函数即可,如 Visual Basic 采用 sin(x)进行正弦函数计算。 当编译工具把程序员编写的高级语言程序(称为源程序)编译成机器语言时,遇到其 中的函数,并不能转换成机器语言。这样编译的程序称为目标程序,以.obj 为后缀。不管是 什么编程语言,编译后的目标程序都是统一的机器格式。 为了产生真正可以运行的程序,还需要将编译好的目标程序与编程语言提供的库文件 中某些函数的指令连接在一起。这个步骤称为链接(Link) ,只有经过链接的程序才能产生 可执行的.exe 文件。 所有语言的编程步骤如下: 编辑(编写源程序) 、编译(转换成目标程序) 、链接(生成可执行程序) 需要说明的是,不同语言编译的方式不同。有的语言是先将所有程序代码一起编译成 机器语言,再链接生成可执行文件,如 C 语言、Pascal 语言,这种语言称为编译型语言,最 后以可执行的 exe 文件运行;有的语言则可以边编译边执行,如 Basic 语言、Java 语言,这 种语言称为解释型语言;也有些语言既提供编译运行的方式,也提供解释运行的方式,如 Visual Basic,在调试程序时可以采用解释型,一旦调试完成,则采用编译型,将源程序编译 成可执行的 exe 文件。编译型语言的程序执行速度比解释型语言的程序执行速度快。 编程语言种类很多, 初学者究竟应该选择哪种语言?在常用的 Windows 应用程序编程 语言中,Visual Basic 难度最小,功能也最弱,而 Visual C++难度最大,功能也最强大。如 果只希望编写简单初级程序,尽量选择 Visual Basic,如果需要编写功能强大的程序,特别 是需要与计算机硬件打交道的程序, 则选择 Visual C++。 其实, 语言本身的语法都比较简单, 掌握起来也不难。 Visual Basic 将 Windows 应用程序设计的许多细节都隐藏起来了,程序员不需要了解 其细节,只要依照其语法编程即可。而采用 Visual C++语言编程,必须了解 Windows 程序 设计的细节,以及封装这些细节的几百个类(即微软基本类库 MFC) ,而这正是 Visual C++ 学习的难点。 虽然 Visual Basic 隐藏了许多细节, 但了解掌握 Windows 程序设计的细节对学好 Visual Basic 也有很大的帮助,还可以应用这些细节编写出功能强大的应用程序。 本章也将以一定的篇幅介绍 Windows 程序设计的特点,更多的细节可以参考有关 Windows 程序设计的书籍。

1.1.2 编程语言涉及的主要内容 各种编程语言的语法不同,但都涉及以下内容:变量定义、赋值语句、条件语句、循 环语句、结构与类等 一、变量与类型 程序设计过程中,往往涉及到大量的数据,这些数据一般都存放在存储器中(主要是 内存中) 。所谓变量定义,就是在内存中申请一个区域保存某个数据。内存以 8 位二进制为 单元保存信息,这样一个单元称为字节(Byte) ,实际申请内存时,可能需要一个或多个字 节单元,申请的内存单元数量越多,可以保存的数据也越大。变量的类型就是申请内存时的 单元数量以及数据存放在这些单元中的格式。 编程语言往往都提供一些变量类型存放:整数、小数和字符。其中整数的存放可以申 请的内存单元一般为 1 个、2 个、4 个、8 个;小数的存放可以申请的内存单元一般为 4 个 和 8 个;而字符的存放一般为 1 个和 2 个。 以 Visual Basic6.0 为例,整数类型分成:字节型(Byte) 、整型(Integer,占 2 个单元) 、 长整型(Long,占 4 个单元) ;小数类型分成:单精度(Single,4 个单元) 、双精度(Double, 8 个单元) ;字符类型为 String。 每一种类型表示的数据范围一定,在定义时一定要了解数据的范围,再选择合适的类 型。例如:Visual Basic6.0 的字节型(Byte)可以保存 0 到 255 的数据,如果把 256 赋给它, 则保存不下,运行程序时就会提示出错。 不同的编程语言,各种类型需要的内存单元数量和表示的数据范围不同,例如整数 Integer, Visual Basic6.0 采用两个内存单元, 表示数据范围为-32768 的 15 次方) 32767; (2 到 而 Visual Basic.NET 则采用四个内存单元,表示数据范围为-2147483648(2 的 31 次方)到 2147483647。 计算机保存正整数比较容易,采用其二进制格式即可,负整数则需要采用特殊的补码 格式保存,对于 n 位的负整数,其表示范围为。 小数的存放则比较麻烦,一般采用浮点格式,即把小数表示为指数和尾数的格式分别 保存,单精度和双精度小数的表示范围大约为和,它们的有效位数分别为 7 位和 15 位。例 如,Visual Basic6.0 将某个变量定义成单精度(Single) ,则数据 100000.01 保存时,最后的 1 不能存放,实际保存为 1000000.0。在处理小数时一定注意这样的问题。 小数保存时,先转换成对应的二进制格式,再按照指数和尾数格式存放。并非所有的 十进制小数都能准确地转换成相应的二进制格式,如十进制小数 0.1 表示成二进制(乘 2 取 整法,即每次乘以 2,将整数部分提出,保留小数部分继续乘以 2,直到结果为 1) ,为无限 循环,如果保存为单精度,则保存从 1 向后的 23 位二进制(单精度格式共 4 个单元 32 位, 其中 1 位表示正负,8 位表示指数,23 位表示尾数) 。绝大多数小数都是保存的近似值。 对于同一类型的一批数据,可以采用数组形式进行定义,这样就可以使用循环结构进 行处理。 程序执行时,可以申请的内存区域有三处: 程序中定义的数据段。每个应用程序保存其特定数据的区域,在应用程序进入内存开 始运行时,就已经确定了其位置和大小。其中保存什么样的数据,每个数据存放在哪儿,都 是固定的。 这段内存在应用程序执行的整个过程中都是有效的, 任何别的应用程序都不能占 用它, 只有应用程序结束后才可以释放它们再分配给其它应用程序。 只要在这个区域定义的 变量,在整个应用程序执行过程中都有效,这样的变量称为全局变量。实际上,应用程序在 开始执行时,就是按照全局变量的定义情况来分配数据段的。另外,子程序或函数中定义的 静态变量也是在数据段内申请内存, 因而它们在子程序或函数结束后数据仍然有效。 静态变 量与全局变量的区别在于静态变量只能由某个子程序或函数访问, 而全局变量可以由所有的

子程序和函数访问。 程序中定义的堆栈段(Stack) 。每个应用程序保存其临时数据的区域,该区域的位置 和大小也是确定的, 但程序开始运行时并不确定其中保存什么数据。 在应用程序运行过程中, 根据需要把特定数据保存在其中。 保存在这里的数据按照先进后出的方式管理, 在不同的时 刻,其中的数据代表的含义不同。定义在这里的变量称为局部变量,只在某个特定范围内有 效。一般,在子程序或函数内部定义的普通变量都是定义在堆栈中的,进入子程序时申请堆 栈中的内存存放这些变量,数据有效,一旦子程序运行结束,系统自动释放这些内存,则数 据无效。 当前系统剩余的内存。应用程序执行时根据需要从系统剩余内存申请,这种内存往往 称为堆(Heap) ,只要系统还有空闲内存,就可以申请。数据段和堆栈段的大小是固定的, 而堆内存则不固定。需要注意的,从堆中申请内存后,系统以后能够再次申请的内存数量就 减少,随着堆内存申请增多,系统内存越来越少,最终导致使用硬盘代替内存,降低执行速 度,甚至有可能导致系统崩溃。有时候,计算机系统感染病毒后,病毒程序不断申请内存, 导致堆中可以申请的内存越来越少, 可以明显感觉到程序执行速度变慢, 甚至很长时间没有 反应,就像死机一样。编写程序时,对于从堆中申请的内存,使用后应该立即释放。 二、变量赋值 赋值是将具体的数据保存到定义该变量时申请的那段内存区域内。如果赋值数据超过 所申请的区域,不同语言处理方法不同:Visual Basic 提示出错,而 Visual C++则以能够存 放进去的部分作为数据,超过部分放弃。例如,对于占用 1 个单元的正整数,Visual Basic 中赋值 256 则出错,Visual C++中赋值 256 时只把其中的 8 位部分保存到该单元中,高 8 位 部分放弃,实际存放数据为 1。 三、程序控制结构 大多数应用程序并不是按照指令存放的顺序执行程序,往往需要根据条件改变指令的 执行顺序,常用的程序控制结构包括:转移、条件、循环。 转移结构一般采用 Goto 语句进行,只要条件满足,就转移到指定的位置执行程序,程 序中需要定义转移的目标位置。转移语句会导致程序结构混乱,多次转移后,往往不能够清 晰看出程序执行的流程, 应该尽量少用 Goto 语句, 实际上绝大多数使用 Goto 语句的代码都 可以用条件和循环语句替代。 条件结构一般采用 If 语句进行, 有的语言提供了更好的分支结构, C 和 C++的 switch 如 以及 Visual Basic 的 Select 语句。条件的判断以 0 和非 0 为准则,非 0 则条件满足,0 则条 件不满足;有些语言(Visual Basic 、Visual C++)以 True 表示条件满足,False 表示条件不满 足。不同的条件可以采用逻辑“与” (两个条件都满足)“或” 、 (只要有一个条件满足)“异 、 或” (两个条件只能有一个满足)进行组合。 循环结构一般采用 For、Do、While 等语句进行。实际上,循环是一种特殊的条件。 满足条件时循环执行部分代码,不满足条件就结束循环。常用的 For 循环包含四个参量:循 环变量、初值、终值、步长,循环开始时,把初值赋值给循环变量,然后比较循环变量与终 值,如果循环变量大于终值(循环步长为正时)或循环变量小于终值(循环步长为负时) , 则不循环,否则进入循环执行循环体内的代码,每次循环体内代码执行完成后,循环变量自 动加或减步长,然后再比较判断是否结束循环。对于如下的 Visual Basic 循环语句: For i=1 to 10 Step 1 … Next i 循环变量 i,初值 1,终值 10,步长 1。当 i 变成 11 时,循环正常结束。在循环体内可 以采用语句提前结束(Visual Basic 用 Exit For;C 和 C++用 break) 。

如果希望利用 For 循环查找数据,则可以根据循环结束后循环变量的值进行判断。例 如: For i=1 to 10 Step 1 If a(i)=100 Then Exit for Next i If i<=10 Then Print “找到” Else Print “没有找到” End 每次循环后,For 循环自动变化循环变量,一般在循环体内不要再改变循环变量,否 则可能导致循环次数不正确,严重时可能导致进入死循环(无限循环) ,例如: For i=1 to 10 Step 1 i=i-1 Next i 循环变量初值为 1,For 循环本身每次自动加 1,而循环体内则每次减 1,循环变量永 远也不可能大于 10, 导致无限循环,程序停顿在这个循环内。 无论是什么类型的循环格式,都需要慎重地考虑其循环结束的条件,特别是一些循环 条件隐含的情况, 例如读取文件或数据库数据时, 一般根据是否到达结尾来判断循环是否结 束,如果循环体内没有读取下一个数据的语句,则永远也不会到达结尾,形成无限循环。 四、子程序与函数 一般程序中往往存在某些代码需要重复执行,这些代码可以编写在一起,以函数或子 程序形式供程序的其它代码调用(Call) 。子程序与函数没有本质区别,甚至有些语言合二 为一(如 C 和 C++语言统一采用函数) 。一般语言的函数具有结果,即通过函数的调用,可 以得到一个结果,称为返回值,而子程序没有返回值。 无论是函数还是子程序,其程序结构都是一致的。编写子程序时需要指定参数个数以 及每个参数的类型(称为形参) ,而在调用子程序时则要按照定义时的参数个数和类型提供 具体数值(称为实参) 。调用时提供的实参通过堆栈传递给子程序使用。 如果参数大于 1 个,不同语言把实参传送到子程序或函数的顺序不同,C 或 C++按照 从右到左的顺序,而 Visual Basic 则按照从左到右的顺序。 将实参数据传递给子程序或函数时,有两种方式:一种是把具体的数传递过去,称为 按值传送;另一种是把数据在内存中的存放位置(地址)传递过去,称为按地址传送。按值 传送的参数在子程序或函数内部不能再改变, 而按地址传送的参数在子程序或函数内部可以 改变。C 和 C++函数的参数默认按值传送,其指针方式为按地址传送;Visual Basic 的参数 默认按地址传送,只有用 ByVal 修饰的参数才是按值传送。 五、结构与类 每种语言都提供了一定的变量类型,它们能够存放数据的范围是固定的。特定情况下 需要存放的数据可能超过了已有的类型, 则需要自己定义变量类型, 即以已有变量类型组合 起来定义新的类型,这种方式称为结构(Structure)或自定义类型。结构中的每个基本类型 称为其成员。只要定义过某个结构,就可以像基本类型一样用于定义变量。 如果在结构的成员中引入函数,则形成了类(Class) ,这是面向对象编程(OOP)思 想的基础,从 C++语言开始引入。由于类的成员既有变量(可以用于描述某个对象的特征) , 又有函数(可以用于执行对象的某种功能或动作) ,能够形象地表示某种类型的事物 (Object) 类是某种类型对象的公共描述, 。 具体到某个具体对象则需要一个具体化过程 (也

称为实例化过程) ,就像用普通类型定义变量一样,也需要用类定义对象,只有经过定义过 的具有对象才能够对其进行操作。比如, “车”是一个类,不能直接描述其颜色、排量,只 有具体化到某一辆实物车,才可以评价其颜色、动力性能等。 Windows 操作系统是由大量的对象组成,每个窗口就是一个对象,窗口中的各种组成 元件也都是对象。不论是 Visual Basic 还是 Visual C++,编写 Windows 应用程序都离不开对 象。只不过,Visual Basic 淡化了类的概念(但也提供了类的操作方法) ,而 Visual C++则完 全是采用各种类组成应用程序。

1.1.3 Windows 程序设计特点 无论什么语言编写的程序,总是由操作系统加载后才能执行。在 DOS 系统下,通过输 入执行文件名称再回车方式加载程序,而 Windows 系统则通过双击执行文件或其快捷方式 加载程序(也可以输入执行文件名称加载) 。 Windows 操作系统与 DOS 操作系统在加载执行文件后的处理方式上存在很大的区别。 DOS 加载应用程序后,将控制权交给应用程序,只有应用程序执行完成后再将控制权 交还 DOS 操作系统。在某个应用程序运行过程中,无论是键盘的输入,还是外部数据的到 达, 都需要通过该程序本身的代码去读取处理, 如果应用程序编写的代码中没有键盘输入处 理, 则此过程中的键盘输入都没有办法处理, 这就要求编写程序时考虑有关的硬件输入输出 处理。 Windows 加载应用程序后,并不是将全部控制权交给应用程序,而是采用交互方式, 即 Windows 操作系统与应用程序之间合理分工、各司其职:Windows 操作系统负责处理输 入输出、 窗口维护等工作, 而应用程序则负责具体功能的实现, 它们之间通过消息 (message) 进行信息交换。例如,Windows 系统检测键盘和鼠标的输入并进行处理,然后给应用程序发 送键盘或鼠标消息通知应用程序, 应用程序中的各种对象接收到消息后, 再进行相应的处理。 Windows 应用程序的主要功能就是接收消息、对各种消息进行处理,是一种消息驱动机制。 由于这些区别,编写 Windows 应用程序与 DOS 应用程序存在很大的不同,程序结构 也由以往的结构化设计变成了面向对象设计。 Windows 编程的主要特点包括: 一、图形用户界面 以往的 DOS 操作系统采用字符方式, 所有的命令和应用程序都是通过在命令提示行下 输入再回车的方式运行,如果用户不清楚命令和应用程序的可执行文件名称,则无从下手; 而 Windows 系统则由各种图形对象(图标,ICON)组成,每个图形对象代表某个应用程序, 通过鼠标双击,就能够运行某个应用程序。 显示器的显示方式是由显卡控制的,包括两种显示方式:字符方式和图形方式。计算 机启动后直接进入字符方式,再由 Windows 系统将其切换到图形方式。 DOS 程序设计时,运行结果的显示一般采用字符方式(也可以运用一些制表符号在屏 幕上显示简单图形) ,如果需要绘图(如画线、圆) ,则必须转换到图形方式(如采用 Turbo C 的 initgraphics 函数切换到图形) 这些图形的绘制采用屏幕坐标, , 是直接绘制在屏幕上的, 程序执行结束后再切换回字符方式。 由于 Windows 操作系统直接采用图形方式,运行结果的输出就是图形方式,字符和图 形的处理方法是统一的,均是绘制方式。由于 Windows 系统的屏幕上包含许多的窗口和各 种对象,图形的绘制是针对具体对象,即字符和图形是绘制在某个对象上的,可以在窗口上 绘制,也可以在窗口上的某个对象上绘制,还可以在打印机上绘制。Windows 程序设计对绘 图的处理包含以下几个方面工作: 1)绘制对象的准备。在 Windows 系统中,把绘制图形的区域称为 DC(Device Context, 设备环境或称为设备上下文) ,每次绘制图形前,先准备好 DC,DC 可以是桌面、某个窗口、 某个窗口的客户区、 某个对象的可绘制区域或打印机, 然后可以把绘制工具选进指定的 DC, 再开始绘制图形。 2)绘制工具的准备,包括笔(Pen) 、填充画刷(Brush)等 3)具体绘制命令,包括字符、直线、圆的绘制 Visual Basic6.0 处理图形操作时, 将 DC 和绘制工具都转 换成某个对象的属 性 (Property),而把具体的绘制命令转换成某个对象所具有的方法(Method) 。 二、多任务运行机制与动态链接技术

前面已经提过, 程序设计分成编辑、 编译和链接三个步骤。 在以往的 DOS 程序设计时, 链接是将库中某些函数的代码与目标代码真正链接在一起, 生成的可执行文件中就包含了这 些函数的代码,这种链接方法称为静态链接。由于 DOS 操作系统是单任务系统,同一时刻 系统只能运行一个应用程序,内存中某个函数的代码只有一份。 Windows 操作系统则采用多任务运行机制,同一时刻不但可以运行多个应用程序,同 一应用程序也可以运行多份, 如果仍然采用原来的静态链接, 则内存中就会出现同一函数代 码的多个拷贝,这就导致内存利用率降低。为了解决这个问题,使得内存的使用更加高效, Windows 程序设计时往往采用动态链接技术, 即: 在链接时不是将有关函数的代码与目标代 码链接,而是标记为从哪个文件寻找所需要的函数代码,在应用程序执行时,则根据标记查 找指定的文件,如果内存中该文件已经加载,则由函数名称或函数序号找到指定函数,执行 相应的代码,如果内存中该文件没有加载,则由系统按照特定的搜索路径查找文件并加载, 如果该文件不存在,则提示找不到,应用程序也没法运行。 动态链接技术需要采用动态链接库,以.dll 为后缀,安装 Windows 操作系统后,系统 提供了大量的动态链接库,一般保存在 C:\Windows\System32 文件夹下,其中有几个动态链 接库是系统运行所必须的,如:Gdi32.dll 提供了图形操作有关的函数,Kernel32.dll 提供了 系统内核操作有关函数,User32.dll 提供了用户接口有关的函数等。Windows 系统中每安装 一个应用程序,如 Word、AutoCAD 等,均安装相应的动态链接库。 采用动态链接库技术后,应用程序的运行需要有关动态链接库的支持,这样的应用程 序不能通过拷贝直接运行,需要采用安装方式。应用程序开发完成后,通过专门的打包安装 程序,如 InstallShield、Setup Factory 以及 Visual Basic 自带的安装打包工具,将应用程序以 及相关的动态链接库等打包成一个安装程序 Setup.exe,用户运行此安装程序,把应用程序 和有关动态链接库和资源文件拷贝到硬盘上, 并对动态链接库等进行注册, 注册的目的是在 系统注册表中存放动态链接库的相关信息,以便操作系统能够识别该动态链接库。 如果某个应用程序在运行时提示缺少某个动态链接库,可以从其它计算机上拷贝该文 件,并复制到 C:\Windows\System32 文件夹下,再人工注册。注册方法:点击“开始”按钮, 选择“运行” ,输入“regsvr32 xxx.dll” ,点“确定”即可,如图 1.1 所示。 如果在开发应用程序过程中,采用静态链接方式,或只使用了 Windows 系统提供的动 态链接库中有关函数,则不需要安装,可以直接拷贝,这样的应用程序称为绿色软件。 动态链接库除了高效利用内存外, 还是 Windows 系统下各种编程语言之间实现资源共 享的手段。动态链接库可以由各种编程语言开发,编译后形成的.dll 文件为机器语言格式, 与具体开发语言无关。例如:Visual Basic 语言简单易学,但提供的函数较少,功能较弱, 编程时如果缺乏必须的功能,可以采用 Visual C++编写相应的动态链接库,由 Visual Basic 进行调用,正是因为有了动态链接库技术,才使得采用 Visual Basic 也能够开发出功能强大 的应用程序。 三、面向对象编程 Windows 操作系统采用图形化用户界面, 组成 Windows 界面的是包含各种各样图形化 对象的窗口。应用程序运行时,由 Windows 系统给应用程序发送各种消息,再由应用程序 把这些消息派送给指定的窗口, 由窗口有关函数进行处理, 应用程序的核心内容就是针对每 个对象处理各种消息的代码。 Visual C++将程序设计有关的各种资源封装成各种类(MFC,Microsoft Fundation Class) ,如 CMainFrame 类用于创建主窗口,CDialog 类用于创建对话框,CMenu 类用于创 建菜单等,掌握 Visual C++的关键就在于掌握这些类的用途、基本成员等。 Visual Basic 则是将这些编程资源封装成各种控件(Control) ,由这些控件组成窗口界 面,掌握 Visual Basic 的关键就在于掌握这些控件的属性、方法等。与

Visual C++的类比较而言,掌握这些控件要容易得多。Visual Basic 把 Windows 系统发送给 应用程序的各种消息转换成相应的事件,并且规定了各个对象对每个事件处理的子程序名 称,程序员需要做的工作就是编写各个对象的事件处理子程序。这个程序的结构由 Visual Basic 自己处理。图 1.2 即为由各种控件组成的窗口界面。其中的主要控件功能如下: 检查框:用于选择某个选项 单选按钮:用于从多个选项中选择一项 命令按钮:用于执行某个动作,如保存参数、绘制图形等 文本框(编辑框) :用于输入、显示动态文本 组合框:提供多个选项供用户下拉选择 标签(静态文本) :用于显示静态文本 上下按钮:用于递增递减数字输入 选项卡:用于选择不同的参数组 四、使用应用程序接口 API Windows 操作系统安装后,除了提供各种操作功能:文件浏览、网络浏览等,还提供 了大量的函数,这些函数以统一的格式提供给各种编程语言使用。这些函数称为 API 函数 (Application Programming Interface,应用程序编程接口) ,是以动态链接库形式提供的,主 要的 API 动态链接库包括:User32.dll、Gdi32.dll、Kernel32.dll,它们的使用方法与使用动 态链接库的方法一致。 只要在程序设计中加入了对这些函数的说明, 就可以像普通函数一样 使用。例如,某应用程序中需要隐藏鼠标,Visual Basic6.0 中没有这样的函数,而 User32.dll 中提供了 API 函数 ShowCursor。只要在 Visual Basic6.0 的项目中添加如下函数说明: Public Declare Function ShowCursor Lib "user32" Alias "ShowCursor" (ByVal bShow As Long) As Long 则在该项目中就可以调用这个函数隐藏鼠标。 掌握 API 是提高程序员编程水平的关键,各种高级功能的实现,如特殊形状窗口、播 放声音等都需要采用 API 函数。Visual C++的大量类实际就是对 API 函数的封装。 Windows 系统提供的 API 数量很多,达 1000 多个,且随着 Windows 版本的升级,API 函数数量也随之增加。为了帮助程序员了解这些函数如何使用,Visual Basic6.0 提供了一个 辅助工具 API Text Viewer(API 文本浏览器) ,该工具可以提供如上述 ShowCursor 函数的各 个 API 函数说明。 但是, 这个工具并不能对所有的 API 函数提供说明, 特别是随之 Windows 系统升级后新增加的 API 函数,例如,Windows2000 以上版本增加了一个新的 API 函数 SetLayeredWindowAttributes 用于设置窗口的透明度,API 文本浏览器中就没有它的说明。 了解掌握常用的 API 函数, 可以阅读一些关于 Visual Basic6.0 高级应用或技巧的书籍, 也可以通过网络搜索。 五、支持 ActiveX 控件 OCX AcviveX 是微软对能够插入到各种应用程序以及网页中的对象定义,如表格控件,既 可以用于某个窗口上,也可以用于网页上显示数据。AcviveX 的前身称为 OLE(Object Link & Embbed,对象链接与嵌入) 。这些 AcviveX 控件可以用于各种编程语言,作为组成窗口界 面的元素。它们的来源可能是安装有些软件或编程语言时安装的(如安装 Visual Basic6.0 时 会同时安装大量的 ActiveX 控件) ,也可以从 Internet 网上下载安装。 AcviveX 控件文件以.ocx 为后缀, 安装在 C:\Windows\System32 文件夹下。 如果是拷贝 来的.ocx 文件,需要采用与前面.dll 文件相同的注册方法注册。 各种编程语言也提供了 ActiveX 控件的设计方法。 使用 Visual Basic6.0 设计应用程序,除了利用本身提供的各种控件外,还需要使用大 量的 AcviveX 控件,例如,对数据库的访问与数据显示,需要使用 Adodc 控件和 DataGrid

控件。常用 ActiveX 控件的属性、方法以及可以处理的事件也是必须掌握的。

1.1.4 Windows 程序设计的基本结构 Windows 程序设计最早采用基本 C 或 C++语言进行,这种方式称为 SDK(System Developed Kits)方式,其程序基本结构如下: 一、注册窗口类型。大多数的 Windows 应用程序都具有窗口,Windows 操作系统在创 建某个应用程序时, 首先需要注册某种类型的窗口, 然后可以根据该类型窗口的注册信息创 建特定的窗口。注册窗口类型时需要指定的信息包括: 1)窗口类型名称,用于创建窗口或查找窗口时指定 2)该类型窗口创建时的图标、光标、窗口背景颜色以及菜单 3)该类型窗口所属的应用程序 4)该类型窗口的所有消息由哪个函数处理,即所谓的窗口处理函数。这样,当应用程 序接收到某个消息后, 系统能够确定调用哪个函数处理该消息。 Windows 系统中的每一类窗 口背后都有一个窗口处理函数。 5)该类型窗口的有关样式 窗口类型采用 API 函数 RegisterClassEx 进行。 二、创建主窗口。根据注册的窗口类型,调用 API 函数 CreateWindow 创建应用程序 的主窗口。创建时可以指定窗口的标题、位置、大小,并指定该窗口的风格。再调用 API 函数 ShowWindow 显示创建的窗口,然后调用 API 函数 UpdateWindow 通知窗口处理函数 进行其它绘图工作。 三、建立消息循环。应用程序进入一个无限循环结构,循环过程中,不断检测应用程 序的消息队列,分析获得的消息,进行必要的转换,再送给相关的窗口,由其窗口处理函数 进行处理。如果检测到一个退出消息,则结束循环,应用程序也随之结束。 四、处理各种消息。窗口对应的消息处理函数根据消息类型,进行相应的处理。没有 处理的所有消息由 API 函数 DefWindowProc 处理。 以下代码即为采用 C 语言编写的 Windows 应用程序。 对于这个程序, 没有必要弄明白 具体的语句含义,这里也不做解释,希望通过它,能够了解整个 Windows 程序的结构。 #include "stdafx.h" #include "resource.h" HINSTANCE hInst; TCHAR szTitle[100]; TCHAR szWindowClass[100]; LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { MSG msg; HACCEL hAccelTable; WNDCLASSEX wcex; HWND hWnd; strcpy(szTitle,"我的程序"); strcpy(szWindowClass,"WinClass1"); //以下代码注册窗口类型 wcex.cbSize = sizeof(WNDCLASSEX);

wcex.style = CS_HREDRAW | CS_VREDRAW; wcex.lpfnWndProc = (WNDPROC)WndProc;//该类型窗口消息处理函数 wcex.cbClsExtra = 0; wcex.cbWndExtra = 0; wcex.hInstance = hInstance; wcex.hIcon = LoadIcon(NULL, IDI_APPLICATION ); wcex.hCursor = LoadCursor(NULL, IDC_ARROW); wcex.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH); wcex.lpszMenuName =NULL; wcex.lpszClassName = szWindowClass; wcex.hIconSm =LoadIcon(wcex.hInstance, (LPCTSTR)IDI_SMALL); if (!RegisterClassEx(&wcex)) reture 0; hInst = hInstance; //以下代码创建并显示主窗口 hWnd=CreateWindow(szWindowClass,szTitle, WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL); if (!hWnd) { return FALSE; } ShowWindow(hWnd, nCmdShow); UpdateWindow(hWnd); //以下代码建立消息循环,并处理派送消息给相关窗口 while (GetMessage(&msg, NULL, 0, 0)) { TranslateMessage(&msg); DispatchMessage(&msg); } return msg.wParam; } //下面的函数为主窗口的消息处理函数 LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { PAINTSTRUCT ps; HDC hdc; switch (message) { case WM_COMMAND: //处理命令消息 …… break; case WM_PAINT: //处理绘图消息

hdc = BeginPaint(hWnd, &ps); …… EndPaint(hWnd, &ps); break; case WM_DESTROY: //处理关闭窗口消息 PostQuitMessage(0); break; … default: return DefWindowProc(hWnd, message, wParam, lParam); } return 0; } 对于每个 Windows 应用程序来说,上述的前三个步骤都是类似的(即主函数 WinMain 中的所有内容) ,每个应用程序的区别仅仅在于窗口类型名称和窗口处理函数名称不同,完 全没有必要由每个程序员都书写一遍, 可以由编程语言自动给窗口类型和窗口处理函数取一 个默认名称。所以,各种编程语言都对这三个步骤进行了适当处理:Visual C++将它们封装 成 CWinApp 类,由该类创建主窗口,再通过消息映射机制处理各种消息;Visual Basic 则完 全隐藏了前三个步骤,程序员只需要编写处理各种消息的子程序,Visual Basic 内部已经规 定了这些子程序的名称。

1.2 Windows 系统的窗口和消息机制 窗口是屏幕上的特定区域,是 Windows 应用程序的基本操作单元,在该区域内显示各 种数据和文字,可以接收键盘按键和鼠标点击输入。窗口中还包含其它各种对象,组成应用 程序的用户界面。Windows 系统中窗口的概念非常广泛:各种普通窗口是窗口;窗口中包含 的按钮、文本框等也是窗口;Windows 系统本身的桌面也是一个窗口;Windows 系统桌面 最低部的任务栏、开始按钮和系统托盘(Tray)都是窗口。每个窗口都属于注册过的某个窗 口类型, Windows 系统本身也已经注册过大量的窗口类型, 程序员可以由这些窗口类型直接 创 建需 要的窗 口, 例如, 可以 采用下 面代码 在窗 口上 创建一 个按钮 (其 窗口 类型为 BUTTON) : hWnd=CreateWindow( “ BUTTON ” , “ 命 令 按 钮 1 ” ,WS_CHILD|WS_VISIBLE, 100,100,500,200,hWndParent,NULL,hInstance,NULL) 1.2.1 Windows 窗口组成 Windows 窗口由标题栏、边框和客户区以及菜单、工具栏和状态栏组成。标题栏的主 要作用包括:显示图标、显示标题、拖动窗口、显示最大化最小化和关闭按钮;边框用于区 分每个窗口;客户区则是由用户自己使用,可以在其中安排各种对象,显示数据等,客户区 的坐标原点在其左上角, 各种图形都是绘制在窗口的客户区。 标题栏和边框统称为非客户区, 由 Windows 操作系统负责对其进行绘制与维护 图 1.3 是 Windows 记事本的运行主窗口,它包含了 Windows 窗口的主要组成元素。其 中的客户区部分被三个子窗口占满,分别为显示文字的文本框以及水平和垂直滚动条。 Windows 窗口的标题栏以及边框是由系统按统一尺寸绘制的,这些尺寸可以通过显示 属性进行设置,设置方法为:桌面任意位置点击鼠标右键,从弹出的菜单中选择“属性” , 弹出 “显示属性” 对话框, “外观” 选择 选项卡中的 “高级” 则弹出如图 1.4 所示的 Windows , 重要尺寸设置对话框,在这里可以设置标题栏、边框、图标、菜单的大小、字体、颜色等尺 寸参数。只要修改这些参数,其后打开的所有 Windows 窗口均按新的尺寸绘制标题栏等。 Windows 系统对窗口非客户区的绘制提供了统一的标准,但不限制程序员的个性化风 格,程序员完全可以自己绘制出不同风格的窗口非客户区。图 1.5 中窗口就具有个性化的窗 口非客户区。 许多软件具有所谓的换肤功能, 就是可以根据指定的图片产生个性化的窗口非 客户区, 一些媒体播放器软件、 输入法软件等都具有换肤功能, 换肤是一种时尚的程序界面。

1.2.2 窗口分类 Windows 系统具有各种各样的窗口,它们的功能和作用各有不同,可以按照以下几种 方式进行分类。 一、按窗口风格分类,可以分成重叠窗口、子窗口和弹出窗口。重叠窗口 (OVERLAPPED)通常用于建立应用程序主窗口,有时也叫做“主窗口”或者“框架”窗 口,前面用 CreateWindow 函数创建的应用程序主窗口就是重叠窗口;弹出窗口(POPUP) 通常以对话框和消息框的形式与用户对话,如应用程序中的各种参数或选项设置;子窗口 (CHILD)是包含在主窗口或弹出窗口中的各种窗口,它们的存在依赖于宿主窗口(也称 父窗口,Parent) ,如窗口中的按钮、文本框等对象,对那些看起来像按钮或控件的子窗口, 也称为“控件”窗口。Windows 系统的桌面(Desktop)也是一个特殊的窗口,每个应用程 序的窗口实际上都是位于桌面窗口之上的,且都属于它。 二、按窗口显示方式分类,可以分成模态窗口(Modal)与非模态窗口(NonModal) 。 所谓模态窗口,是以一种独占形式显示窗口,这样的窗口显示时,不能再选择应用程序的其 余窗口,直到把它关闭,常见的各种对话框都属于模态窗口;而非模态窗口则不是以独占方 式显示,显示非模态窗口时,用户也能够选择其余窗口。 三、 按窗口显示打开文档风格分类, 可以分成单文档 (SDI, Single Document Interface) 窗口和多文档(MDI,Multi-Document Interface)窗口。单文档窗口中,每次只能打开并显 示一个文件的内容,如 Windows 的记事本程序就是单文档窗口;而多文档则可以同时打开 并显示多个文件的内容,如 Word 就是一个典型的多文档窗口应用程序。

1.2.3 窗口有关概念 无论是采用 Visual Basic 还是 Visual C++进行 Windows 程序设计,下面这些概念都是 经常要涉及的。 一、窗口形状与区域 普通的 Windows 窗口形状都是矩形, 也有某些应用程序的窗口是其它形状的。 实际上, Windows 系统对某个窗口的显示是由一个区域进行限制的, 即窗口只显示指定区域内的部分 内容,区域可以是矩形、椭圆形,也可以是图片形状、文字形状。Windows 系统默认按矩形 区域显示窗口, 可以调用 API 函数 SetWindowRgn 改变某个窗口的显示区域, 形成特殊形状 的窗口。Windows 系统提供了若干创建区域的 API 函数。 图 1.6 所示即为几个特殊形状的窗口,它们的显示区域由图形或文字形成。 二、窗口的位置与窗口重新绘制 窗口在 Windows 桌面上的显示在立体的,除了平面坐标位置外,还有一个 Z 坐标,即 垂直于屏幕的坐标。平面坐标由 X、Y 坐标指定,坐标原点位于屏幕左上角(或所属父窗口 的客户区左上角) ,水平坐标自左向右递增,垂直坐标由上向下递增。Z 坐标用于决定每个 窗口的显示顺序,只有 Z 坐标为 0 的窗口,才显示其全部,其它窗口的部分区域被最前面 窗口覆盖住,Z 坐标也称为 Z Order。 当某个被覆盖窗口又回到最前面时,需要对其被覆盖区域重新绘制,这个过程是由 Windows 系统自动完成的。Windows 系统时刻检测每个窗口的位置,只要发现某个窗口的 部分区域需要重新绘制(Windows 系统把这个区域称为无效区域) ,就按照原先注册的窗口 类型绘制窗口,同时将窗口上的所有被覆盖过控件(或子窗口)也一起绘制出来。 然而,Windows 系统并不监视应用程序运行过程中用户绘制在窗口的图形或文字,重 新绘制窗口时不绘制这些内容。由于这个原因,程序运行时通过画线、画圆等命令绘制的图 形要素都是临时的。为了解决这个问题,Windows 系统在重新绘制窗口时,给应用程序发送 一个特定的消息通知应用程序, 应用程序可以在接收到这个消息时绘制图形。 所以, Windows 程序设计中的画图代码应该放置在对该消息进行响应的函数内, 即只要重新绘制窗口, 就画 图。 如果需要在程序的其它位置画图, 可以调用 API 函数 InvalidateRgn 使得窗口区域无效, 从而触发窗口重画,并发送消息通知画图函数。 一般的 Windows 窗口的 Z 坐标是随时改变的,只有激活的窗口才在最前面。然而, Windows 系统允许建立永远在最前面的窗口,即所谓的 Almost On Top 窗口,如许多编辑器 (如 Word、记事本等)中的查找窗口就是这类窗口,它们即使在非活动状态下也位于最前 面。 三、窗口的句柄 在应用程序和 Windows 系统中, 对于某个创建的窗口, 采用句柄方式表示。 所谓句柄, 是一个代表窗口的 32 位整数,这个数是由 Windows 系统在创建窗口时动态分配的,一般 Visual C++中用 HANDLE 类型(该类型等价于 32 位整数)定义。只要能够获取某个窗口的 句柄,就可以控制该窗口的行为或状态。例如,对于 Windows 系统左下角的“开始”按钮, 可以用 API 函数 FindWindow 在任务栏窗口上查询类型为“BUTTON”的子窗口,获取其句 柄后,可以用 API 函数 SetWindowText 将标题改成其它文字,也可以调用 API 函数 ShowWindow 隐藏该按钮。 Windows 程序中,除了窗口用句柄表示外,许多资源都可以采用句柄形式表示:窗口 显示区域用区域句柄(hRgn)表示;画图的画笔用画笔句柄(hPen)表示;应用程序用实 例句柄(hInstance)表示;菜单用菜单句柄(hMenu)表示等。 Visual Basic 在程序设计时,对于每个窗口采用名称表示,如 Form1、Command1 代表

某个主窗口和某个命令按钮的名称, 这些名称仅仅用于编写程序代码时代表这些对象, 一旦 程序运行后, Windows 系统也是采用句柄表示它们。 这些对象都提供了一个 hWnd 属性表示 其句柄,当需要调用 API 函数改变窗口的默认风格时,需要使用这个属性 四、窗口的输入焦点 在应用程序运行时,用户的键盘和鼠标输入消息能够传递到的某个窗口称为具有输入 焦点(Focus)的窗口,任意时刻只要一个具有输入焦点的窗口。 当窗口中含有子窗口时,子窗口优先获得输入焦点。各个子窗口获得输入焦点的方法 有: 1)利用 Tab 键在每个能够获得输入焦点的子窗口(控件)间切换 2)利用鼠标直接选择指定子窗口 3)利用 Alt+快捷键选择指定子窗口 4)调用 API 函数 SetFocus 强制某个窗口获得输入焦点 当某个窗口获得输入焦点和失去输入焦点时,Windows 系统均会发送相应的消息,通 知窗口处理消息。 1.2.4 主要窗口类型 程序员在程序设计中可以利用自己注册的窗口类型创建窗口, 也可以利用 Windows 系 统提供的大量窗口类型创建各种标准窗口和子窗口,常用的 Windows 窗口类型见表 1-1。 表 1-1 常用 Windows 定义窗口类型 窗口类型 窗口 说明 BUTTON 按钮 产生命令按钮 STATIC 静态文本 产生标签 EDIT 编辑框 产生文本框 #32770 对话框 #32770 为字符串, 不是数值 #32769 桌面窗口 代表桌 面 toolbarWindow32 工 具 栏 窗 口 窗 口 的 工 具 栏 SysListView32 列 表 视 图 窗 口 SysTabControl32 选项卡窗口 Tooltips_class32 小提示窗口 Shell_TrayWnd 任务栏窗口 桌面下方任务栏 TrayNotifyWnd 托盘窗口 桌面右下角区域 ShellDll_DefView 桌面图标区 域窗口 排列桌面图标区域 在 Windows 系统中只有一个 Shell_TrayWnd 类型和一个 TrayNotifyWnd 类型的窗 口,分别为 Windows 桌面下方的任务栏窗口和系统托盘窗口,任务栏窗口用于显示打开窗 口的标题, 而系统托盘则是显示某些运行程序图标的区域, 如瑞星杀毒软件运行时在该区域 显示伞状图标。 为了得到桌面左下方的“开始”按钮句柄,首先根据 Shell_TrayWnd 类型查找任务栏 窗口,获得其句柄,然后在其上继续查找 BUTTON 类型的窗口即可。Visual C++安装后提 供一个有用的应用程序 Spy++,可以用于查询某个窗口的类型,图 1.7 即为 Spy++获取的桌 面窗口层次结构图,从中可以看出:任务栏窗口是桌面窗口的子窗口,而“开始”按钮又是 任务栏窗口的子窗口。 下面的代码调用 API 函数 FindWindow 和 FindWindowEx 获取“开始”按钮句柄,调 用 API 函数 ShowWindow 将“命令按钮”隐藏。 Dim hWnd1 As Long,hWnd2 as Long hWnd1 = FindWindow("Shell_TrayWnd","") hWnd2 = FindWindowEx(hWnd1, 0, "Button", "" ) ShowWindow hWnd2, 0 1.2.5 Windows 消息 消息是 Windows 系统与应用程序之间、 各个应用程序之间以及应用程序内部各部分传 递信息的手段。当 Windows 系统加载某个应用程序时,就为该应用程序建立一个消息队列, 所有发送给应用程序的消息都进入这个消息队列排队,等待被处理的机会。 每个消息由三个部分组成:消息号、字参数和长参数。

消息号是标识消息的整数,每个消息具有唯一的消息号。Windows 系统将消息号分成 三个部分:0~1023(3FFH)为系统定义消息;1024~32767(7FFFH)为用户定义消息; 32768~49151(BFFFH)为系统保留消息;49152~65535(FFFFH)为程序运行时使用。这 些消息号不方便记忆,实际使用时用特定的名称代替,是 Windows 系统提供的 Windows.h 文件中采用#define 定义的宏。例如: #define WM_USER 0x400 #define WM_COMMAND 0x111 #define WM_CREATE 0x1 #define WM_CLOSE 0x10 #define WM_PAINT 0xf 字参数和长参数提供消息附加的信息。在 Windows 老版本中,字参数占用 2 个字节, 而长参数占用 4 个字节,现在的 Windows 版本中,这两个参数都占用 4 个字节。对于不同 的消息,字参数和长参数内容不同。 Windows 的消息分成以下几大类: 窗口管理消息 输入消息 系统消息 控件处理消息 控件通知消息 非客户区消息 MDI 消息


更多相关文档:

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

窗体上显示结果为: (55)C A)abdc B)cdab C)abcd D)bcad 第 8 页共 25 页 《计算机程序设计基础》课后练习题 2 一、判断题 1. (错)任何控件都有一个...

计算机程序设计基础教材

计算机程序设计基础教材_计算机软件及应用_IT/计算机_专业资料。第一章 计算机及程序设计基础知识 计算机是 20 世纪最伟大的科技成果之一。 自 1946 年第一台计算机...

计算机程序设计基础复习资料

计算机程序设计基础复习资料_计算机软件及应用_IT/计算机_专业资料。计算机程序设计...(a+b); //第一步换为 area=r*r; //第二步被换为 area=a+b*a+b;...

第一章:程序设计基础

第一章:程序设计基础第一章:程序设计基础隐藏>> 第一章 程序设计基础 计算机就是一台能存储程序和数据并能自动执行程序的机器, 计算机只所以能够自动完 成一系列...

2014~2015(1)《计算机程序设计基础》实验报告

计算机程序设计基础 (C++) 实验报告 计算机基础教育中心 二 O 一四年九月 实验__1__实验报告教学班级:___ 学生学号:___ 学生姓名:___ 实验日期:___ 实验...

2015级《计算机程序设计基础(C)》课程习题一附答案

2015 级《计算机程序设计基础(C)》课程习题一一、选择题 1.一个 C 程序的执行是从___。 A)本程序的 main 函数开始,到 main 函数结束 B)本程序文件的第一...

《计算机程序设计基础》考试大纲 2014

(44+20)类) 1、课程名称:计算机程序设计基础 2、试卷适用专业、年级: 全校 2014 级非计算机各专业 3、开课学年、学期:2014-2015 学年第 2 学期 4、考试...

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

计算机程序设计基础》课后练习题 1 计算机程序设计基础》课后练习题 一.判断题 (1) (错)事件过程由某个用户事件或系统事件触发执行,但不能被其他过程调用。 (...

计算机程序设计基础A卷

2014—2015 学年第一学期 计算机程序设计基础(A)卷(适用年级、专业: 14 级计算机应用技术、电子商务专业 考试时间:120 分钟 ) 姓名: 学号: 专业班级: 考试方式...

计算机程序设计基础试卷

广州松田职业学院 试题卷 2012 级学生毕业前补考试卷计算机程序设计基础卷(适用...( ) A)C 程序必须由一个或一个以上的函数组成 B)函数调用可以作为一个独立...
更多相关标签:
计算机基础与程序设计 | 计算机程序设计基础 | 计算机基础和程序设计 | 计算机基础及程序设计 | 第一章计算机基础知识 | 大学计算机基础第一章 | 计算机应用基础第一章 | 计算机基础第一章作业 |
网站地图

文档资料共享网 nexoncn.com copyright ©right 2010-2020。
文档资料共享网内容来自网络,如有侵犯请联系客服。email:zhit325@126.com