算法与Visual Basic程序基础(二)
算法的三种基本结构 顺序结构 选择结构 循环结构
顺序结构 在算法执行流程中,执行完一个处理步骤step1后,顺序执行紧跟着的下一个处理步骤step2 范例: 语句1 语句2 开始 结束 …… 范例: Private Sub Command1_Click() a = 2 b = 3 c = a * b End Sub
选择结构结构 块if结构 If 条件 then 块if范例: 语句系列1 If a < b Then t = a Else Else 语句系列2 End if N Y 开始 结束 条件 执行a 执行b 块if范例: If a < b Then t = a Else t = b End If 行if结构 If 条件 then 语句系列1 else 语句系列2 行if范例 If a<b then t=a else t=b
多层选择结构 If 条件表达式1 then 语句块1 Elseif 条件表达式2 then 语句块2 …… Elseif 条件表达式n then 语句块n End if
多层选择结构范例 If n<0 then Msgbox “请重新输入一个大于0的值” ElseIf n<2 then t=n*0.9 Elseif n<5 then t=n*0.7 else t=n*0.6 End if 输入n的值 输出t的值 1 4 5 -1 0.9 2.8 3 消息框提示:请输入一个大于0的值
循环结构 在算法流程中,对某个情况e进行判断,当结果为真时,执行yes指向的流程线下的步骤step1,然后再次判断情况e,如果结果还为真,则再次执行步骤 step1,并继续判断情况e,重复上述过程,直到判断的结果为假,执行no指向的流程线下的其他语句(如下图)。
For语句 For 循环变量名=初值 TO 终值 Step 步长 语句块 Next 循环变量
例: Dim i as integer, s as integer S=0 For i=1 to 10 s=s+i Next Label1.caption=str(s) S=s+i语句共执行了几次? 程序执行完s的值是多少? 10次 55
Do while语句 Do While 条件表达式 语句块 Loop
例: Dim s as integer, n as integer n=5 Do while n>=3 s=s+n n=n-1 loop
程序解决问题已学的两种算法 解析法 枚举法
解析法(analysis algorithm) 用解析的方法找出表示问题的前提条件与结果之间关系的数学表达式,并通过表达式的计算来实现问题求解 。 如:根据半径r求出面积s和周长c
枚举法(穷举法) 按照问题要求确定问题解的大致范围,然后在此范围内对这些解进行一一列举,再对当前列举出的解进行是否满足问题要求的判断,最后把符合要求的解输出直到所有可能的解全部列举完毕。 如:求出1-100之内的所有素数。 确定范围 情况枚举 条件判断 得到真解
求a、b两数的最大公约数 方法一:辗转相除法代码一 Do while b<>0 r=a mod b a=b b=r Loop label1.caption=“最大公约数是” +str (a) 方法二:辗转相除法代码二 r=a mod b Do while r<>0 a=b b=r r= a mod b Loop label1.caption=“最大公约数是” +str (b) 方法三:辗转相减法代码 Do While a <> b Do While a > b a = a - b Loop Do While a < b b = b - a Print a ‘ print b也一样
程序填空 VB程序代码中划线处应填入的语句和表达式__________。 Private Sub Command1_Click() Dim m As Integer, n As Integer Dim r As Integer m = Val(Text1.Text) n = Val(Text2.Text) r = m Mod n Do While _________ m = n n = r ________ Text3.Text = Str(n) End Sub VB程序代码中划线处应填入的语句和表达式__________。
判断数a是否为素数 方法一: 方法二: n = Val(Text1.Text) n = Val(Text1.Text) f = True ‘ f=0 For i = 2 To n-1 If n Mod i = 0 Then f = False ‘ f=1 Exit For End If Next I If f = True Then ‘ if f= 0 then Label1.Caption = Str(n) + "是素数" Else Label1.Caption = Str(n) + "不是素数" 方法二: n = Val(Text1.Text) f = True For i = 2 To int(sqr(n)) If n Mod i = 0 Then f = False Exit For End If Next I If f = True Then Label1.Caption = Str(n) + "是素数" Else Label1.Caption = Str(n) + "不是素数"
VB程序调试常见错误 常见错误提示: 溢出 要求对象 子程序或函数未定义 无效的过程调用或参数 类型不匹配 不允许给常数赋值 下标越界 未找到方法或数据成员
字符串处理
常用类型转换函数和字符串函数 函数名 函数的功能 范例 Asc(X) 取字符的ASCII码 Asc(“A”)的返回值是65 Chr (X) Chr (66)的返回值是”B” Val(X) 数字字串转换为数值 Val(“123”)的返回值是123 Str(X) 数值转换成字符串 Str(255)的返回值是“255” Len(X) 计算字符串的长度 Len(“abcdef”)的返回值是6 Mid(x,n,k) 在字符串X中取第N个字符起长度为K的子串 Mid(“abc”,2,2)的返回值是“bc” Mid(x,n) 在字符串X中取第N个字符起到末尾的子串 Mid(“abcde”,2)的返回值是“bcde”
首尾取子串 Left(x,n):从x的左边取n个字符长度的子串 Right(x,n):从x的右边取n个字符长度的子串 例: A=“happy new year!” B=Left(a,5) ‘B的值是”happy” C= Right(a,5) ‘C的值是”year!”
去除字符串首尾的空格 Trim(x):去除字符串X首部和尾部的空格,但不包含中间的空格。 Ltrim(x):去除字符串X首部的空格 Rtrim(x):去除字符串X尾部的空格 如:a=“ hello “ Trim(a)的返回值为 “hello” LTrim(a)的返回值为 “hello ” Rtrim(a)的返回值为 “ hello”
大小写字母的转换 UCase(x): 字母小写转大写 Lcase(x): 字母大写转小写 Chr(Asc(x)-32):小写转大写,x的值必需为小写字母 Chr(Asc(x)+32):大写转小写,x的值必需为大写字母
根据已有ASCII字符推算其它ASCII字符 这类应用通常在加密解密的题中出现。 例加密思路:将“A”变成“F”,“B”变成“G”……“V”变成“A”,“Z”变成“E”。 假设变量x存储的是原字符,变量y存储的是加密后的字符 那么加密字符 Y=chr(Asc(x)+5)
课后作业 作业本: 1.1 、 2.1、 3.1 、3.2
课后作业 导学案: 第1课和第2课