第三章结构化程序设计与数组.ppt

上传人:李司机 文档编号:4102653 上传时间:2023-04-04 格式:PPT 页数:79 大小:1,012KB
返回 下载 相关 举报
第三章结构化程序设计与数组.ppt_第1页
第1页 / 共79页
第三章结构化程序设计与数组.ppt_第2页
第2页 / 共79页
第三章结构化程序设计与数组.ppt_第3页
第3页 / 共79页
第三章结构化程序设计与数组.ppt_第4页
第4页 / 共79页
第三章结构化程序设计与数组.ppt_第5页
第5页 / 共79页
点击查看更多>>
资源描述

《第三章结构化程序设计与数组.ppt》由会员分享,可在线阅读,更多相关《第三章结构化程序设计与数组.ppt(79页珍藏版)》请在三一办公上搜索。

1、第三章 结构化程序设计与数组,2,3.1 3种基本的控制结构,学习了什么是表达式,那么如何对表达式进行有效地组织呢?必须依靠三大基本结构:顺序结构选择结构循环结构利用这三种结构相互嵌套可以构造出各种复杂程序!嵌套结构(结构中包含结构),2023/4/4,3,语句一,语句二,表达式,语句一,语句二,表达式,语句,真,假,真,假,顺序结构,选择结构,循环结构,三种基本结构流程图,4,5,赋值语句:是程序中最常用的语句,其功能是先计算出赋值号右边表达式的值(必要时转换为相同类型数据),再将值赋给赋值号左边的变量。赋值语句的形式为:变量名表达式 或 对象名.属性名表达式注意赋值语句的阅读顺序:从右至左

2、 x=100*8Text1.Text=“welcome to”&“中国”,顺序结构 赋值语句,2023/4/4,6,赋值语句,说明:(1)如果语句中有表达式,则表达式一定要放在赋值号“=”右边。(2)赋值号两边为数值类型时,表达式的值不得超过数值变量的表示范围,且强制转换右边的类型,与左边保持一致。(3)任何类型表达式都可以向字符串变量赋值。(4)数值和逻辑类型可以相互转换,逻辑量True转为数值-1,False转为0,数值量0转换为False,非0转换为True。(5)赋值号“=”与等号“=”是有本质区别的。,7,顺序结构 赋值语句,赋值语句的应用示例:变量自增x=5x=x+1(2)变量交换

3、假设a=5,b=8,如何实现变量值的交换,即交换后a=8,b=5。实例2-4,8,顺序结构 输入输出语句,输入输出语句是人机交互的桥梁,程序通过输入语句得到用户的输入数据,用户通过输出语句获得反馈。,1、输入语句InputBox函数,函数语法格式:=InputBox(,),9,Const PI=3.14Private Sub Form_Click()Dim r As Integer r=InputBox(请输入圆的半径:,求圆的面积,10)Print PI*r*rEnd Sub,提示信息,对话框标题,默认值,10,InputBox函数注意事项,InputBox()函数的返回值为String类型

4、。第二个参数可以不加,但是逗号不能省。,11,1、输入语句文本框控件,利用文本框控件也可以实现输入语句的功能要想得到数值型数据,可以用Val函数进行类型转换:例如:Dim Temp As Integer Temp=Val(Text1.Text),Private Sub Form_Click()Dim r As Integer r=Val(Text1.Text)Print rEnd Sub,12,2、输出语句Print方法,.Print,|;功能:在窗体上(对象是窗体)打印内容,内容的默认位置在窗体的左上角。,13,注意:无“;”或“,”表示输出后下一个输出位置换行,注意:符号必须是英文输入状态

5、!,14,如何精确地控制打印内容的格式?,用Spc(n)、Tab(n)两个内部函数可以满足要求,Spc(n):输出n个空格,Tab(n):在第n列开始输出,15,特别说明:刚才所演示的都是打印字符串,当打印的是数值时,会有明显的不同。,Private Sub Form_Click()Print 1234567890123456789 Print 1000 Print 1000 Print Trim(1000)Print-1000End Sub,如果打印的是数值类型,则会自动在前后加上空格,称为前导空格和后置空格。,16,MsgBox函数的使用方法:=MsgBox(,对话框标题),2、输出语句M

