《VB程序设计典型算法.docx》由会员分享,可在线阅读,更多相关《VB程序设计典型算法.docx(29页珍藏版)》请在三一办公上搜索。
1、VB程序设计典型算法Visual Basic 的基本控制结构 顺序结构 分支结构 循环结构 顺序结构各语句依次顺序执行 此前所学的语句的存在方式都是顺序结构 不要忘记 关于赋值语句: 变量名=表达式 对象名 . 属性名=表达式 先计算右边表达式的值,然后赋值给左边的变量。 如果表达式的精度不同于左边变量的精度,则强制将表达式结果的数据类型更改为变量的精度。 字符型数据赋值给数值型变量时系统先自动将字符串转换为数值,再赋值;但是字符不可以赋值给数值变量。 非字符数据赋值给字符变量时将被转换为字符类型。 a=a+2 实现值的自增。 赋值符号=的左边必须是变量。 整体格式固定不能更改。 例:实现两个
2、变量值的交换 temp=a : a=b : b=temp 分支结构单分支、双分支、多分支 单分支结构 第一种形式 if then 第二种形式 if then 语句 语句 end if a=inputbox( 请问1+3=?,问题1) if a=4 then print You are smart ! a=inputbox( 请问1+3=?, 问题1) if a=4 then print Good ! b=msgbox (还要继续做题吗?,4+32+256) 条件 false Page 59 true 语句组 if b=6 then print Sorry no more question en
3、d if 练习:让用户输入两个变量,设计程序,计算并输出最大的变量。 双分支结构 语句格式: if then 语句组1 else 语句组2 end if 练习如上例 多分支结构 ( 四种形式 ) Page 60 Page 59 条件 false 语句组1 true 语句组2 End if 形式一: 见上例 形式二:( if then elseif 语句) 语句格式: if then 语句组1 elseif then 语句组2 Page 6061 else 语句组 end if 形式三: 格式: select case case 语句组1 case 语句组2 case 语句组n case els
4、e 语句组1 end select 其中: 条件的可能结果可以是表达式 条件的可能结果可以是to 表达式,如:case 20 to 30 条件的可能结果可以是is 比较式,如:case is 30 形式四:( iff 函数) true 语句格式: 变量 = iif ( 条件,语句1,语句2 ) false max = iif ( 3 6 , 不可能 , yes ) 练习:如教材page 46下,实现成绩等级评价。 Page 循环结构 Page 63-64 形式一 语法格式: for 循环变量=初始值 to 终止值 step 步长 语句组1 exit for 语句组2 next 循环变量 强制退
5、出循环体 练习及分析: 1求1100之间所有整数的和。 2.求数n的阶乘n! cls n=val(inputbox(请输入一个整数:,求阶乘,3) sum=1 for i=1 to n step 1 sum=sum*i next i msgbox 您输入的是&n &,它的阶乘为: &s,0+64+0+4096,n &的阶乘 3见教材page64中 例3.6 注意事项: 嵌套时next 循环变量要与最近的for语句循环变量匹配 形式二 Page 65 语法格式: while 语句组 wend 练习及分析:改造上述例题利用公式求e的值 page 55 cls e=0 fenmu1 n=1 whil
6、e 1/fenmu=0.000001 e=e+1/fenmu fenmu=fenmu*n n=n+1 wend print 自然对数底e近似值为: & e print 累加了 & n & 次 形式三 语法格式: do while | until 语句组1 强制退出exit do 循环体 语句组2 loop 练习及分析: 1. 改造上述各例 形式四 语法格式: do 语句组1 强制退出exit do 循环体 语句组2 loop while | until 练习及分析: 1.计算1200之间所有偶数之和 cls k=2 sum=0 do sum=sum+k k=k+2 loop until k20
7、0 print 结果为: & sum 2.判断是否素数 page 68 cls m = Val(InputBox(请输入一个整数, 输入整数) n = Sqr(m) k = 2 Do While k Sqr(m) Then Print m & 是素数 Else Print m & 不是素数 End If Page 65 Page 66 形式五 采用各个循环结构互相嵌套的形式,可以完成更复杂的计算。 练习分析: 1.利用*输出平行四边形; cls print for i=5 to 1 step -1 print tab(10); print spc(10-2*i); for j=1 to 2*i
8、-1 print *; ; next j for k=1 to 11-2*i print *; ; next k print next i Page 2输出100200之间的素数 cls for n=101 to 200 step 2 m=int (sqr(n) k=2 do while km then print tab(x mod 7)*7 +(7-len(str$(n);n; x=x+1 end if next n 3打印乘法表 cls For i = 1 To 9 For j = 1 To i Print tab(j-1)*8+2) i & * & j & = &i * j; Next
9、 j Print Next i 4打印az字母金字塔(&H61 &H7A) hex(number) 简单测试 Cls k = 1 i = &H61 Do While i &H7A Then Exit Do Next j Print k = k + 1 Loop 共7行,开始编制 Cls k = 1 i = &H61 For j = 1 To 7 Print Spc(17 - j); For p = 1 To j Print Chr(i) & ; i = i + 1 If i &H7A Then Exit For Next p Print k = k + 1 Next j 5打印数字金字塔 n=
10、1 for j=1 to 9 print spc(8-2*i); for i= 1 to j print I; next i for i=j to 1 step -1 print I; next I print next j 正确: Cls Print (15) 数字金字塔 Print Print Print Tab(19); CStr(1) For j = 2 To 9 Print Tab(19 - j + 1); For i = 1 To j Print CStr(i); Next i For i = j - 1 To 1 Step -1 Print CStr(i); Next i Pri
11、nt Next j 6见课本page67 例3.8 设置标志变量,用于判断相关条件 Page 67 dim check as boolean,counter as integer check=true : counter=0 do do while counter10 then goto 100 i=p*r p=p+i t=t+1 goto again 100 print 10后本利合计为:;p;元 采用各个循环结构互相嵌套的形式,可以完成更复杂的计算。 2end语句 Page 68 附加: (1) 1100内,能同时被3和5整除的自然数,及其个数 Cls For i = 1 To 100 I
12、f (i Mod 3 = 0) And (i Mod 5 = 0) Then Print Tab(n Mod 7) * 7); i; 整齐输出字符 n = n + 1 End If Next i Print Tab(7); n=; n 输出倒三角形、菱形 三角形的代码: Cls For i = 1 To 5 Print Spc(8 + i); For j = 1 To 11 - 2 * i Print *; Next j Print Next i 菱形的代码: 上半部分 For i = 1 To 5 Print Spc(18 - i); For j = 1 To 2 * i - 1 Print
13、 *; Next j Print Next i 下半部分 For i = 4 To 1 Step -1 Print Spc(18 - i); For j = 1 To 2 * i - 1 Print *; Next j Print Next i 不被3整除的自然数 Cls For i = 100 To 200 If i Mod 3 0 Then n = n + 1 这是用于统计输出个数,与下面的分支搭配格式化输出数字。 If n Mod 8 = 0 Then Print Chr(13); i; chr(13)的结果是换行操作的ascii码值,执行到此处,系统换行 Else Print i; E
14、nd If End If Next i 一元二次方程 Cls Print 求一元二次方程a*x2+b*x+c=0的解,考虑虚根的情况。 a = Val(InputBox(a=?, 输入方程系数, 4) b = Val(InputBox(b=?, 输入方程系数, 6) c = Val(InputBox(c=?, 输入方程系数, 2) If a = 0 Then If b = 0 Then Print 方程不成立 Else X1 = c / (-b) X2 = X1 End If Else d = b 2 - 4 * a * c If d = 0 Then X1 = (-b + Sqr(d) /
15、2 / a X2 = (-b - Sqr(d) / 2 / a Else X1 = Format(-b / 2 / a, 0.000) & + & Format(Sqr(-d) / 2 / a, 0.000) & i X2 = Format(-b / 2 / a, 0.000) & - & Format(Sqr(-d) / 2 / a, 0.000) & i End If End If If d 0 Then Print 虚根为: Print X1=; X1 已经是字符串类型 Print x2=; X2 Else Print 实根为: Print X1=; Format(X1, 0.000)
16、是数值型,所以用format( )函数格式化 Print x2=; Format(X2, 0.000) 使得可以输出小数点前面的0 End If s=1+3+5+.+(2*n-1)+.+99 Cls For i = 1 To 99 Step 2 s = s + i Next i Print s=1+3+5+.+(2*n-1)+.+99 Print =; s s=1-1/2+1/3-1/4+.-1/100 Cls For i = 1 To 100 s = s + (-1) (i - 1) / i Next i Print s=1-1/2+1/3-1/4+.-1/100 Print =; Form
17、at(s, 0.00000) 格式化,使得输出小数点前面的0 求s=1!+2!+3!+.+n! Cls n = Val(InputBox(n=?, 求s=1!+2!+3!+.+n!, 5) For i = 1 To n t = 1 For j = 1 To i t = t * j Next j s = s + t Next i Print s=1!+2+3#+.+n! Print =; s 计算三角形面积! Cls Print 计算三角形面积! a = Val(InputBox(第一条边, 输入方程系数, 3) b = Val(InputBox(第二条边, 输入方程系数, 4) c = Val
18、(InputBox(第三条边, 输入方程系数, 5) p = (a + b + c) / 2 s = Sqr(p * (p - a) * (p - b) * (p - c) MsgBox s= & s 鸡兔同笼 Cls heads =val(text1.text) 要求用户输入整数 legs = val(text2.text) tu = (legs - 2 * heads) / 2 ji = heads - tu Print tu; rabbits, ji; cocks 自由落体路径问题 Cls Print (12) 自由落体路径问题 h = 10 s = h 第一次落体是单程,所以单独计算
19、For i = 1 To 7 剩余7次都是双程h h = h * (1 - 0.4) s = s + h * 2 Next i Print 第8次落地时,总共路程为; s; 米 求两个正整数的最大公约数和最小公倍数 求解最大公约数: 1以大数m作为被除数,小点的数n作为除数,相除后取余数r; 2若r不为零,把n的值给m , r给n; m与 n继续相除得到新的r,若r仍不为零,则重复此步骤; 3最后r=0时的n就是最大公约数; 最小公倍数 4最小公倍数=/最大公约数; 代码: Function hef(byval m as long,byval n as long) as long Dim r
20、as long,t as long If mn T=m : m=n : n=t End if r=m mod n 初始r的计算 Do while r0 进入循环,注意条件 M=n N=r R=m mod n Loop Hef=n End function Dim a,b,c,d as long A=val(text1.text) B=val(text2.text) C=hef(a,b) 得出最大公约数 Text3=str(c) D=a*b/c 得出最小公倍数 Text4=str(d) 函数str( )功能是将数值转化为字符串类型 最大公约数算法(方法二): Dim m As Integer,
21、n As Integer m = Val(Text1) 将文本框的值赋给变量m n = Val(Text2) If m n Then 这个if语句目的是要保证 m b Then If a c Then Print a; Else Print a; End If Else If b c Then Print b; Else Print c End If End If IfPrint IIf(a b, IIf(a c, a, c), IIf(b c, b, c) iif语句的应用,上面的if语句也可以改成用此语句实现 输出1000之内的所有完数 完数:完数是指一个数的值恰好等于它的因子之和.例如,
22、6的因子为1,2,3,而6=1+2+3,因此6是完数 方法一: Cls Print (11) 输出1000之内的所有完数 For i = 1 To 1000 s = 0 n = 0 For j = 1 To i-1 逐个比较直到i-1 If i Mod j = 0 Then s = s + j 这里要把整除成立的两个因子都加进来, 但是要注意到,把它自身也加了进来,下面的判断语句要减去自身 End If Next j If s= i Then n = n + 1 Print i; If n Mod 9 = 0 Then Print End If Next i 方法二: Cls Print (1
23、1) 输出1000之内的所有完数 For i = 1 To 1000 s = 0 n = 0 For j = 1 To Sqr(i) 比较次数少于上述方法一 If i Mod j = 0 Then s = s + j + (i / j) 这里要把整除成立的两个因子都加进来, 但是要注意到,把它自身也加了进来,下面的判断语句要减去自身 End If Next j If (s - i = i) and (i1) Then 从s里面减去自身,并且排除1 n = n + 1 Print i; If n Mod 9 = 0 Then Print End If Next i 求出100内的自然数对 Cls
24、 n = 0 For i = 1 To 100 该层循环产生第一个1100之间的整数 For j = 1 To 100 该层循环是要产生第二个1100之间的整数 If Int(Sqr(i + j) = Sqr(i + j) And Int(Sqr(Abs(i - j) = Sqr(Abs(i - j) Then n = n + 1 计数器,计算符合条件的输出项个数 If n Mod 5 0 Then Print * & i & ,; j; Else Print * & i & ,; j End If End If Next j Next i 100999 之间的水仙花数 Cls For i =
25、 100 To 999 该层循环逐个产生符合条件的数字 m = i 100 获取百位上的数 n = (i Mod 100) 10 获取十位上的数 k = (i Mod 10) 获取个位上的数 If i = m 3 + n 3 + k 3 Then Print i End If Next i 水仙花数,就是指一个三位数,其各个数的立方和等于该数。例如153就是一个水仙花数, 因为153=13+53+33 自然数对是指两个自然数的和与差都是平方数,如8与17的和8+17=25与其差17-8=9都是平方数,则8与17称为自然数对。 数字矩阵 Cls Dim a(1 To 10, 1 To 10) A
26、s Integer For i = 1 To 10 For j = 1 To 10 If i = j Then a(i, j) = 0 Else a(i, j) = Rnd( ) * 100 End If Print Tab(j * 5); CStr(a(i, j) & ,; 输出后不换行 Next j Print Chr(13) 输出两个空行 内层循环结束换行 Next i 要求用户输入正整数 Cls a = Text1.Text 不能用val( )函数转换,否则a就一定是数值 For i = 1 To Len(a) b = Mid(a, i, 1) If (Asc(b) Asc(9) Th
27、en MsgBox 输入不符合要求,请在文本框中输入正整数 Exit For End If Next i (18)打印杨辉三角形 dim a( ) as long dim n as integer do n=inputbox(请输入一个小于10的正整数:) loop while( n10) redim a(n,n) for i=1 to n a(i,1)=1 a(i,i)=1 next i for i=3 to n for j=2 to i-1 a(i,j)=a(i-1,j-1)+a(i-1,j) next j next i print for i=1 to n print tab(5); f
28、or j=1 to i print format (a(i,j),!); next j print next i (19) 输出随机产生的10个数中最大、最小数及其平均值 dim a (1 to 10 ) as integer dim max as integer, min as integer dim s as single randomize for i=1 to 10 a(i)=int(rnd*99)+1 print a(i) next i max=0:min=100 for i=1 to 10 if a(i)max then max=a(i) if a(i)min then min=a
29、(i) s=s+a(i) next i print 最大数是:;max print 最小数是:;min print 平均值是:;s/10 (20)数组相关 dim a as variant,b as variant a=array(1,3,5,7,9) b=array(monday,Tuesday,Wednesday) for i=Lbound(a) to Ubound(a) print a(i); next i print for i=0 to Ubound(b) print b(i); next i 模拟计算器 1使用控件数组,09数字按钮使用一个控件数组,+-*/运算使用一个控件数组,=
30、为普通控件 Dim b As Integer, a Private Sub Cmd_Click(Index As Integer) Select Case Index 由于本控件数组中的所有控件都执行当前的代码,所以这个select语句的功能可以用label1.caption=label1.caption & cmd(index).caption 代替,其中cmd是本控件数组的名称 Case 0 Label1.Caption = CStr(Label1.Caption & 0) Case 1 Label1.Caption = CStr(Label1.Caption & 1) Case 2 La
31、bel1.Caption = CStr(Label1.Caption & 2) Case 3 Label1.Caption = CStr(Label1.Caption & 3) Case 4 Label1.Caption = CStr(Label1.Caption & 4) Case 5 Label1.Caption = CStr(Label1.Caption & 5) Case 6 Label1.Caption = CStr(Label1.Caption & 6) Case 7 Label1.Caption = CStr(Label1.Caption & 7) Case 8 Label1.C
32、aption = CStr(Label1.Caption & 8) Case 9 Label1.Caption = CStr(Label1.Caption & 9) End Select End Sub 2非控件数组实现方法 Dim dot As Boolean, a As Variant, op As String 全局变量a为变体数据类型,避免计算过大数据时出错 Private Sub Command1_Click( ) Text1.Text = Text1.Text & 1 End Sub Private Sub Command10_Click( ) Text1.Text = Text1
33、.Text & 0 End Sub Private Sub Command11_Click( ) If dot =False Then dot变量用于标识当前输入的数字是否已经使用过小数点 Text1.Text = Text1.Text & . Dot=true 当前数字已经使用过小数点,标识为已经使用过 End If End Sub Private Sub Command12_Click( ) a = Val(Text1.Text) 保存运算前输入的数字 Text1.Text = 清空文本框,为输入下一个数字作准备 dot = False 小数点使用标志改成未使用状态,保证下一个数可以使用小数点 op = + 也可以把 数字1放入op变量,用来在=过程区别这里所执行的操作 End Sub Private Sub Command13_Click( ) a = Val(Text1.Text) Text1.Text = dot = False op = - 也可以把 数字2放入op变量,用来在=过程区别这里所执行的操作 End Sub Private Sub Command14_Click( ) a = Val(Text1.Text) Text1.Text = dot = False op = * 也可以把 数字3放入op变量,用来在=过程区别这里所执行的操
链接地址:https://www.31ppt.com/p-3168370.html