第四章VB程序设计概述§4.1结构化程序设计ppt课件.ppt

上传人:小飞机 文档编号:1874263 上传时间:2022-12-23 格式:PPT 页数:88 大小:1.21MB
返回 下载 相关 举报
第四章VB程序设计概述§4.1结构化程序设计ppt课件.ppt_第1页
第1页 / 共88页
第四章VB程序设计概述§4.1结构化程序设计ppt课件.ppt_第2页
第2页 / 共88页
第四章VB程序设计概述§4.1结构化程序设计ppt课件.ppt_第3页
第3页 / 共88页
第四章VB程序设计概述§4.1结构化程序设计ppt课件.ppt_第4页
第4页 / 共88页
第四章VB程序设计概述§4.1结构化程序设计ppt课件.ppt_第5页
第5页 / 共88页
点击查看更多>>
资源描述

《第四章VB程序设计概述§4.1结构化程序设计ppt课件.ppt》由会员分享,可在线阅读,更多相关《第四章VB程序设计概述§4.1结构化程序设计ppt课件.ppt(88页珍藏版)》请在三一办公上搜索。

1、第四章 VB 程序设计概述,4.1 结构化程序设计,4.2 顺序结构,4.4 循环结构,4.3 选择结构,4.5 综合应用程序举例,4.1 结构化程序设计,程序设计方法经历了手工编程、结构化程序设计方法和面向对象的程序设计方法几个阶段。VB作为一种面向对象的程序设计语言,既继承了结构化程序设计的优点,又采用了面向对象、事件驱动的编程机制。就整个工程来说,它是由许多面向对象的事件过程组成的,程序运行过程中通过触发事件,驱动执行相应的事件过程来实现程序员的意图。,4.1.1 算法及其表示,算法是解决问题的方法和步骤。要用计算机来解决一个实际问题,编程时,首先要设计解决这个问题的算法(方法和步骤)。

2、例 将两个变量x和y的值进行交换,设x = 10,y = 20。 分析:变量是存储单元的代名词,存储器可以反复地“读”,“写”,如果直接交换,即x = y : y = x,则x原来的值被覆盖其结果x和y的值都是20。在此可借助一个中间变量t作为一个临时的“容器”。算法为:步骤1:将x的值暂存在t中;步骤2:将y的值存入x中;步骤3:将t的值存入y中。,算法的几种表示方法: 自然语言、伪代码、PAD图、流程图、N-S结构流程图等等。流程图也称为框图,它是用一些几何图形、流向线和文字说明来表示各种类型的操作。常用的几种图符如图所示。,4.1.1 算法及其表示,开 始,开 始,4.1.2 结构化程序

3、设计,结构化程序设计基本思想之一:任何程序都可以采用顺序、选择、循环三种基本结构来构造。这三种结构可以任意组合、嵌套,构造各种复杂的程序。基本结构只有一个入口和一个出口。1、顺序结构:程序流程按照一个方向进行,依次执行各语句。2、选择结构:程序流程出现一个或多个分支,按一定的条件选择其中之一执行,也叫分支结构。中间可以有两条或多条分支。,4.1.2 结构化程序设计,3、循环结构:程序流程按一定的条件重复多次执行一段程序(循环体)。循环结构按退出循环的条件可分为当型(While)循环结构和直到型(Until)循环结构。有效的循环只允许有限次的重复。当型循环:条件成立时执行循环体,条件不成立时退出

4、循环;直到型循环:条件不成立时执行循环体,条件成立时退出循环。,4.1.2 结构化程序设计,三种基本结构有如下共同特点:只有一个入口,一个出口。无死语句,所谓“死语句”是指始终执行不到的语句。 无死循环,即循环次数是有限的。,4.2 顺序结构,顺序结构是一种最简单的算法结构,也是程序设计中最简单、最常用得基本结构。其特点是:算法的每一个操作按照各自出现的先后顺序从上到下线性执行。 用程序处理实际问题时,常常需要用户输入数据或要求程序输出数据。下面介绍几个语句,并由它们组成顺序结构。这些语句包括赋值语句、输入输出语句等。,4.2.1 赋值语句,格式:目标操作符源操作符功能:把源操作符的值赋给目标