6、sgBox函数,Private Sub Form_Click()Dim I as Integer,length as Integer,width as Integer Dim s as Long length=InputBox(请输入长方形的长:,求长方形的面积,10)width=InputBox(请输入长方形的宽:,求长方形的面积,10)s=length*width i=MsgBox(长方形的长:&length&长方形的宽:&width&长方形的面积:&s,0+64+0,计算的最终结果)End Sub,17,对话框类型参数指定对话框中出现的按钮和图标样式可由多项值组成:+,表1 按钮样式,2

7、、输出语句MsgBox函数,18,表2 图标样式,表3 默认按钮,2、输出语句MsgBox函数和MsgBox过程,19,表4 MsgBox函数返回值,2、输出语句MsgBox函数和MsgBox过程,20,3.2 选择结构,根据所给定的条件成立与否,决定从各种实际可能的不同分支中选择某一分支的相应操作。VB提供用来实现选择结构的语句,主要有IF和Select。,21,IF结构(条件语句),条件语句之一:单分支结构,例:If xy Then t=x x=y y=t End If 或 If xy Then t=x:x=y:y=t,行IF语句,块IF语句,22,条件语句之二:双分支结构,或,If Th

8、en Else End If,If Then Else,行IF语句,块IF语句,23,Private Sub Form_Click()Dim Max as single,sFirst as single,sSecond as single sFirst=InputBox(请输入第一个数:,sFirst)sSecond=InputBox(请输入第二个数:,sSecond)If sFirst sSecond Then Max=sFirst Else Max=sSecond End If Print MaxEnd Sub,24,If Then Else If Then Else If Else.En

9、d If End IfEnd If,条件语句之三:多分支结构,一定要注意End If成对出现,25,例3-4:编程,在窗体上输出字符串”欢迎使用Visual Basic”.第一次单击时以黑体显示;第二次单击时以楷体显示;第三次显示时以宋体显示;第四次单击则清除窗体上的信息,重复.,2023/4/4,26,If Then ElseIf Then ElseIf Then End If,注意:ElseIf 不要写成Else If,末尾的End If不要忘记。,另外一种多分支选择结构形式,27,选择结构(2)情况选择语句,情况选择结构用于多路选择,根据测试表达式的不同取值决定执行该结构的哪一个分支。测

