已阅读5页,还剩77页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第四章,VB算法基础及基本语句,主要内容,三种程序结构(顺序,分支,循环) 赋值语句 条件分支语句(共五种),笔记、作业、实验,求两个自然数的最大公约数的算法 (欧几里德算法) S1.输入两个自然数M、N S2. 求M除以N的余数R S3.使M=N,即用N代换M S4.使N=R,即用R代换N S5.若R0,则重复执行S2、S3、S4(循环),否则转S6 S6.输出M ,M即为M和N的最大公约数,基本算法结构图,顺序,分支,循环,4.2.1 赋值语句,1、形式 Var= 如:s=“This is a flower” Number%=72 Text.font.size=12 Y=(a+b)/2 作用: 将表达式的值赋值给变量名。 一般用于给变量赋值或对控件设定属性值。,2.不同数据类型数据的赋值 当表达式的类型与变量的类型不一致时,强制转换成左边的精度,如 iA% = 10 / 3 iA中的结果为3 注意:虽然赋值号与关系运算符“等号”都用“=”表示,VB系统会根据所处的位置自动判断是何种意义的符号。 注意点:P59-60,4.2.2 InputBox函数,InputBox 函数 作用: 用来接受用户通过键盘输入的数据。 形式: V=InputBox(Prompt,Title,Default ,x,y,helpfile,context) 其中:提示: 提示信息;标题: 对话框标题;缺省:输入区缺省值 函数返回字符类型。 举例:下页,Private Sub Form_Click() PassWord = InputBox(“输入你的口令:“, “程序示例“) If PassWord = “123456“ Then Print “OK!“ Else Print “Error!“ End If End Sub,函数返回值,4.2.3 MsgBox函数,作用: MsgBox函数用于向用户发布提示信息,并要求用户作出必要的响应。 形式是: MsgBox(Prompt,button,title ,helpfile,context),P72,button: 这是一个由4个数值常量组成的式子,形式为 c1+c2+c3+c4,,Print MsgBox(“非法数据!“, vbOKOnly + 48 + 0, “提示信息“),Print MsgBox(“请输入X值!”,16+ vbOKOnly, ”ex4_6“),MsgBox函数根据用户选择单击的按钮而返回不同的值:,参见P63 表4-3。,顺序结构,4.3分支结构和分支结构语句,结构示意图,1、IF 条件 THEN 一条语句 2、if 条件 THEN 语句组(多条语句) end if 3、if 条件 then 语句组1 else 语句组2 end if,4、if 条件1 then 语句组1 elseif 条件2 then 语句组2 elseif 条件3 then 语句组3 else 语句组n end if,1. IfThen语句(单分支结构) If Then 语句块 End If 或 If Then ,例:已知两个数x和y,比较它们的大小, 使得x大于y. If xy Then t=x x=y y=t End If 或 If xy Then t=x: x=y: y=t,重要的是学会两个数的交换,若上述语句次序变一下,结果如何?,2. IfThenElse语句(双分支结构) If Then Else End If If Then Else 计算分段函数:,单分支结构实现: y=cos(x)x3+3*x If x0 Then y=sin(x)+sqr (x*x+1),双分支结构实现: If x0 Then y=sin(x)+sqr (x*x+1) Else y=cos(x)x3+3*x End If,3. IfThenElseIf语句(多分支结构) 形式: If Then ElseIf Then Else 语句块 n+1 End If,Private Sub Command1_Click() Dim x As Integer x = Val(Text1.Text) If x 1 Then Text2.Text = “小于1的数” ElseIf x = 10 Then Text2.Text = “1到10之间” Else Text2.Text =”大于10的数” End If End Sub,例已知变量strC中存放了一个字符,判断该字符是字母字符、数字字符还是其他字符。 用多分支结构实现:,不管有几个分支,依次判断,当某条件满足,执行相应的语句,其余分支不再执行;若条件都不满足,且有Else子句,则执行该语句块,否则什么也不执行。. ElseIf不能写成 Else If。,If Ucase(strC) =“A“ And Ucase (strC) =“0“ And strC =“9“ Then Print strC + “是数字字符“ Else Print strC + “其他字符“ End If,4If语句的嵌套 If语句的嵌套是指If或Else后面的语句块中又包含If语句。 形式如下: If Then If Then End If End If,例:已知x,y,z三个数,使得xyz 用一个IF语句和一个嵌套的IF语句实现,If xy Then t=x: x=y: y=t If yz Then t=y: y=z: z=t If xy Then t=x: x=y: y=t End If End If,If语句的嵌套注意事项:书写锯齿型; If 与End If配对。,5、 Select-Case-End Select 结构语句 Select Case e Case c1 A组语句 Case c2 B组语句 . Case Else n组语句 End Select,e称为测试表达式, c1,c2,.是测试项它们可取三种形式: (1)具体取值: 如:3、5、7.2等; (2)连续的数据范围: 如:8 To 20;”B” To “H”等; (3)满足某个判决条件: 如:Is20;Is 30,表达式列表1,语句块1,语句块n+1,表达式列表2,表达式列表n,语句块2,语句块n,T,T,T,F,F,F,Private Sub Command1_Click() Dim x As Integer x = Val(text1.Text) Select Case x Case Is 1 Text2.text = “这是小于1的数“ Case 1 To 10 Text2.Text = “这是1到10之间的数“ Case Else Text2.Text = “这是大于10的数“ End Select End Sub,例变量strC中存放了一个字符,判断该字符类型。 在前面例中用多分支结构实现: If Ucase(strC) =“A“ And Ucase (strC) =“0“ And strC =“9“ Then Print strC + “是数字字符“ Else Print strC + “其他字符“ End If 用Select Case语句实现: Select Case strC Case “a“ To “z“,“A“ To “Z“ Print strC + “是字母字符“ Case “0“ To “9“ Print strC + “是数字字符“ Case Else Print strC + “其他字符“ End Select,Dim x As Single, y As Single x = Val(Text1.Text) If x = 0 Then y = 1 + x Else y = 1 - 2 * x EndIf Text2.Text = y,输入x,计算y的值。其中 1+x (x0) Y = 1-2x (x0),思考题:,1、学校对学习成绩优良的学生进行奖励,获奖的条件如下: (1)所考5门课的成绩都在88分以上。 (2)前3门(主课)的成绩都在95分以上,其他两门(非主课)的成绩都在80分以上。 输入某学生5门课的成绩s1、s2、s3、s4、s5,判断他是否能够获奖。,2、利用输入框函数输入3个不同的数,选出其中最大的数。,3、铁路托运行李,从甲地到乙地,规定每张客票托运费计算方法是行李重量不超过50kg时,0.25元/kg,超过50kg而不超过100kg时,其超过部分按0.35元/kg收费,超过100kg时,其超过部分按0.45元/kg收费。编写程序,输入行李重量,计算并输出托运的费用。,设行李重量为w kg,应付运费为x 元,则运费公式为: 0.25*w (w100),4、某百货公司为了促销,采用购物打折扣的优惠办法:每位顾客一次购物 (1)在1000元以上者,按九五折优惠; (2)在2000元以上者,按九折优惠; (3)在3000元以上者,按八五折优惠; (4)在5000元以上者,按八折优惠; 编写程序,输入购物款数,计算并输出优惠价。,5、已知两个变量x和y,比较它们的大小,使得x中的值大于y,下面那个方法能实现? If xy then A、x=y:y=x B、x=t:t=y:y=t C、t=y:y=x:x=t D、x=y:t=y:x=t,常 见 错 误 1在选择结构中缺少配对的结束语句 对多行式的If块语句中,应有配对的 End If语句结束。 2. 多边选择ElseIf关键字的书写和条件表达式的表示 ElseIf 不要写成Else If; 多个条件表达式次序问题。 3. Select Case语句的使用 Select Case 后不能出现多个变量;Case子句后不能出现变量。,例:已知百分制成绩mark,显示对应的五级制成绩 哪些正确,哪些错误?,例:已知坐标点(x,y),判断其落在哪个象限。,方法一 If x 0 And y 0 Then Print “在第一象限“ ElseIf x 0 Then Print “在第二象限“ ElseIf x 0 And y 0 Then Print “在第四象限“ End If,方法二 Select Case x,y Case x 0 And y 0 Print “在第一象限“ Case x 0 Print “在第二象限“ Case x 0 And y 0 Print “在第四象限“ End Select,哪个能实现,哪个不能实现?,方法二代码错误: 1. Select Case 后不能出现多个变量; 2. Case后不能出现变量及有关运算符。,习题:,1.下面程序运行后输出的结果是_ X=Int(Rnd)+3 If x28 then y=x2+1 If x2=9 then y= x2-2 If x28 then y=x3 Print y,2.下面的程序段是检查输入的算术表达式中圆括号是否配对,并显示相应的结果。本程序在文本框输入表达式,边输入,边统计,以输入回车符作为表达式输入结束,然后显示结果。,Dim count1% Private Sub Text1_KeyPress(KeyAscii As Integer) If _1_=“(” Then count1=count1+1 ElseIf_2_=“)” Then _3_ End If If KeyAscii=13 Then If _4_ Then Print “左右括号配对” ElseIf _5_ Then Print “左括号多于右括号”;count1;”个” Else Print “右括号多于左括号”;-count1;”个” End If End If End Sub,四、循环结构及循环语句,1、DO-LOOP语句及其对应的四种循环结构 注意: 先判后做 先做后判 保证:不多做一次,不少做一次!,P68P69,Do While 条件 Do . . Exit Do Exit Do . . Loop Loop While 条件,条件为TRUE循环; 条件为FALSE退出循环,Do Do Until 条件 . . Exit Do Exit Do . Loop Until 条件 Loop,条件为FALSE循环; 条件为TRUE退出循环,在Do语句和Loop语句之间的语句即为循环体语句。 Exit Do语句时,就会直接退出本层循环,转而执行Loop语句的下一条语句。 此语句最常用的形式是与If-Then语句相结合,即: If e Then Exit Do,求两个自然数的最大公约数的算法 (欧几里德算法) S1.输入两个自然数M、N S2. 求M除以N的余数R S3.使M=N,即用N代换M S4.使N=R,即用R代换N S5.若R0,则重复执行S2、S3、S4(循环),否则转S6 S6.输出M ,M即为M和N的最大公约数,Private Sub Command1_Click() Dim m as long, n as long, r As Long m = Val(Text1.Text) 取数据M n = Val(Text2.Text) 取数据N If m Int(m) or m Int(n) or n 1 Then Text3.Text = “数据错误!“ Else If m n Then t = m: m = n: n = t Do 求最大公约数 r = m Mod n m = n n = r Loop Until r = 0 Text3.Text = CStr(m) 输出最大公约数 End If End Sub,判断数据是否合法,r=1 Do until r=0 r = m Mod n m = n n = r Loop,求最大公约数,Do r = m Mod n m = n n = r Loop Until r = 0,r=1 Do while r0 r = m Mod n m = n n = r Loop,Do r = m Mod n m = n n = r Loop while r0,1,2,3,4,while r0,while r0,例: 我国有13亿人口,按人口年增长0.8%计算,多少年后我国人口超过26亿。 Private Sub Command1_Click() x = 13 n = 0 Do While x 26 x = x * 1.008 n = n + 1 Loop Print n, x End Sub,2、计数型循环语句,一般形式是: For v = e1 To e2 Step e3 . Exit For . Next v v是循环控制变量,应为整型或单精度型;,循环体,e1、e2和e3是控制循环的参数。,e1为初值、e2为终值、e3为步长。 当e3=1时,step e3部分可以省略。,For-Next循环结构语句的执行方式,计算e1、e2和e3的值(如果e1、e2、e3为算术表达式); 给v赋初值; 进行判别:判别v是否超过e2,超过则退出循环,执行Next下一语句; 执行Next语句,系统执行下述操作: v增加一个步长,即执行v=v+e3,转而执行判别操作。 For-Next循环的正常循环次数用下式计算: Int(e2-e1)/e3)+1,For-Next 示例,1、用For 语句写程序,在一行上输出60个 “ * ” 号, For i = 1 To 60 Print “*“; Next I ,Private Sub Form_Click() For i = 1 To 10 Step 2 Print i; Next i Print “i=“; i End Sub,注意: Print I 与 Print I; 的区别!,例 计算1100的奇数和,程序段如下: Dim i %, s% S=0 For i = 1 To 100 step 2 s = s + i Next i,For-Next 示例,1、求N! (N为自然数),由阶乘定义可知:N!=1*2*3* *(N-2)*(N-1)*N =(N-1)!*N,k = 1 For i = 1 To n k = k * i Next i,k = 1 For i = n To 1 step-1 k = k * i Next i,For-Next 示例,控制变量的“初值”、“终值”和 “步长” 在进入For循环时,就被系统 “记住”了,并不会因为循环体内对它的修改而影响循环执行的次数。,例如: x = 2: y = 8: z = 3 For a = x To y Step z x = 1: y = 11: z = 2 Print a; Next a ,输出结果是:2 5 8,循环体内虽然对x,y,z 重新赋值,但程序仍 按原来设定的初值、 终值和步长去运行,For I=1 to 10 step 2 print I; next i,I=1 do print I; I=I+2 loop until I10,分析: 两段程序的功能一样? 两种语句的特点? 那种较为合适?,例: 改变循环控制变量对循环的影响。 Private Sub Command1_Click() j = 0 For i = 1 To 20 Step 2 i = i + 3 j = j + 1 Print “第“; j; “次循环i=“; i Next i Print “退出循环后i=“; i End Sub 正常情况:i=1,3,5,7,9,11,13,15,17,19 现在:i=4,9,14,19,在循环体内对循环控制变量可多次引用;但最好不要对其赋值,否则影响原来的循环控制规律。,A=1:b=0 Do while a=5 b=b+a*a a=a+1 Loop Print a,b,Dim ch as string,I as integer Ch=“DEF” For I=1 to len(ch) ch=mid(ch,2*I-1,1) & left(ch,len(ch) print ch Next i,关于循环嵌套,一个循环体内又包含了一个完整的循环结构称为循环的嵌套.,例:九九乘法表的实现。,Private Sub Command1_Click() For i = 1 To 9 For j = 1 To 9 se = i Next j Picture1.Print Next i End Sub 执行本程序, 图片框上将显示九九乘法表。,换行!,作用?,For ii =1 To 10 For jj=1 To 20 Next ii Next jj,For ii =1 To 10 For ii=1 To 20 Next ii Next ii,For ii =1 To 10 For jj=1 To 20 Next jj Next ii,For ii =1 To 10 Next ii For ii =1 To 10 Next ii,对于循环的嵌套,要注意以下事项: 内循环变量与外循环变量不能同名; 外循环必须完全包含内循环,不能交叉; 不能从循环体外转向循环体内,反之则可以。 正确 错误,3、设计循环程序的关键,需要解决的问题有规律?哪个变?怎么变? 确定控制变量; 了解两种循环语句的功能与特点, 选择合适的循环语句。 保证不多做一次,不少做一次 尝试编写循环体语句 静态走一遍;结果? 调试.最后正确。,其他辅助控制语句 1. Go To 语句 形式: Go To 标号|行号 作用:无条件地转移到标号或行号指定的那行语句. 标号是一个字符序列,行号是一个数字序列. 2.Exit语句 多种形式: Exit For、Exit Do、Exit Sub、Exit Function等。 作用:退出某种控制结构的执行。 3. End语句 多种形式: End、 End If、 End Select、 End With、 End Type、 End Sub、 End Function、 作用:End结束一个程序的运行;其余表示某个结构的结束,与对应的结构语句配对出现。,Private Sub Command1_Click() Dim intranum, i, j, a As Integer Randomize 随机化语句 For i = 1 To 1000 intranum = Int(100 * Rnd) + 1 产生1100间随机数 a = 0 For j = 1 To 10000 延时 a = a + 1 Next j Text1.Text = CStr(intranum) Text1.Refresh 文本框刷新 Next i Text1.Text = CStr(intranum) End Sub,4、举例,4.5 常用算法,算法是对某个问题求解过程的描述 1. 累加、连乘,1100的5或7的倍数的和 Sum = 0 For i = 1 To 100 If i Mod 5 = 0 Or i Mod 7 = 0 Then Sum = Sum + i End If Next i Print Sum,310的乘积 t = 1 For i =3 To 10 t = t * i Next i Print t,思考:若把循环体前面置各变量初值的语句放在循环体内,程序运行时会产生什么情况?,例:求自然对数e的近似值,要求其误差小于0.00001,近似公式为: 该例题涉及两个问题: (1)用循环结构求级数和的问题。本例根据某项值的精度来控制循环的结束与否。 (2)累加:s=s+t 循环体外对累加和的变量清零 s=0 连乘:n=n*i 循环体外对连乘积变量置1 n=1 Private Sub Form_Click() Dim i%,n e End Sub,用以下公式计算sin(x)的值。当最后一项的绝对值小于107时,停止计算。X的值由键盘输入。,分析:设变量 t 用于存放中间项的计算结果,并且当第n项值 107时结束计算,即循环结束条件为t的绝对值1E-7 ;可以把算法描述 为:,再看和式中第 n项 tn 的值与第 n-1项的递推关系:,t=第1项值 : s=t : n=1 Do Until Abs(t)1E-7 n=n+1 t=第n项值 s=s+t Loop,2. 求素数 素数是一个大于2,且不能被1和本身以外的整数整除的整数。 判别某数m是否为素数最简单的方法是: 对于m 从 i=2,3,m-1判别m能否被i整除,只要有一个能整除,m不是素数,否则m是素数。 求100以内素数的代码: Private Sub Command1_Click() Dim I as integer , m as integer , flag as boolean For m = 2 To 100 flag=true For i = 2 To m - 1 If (m Mod i) = 0 Then flag=false Next i If flag then Print m Next m End Sub,3.穷举法 “穷举法”也称为“枚举法”或“试凑法”,即将可能出现的各种情况一一测试,判断是否满足条件,一般采用循环来实现。 百元买百鸡问题。假定小鸡每只5角,公鸡每只2元,母鸡每只3元。现在有100元钱要求买100只鸡,编程列出所有可能的购鸡方案。 设母鸡、公鸡、小鸡各为x、y、z只,根据题目要求,列出方程为: x+y+z=100 3x+2y+0.5z=100 三个未知数,两个方程,此题有若干个解。 解决此类问题采用“试凑法”,把每一种情况都考虑到。 方法一:最简单三个未知数利用三重循环来实现。 方法二:从三个未知数的关系,利用两重循环来实现。,Private Sub Form_Click() dim x as integer, y as integer, z as integer End Sub,改进: For x=0 to 33 for y=0 to 50 if 3*x+2*y+0.5*(100-x-y)=100 then print x,y,100-x-y endif next y Next x,for x=0 to 100 for y=0 to 100 for z=0 to 100 if x+y+z=100 and 3*x+2*y+0.5*z=100 then print x,y,z endif next z next y next x,4.递推法 “递推法”又称为“迭代法”,其基本思想是把一个复杂的计算过程转化为简单过程的多次重复。每次重复都从旧值的基础上递推出新值,并由新值代替旧值。 猴子吃桃子。小猴在某天摘桃若干个,当天吃掉一半多一个;第二天吃了剩下的桃子的一半多一个;以后每天都吃尚存桃子的一半多一个,到第7天要吃时只剩下一个,问小猴共摘下了多少个桃子? 分析:这是一个“递推”问题,先从最后一天推出倒数第二天的桃子,再从倒数第二天的桃子推出倒数第三天的桃子。设第n天的桃子为xn,那么它是前一天的桃子数的xn-1 的一半减1,即xn =( xn-1 +1)2,Private Sub Form_Click() dim n as integer, I as integer x=1 print “第7天的桃子数为:1只” for I=6 to 1 step 1 x=(x+1)*2 print “第”;I;”天的桃子数为:”;x;”只” next i End Sub,5.最小、最大值 在若干个数中求最大值,一般先假设一个较小的数为最大值的初值,若无法估计较小的值,则取第一个数为最大值的初值;然后将每一个数与最大值比较,若该数大于最大值,将该数替换为最大值;依次逐一比较。 例 随机产生10个100200之间的数,求最大值。,Private Sub Command1_Click() Max = 100 For i = 1 To 10 x = Int(Rnd * 101 + 100) Print x; If x Max Then Max = x Next i Print Print “最大值=“; Max End Sub,实际应用,求最短残料。 有一根长度为321米的钢材料,要将它截取成两种规格a、b的长度分别为17米和27米的短料,每种至少1段,问分隔成a,b各多少段后,剩余的残料r最少? 分析,该题利用“试凑法”通过二重循环求残料r的最小值正数,残料不可能是负数。程序如下:,Private Sub Command1_Click() Dim a%, b%, min!, ia%, ib% min = 321 最小值初值取钢材料的长度 For b = 1 To 321 27 b最多的段数 For a = 1 To 321 17 a最多的段数 t = 321 - b * 27 - a * 17 当前的残料 If t 0 And t min Then min = t 求最短的残料 ia = a 最短残料时a的段数 ib = b 最短残料时b的段数 End If Next a Next b Print ia, ib, r End Sub,二级真题练习,阅读下面程序,单击窗体后在窗体上显示的内容是_,若将程序中的A语句与B语句的位置互换,再次执行程序,显示内容是_。 (02春) Option Explicit Private Sub Form_Click() Dim sum As Int
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 幼儿园谁主持起草通知书
- 广东揭阳初中开学通知书
- 庆华镇停电安排通知书
- 应征青年市站体检通知书
- 废品收购站整改通知书
- 康驿一中返校通知书
- 建发招商璟云收房通知书
- 建瓯禁止种茶文件通知书
- 开启新冠监测通知书
- 开封新增学位通知书
- 能量均分定理理想气体的内能
- 学校校舍安全管理制度
- 功能高分子04-电功能高分子材料
- 建筑企业管理制度大全-精品完整版
- GB/T 1185-2006光学零件表面疵病
- 锚杆工程隐蔽验收记录
- 2020年汽车物流企业组织结构及部门职责
- 混凝土原理与设计10压弯承载力课件
- 幼教培训课件:《家园共育体系建构与实施策略》
- 突发公共卫生事件健康教育与健康促进课件
- 2023版北京协和医院重症医学科诊疗常规
评论
0/150
提交评论