5、操作符。 源 操 作 符 :变量、表达式、常量及带有属性的对象 目标操作符:变量和带有属性的对象 = :赋值号 例: Data15 Text1.text=Str(Data) x=x+2 S$=“Welcome”,注 意:(1)赋值语句兼有计算和赋值双重功能;(2) “”是赋值号,与数学上的等号意义不同;(3)“目标操作符”和“源操作符”的数据类型通常要求一致,但VB 提供的对某些数据类型的自动转换机制,可强制变量转换为适当的数据类型。,赋值兼容与数据溢出,4.2.4 注释、暂停与程序结束,格式: 注释内容 或 Rem 注释内容 (1)注释语句是非执行语句。 (2)任何字符均可放在注释语句中作为

6、注释内容。 示例: This is a test statement Rem 计算圆的周长 a=3:b=4:c=5 a,b,c为三角形的边,注释语句,暂停语句,格式:Stop说明: (1)可放置在过程中的任何地方,相当于在程序代码中设置断点,类似于执行“运行”菜单中的“中断”命令。 (2)执行Stop语句时,系统将自动打开“立即窗口”,方便程序员调试跟踪程序。 (3)程序调试结束后,生成可执行文件之前,应删除代码中的所有Stop语句。,结束语句,格式:End功能:通常用来结束一个程序的执行。在不同环境下的其他用途:End Sub:结束一个Sub过程;End Function:结束一个Funct

7、ion过程;End If:结束一个If 语句块;End Type:结束记录类型的定义;End Select:结束情况语句。,4.2.2 数据输入,InputBox 函数,格式:Inputbox$(prompt,title,default ,xpos,ypos,helpfile,context)参数说明: (1)xpos:指定对话框的左边与屏幕左边的距离; (2)ypos:指定对话框的上边与屏幕上边的距离; (3)helpfile:字符串表达式,识别帮助文件,用该文件为对话框提供上下文相关的帮助; (4)context:数值表达式,由帮助文件的作者指定给某个帮助主题的帮助上下文编号,它与 Hel

8、pfile 参数必须同时提供或省略;,Inputbox$(prompt,title,default) (1)prompt:对话框中的提示消息字符串表达式; (2)title:对话框标题栏中的字符串表达式; (3)default:文本框中的字符串表达式,在无其它输入时作为缺省值;若省略default,则文本框为空。,标 题,提 示字符串,用户输入区默认值,【例】 设计一个程序,由用户输入一个华氏温度F,程序可将其转换为摄氏温度C。转换公式为C5/9*(F32),Private Sub Command1_Click( ) End Sub,Private Sub Command2_Click( )