10、试表达式可以为数值、字符等类型,常用的一般为整型或字符串类型。,28,情况语句Select语法格式,Select Case Case Case Case Case Else End Select,2023/4/4,29,例3-7 分析一下程序,理解情况选择结构的执行流程(当程序运行时,先后输入3、1、4和125,查看在Label1上的信息分别是什么?,2023/4/4,30,Select Case语句:,测试表达式:为数值表达式或字符串表达式表达式列表:多个表达式用逗号间隔即为表达式列表。表达式可以是单个表达式(单值)或“表达式 to 表达式”(数值范围),如果比较测试表达式与其他表达式的关系

11、,则用符号“Is”表示测试表达式的值。,31,Private Sub Form_Click()Dim Chinese%,Math%,English%Chinese=InputBox(语文)Math=InputBox(数学)English=InputBox(英语)Select Case(chinese+math+english)/3 Case Is=60 Print 及格 Case Is 60 Print 不及格 End SelectEnd Sub,注意:Select Case 后不能出现多个表达式,测试表达式,32,3.3 循环结构,计算机为什么能够大大提高人们的工作效率?一个很重要的原因就是

12、它能够不知疲倦地进行循环运算,而且结果精确。(比如:编程实现1到100的累积和),33,3.3 循环结构(1)ForNext,For to Step Next 循环变量 X,语法:,例:For x=1 To 100 Step 1 限定范围及步长 sum=sum+x;累加 Next x 进入下次循环,2023/4/4,34,例:For x=2 To 13 Step 3 限定范围及步长 Print x;输出x的值 Next x 进入下次循环,例:For x=1 To 99 Step 2 限定范围及步长 s=s+x 连加 Next x 进入下次循环,2023/4/4,35,Exit For语句,循环

13、体中,可以包括一条或多条Exit For语句,如果程序执行到Exit For语句时,就会直接退出循环,转而执行Next语句的下一条语句。Exit For语句最常用的形式是与If-Then语句相结合,即:If e Then Exit For在执行循环体时,如果条件e被满足,则执行Exit For语句直接退出循环。,For i=1 to 10 setp 1 If i=7 Then Exit ForNext i,2023/4/4,36,ForNext结构注意事项:,步长缺省值为1(可以省略)循环变量取值不合理,则不执行循环体。如:For n=99 to 1 step 2循环体中可以出现语句“Exit

14、 For”,用于将控制转移到Next后一语句循环正常结束(未执行Exit For等控制语句)后,控制变量为最后1次取值加步长。,37,Private Sub Form_Click()For x=13 To 1 Step-3 Print x;If x=7 Then Exit For End If Next x Print Print xEnd Sub,循环结构(1)ForNext,例子:,38,例子:Private Sub Form_Click()Print 12345 Dim i As Integer For i=1 To 5 Print Tab(i);String(6-i,T)Next iE

15、nd Sub,循环结构(1)ForNext,2023/4/4,39,例3-8:求表达式的值 1-1/2+1/3-1/4+(-1)n-1*1/n,回顾开头的1到100的累加程序算法分析:1、累加问题2、正负号有规律的交替,所以可以用一个变量来表示这个符号位3、累加的每一项分母有规律地从1变化到n,40,循环结构(2)WhileWend,While Wend,语法格式:,功能:当条件为真(True)时执行循环体While/Wend结构的特点是:先判断条件、后执行循环体,常用于编制某些循环次数预先未知的程序。,2023/4/4,41,例如:Private Sub Command1_Click()Di

16、m i As Integer,fh As IntegerDim y As Double,n As Integern=InputBox(输入n,)y=0fh=-1for i=1 to nfh=-fhy=y+fh/inext iLabel1.Caption=yEnd Sub,Private Sub Command1_Click()Dim i As Integer,fh As Integer Dim y As Double,n As Integer n=InputBox(输入n,)y=0 fh=-1 i=1 While i=n fh=-fhy=y+fh/i i=i+1 Wend Label1.Cap

17、tion=y End Sub,42,循环结构(3)DoLoop,Do While Loop,先判断条件,后执行循环体,43,循环结构(3)DoLoop,Do Loop While,先执行循环体,后判断条件,44,循环结构(3)DoLoop,Do Until Loop,45,循环结构(3)DoLoop,Do Loop Until,46,循环结构(3)DoLoop,Do While i101 sum=sum+i i=i+1Loop,Do Until i100 sum=sum+i i=i+1Loop,Do sum=sum+i i=i+1Loop While i101,Do sum=sum+i i=i

18、+1Loop Until i100,四种形式:,2023/4/4,47,Exit Do语句,循环体中,可以包括一条或多条Exit Do语句,如果程序执行到Exit Do语句时,就会直接退出循环,转而执行Loop语句的下一条语句。Exit Do语句最常用的形式是与If-Then语句相结合,即:If e Then Exit Do在执行循环体时,如果条件e被满足,则执行Exit Do语句直接退出循环。,Do While i50 Then Exit doLoop,2023/4/4,48,例3-14循环结构,输入一个大于等于4的正整数,判断该数是不是素数。注意Exit For的用法修改程序,利用DoLo

19、op实现该程序。,49,3.4 嵌套结构(多重循环),单一的循环结构功能较弱,如果将循环结构与分支结构进行嵌套,或者多重循环结构进行嵌套,就能实现复杂的功能。,50,嵌套结构,要注意嵌套层次的对应关系,51,多重循环,注意对应关系,2023/4/4,52,例3-15“鸡翁一,值钱五;鸡母一,值钱三;鸡雏三,值钱一。百钱买百鸡,问鸡翁、母、雏各几何?”算法分析:采用穷举法,设公鸡x只,母鸡y 只,小鸡z只。利用三重循环把所有的组合都算一遍,把满足5x3yz/3100的解求出来。,2023/4/4,53,嵌套结构(实例),产生6个100到200之间的随机整数,打印到窗体上,找出其中的最大值,并把该

20、值另起一行打印出来。注意对应关系。复习使用print方法和随机函数。一定要灵活使用嵌套结构,不要使用太多的嵌套结构。,54,3.5 数组及其应用,假设有100个学生的成绩需要输入计算机,按照前面的说法,就需要声明100个变量来分别存储成绩,显然这是极不合适的。但若使用数组,就可以轻松地解决此类大数据量的问题。,数组的定义:数组是指相同类型数据的有序集合,由一个变量名来引用。数组中的每一个元素都可以通过一个数值下标访问。,55,3.5 数组,数组可分为两种类型:静态(定长)数组、动态(可变长)数组,1、定长数组及声明(必须先声明,再使用)数组名(下标)As 类型下标:下界 To上界 注:必须为常

21、量,若省略,则表示 下界为0或者1数组大小(总的元素个数):上界下界1例:Dim mark(1 to 100)As Integer,1是下标的下界,100是下标的上界,数组元素的数据类型,56,可以利用此语句设置数组中下标中的下界的缺省值。,Option Base 0|1 的用法,57,Option Base 0|1 的用法,注意:(1)在模块的通用声明段设置,并只在此模块起作用。(2)参数只能为0或1。(具体应写成Option Base 0或Option Base 1)(3)程序中没有写明此条语句的话,数组下界的缺省值依然为0。,2023/4/4,58,一维数组的简单应用:,Private

22、Sub Form_click()Dim a(1 To 5)As IntegerFor i=1 To 5 a(i)=i Print a(i);Space(1);Next iEnd Sub,2023/4/4,59,回顾刚才例子用数组实现:,Private Sub Form_Click()Dim i As Integer,a(1 to 6)As Integer,max As Integer max=0 For i=1 To 6 a(i)=Int(Rnd*101)+100 Print a(i);If a(i)max Then max=a(i)Next i Print Print max=&maxEnd

23、 Sub,60,多维数组,如:Dim a(2,3)As Integer(共3*4个元素),如:Dim a(8)As Integer,一维数组:,二维数组:,61,多维数组,例:Dim a(1 to 3,1 to4)As Integer Dim s(2,5)As Single,多维数组的语法形式:数组名(下标1,下标2,)As 类型,2023/4/4,62,多维数组的简单应用:,Option ExplicitOption Base 1Private Sub Form_click()Dim a(10,10)As IntegerDim i As Integer,j As IntegerFor i=1

24、 To 10For j=1 To 10 a(i,j)=i+j If j=1 And i 1 Then Print Print a(i,j);If a(i,j)10 Then Print Space(2);Else Print Space(1);End If Next jNext iEnd Sub,2023/4/4,63,动态数组,声明数组的时候下标界不能出现变量,因此试图用下列语句在运行时动态的声明数组的大小(数组元素个数)是错误的。nInputBox(“请输入数组元素个数”)Dim a(1 to n)As Integer,64,动态数组,动态数组的声明格式:数组名()As 数据类型重新定义数

25、组大小的语句格式:ReDim Preserve 数组名(下标1,下标2)或者两条语句加在一起:ReDim Preserve 数组名(下标1,下标2)As 数据类型,数组的大小在声明时并没有给出,而要根据后续程序的需要来重新定义数组的大小。,2023/4/4,65,例:Dim a()As Integer nInputBox(“请输入数 组元素个数”)ReDim a(n)ReDim Preserve a(25),建议用这个方式,请大家修改P73,nInputBox(“请输入数组元素个数”)ReDim a(n)As Integer,或者,66,动态数组,关键字Preserve加与不加的区别:(书上没

26、有)如果没有Preserve,重新确定数组大小时,会把原来数组里的内容全部清空为0。(2)如果加了Preserve,重新确定数组大小时,会保留原来数组里的全部内容。,67,Option ExplicitPrivate Sub Form_Click()Dim mark()As Integer ReDim mark(6)mark(1)=23 mark(2)=56 mark(3)=77 ReDim Preserve mark(8)Print mark(3)End Sub,动态数组,68,3.6 实例(常用算法),算法是指解决问题的一种方法或者一个过程,而程序是指使用某种计算机语言对一种算法的具体实现

27、。,打个小比喻:,算法,VB语言,工具,方法,问题,69,累加与累乘,一般需要依靠循环结构来实现累加与累乘算法,70,例:求自然对数e的近似值,要求其误差小于0.00001,近似公式为:,算法分析:累加问题归纳出其通项:an1/n!,Private Sub Form_Click()Dim i As Integer,sum As Double,temp1 As Double sum=0各项阶乘倒数总和 i=0递增变量 temp1=1单项阶乘 Do While 1/temp1 0.00001 sum=sum+1/temp1 i=i+1 temp1=temp1*i Loop Print 计算了;i;

28、项的和是;sumEnd Sub,71,穷举法,“穷举法”也称为“枚举法”或“试凑法”,即对可能出现的各种情况逐一进行测试,判断是否满足条件,从中找出那些满足条件的结果作为问题的解。例如用计算机破译密码、探寻路径等。这是一种最“笨”的方法,一般采用循环来实现。,72,Private Sub Form_Click()Dim A As Integer,B As Integer,C As Integer,D As Integer Dim S1 As Integer,S2 As Integer,S3 As Integer For A=1 To 9 For B=0 To 9 For C=1 To 9 Fo

29、r D=0 To 9 S1=A*1000+B*100+C*10+D S2=C*100+D*10+C S3=A*100+B*10+C If S1-S2=S3 Then Print A;B;C;D End If Next D Next C Next B Next AEnd Sub,73,递推法,递推法又叫迭代法,是利用问题本身所具有的一种递推关系求问题解的方法。,递推法的基本思想是把一个复杂的计算过程转化为简单过程的多次重复。每次重复都从旧值的基础上递推出新值,并由新值替代旧值。,例如数列:1 2 2 4 8 32,74,斐波那契数列,0,1,1,2,3,5,8,13,,Private Sub F

30、orm_Click()a=0 b=1 Text1.Text=Str(a)&Str(b)&Chr(13)&Chr(10)For i=1 To 9 a=a+b b=a+b Text1.Text=Text1.Text&Str(a)&Str(b)&Chr(13)Next i End Sub,递推法,打印前20项,若要打印前30项呢?,这个干嘛?,75,数组排序,两种算法:选择排序、冒泡排序,对已知存放在数组中的n个数,进行排序。,76,1、选择法排序算法思想:(1)对有n个数的序列,从中选出最小的数,与第1个数交换位置;(2)除第1个数外,从其余n-1个数中选最小的数,与第2个数交换位置;(3)依次类

31、推,选择了n-1次后,这个数列已按升序排列。,数组排序,原始数据:8 6 9 3 2 7第一轮后:2 6 9 3 8 7第二轮后:2 3 9 6 8 7第三轮后:2 3 6 9 8 7第四轮后:2 3 6 7 8 9第五轮后:2 3 6 7 8 9,77,Private Sub Form_Click()Dim n As Byte,i As Byte,j As Byte,k As Byte,temp As Single Dim a()As Single n=InputBox(请输入数组元素个数,输入数据)ReDim a(n)For i=1 To n a(i)=Int(Rnd*90)+10 Nex

32、t i For i=1 To n 1总共要交换n-1次 k=i假定第i个数最小 For j=i+1 To n从第i个数后面开始比较 If a(j)a(k)Then k=j找到最小的数的下标 Next j temp=a(i):a(i)=a(k):a(k)=temp交换 Next i For i=1 To n Print a(i);Next i PrintEnd Sub,78,2、冒泡法排序算法思想:从后往前将相邻两个数比较,小的调到前头(1)有n个数,第一趟将相邻两个数比较,小的调到前头,经n-1次两两相邻比较后,最小的数已“浮起”,放在第一个位置;(2)第二趟对余下的n-1个数按上法比较,经n

33、-2次两两相邻比较后得到次小的数;(3)依次类推,n个数共进行n-1趟比较,就能得到最终结果。在第j趟比较中要进行n-j次两两比较。,原始数据:8 6 9 3 2 7第一轮后:2 8 6 9 3 7第二轮后:2 3 8 6 9 7第三轮后:2 3 6 8 7 9第四轮后:2 3 6 7 8 9第五轮后:2 3 6 7 8 9,79,Private Sub Command1_Click()Dim a(1 To 6)Dim n%,i%,j%,iMin%,t%,k%n=6 a(1)=8:a(2)=6:a(3)=9:a(4)=3:a(5)=2:a(6)=7 For k=1 To n Print a(k);Next k Print For i=1 To n-1 For j=n To i+1 Step-1 If a(j)a(j-1)Then t=a(j)a(j)=a(j-1)a(j-1)=t End If Next j For k=1 To n Print a(k);Next k Print Next iEnd Sub,原始数据:8 6 9 3 2 7第一轮后:2 8 6 9 3 7第二轮后:2 3 8 6 9 7第三轮后:2 3 6 8 7 9第四轮后:2 3 6 7 8 9第五轮后:2 3 6 7 8 9,

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

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


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号