完整详细全面的VB教学PPT课件_第1页
完整详细全面的VB教学PPT课件_第2页
完整详细全面的VB教学PPT课件_第3页
完整详细全面的VB教学PPT课件_第4页
完整详细全面的VB教学PPT课件_第5页
已阅读5页,还剩391页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

VisualBasic程序设计教程,(VisualBasic6.0),一、为什么要学本课程?,全国计算机等级考试(二级)中,计算机程序设计是必修课程。Windows程序设计的语言有如下几种:传统的CC+语言:面向过程,学习难度大。VisualC+:面向对象,学习难度大。VisualFoxPro:面向对象和数据库,已停止发展。VisualBASIC:面向对象,功能强大,比较简单,适合于作为第一门计算机课程。,学了VB可以干什么?VB可以实现:开发各种应用程序。如“考试系统”。数据库管理。如“财务管理、成绩管理”等。开发动态交互网站。如“电子商务、网上查询”等。(用VBScript脚本语言,是VB的子集),二、考试要求,国家二级考试:本学期末可以开始报考。分科:笔试机试,单科成绩一年内有效。考场:本校考场。考试时间:每年4月、月,提前个月报名,必须以班为单位集体报名。考试费:130元。考试内容:参看模拟考试软件和考试大纲。省二级考试:参看考试大纲,三、学习要求,上课:认真听讲,适当做笔记,不要什么都记。下课:多上机练习、多背程序、多做题。上机实验:要求提前写好程序时,希望尽量做到。最大目的:锻炼逻辑思维,培养创造性,学会发现问题、思考问题、分析问题、解决问题的方法。(掌握算法),第一章概述,第二章VisualBasic程序设计入门,第三章窗体与常用控件,第四章程序设计基础,第五章程序控制结构,第六章数组,第七章过程,第八章文件,第九章图形操作,第十章界面设计,第十二章程序调试及错误处理,第十一章VisualBasic数据库编程,VisualBasic程序设计教程,第一章概述,1.1VisualBasic的发展和特点1.1.1VisualBasic的发展,VisualBasic是一种可视化的、面向对象和采用事件驱动方式的高级程序设计语言,可用于开发Windows环境下的各类应用程序。VisualBasic由Microsoft公司于1991年推出,它的诞生标志着软件设计和开发开始了一个新的时代。自1991年至今,Microsoft公司先后发布了1.0-7.0等几个升级版本,使得功能更加强大、完善。目前比较常用的版本是VisualBasic6.0、VisualBasic.NET等。VisualBasic6.0包含学习版、专业版和企业版。1.1.2VisualBasic的特点VisualBasic是目前所有开发语言中最简单、最容易使用的语言。作为程序设计语言,VisualBasic主要有以下特点。1可视化编程。2面向对象的程序设计。3结构化程序设计语言。,第一章概述,4事件驱动编程机制。5强大的数据库访问能力。6对象的链接与嵌入(OLE,ObjectLinkingAndEmbedding)。7高度的可扩充性。8支持动态数据交换。,1.2VisualBasic6.0的启动和退出,1VisualBasic6.0的启动2VisualBasic6.0的退出结合VisualBasic6.0的开发环境介绍VisualBasic6.0多种启动方法和退出方式。,1.3VisualBasic6.0集成开发环境,第一章概述,VisualBasic6.0集成开发环境(IDE,IntegratedDevelopmentEnvironment)是提供设计、运行和测试应用程序所需的各种工具的一个工作环境。这些工具互相协调、互相补充,大大减少了应用程序的开发难度。VisualBasic6.0启动后,出现如图的对话框,选择“标准EXE”,再单击“打开”,即可进入VisualBasic6.0集成开发环境,如下图所示。,第一章概述,属性窗口,工具箱窗口,布局窗口,代码窗口,工程资源管理器窗口,工具栏,菜单栏,标题栏,窗体设计窗口,第一章概述,1.4VisualBasic6.0的帮助系统,1.4.1使用MSDNLibraryMicrosoftVisualStudio中的MSDNLibrary,包含VisualBasic6.0帮助信息的全面帮助系统,包括示例代码、文档、技术文章、Microsoft开发人员知识库、以及在使用Microsoft公司的技术来开发解决方案时所需要的其他资料。1.4.2使用上下文相关的帮助VisualBasic6.0提供了F1功能键上下文相关帮助。上下文相关帮助是指用户在窗口中进行工作的任何时候,按键盘上的F1键,即可获得正在操作对象的帮助内容。1.4.3从Internet上获得帮助在Internet上有大量的介绍VisualBasic6.0程序设计技巧、经验的站点,许多站点上还有例子及源程序下载。,第二章VisualBasic程序设计入门,2.1VisualBasic编程的基本概念,学习计算机程序设计课程的目的,就是学会怎样与计算机交流,将人解决问题的思路、方法、手段以某种计算机能理解的方式告诉计算机,让计算机根据人的指令去完成某项特定的工作。,2.1.1程序语言与程序设计1、程序设计语言人类进行交流的语言由语音、词汇和语法构成一定系统;而人与计算机则是通过程序设计语言进行交流的。程序设计语言由字、词和语法规则构成指令系统。计算机程序设计语言有多种,可用不同的程序设计语言编写不同的程序来解决同一个问题。从计算机发明至今,随着计算机硬件技术和软件技术的发展,计算机程序设计语言经历了机器语言、汇编语言、高级语言几个阶段。从机器的角度看,程序设计语言可以分为低级语言和高级语言两大类。,第二章VisualBasic程序设计入门,低级语言是面向机器的指令系统,又分为机器语言和汇编语言。高级语言是接近人类习惯和语言描述方式的指令系统。高级语言不依赖于机器,构成简单,移植性好,便于记忆、学习和维护。人们常说的“程序设计语言”就是指高级语言。高级语言又分为面向过程的程序设计语言和面向对象的程序设计语言。2程序设计计算机程序是用某种程序设计语言编写一组指示计算机每一步动作的指令,运行于某种目标体系结构上。计算机解决问题的方法和步骤,称为“计算机算法”,简称“算法”。算法是我们学习的重点内容之一,需要我们在学习中逐步积累。程序设计主要有两个方面的任务:首先是拟定算法,即将需要计算机处理的实际问题抽象为数学模型,并设计出解决问题所需的方法和步骤;然后是编制程序,即用合适的程序设计语言对设计的算法进行编码。,第二章VisualBasic程序设计入门,VisualBasic是采用事件驱动编程机制的可视化程序设计语言。可视化程序设计利用系统所提供的可视“控件类”来创建“对象”,不需编写大量代码去描述界面元素的外观和位置,即可完成界面的设计工作,从而使界面设计更为轻松、简捷、方便和灵活。,2.1.2面向对象程序设计1对象与类对象:是具有某些特征的具体事物的实体;类:是同种对象的集合与抽象,它包含这种对象的属性描述和行为定义。具体的讲,在VB中,工具箱中的控件就是类,设计窗体时,将它(们)放在窗体上时,就是对象。面向对象程序设计方法,是将数据与程序封装成一个互相依存、不可分割的整体,这个整体被称为“对象”,每个对象都是可视的。在VB系统中,对象的特性、名称、大小、形状、颜色及功能被称为属性。,第二章VisualBasic程序设计入门,VB中的“类”是同种对象的集合与抽象,是创建对象的模板。,对象,类,第二章VisualBasic程序设计入门,2对象的属性、事件和方法对象的属性、事件和方法是对象的三要素(学习重点)。属性:是描述和反映对象特征的参数。例如,对象的标题、颜色、位置、大小等属性决定了对象展示出的界面具有什么样的外观及功能。对属性不了解,就不可能设计出好的程序。属性的表示:对象名属性两种属性设置方法:(1)在设计阶段设置(在属性窗口);(2)在程序运行中设置,即在程序代码中赋值。对象名属性=属性值这里的“=”号为赋值号事件:对象所受到的外部行为,也就是发生在对象上的动作;该对象上发生了事件,如果有响应,这就是事件过程。格式如下:PrivateSub对象名_事件(参数表)Endsub,第二章VisualBasic程序设计入门,方法:对象能完成的动作。方法的动作是事先为程序设计人员提供的一种特殊的过程和函数。(是不可见的程序代码)对象方法的调用格式:对象方法(参数表),例2.1.1Move方法的调用示例。在窗体上创建了一个文本框对象Text1,用鼠标单击窗体时,将文本框移到坐标为(200,100)的位置上。采用Move方法来实现,其事件过程为:PrivateSubForm_Click()窗体单击事件Text1.Move200,100调用Move方法EndSub,例2.1.2Print方法的调用示例。用鼠标单击命令按钮时,在窗体上显示“欢迎进入VB6.0!”。事件过程为:PrivateSubCommand1_Click()命令按钮单击事件Form1.Print“欢迎进入VB6.0!”调用Print方法EndSub,注意省略对象时的含义(指窗体),第二章VisualBasic程序设计入门,2.1.3可视化程序设计基础,1窗体模块窗体是VisualBasic程序设计的基础,是最常见的对象。窗体也是容器,各种控件对象都建立在窗体上。用户通过窗体和窗体上的控件向应用程序提供数据和控制命令,并通过窗体和窗体上的控件获得程序执行结果。VB应用程序一般至少包含一个窗体,有的含有多个窗体,一个窗体对应工程管理器中一个窗体模块。2其他用户界面元素窗体及其控件、菜单栏、工具栏和状态栏是用户界面的基本元素。新建的窗体并不包含控件、菜单栏、工具栏和状态栏,只是在必要时根据应用程序的需要,由程序员自行设计。,可视化程序设计的特点是:引入了控件的概念和事件驱动,程序开发过程一般遵循先设计界面,再基于事件编写程序代码。,第二章VisualBasic程序设计入门,2.1.4事件驱动,1控件对象的事件VisualBasic系统为每个控件都设置了若干事件(如Click、DblClick、Load等)。多数事件都是由用户驱动,有的事件是由系统来驱动(如Load事件)。,在VB的代码窗口中,有对象列表框和事件列表框。只要是在用户界面设计时创建的控件对象,系统都会将其控件名添加到对象列表框中。若是选中对象列表框中的一个对象,在事件列表框中就会列出该对象的所有事件以供选择。,第二章VisualBasic程序设计入门,2事件过程事件过程是一段告诉计算机应该执行什么操作的程序代码。每个事件均能驱动相应的事件过程,事件过程代码需要用户自己来编写。VisualBasic程序的主体通常是由若干个事件过程组成的。事件过程的执行是由用户或系统的动作驱动。例如,单击鼠标按钮,触发按钮的Click事件,则对应该事件过程中的代码就会被执行。,事件过程的一般格式是:PrivateSub对象名_事件(参数表)事件过程的过程头事件过程的程序代码Endsub事件过程的过程尾,3.事件驱动机制面向对象的程序设计中,每个对象都能响应多个不同的事件,每个事件均能驱动一段能完成某项功能的程序代码。,程序代码的执行顺序,基本上取决于事件发生的顺序。,第二章VisualBasic程序设计入门,例2.1.3事件驱动实例。窗体界面如图2.1.4所示,运行程序后,用鼠标单击、中的任何一个按钮,红色小球就会做出相应的运动。如果鼠标单击按钮,红色小球向下移动一次,而其它方向不动;若鼠标单击按钮,红色小球向左移动一次,而其它方向不动。,解:界面设置:在窗体上用Shape控件类生成1个小球,用CommandButton类创建4个命令按钮。属性设置:将控件对象Shape1的Shape属性为Circle,FillColor属性设置为红色,Fillstyle属性设置为0-Solid;将4个命令按钮的Caption属性分别设置为、(软键盘输入)。,分析:本程序不改变Shape控件的大小,由Shape控件的Left属性表示沿水平方向的移动,变量mx表示位移的增量,+mx为向右移动,-mx为向左移动;用Shape控件的Top属性表示沿垂直方向的移动,+my为向下移动,-my为向上移动。(程序代码分析请打开例2.1.3),第二章VisualBasic程序设计入门,2.2控件对象,控件是VisualBasic应用程序界面设计的主要部件。VisualBasic6.0提供了大量的控件。控件的操作主要包括控件对象的建立、控件的属性设置和控件事件过程代码编制。,2.2.1常用的控件类型:VB中的控件通常分为3种类型:1、标准控件(也称为内部控件):VB启动后,标准控件就以图标的形式出现在工具箱中,不能删除。2、ActiveX控件:这类控件不在工具箱中,而是以.ocx类型文件形式存在。需要时,ActiveX控件可以添加到工具箱中,也可以从工具箱中移除。3、可插入对象:用户可将Word文档、Excel工作表、PowerPoint幻灯片等作为一个控件对象类添加到工具箱中,编程时根据需要再创建对象。,第二章VisualBasic程序设计入门,2.2.2标准控件,工具箱中每种工具都用一个图形按钮来表示,除了第一个指针工具,其余都是控件类。每个按钮的功能如表2.2.1所示。,控件对象的创建与操作VB工具箱中的控件对象类用于窗体界面设计。2.2.3控件的属性设置控件的属性设置有两种方法(前面已提过):1、在界面设计阶段可以通过属性窗口直接设置;2、在程序运行的过程中,可以在代码中改变控件的属性。格式为:对象名属性=属性值注意省略对象时的含义!控件的多数属性既可利用属性窗口设置,也可根据需要在程序运行时通过程序代码来改变;也有少数属性只能用一种方式设置。,第二章VisualBasic程序设计入门,例2.2.1在程序代码中修改属性实例。单击窗体,在标签中用红颜色显示“欢迎进入VB6.0!”,如图所示。,解:程序界面设计和代码分析见实例程序。PrivateSubForm_Click()Form1.Caption=运行程序修改属性设置窗体标题Label1.BackColor=a,“b=”;b,“c=”;c输出结果EndSub程序运行的结果为:a=2b=2c=7,第四章程序设计基础,4.3运算符与表达式,运算是对数据进行加工处理的过程。描述各种不同运算关系的符号,称为运算符。而参与运算的数据,则称为运算量。表达式由运算符和运算量构成,是说明应对数据进行何种操作的基本语法单位。表达式中的运算量,可以是常量,也可以是变量,还可以是函数。单个的变量或常量也可以看作是表达式。,4.3.1算术运算符,算术运算符是程序中最常用的一种运算符,用来执行简单的算术运算。在VB中提供的8个算术运算符,按运算优先级顺序,如表4.3.1所示。注意与数学中的运算符的区别,第四章程序设计基础,注意:/、Mod的区别(功能、优先级)。例:10/3,103,10Mod3的结果分别是3.3333,3,1。其中,与Mod的操作数应为整数,如为小数,先按四舍五入取整,然后进行运算。其中,Mod运算结果的正负由被除数确定。如:Print5-5.2结果为:-1Print44.8结果为:0Print-43.8结果为:-1Print-5Mod2结果为:-1Print-5Mod5.8结果为:-5Print5Mod-4.2结果为:1特别注意:小数尾数刚好为0.5时的四舍五入?(取四舍五入湊偶法则)如:Print124.5Print83.5X=1.5:y=2.5(x,y为整型变量)Printx,y结果是多少?,第四章程序设计基础,VB算术表达式虽然与普通的数学表达式极为相似,但还是有所区别。,第四章程序设计基础,4.3.2关系运算符,关系运算符也称比较运算符,用于比较两个表达式之间的关系。在VB中共提供了8种关系运算符,如表所示。,Like:比较字符串表达式和SQL表达式的样式。一般用于数据库查询Is:比较两个对象的引用变量,一般用于对象操作。,第四章程序设计基础,说明:(1)所有关系运算具有相同的运算优先级。(2)数学不等式:axb,在VB中不能简单地写成“a=x=b”,应为“a=0Theny=x1Elsey=2*x+5EndIf由此可见,块If语句在功能上与行If语句完全等价。,1、用冒号连接的多条语句2、多行语句,第五章程序控制结构,例5.2.2输入一个学生的成绩,如果高于60分则输出“及格”,否则,输出“不及格”。PrivateSubForm_Click()DimscoreAsIntegerscore=Val(InputBox(请输入成绩:)Ifscore=60ThenPrint及格ElsePrint不及格EndIfPrintscore=;scoreEndSub程序运行结果,如图所示。,第五章程序控制结构,2单分支If单分支If语句是块If语句的最简单形式。如果省略双分支中的Else子句,则其格式可简化为:IfThenEndIf,例5.2.3输入两个整数a和b,并按从大到小的顺序存放。即若a小于b则交换两个数的位置,否则直接输出a和b。PrivateSubForm_Click()DimaAsInteger,bAsInteger,tempAsIntegera=Val(InputBox(请输入a):b=Val(InputBox(请输入b)Ifa=90ThenPrint优ElseIfscore=75ThenPrint良ElseIfscore=60ThenPrint及格ElsePrint不及格EndIfEndIfEndIfPrintscore=;scoreEndSub,第五章程序控制结构,If语句的嵌套用法有时显得过于冗长。为此,在VB中提供了一种带ElseIf子句的多分支If语句来规范程序的书写。其语法格式为:IfThenElseIfThenElseIfThenElseEndIf它的执行过程是:按从上到下的顺序依次判断各表达式的值,若某个表达式为真,则执行相应的语句块,并跳过剩余的语句;若所有条件表达式都不为真,则执行最后的Else语句。其控制流程,如图5.2.3(c)所示。,第五章程序控制结构,例5.2.4也可用多分支If语句改写如下:PrivateSubForm_Click()DimscoreAsIntegerscore=Val(InputBox(请输入成绩:)Ifscore=90ThenPrint优ElseIfscore=75ThenPrint良ElseIfscore=60ThenPrint及格ElsePrint不及格EndIfPrintscore=;scoreEndSub,第五章程序控制结构,5.2.3SelectCase语句,SelectCase语句也称情况语句或多分支语句。其语法格式为:SelectCaseCaseCaseCaseCaseElseEndSelect,SelectCase语句的控制流程,如图5.2.4所示。,第五章程序控制结构,说明:SelectCase中的可以是任意数值表达式或字符串表达式,但通常是一个变量或常量。Case子句中的,也称值域。其数据类型必须与测试表达一致。当在表达式列表中含有多个表达式时,表达式之间用“,”号分隔。例如,Case2,5,8。Case子句中的表达式也可用关键字“To”来指定范围,或用关键字“Is”来引用关系运算符。例如:Case10To20Case25To30,40To50CaseIs=30CaseIs100SelectCase语句中的CaseElse子句也是一个可选项。如果在语句中有CaseElse子句,则所有Case子句必须放在CaseElse子句之前。若同一值域范围在多个Case子句中出现,则只会执行符合要求的第一个Case子句。,第五章程序控制结构,例5.2.5设银行的定期存款利率为:一年期2.52%,二年期3.06%,三年期3.69%,五年期4.14%(不计复利)。请输入存款金额,并选择存款年限,编程计算到期本息合计总值。程序界面如图所示。,PrivateSubCommand1_Click()DimmoneyAsSingle,interestAsSingle,yearAsIntegermoney=Val(Text1.Text)SelectCaseTrueCaseOption1.Valueyear=1:interest=0.0252CaseOption2.Valueyear=2:interest=0.0306CaseOption3.Valueyear=3:interest=0.0369CaseOption4.Valueyear=5:interest=0.0414EndSelectText2.Text=money*interest*yearEndSub,第五章程序控制结构,5.3循环结构,在程序设计中,经常需要进行一些重复操作,这就需要用到循环结构。,5.3.1ForNext循环,ForNext循环也称For循环或计数循环。其语法格式为:,For循环的控制流程如图5.3.1所示。,说明:“循环控制变量”只能是一个数值型变量。步长是循环控制变量的增量,其值可为正数或负数,如果省略不写,则默认步长为1。,第五章程序控制结构,ExitFor语句的作用是退出当前循环,常与条件语句合用。程序执行到Next语句时,循环控制变量增加一个步长,然后再进入下一次循环。如果是单层循环,则Next后面的“循环控制变量”也可省略不写。,第五章程序控制结构,如何判断For循环的次数呢?当For循环运行时,如果循环变量未被修改且未使用ForExit语句,则循环的次数为:n=int(终值-初值)/步长+1)例如:Fori=-3to20step4的循环次数为多少呢?n=int(20-(-3)/4+1)=6例如:要使Fori=-3to_x_step4的循环次数为7,循环终值x应为多少呢?7=int(x-(-3)/4+1)x可以为:21,22,23,24通常解的个数与步长数相同。,也可求初值,第五章程序控制结构,例5.3.1求。OptionExplicitPrivateSubForm_Click()DimiAsInteger,sumAsIntegersum=0清零,可以取消吗?why?Fori=1To100sum=sum+iNextiPrintsum=;sumEndSub程序运行的结果为:sum=5050说明:本例的功能是计算1至100的累加和。其中,i是循环控制变量,累加和的结果存放在变量sum中。由于省略了关键字Step,因此,默认步长为1。,累加算法,累加数i的构成是关键,第五章程序控制结构,例5.3.2计算100以内(含100)偶数的累加和。OptionExplicitPrivateSubForm_Click()DimiAsInteger,sumAsIntegersum=0Fori=2To100Step2sum=sum+iNextiPrintsum=;sumEndSub程序运行的结果为:sum=2550思考:如何计算100以内奇数的累加和?,第五章程序控制结构,例5.3.3计算任意正整数N的阶乘。,程序代码如下:OptionExplicitPrivateSubCommand1_Click()DimiAsInteger,nAsInteger,sAsLongn=Val(InputBox(请输入一个正整数N(N=12):)s=1置1,why?Fori=1Tons=s*iNextiPrintn;!=;sEndSub思考:如果取消“s=1”语句,程序运行结果会有何不同?如果输入整数大于12会产生什么结果?,连乘算法,i的构成是关键,第五章程序控制结构,5.3.2WhileWend循环,WhileWend循环的控制流程如图5.3.2所示。其语法格式为:While表达式语句块Wend,功能:首先计算表达式的值,若为逻辑真(非0值),则执行内嵌的“语句块”(即循环体)一次;当遇到Wend语句时,控制返回While语句并重复以上过程;当表达式为假时,则跳过循环体,执行Wend之后的语句。,第五章程序控制结构,例5.3.4使用WhileWend循环重新编写例5.3.1,计算1至100的累加和。OptionExplicitPrivateSubForm_Click()DimiAsInteger,sumAsIntegersum=0i=1Whilei=20m=Int(Rnd*90)+10k=Sqr(m)Fori=2TokIfmModi=0ThenExitForNextiIfikThenPrintm;count=count+1IfcountMod10=0ThenPrintEndIfLoopEndSub程序运行的结果,如图5.3.8所示。,该题包含三个算法:1、产生10,99的随机数;2、判断是否素数;3、每行输出10个数。,思考:随机产生20个不相同两位素数?,第五章程序控制结构,5.4程序举例,VB编程题思路:首先明确题目要求(总功能)是什么?功能分解:分解为若干个子功能(已知算法)子功能求解(编程):根据算法编写分段程序组合:将各个子功能合为一个完整的程序。,例:有50个学生的成绩,每行输出10个学生的成绩,并求平均分、最高分、最低分。,功能分解:1、如何得到(输入)10个学生的成绩?(1)随机产生(利用Rnd函数)(2)键盘录入(利用inputbox()函数输入)(3)array函数(数组用法)(还未讲)(4)文件读入(文件用法)(还未讲)2、求平均分、最高分、最低分。(1)求最大(小)值算法。(2)求平均值算法。3、每行输出10个成绩。,打擂算法,每行按n个数输出(t为计数变量):1、Iftmodn=0thenprint2、Iftmodn=0thentext1piEndSub程序运行的结果为:pi=3.141594,注意t的生成,第五章程序控制结构,例5.4.2请输出以下斐不拉齐数列(Fibonacci)的前40个项。1,1,2,3,5,8,13,21,分析:通过观察可知,数列的第1、2项为1,其后每项都等于其前两项之和。则有递推公式如下:F1=1(n=1)F2=1(n=2)Fn=Fn-1+Fn-2(n3)程序代码如下:OptionExplicitPrivateSubForm_Click()Dimf1AsLong,f2AsLong,iAsIntegerf1=1f2=1Fori=1To20Printf1,f2f1=f1+f2f2=f2+f1NextiEndSub,第五章程序控制结构,例5.4.3编写程序,求两个正整数m和n的最大公约数。程序界面如图5.4.1所示。分析:求两个正整数的最大公约数有许多方法,其中,采用辗转相除的算法为:已知两个正整数m、n,且mn;m除以n得余数r;若r=0,则n为最大公约数,算法结束;否则执行步骤;将n赋值给m,r赋值给n,重复步骤。,第五章程序控制结构,程序代码如下:OptionExplicitPrivateSubCommand1_Click()DimmAsInteger,nAsInteger,rAsIntegerm=Val(Text1.Text)n=Val(Text2.Text)r=mModnWhiler0m=nn=rr=mModnWendLabel3.Caption=最大公约数为:x,母鸡=;y,小鸡=;zEndIfNextyNextxEndSub,程序运行的结果。如图5.4.2所示。说明:本例是一个典型的穷举算法。在程序中,采用一个双重循环来穷举公鸡和母鸡的所有可能组合,而小鸡的数量由方程(2)直接得到。满足条件的解,由方程(1)确定。,第五章程序控制结构,例5.4.5编写程序:当单击“生成图形”按钮后,按用户指定的首字母和行数,生成如图5.4.3所示的由大写字母构成的图形。,第五章程序控制结构,程序代码如下:OptionExplicitPrivateSubCommand1_Click()DimchAsString,lnAsInteger,tempAsIntegerDimiAsInteger,jAsInteger,nAsIntegerPicture1.Clsch=UCase(Text1.Text)ln=Val(Text2.Text)n=Asc(ch)-Asc(A)Fori=1TolnPicture1.PrintTab(15-i);Forj=1To2*i-1temp=Asc(A)+n,字符图形的要点:1)行数;2)每行的起始位置;3)每行数据个数(或字符个数)、间隔、位置与行号之间的关系。,控制行数,控制字符个数,起始位置,第五章程序控制结构,If(tempAsc(Z)Thenn=0temp=Asc(A)EndIfPicture1.PrintChr(temp);n=n+1NextjPicture1.PrintNextiEndSub,说明:图形中的字符按字母顺序循环排列,即到字母“Z”时,再回到“A”重新循环。当前字符的ASCII码值为“temp=Asc(A)+n”,其中,n为相对于字母“A”的偏移。三角形图案由一个双重For循环实现。其中,外循环控制打印行数,内循环控制每行的打印字符个数;每行的打印起点由“Picture1.PrintTab(15-i);”语句控制,在内外循环之间的“Picture1.Print”实现换行功能。,换行,输出其它形式的图形呢?,第五章程序控制结构,例5.4.6进制转换。任意输入一个十进制整数,单击“转换”按钮后,将该数转换为指定进制的数。程序界面,如图5.4.4所示。,第五章程序控制结构,程序代码如下:OptionExplicitPrivateSubCommand1_Click()DimnumAsInteger,baseAsInteger,rAsIntegernum=Val(Text1.Text)Text2.Text=SelectCaseTrueCaseOption1.Valuebase=2CaseOption2.Valuebase=8EndSelectDoWhilenum0r=numModbasenum=numbaseText2.Text=LTrim(Str(r)NextiPrintFori=9To0Step-1按逆序输出Printa(i);NextiEndSub程序运行的结果,如图6.2.1所示。,注意掌握数组的输入和输出。,第六章数组,例6.2.2编写程序。从键盘任意输入10个整数,按从大到小的顺序排序后输出。分析:排序是程序设计中最基本的问题之一。在本例中介绍最简单、最直观的排序方法选择排序法。其基本思想是:首先,以第一个数为标准并把它与后面的数逐个比较,如果找到了更大的数,则与第一个数交换位置。这样,在完成一次循环后,就可以找到所有数中最大的数并存入第一个位置;然后,再以第二个数为标准,并在其余剩下的数中找出次大的数,存入第二个位置,以此类推,直到排序完成。,第六章数组,PrivateSubForm_Click()DimiAsInteger,jAsInteger,tempAsIntegerDima(10)AsInteger省略了输入Fori=1To9选择法排序Forj=i+1To10Ifa(i)a(j+1)Then逆序则交换temp=a(j)a(j)=a(j+1)a(j+1)=tempflag=TrueEndIfNextjIfflag=FalseThenExitFor在一趟中无交换,则排序完成Nexti,第六章数组,例6.5.2编写程序。在一个有序数组中插入一个数,使原数组仍然保持有序。,分析:在插入数据后为保证原数组仍然有序,应首先找到待插入数相应插入的位置,然后将该位置及后面的数据后移,以便插入新数据。,程序代码如下所示。OptionExplicitPrivateSubForm_Click()ConstnAsInteger=5Dima()DimiAsInteger,numAsIntegerReDima(n)Fori=1Ton初始化数组aa(i)=i*2Printa(i);Nexti,记住:数组移动时,若向后移,从后开始移;若向前移,从前开始移!,插入数据示意图,第六章数组,Printnum=Val(InputBox(请输入数据:)输入待插入数据ReDimPreservea(n+1)增加一个数组元素Fori=nTo1Step-1从后向前查找Ifnuma(i)ThenExitFora(i+1)=a(i)Nextia(i+1)=num插入数据Fori=1Ton+1Printa(i);NextiPrintEndSub,该程序主要包括两个算法:1、找位置;2、数据移动。,思考:删除一个数呢?,说明:在程序中,为优化程序执行效率,数据从后向前比较和移动,直到找到待插入位置。,第六章数组,例6.5.3编写程序,实现顺序查找。说明:“查找”与“排序”一样都是最基本的程序设计技术。其中,“顺序查找”是最简单、最直接查找算法。其算法为:从第一个数据开始将所有数据与查找对象逐一比较,直到找到(或未找到)指定的数据。,OptionExplicitPrivateSubForm_Click()Dima(20)AsInteger,iAsInteger,objNumAsInteger,flageAsBooleanRandomizeFori=1To20通过随机函数,初始化原始数据a(i)=Int(Rnd*20)+1Printa(i);NextiPrintobjNum=Val(InputBox(请输入要查找的数:),第六章数组,flage=False设置查找标志Fori=1To20IfobjNum=a(i)Then如果找到指定数据,则退出flage=TrueExitForEndIfNextiIfflage=TrueThenPrintobjNum;找到ElsePrintobjNum;未找到EndIfEndSub,程序运行的结果,如图6.5.3所示。,第六章数组,例6.5.4编写程序,实现折半查找。分析:“顺序查找”虽然方法简单,但在查找有序数列时效率不高。下面,介绍一种专门针对有序数列的、效率更高的算法折半查找算法。设计思路:首先明确待查找数据的范围(即数组的下界和上界),然后将指定的待查找数据(objNum)与有序数列中间的数比较。若相等,则找到指定数据;若不相等,则在缩小后的范围内查找。算法如下:设置三个指针low指向所查找数据的下界high指向所查找数据的上界mid指向所查找数据的的中间,mid=(low+high)/2若a(mid)=objNum,则找到指定数据,查找结束。若a(mid)objNum,则在low,mid-1范围内继续查找;若a(mid)=AAndch0ThenPicture1.PrintChr$(j+64);=;intCount(j);num=num+1IfnumMod10=0ThenPicture1.PrintEndIfNextjEndSub,第七章过程,71概述,过程通常划分为事件过程和用户自定义过程,前面所见过的过程都属于事件过程,它们是当发生某个事件(如Click、LoadChang等)时,对该事件作出响应的程序段。除了事件过程外,还要自定义过程的应用来适应更复杂的需要。这种自定义的过程也叫“通用过程”(Generalprocedure),它供事件过程或其它通用过程调用。,在实际应用中,VB6.0中的过程一般分为子过程和函数过程两大类,前者叫Sub过程,后者叫Function过程。,从程序结构上看,过程一般都不是一个完整、绝对独立的程序,而是用来完成一个特定任务的一段程序代码。VB6.0中的应用程序(又称工程或项目)由若干个过程和函数组成,这些过程和函数保存在文件中并由相应的命令或事件去调用。,第七章过程,过程有什么好处呢?在程序设计中,将一些常用的、相对独立的功能编写成过程,可把一个大的问题的求解代码分割成一个个的小模块。这些过程可被多次调用,如像工业中的标准配件一样,这样可实现代码重用,减少重复编写代码的工作量,降低程序冗余度,从而使程序变得简练、便于调试和维护。从技术上具体来看,在VB6.0中,用户自定义过程可分为如下四种:以“Sub”保留字开始的子过程以“Function”保留字开始的函数过程以“Property”保留字开始的属性过程以“Event”保留字开始的事件过程。鉴于篇幅的原因,本章主要介绍用户自定义的子过程和函数过程。,第七章过程,7.2子过程,7.2.1子过程的定义,1引例子过程在调用之前必须事先定义,下面先看一个引例。例7.2.1在编程中,经常要进行两个数的交换,此时可以把负责两个数交换的代码段独立出来,形成一个过程以便被其它过程多次调用。先在窗体中添加一个命令按钮Command1,再在代码窗口中的其它过程之外输入如下代码。,Swap子过程的定义PrivateSubSwap(m,n)Dimtemptemp=mm=nn=tempEndSub,第七章过程,在主调过程Command1_Click()中调用swap子过程PrivateSubCommand1_Click()Dima,b,c,da=1:b=2:c=3:d=4Print交换前:Printa=;a,b=;b,c=;c,d=;dCallSwap(a,b)Swapc,dPrint交换后:Printa=;a,b=;b,c=;c,d=;dEndSub运行后在窗体中显示结果为:交换前:a=1b=2c=3d=4交换后:a=2b=1c=4d=

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论