9、EndEnd Sub,Dim F As Long, C As LongF Val(InputBox(请输入华氏温度, 例4-1)C 5 / 9 * (F - 32)Text1.Text FText2.Text C,华氏摄氏温度互换,4.2.3 数据输出,Print 方法,格式: 对象名. Print 表达式表 说明: (1)“对象名”可以是窗体、立即窗口、图片框、打印机等的名称(Name 属性),若省略对象名在当前窗体上输出; (2)“表达式表”是一个或多个表达式,可为数值表达式(求出表达式的值然后输出)或字符串(原样输出)。如若省略,则输出一空行; (3)多个表达式之间可以用以下分隔符隔开:

10、 “ ,”:标准输出格式,每 14 列作为一个输出区段 “ ;“:紧凑格式输出(4) 当输出数值数据时,数值的前面有一个符号位,后面有一个空格,而字符串前后都没有空格。,与 Print 方法有关的函数,Tab (n)功能:与 Print 方法一起使用,在参数 n 指定的位置输出其后的 表达式的值。说明: (1)n 是数值表达式,值为整数,若省略,则将输出点移动到下一个输出区(每个输出区占 14 列)的起点; (2)若 n 小于1,则 tab 将输出位置移动到第1列; (3)一个print 方法中使用多个Tab函数时,每个Tab函数对应一个输出项,各项之间用分号隔开。 如:Print Tab(1

11、0); “Good”; tab(26); ”Morning”,Spc(n)功能:与 Print 方法一起使用,使光标从当前位置跳过 n 个空格,对输出进行定位。,注意: (1)Tab 函数中的 n :相对于屏幕最左端第 1 列而言的列号; (2)Spc 函数中的 n :相对于前一输出项的最后 1 个字符所在列而言跳过的空格数。,Tab函数与Spc函数的比较,Format$(数值表达式,格式字符串)功能:使数值表达式的值按“格式字符串”制定的某种格 式输出。 (1)数值格式化输出:见 P61 表42 (2)日期和时间格式化输出:见 P61 表43,例 Print Format(12345.6,

12、“#,#.#”) 输出:12,345.6,例 Print Format(Now, “yyyy年m月dd日hh:mm”) 输出:2007年4月12日,MsgBox 函数和 MsgBox 语句,标 题,提 示字符串,由Type指定的按钮数目、形式和图标,MsgBox函数的返回值是 17 的整数(或相应的符号常量),分别对应7种命令按钮(见P63表45)。函数功能是,根据接收到的用户响应信息,决定程序下一步进行的操作。,MsgBox(msg, type , title )参数说明: (1)msg:对话框提示消息字符串; (2)type:整数值或字符常量,用来控制在对话框内显示的按钮、图标的种类及数量

13、;(见P63表44) (3)title:对话框的标题字符串。,由 MsgBox 函数或 MsgBox 语句所显示的对话框有一个共同特点:在出现对话框后,用户必须作出选择,否则不能执行其他任何操作。,Msgbox,4.3 选择结构,特点:根据给定的条件是否满足,来决定下一步所要执行的操作。,【例】如果星期天天晴,我们就去浏阳河边烧烤;否则,我们就在教室自习。,三种形式: 单行结构、块结构、多分支结构(情况语句),4.3.1 单行结构条件语句,【例】如果星期天天晴,我们就去浏阳河边烧烤;否则,我们就在教室自习。,格式: If Then Else 其中,“条件”通常是关系表达式或逻辑表达式;“语句1

14、”和“语句2”可以是简单句或复合句;Else子句为可选项。,功能:无ELSE选项 条件取值为“真”,执行语句(序列)1; 条件取值为“假”,语句(序列)1就不执行。 有ELSE选项 条件取值为“真”,执行语句1; 条件取值为“假”,执行语句2。,注意:(1)格式中的If、Then、Else 是关键字,并且一定要配对使用;(2)条件一定要是一个逻辑表达式,也就是说条件的结果 一定要是真值或假值;(3)语句是条件判断之后需要执行的命令,它可以是一条命令,也可以是一组命令。,【例】试编一个程序,要求输入任意两个数,然后把它们按照从大到小的顺序输出。,交换a、b的值,【例】 判断一个学生的成绩是否及格

15、。Private Sub Command1_Click() If val(Text1.text)60 Then Text2 =及格 Else Text2 =不及格End sub,简单的选择结构可以使用 IIf( )函数实现。格式:IIf(条件,True部分,False部分)功能:当“条件”为真时,函数返回值为True部分的值 当“条件”为假时,函数返回值为False部分的值,说明: (1)条件是逻辑表达式或关系表达式; (2)True部分和False部分是表达式,它们的返回值必须与结果变量类型一致。,If x1 Then y1 Else y1/ x,IIF函数使用,4.3.2 块结构条件语句,

16、命令格式:If Then ElseIf Then Else End If,功能:若“条件1”成立,执行“语句块1”;否则若“条件2”成立,执行“语句块2”;若上述条件均不成立,执行“语句块n”。,注意: (1)嵌套使用(单行或块嵌套)时,If 命令不得交叉; (2)遵循就近配对原则。,【例】输入系数 a,b 和c,求二次 方程 ax2+bx+c=0 的实根。,开 始,Private Sub Command1_Click( ) End Sub,Dim a!, b!, c!, d!, x1!, x2!, x!a Val(InputBox(“请输入系数 a:)b Val(InputBox(“请输入系

17、数 b:)c Val(InputBox(“请输入系数 c:)d b * b 4 * a * cIf d 0 Then x1 (b + Sqr(d) / (2 * a) x2 (b Sqr(d) / (2 * a) Print x1; x1, x2; x2Else If d 0 Then x b / (2 * a) Print x; x Else Print 此方程无实根 End IfEnd If,程序代码:,语句块 1,语句块 2,语句块 3,例 编程求符号函数sgn(x)的值。 程序代码如下:Private Sub Command1_Click() x = Val(Text1.Text) I

18、f x 0 Then Text2.Text = 1 ElseIf x = 0 Then Text2.Text = 0 Else Text2.Text = -1 End IfEnd Sub 用户界面,单行形式If语句与多行形式的If语句的区别。前者适用于简单的二叉分支的情况,后者适用于多分支的情况。前者可以改写为后者的形式。前者必须写在一行中;后者必须写成多行,并且在关键字“Then”后面必须回车。后者必须是If开头,End If结束,两者必须成对出现。但是,前者没有End If。后者中“ElseIf”是一个关键字,不能写成“Else If”。在多行形式的If语句中,代码的排版推荐使用缩进方式,

19、这样不仅有利于阅读程序,也有利于发现错、排除错误。,4.3.3 情况语句,Select Case Case Case Case Else End Select,功能:根据“测试表达式”的值,从多个语句块中选择符合条件的一个语句块执行。( 最多只选择执行其中一个命令序列 ),“表达式表列”的形式:(1) , 测试表达式的值与其中之一相同,就执行该Case子句中的语句块;例 Case 2,4,6,8,10(2) To 当测试表达式的值落在表达式 1和表达式 2之间(含自身),则执行该 Case 子句中的语句块;(表达式1 当测试表达式的值满足“关系表达式”指定条件时,执行该 Case 子句中的语句

20、块。,Private Sub Command1_Click()Select Case Val(Text1.Text) Case Is 0 Text2.text = 不合理的成绩“ Case Is 60 Text2.text = 不及格 Case 60, 61, 62, 63, 64, 65, 66, 67, 68, 69 Text2.text = 及格 Case 70 To 89 Text2.text = 良好 Case Is = 100 Text2.text = 优秀 Case else Text2.text = 不合理的成绩End SelectEnd Sub,【例】从键盘上输入学生成绩,然

21、后在文件框中显示其等级(按 5 级计分值输出 “不及格”、“及格”、“中等”、“良好”、“优秀” )。,方法一:,Private Sub Command1_Click( ) End Sub,Dim score As Integer, strx As Stringstart: score InputBox(“请输入学生成绩”)Select Case score Case 0 To 59:strx$ “不及格” Case 60 To 69:strx$ “及格” Case 70 To 79:strx$ “中等” Case 80 To 89:strx$ “良好” Case 90 To 100:strx

22、$ “优秀” Case Else MsgBox “请输入0100 范围内的整数”, , “出错提示” GoTo startEnd SelectText1.Text scoreText2.Text strx$,例,方法二:,4.3.4 选择结构的嵌套,在选择结构的每个分支中,可以是任何语句,也可以再是一个分支结构。这种分支结构中包含另一个分支结构的情况称为分支嵌套。在分支嵌套中应注意的问题: 每个结构必须完整。 外层结构必须完全包住内层结构,不能交叉。 内层结构应采用缩进格式,以使层次清楚。例:完善问候程序,要求输出 : xx先生/女士,上午/下午/晚上好!,【引例】试求 n!(n 为自然数)。

23、,分析:根据数学知识,自然数 n 的阶乘为: n!123n 2! 3n (n1) ! n,也就是说,一个自然数 n 的阶乘,即从 1 开始连续地乘以下一个自然数,直到 n 为止,亦即等于该自然数与前一个自然数的阶乘的乘积。,显然,如采用简单的顺序结构进行程序设计,该程序中必然包含大量重复的语句,处理过程繁琐而低效。 而实际应用中,经常会遇到类似情形,一些操作并不复杂,但需要反复多次进行处理,诸如:人口增长统计、银行存款利率计算等问题,仅简单依靠顺序结构程序设计,不但程序代码效率低,有时甚至是难以实现的。,因此,Visual Basic 提供了循环语句,而利用它构造循环结构的程序来处理类似引例的

24、问题变得相当简易,能达到事半功倍的效果。,4.4 循环结构,所谓循环是指对同一个程序段重复执行若干次,被重复执行的部分称为循环体,由若干语句构成。循环必须是有穷的,其循环控制有两种情况:当已知循环次数时,可用循环次数控制。有些问题,编程时并不知道循环体的执行次数,此时,必须根据某个条件来判断何时结束循环。在VB中有多种语句可实现循环结构,包括For循环、Do循环、While循环和GoTo循环。,一般格式为:,For 循环变量初值 To 终值 Step 步长 循环体 Exit For Next 循环变量 ,循环变量 ,格式说明:,(1)循环变量:循环过程中的计数器;(2)初值和终值:分别为循环变

25、量的初值和终值,可以相等;(3)步长:循环变量的增量,是数值表达式,如步长为1,可省略;(4)循环体:在 For 语句和 Next 语句之间的语句序列;(5)Exit For :退出循环; (6)Next :循环终端语句。,4.4.1 For 循环结构,(1)循环变量初值;,(2)检查循环变量的值是否超过终值: (i) 超过,跳出循环,执行Next 之后的语句; (ii)否则,执行一次循环体,并作如下操作 循环变量(循环变量步长);,(3)重复上述步骤(2)。,注意: 步骤(2)中的“超过”有两种含义,分别对应于步长为正值和负值的两种情况。循环过程的逻辑流程如下页图 (a)、(b)所示。,Fo

26、r 循环语句的执行过程:,(a) 步长为正数,For-Next 循环的逻辑流程,开 始,【例】某 For-Next 循环结构语句如下: t0 For i1 to 10 tti Print t; Next i,其循环执行过程是: 把初值1 赋给循环变量 i; i 值与终值比较,若 i 10,转到 ,否则执行循环体; i 增加一个步长值,即 i i1; 返回 继续执行; 执行 Next 后面的语句。,循环变量是 i, 循环初值是 1, 循环终值是 10, 步长为正值 1, 循环体包含两个语句: tti Print t,!思考:这个循环结构完成什么 程序功能?,(1) For 语句和 Next 语句

27、必须成对出现,且 For 语句必须在 Next 语句之前。,(2) For 循环方便实现对一个语句序列执行固定次数的循环,其循环次数的计算公式为: 循环次数Int(终值初值)/步长1。,程序设计注意点:,【例】试求 n!(n 为自然数)。,分析:根据数学知识,自然数 n 的阶乘为: n!123n 2! 3n (n1) ! n 也就是说,一个自然数 n 的阶乘,即从 1 开始连续地乘以下一个自然数,直到 n 为止,亦即等于该自然数与前一个自然数的阶乘的乘积。,Private Sub Form_Click( ) Dim N As Integer NInputBox(“Enter N:”) Resu

28、lt1 For i1 To N ResultResult * i Next i Print N;”!”;Result End Sub,VB 程序如下:,【例】每只公鸡价值 5 个钱,每只母鸡价值 3 个钱,每 3 只小鸡价值 1 个钱。现有 100 个钱想买 100 只鸡,问公鸡、母鸡、小鸡各应买几只?,据题意,设 x, y,z 分别为公鸡、母鸡、小鸡的数目,则可得到不定方程组:,所以,用 VB 程序解决百钱买百鸡问题的过程,就是编程求解下面方程组的过程。,那么,对于上述方程组进行求解,就是要找到所有那些同时满足两个方程的参数 x,y,z 值的组合,即在某个参数值确定的情况下,分别判定另两个参

29、数与之组合能否满足等式要求。逐个进行重复操作(即判定)显然符合使用循环的条件。,然而这里遇到一个问题,虽然已经知道程序中间需要用到循环结构,然而仅仅依靠前面学习的单重循环(即程序中只用一层循环)也无法实现问题的解答,因为方程参数有 3 个。,因此,许多时候遇到类似的复杂问题,要实现求解,就必须用到更复杂的循环结构,即多重循环。这就是在程序设计中使用循环的嵌套。,(4) For 循环进行嵌套使用时,有基本要求:每个循环必须有一个唯一的变量名作为循环变量;内层循环的Next语句必须放在外层循环的 Next语句之前,内外循环不得互相骑跨。下例所示嵌套错误:,For j1 To 5 For i 2 T

30、o 8 Next j Next i,For-Next 循环的嵌套形式有以下三种:,一般形式:For I1= For I2= For I3= Next I3 Next I2Next I1,省略Next后的 参数:For I1= For I2= For I3= Next NextNext,内外层循环终 点相同时:For I1= For I2= For I3= Next I3,I2,I1,(1)各层循环的循环变量初值与终值为 1 和 100 ;(2)循环中步长为 1 ;(3)循环体的内容,就是判断符合方程等式的各组 x, y,z 值的语句。,显然,各种鸡最多可买的数量为 100 ,所以方程变量 x,

31、y,z 的取值范围就是1100。所以:,由此确定了 For 循环中各组成部分,可以进行代码编写。,据此,编写 VB 程序如下:Private Sub Form_Click( )End Sub,显然,这个三重循环结构简单清晰,但程序效率极低,因为需要执行的循环次数为: 1001001001,000,000,事实上,稍加分析发现,每重循环都执行 100 次没有必要。因为100 钱最多能买 20 只公鸡,即在最外层循环最多能执行 20 次,以此类推,可修改程序以减少循环执行次数!,For x1 To 100 For y1 To 100 For z1 To 100 Sumxyz RSum5*x3*yz

32、/3 If (Sum100) And (RSum100) Then Print x,y,z End If Next z Next yNext x,修改后的 VB 程序如下:Private Sub Form_Click( )End Sub,循环次数大大减少!,注意到程序中仍然存在三重循环嵌套,需要对程序进一步优化以缩短程序运行时间,提高效率!,For x0 To 20 For y0 To 34x For z0 To 100 Sumxyz RSum5*x3*yz/3 If (Sum100) And (RSum100) Then Print x,y,z End If Next z Next yNex

33、t x,优化后的 VB 程序如下:Private Sub Form_Click( )End Sub,使用一个数值表达式,省去最内层循环,使三重循环变为二重循环!,不使用中间变量,直接把条件列入 If 语句,提高程序代码质量。,For x0 To 20 For y0 To 34-x z100 xy If 5*x3*yz/3100 Then Print x,y,z End If Next yNext x,(5)使用 Exit For 语句可以实现在循环变量达到终值前便退出循环,并允许一次或多次地出现在循环体中的任何位置。但它仅能退出所在的最内层循环,如上例:,For i1 to 100 For j

34、1 to 100 Print ij; If i*j5000 Then Exit For Next jNext i,(6)For 循环中的“循环体”是可选项,当该项默认时,执行 “空循环” ,在实际运用中可实现暂停操作。当循环结束时,暂停也相应结束。,在某特定条件得到满足的情况下,按规定的次数重复执行一个语句(序列)。,For 循环实现的程序功能:,4.4.2 While 循环结构,功能:当给定条件为 True 时,执行循环体。说明:(1)先测试“条件”,再决定是否执行循环; (2)循环体中应含有对“条件”的修改操作,使循环体能正常结束;否则,会构成死循环; (3)循环可嵌套,不许交叉,每个 W

35、end 和最近的 While 相匹配。,开 始,格式: While 条件 循环体 Wend,【例】 小红今年12岁,她父亲比她大30岁,编程计算出她父亲在几年后比她年龄大一倍,那时父女的年龄各为多少?,Dim age As Integerage 12While age * 2 age + 30 age age + 1WendPrint “经过”; age 12; _ “年,小红父女的年龄分别是:” ; _ age + 30; 和; age,Private Sub Command1_Click( ) End Sub,4.4.3 Do 循环结构程序设计,格式1: Do While | Until

36、Exit Do Loop,格式2: Do Exit Do Loop While | Until ,Private Sub Command1_Click( ) End Sub,【例】 编写程序,对任意输入的正整数 n(n=3) 判断其是否为素数。,Dim n%, i%, k%n = Val(InputBox(“请输入一个正整数 (3):”)i = 2k = Int(n / 2)Do While i k Then Print n; “是素数!” Else Print n; “不是素数!,k=int(sqr(n),【例】 输入两个正整数,求它们的最大公约数。,辗转相除法:用两数中的大数除以小数,并将

37、所除得到的余数作为下一次的除数再除上一次的除数;如此往复,直至余数为 0,则最后一次的除数就是最大公约数。,Dim m%, n%, r%, t%mVal(InputBox(“请输入第一个整数:”)n Val(InputBox(“请输入第二个整数:”)If m n Then tm: mn: ntDo r m Mod n mn n rLoop Until r 0Print “它们的最大公约数是:; m,Private Sub Command1_Click( ) End Sub,使用嵌套时应注意以下几个问题:嵌套中的各个控制结构必须完整,内外结构不能交叉。内外循环变量也不能同名。与IFEndIf语句

38、一起使用时,只能从循环内跳到循环外,不能从循环外跳到循环内,也不能从外循环跳到内循环。嵌套中使用强制退出语句Exit只退出本层循环。输入代码时嵌套中各层结构应采用总体缩排,以使层次分明。For与Next配对的规则:从最内层的循环往外看,next总是与离它最近的没有配过对的For配对。可以省略Next后面的循环变量。当内外循环有相同的终点时,可以共用同一个Next语句,此时Next后面的循环变量名不能省略。并列的循环可以用同一个变量名作循环变量,而嵌套的循环不能用同一个变量名作循环变量。,4.4.4 循环结构的嵌套,【例】 用台劳多项式求 SinX 的近似值。,分析: (1)SinX 的初值为

39、X ; (2)有一求和过程,求和对象: (1)n1*X2n1) / (2n1)! (3)存在大量重复操作,根据需要应设计两个循环: a. 外层循环用于实现各分数项的累加; b. 内层循环用于求各项分子、分母; 其中: Factor : (2*n1)的阶乘 Xpower : X2n1 标志位 sign: (1)n1,Private Sub Command1_Click( ) End Sub,Dim n As IntegerDim x As singleDim y As doublex = InputBox(“请输入X:”)n = InputBox(“请输入 n:”)y = x : sign =

40、1For i = 2 To n Factor = 1 : Xpower = 1 For j = 1 To 2*i1 Factor = Factor*j Xpower = Xpower*x Next j sign = sign y = ysign*Xpower/FactorNext iPrint “SinX”;y,Factor :(2*n1)!Xpower :X2n1Sign:(1)n1,【例】 输出 100200 之间的所有素数。,Private Sub Command1_Click( ) End Sub,Number = 0For x = 101 To 199 Step 2 i = 2: k

41、 = Int(x/2) Do While i k Then Number = Number1 If Number mod 5 = 0 Then Print x Else Print x, End IfNext x,格式:GoTo 功能:把控制转移到“标号”所在的程序行,并从该行开始往下执行。说明: (1)标号是一个标识符或整型数; (2)程序必须给GoTo语句提供唯一的转向入口,入口处格式为: (3)不能用GoTo语句转向另一个过程。,4.4.5 Goto语句,例5-5,例 Private Sub Form_click() I = 0: s = 0 Start: I = I + 1: s =

42、s + I If I = 100 Then GoTo Ending GoTo Start Ending: Print “s=”; s End Sub,该程序是通过GoTo语句完成循环的,其中Start与Ending是两个标号,本程序实现的是求 1+2+3+100的值。 由于GoTo语句易破坏程序的结构,因此一般不提倡使用。,4.5 综合应用程序举例,本节主要考虑常用算法程序设计,因此所有的程序均只在Form或Command控件的单击事件中编写,而不考虑介面设计与属性设置。一般步骤如下:第一步: 分析问题 确定要使用的数据(输入、输出),确定相关变量。 确定算法, 从有限步的输入中获取输出。 确

43、定操作顺序, 以便在有限步内解决问题。第二步: 画出程序的基本轮廓对一个简单的程序来说,可列出程序顺序执行的动作。第三步:实现程序 根据实际情况可以适当简化或调整以上步骤。,【例1】 给定一个两位的正整数,请找到另一个两位数的正整数,使这两个数之和等于它们各自的对调数之和。,分析知,程序中应作的处理有:(1)对输入的两位数 X,找到相关的另一个两位数 Y;(2)对 X、Y 分别求它们的“对调数” (将其个位数同十位数 字对调所生成的新数,如 28 和 82);(3)计算两个表达式的值:XY 和 XfYf;(4)判定两式的值是否相等,如相等,则输出 X 和Y。,显然,某数 X 的对调数 Xf 的

44、求法是: Xf (X mod 10) 10 (X 10),Private Sub Command1_Click( ) End Sub,Dim X,Y,Xf,Yf As IntegerDo XVal(InputBox(“请输入一个2位正整数:”)Loop While (X99)Xf (X mod 10) *10 (X 10)For Y=10 To 99 Yf (Y mod 10) *10(Y 10) If XYXfYf Then Print X;”+”;Y;”;_ Xf;”+”;Yf;”;XY End IfNext Y,【例2】求200,900 内同时满足以下两个条件的十进制数的个数: (1)其

45、个位数字与十位数字之和除以10所得的余数是百位数字; (2)该数是素数。,Private Sub Form_Click() number = 0 For i = 200 To 900 g = i Mod 10 截取个位数字 s = (i Mod 100 )10 截取十位数字 b = i 100 截取百位数字 If (b = (g + s) Mod 10) Then 判断满足第一个条件 flag = True For j = 2 To i 1 判断满足第二个条件(素数) If (i Mod j = 0) Then flag =false : Exit For End If Next j If f

46、lag=true Then number = number + 1 Next i Print 这样的数的个数是:; numberEnd Sub,一个数如果刚好与它所有的因子之和相等,则称该数为一个“完数” 如6123,则6就是个完数,求1000以内所有的完数之和。,所谓回文数是从左至右与从右至左读起来都是一样的数字,如:121是回文数。编写程序求出100900之间回文数的个数。,“水仙花数”是指这样的数,其各位数字的立方和等于该数本身,如:15313+53+33。编写程序求100至400的范围内有多少个水仙花数。,水 仙 花 数,完 数,回 文 数,编写程序求9-499之间的非偶非素数的和。,

47、编写程序求1981-3000之间的素数年号的个数。,素 数 的 个 数,非 偶 非 素 数,已知一个数列的前3个数为0,0,1,以后每个数为前3个数的和,编程序求此数列的第36个数。( 334745777 ),简 单 的 数 列,一个素数(设为p)依次从最高位去掉一位,二位,三位,若得到的各数仍都是素数(注:除1和它本身外,不能被其它整数整除的正整数称为素数,1不是素数,2是素数),且数p的各位数字均不为零,则称该数p为逆向超级素数。例如,617,17,7都是素数,因此617是逆向超级素数,尽管503,03,3都是素数,但它不是逆向超级素数,因为它包含有零。试求100,999之内的所有逆向超级素数的个数。 ( 39 ),逆向超级素数,除1和它本身外,不能被其它整数整除的正整数称为素数(注:1不是素数,2是素数)。若两素数之差为2 ,则称两素数为双胞胎数,问31,601之间有多少对双胞胎数。( 22 ),双 胞 胎 数,所谓“同构数”是指这样一个数,它出现在它的平方数的右侧,例如5的平方是25,25的平方是625,故5和25都是同构数,求2,1000之间所有同构数之和。,同 构 数,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号