1 / 51

第 5 章 设计循环结构程序

第 5 章 设计循环结构程序. Visual Basic 程序设计教程. 循环结构又称重复结构。 本章主要介绍: 逻辑表达式 For/Next 语句 Do/Loop 语句 While/Wend 语句 循环的嵌套使用。. 循环结构是根据条件来决定某段代码是否重复执行。 循环结构中一种常用的流程可以表示如图: 条件满足就执行 a 块程序段 然后再进行条件判别 如果满足条件,则继续执行 a 块程序段 直到条件不满足,才执行 a 块后面的程序。. 5.1 概述. 其中的 a 程序块段称为循环体。 条件使用逻辑表达式。

Download Presentation

第 5 章 设计循环结构程序

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 第5章 设计循环结构程序 Visual Basic 程序设计教程

  2. 循环结构又称重复结构。 • 本章主要介绍: • 逻辑表达式 • For/Next语句 • Do/Loop语句 • While/Wend语句 • 循环的嵌套使用。 Visual Basic程序设计教程

  3. 循环结构是根据条件来决定某段代码是否重复执行。循环结构是根据条件来决定某段代码是否重复执行。 • 循环结构中一种常用的流程可以表示如图: • 条件满足就执行a块程序段 • 然后再进行条件判别 • 如果满足条件,则继续执行a块程序段 • 直到条件不满足,才执行a块后面的程序。 5.1 概述 Visual Basic程序设计教程

  4. 其中的a程序块段称为循环体。 • 条件使用逻辑表达式。 • 循环的另一种形式是把判断条件放在循环体之后。 Visual Basic程序设计教程

  5. 循环结构中有两个基本问题需要考虑: • (1)条件必须明确,能使循环过程正常结束 • (2)循环体内,必要时可改变控制循环的条件 • 改变可能导致循环结束 • 改变也可能导致循环进入无休止的状态(死循环)。 Visual Basic程序设计教程

  6. 循环有两种类型: • 计数控制 • 控制累计执行循环体的次数 • 次数已到则结束循环 • 如1+2+3+…+100或98+96+94+…+4+2 • 事态控制 • 由某些条件决定循环结束。 • 如计算一系列正整数之和,遇负数停止循环。 • 也可以在一个循环过程中同时使用这两种类型 Visual Basic程序设计教程

  7. 5.2 判断素数 • 【例5-1】 设计一个判断素数的程序。若不是素数,要求分解为a*b的形式 • 控件:1个文本框和1个命令按钮 • 事件:命令按钮的Click。 • 首先要了解什么是素数。 • 素数是指除了1和自身外,不能被其它整数整除的正整数。 • 判断A是否为素数的基本方法是: • 将A分别除以2、3、……、A-1,若都不能整除,则它为素数。 • 判断A被i整除可以采用表达式: • A Mod i = 0 或:A / i = A \ i 或:A / i = Int(A /i) Visual Basic程序设计教程

  8. 5.2 判断素数----程序 • Option ExplicitPrivate Sub Command1_Click() Dim A As Long, i As Integer 'A存放要判断的数。i取值为2~A-1 Dim Flag As Boolean ' Flag作素数标志,False时,表示不是素数A = Val(Text1.Text) Flag = True ' 先设A是素数,当A<2或能被i整除时,再置为False If A < 2 Then Flag = False 'A<2,不是素数Else i = 2 Do While i <= A-1 If A Mod i = 0 Then Flag = False: Exit Do 'A能被i整除,则不是素数i = i + 1 Loop End If If Flag Then MsgBox A & "是素数", , "信息" Else ' A表示成两数之积MsgBox A & "不是素数" & Chr(13) & A & "=" & i & "*" & A/i, , "信息" End IfEnd Sub Visual Basic程序设计教程

  9. 说明: • 程序中,也可以不设标志变量,在最后判断i是否超过终值A-1,若超过终值则表示直到循环完成,还没遇到一个能被整除的整数,即它是素数;否则它就不是素数。 • 当A能被其中一个i整除时,A肯定不是素数,所以没有必要再测试下一个i,因此使用Exit Do退出循环。 • 在使用Exit Do退出循环的时候,没有改变i的值,故A能被该i整除,即A可以表示成A=i*(A/i)。 • 事实上只要判断A能否被2、3、……、Sqr(A)整除即可。 Visual Basic程序设计教程

  10. 5.3 进行逻辑运算 • 逻辑运算使用逻辑运算符 • VB提供了多个逻辑运算符,有: • 非(Not)、与(And)、或(Or) • 异或(Xor)、等价(Eqv)、蕴含(Imp)。 • 1.基本格式 • Not为一元运算符,其它均为二元运算符。格式: • Not 表达式 • 表达式1 逻辑运算符 表达式2(除Not外) • 一个逻辑表达式可用一个或多个逻辑运算符。如:A>0 And B>0 And C>0 • 2.数据类型 • 逻辑运算的数据及结果均为布尔类型。 Visual Basic程序设计教程

  11. 3.运算方式 • 4.优先级 Visual Basic程序设计教程

  12. 5.逻辑表达式举例 • (1)设变量Name1的值为“王小华”、变量Addr的值为“上海”,则表达式:Name1 = “王小华” Or Addr = "杭州" 值:True • 表达式: Name1 = “王小华” And Addr = "沪" 值: False • (2)写出数学表达式0<x<10 对应的VB表达式。VB表达式应为: x > 0 And x < 10 Visual Basic程序设计教程

  13. (3)描述Name1的值不等于“王小华”的表达式。该表达式可写为:Name1 <> "王小华" 或: Not Name1 = "王小华" • (4)X=3、Y=4、Z=5,求表达式X>2 Xor Y<0 Or Z>X+1的值。执行次序如图所示,最终值为False。 Visual Basic程序设计教程

  14. 闰年的条件是: • 能被4整除,但不能被100整除;或能被400整除。 • 设变量Y存放年份,则该逻辑表达式应为: • Y Mod 4=0 And Y Mod 100<>0 Or Y Mod 400=0 【例5-2】 设计程序,要求对文本框的年份判断是否为闰年,并在标签中显示相应的信息。 Visual Basic程序设计教程

  15. 程序代码如下:Option ExplicitPrivate Sub Command1_Click() Dim Y As Integer If Command1.Caption = "闰年判断" Then '闰年判断Y = Val(Text1.Text) If Y Mod 4 = 0 And Y Mod 100 <> 0 Or Y Mod 400 = 0 Then Label1.Caption = "是闰年" Else Label1.Caption = "不是闰年" End If Command1.Caption = "清除" Else '清除Text1.Text="" : Label1.Caption="" : Command1.Caption="闰年判断" Text1.SetFocus End IfEnd Sub 5.3 进行逻辑运算-闰年判断 Visual Basic程序设计教程

  16. 5.4.1 For/Next语句 • 使用For/Next语句可以方便地实现计数循环 • For/Next由For语句、循环体、Next语句组成。 • 格式:For 循环控制变量 = 初值To 终 值 [Step 步长] [循环体]Next [循环控制变量] 5.4 使用For/Next循环语句 Visual Basic程序设计教程

  17. 1.执行过程(1)将初值送至循环控制变量(2)判断循环控制变量的值是否超过终值:若未超过终值,执行步骤(3);超过终值执行步骤(5)。(3)执行循环体。(4)遇到Next,使循环控制变量加上步长再送入循环控制变量中,转步骤(2)。(5)循环终止,执行Next语句后面的语句。注意:其中“超过终值”不一定是大于终值。1.执行过程(1)将初值送至循环控制变量(2)判断循环控制变量的值是否超过终值:若未超过终值,执行步骤(3);超过终值执行步骤(5)。(3)执行循环体。(4)遇到Next,使循环控制变量加上步长再送入循环控制变量中,转步骤(2)。(5)循环终止,执行Next语句后面的语句。注意:其中“超过终值”不一定是大于终值。 Visual Basic程序设计教程

  18. 2.关于格式 • 省略“Step 步长”则默认为“Step 1” 。 • 初值、终值、步长分别控制循环变量的起始值、终止值和增量。 • For和Next必须成对出现。 • Next后若有循环控制变量,则必须与For中的相同。 • 建议Next后不要省略循环控制变量,以有利于阅读程序 Visual Basic程序设计教程

  19. 3.关于循环体 • 循环体是一条或多条语句 • 可以包括分支结构和循环结构 • 可以写成一行或多行。 • 循环体中可以引用循环控制变量,也可以不引用。 • 但不要随便修改循环控制变量的值,以防引起循环混乱。 • 4.强行终止死循环 • 使用Ctrl+Break可以暂停程序运行 • 再使用VB工具栏上的“结束”按钮终止程序执行。 Visual Basic程序设计教程

  20. 【例5-3】 输入10个非负整数,求所有偶数之和。 • 假定存放和的变量为Sum,先让Sum=0。然后可采用以下方法: 将第1个数送入A,如果A是偶数,则让Sum加上A,否则Sum不变。……将第10个数送入A,如果A是偶数,则让Sum增加A,否则Sum不变。最终得到的Sum就是和。由此可见,每步都做着同样的工作,即: • 将第i个数送入A,如果A是偶数,则让Sum增加A,否则Sum不变。 Visual Basic程序设计教程

  21. Option ExplicitPrivate Sub Command1_Click() '输入10个非负整数,求偶数和。Dim Sum As Long, i As Integer Dim A As Integer Sum = 0 '赋初值,注意位置For i = 1 To 10 A = Val(InputBox("请输入第" & i & "个数:", "输入非负整数")) If A Mod 2 = 0 Then Sum = Sum + A Next i MsgBox "Sum=" & SumEnd Sub • 一个好的程序,应该为自己用于累加、累乘等的变量赋初值。 Visual Basic程序设计教程

  22. 【例5-4】 求表达式值。x、n由键盘输入。 • 这是一个求和的例子。 • 它由n项构成,能表示成Sum=Sum+Item的形式 • 第i项等于第i-1项乘以X/(i+1),即Item=Item*X/(i+1) • 故循环体可由Item=Item*X/(i+1)和Sum=Sum+Item构成。 • 初值问题:Sum初值为0,Item初值应为1。 为防止溢出,Item和Sum声明为双精度型。程序运行结果:当X=6,N分别为1、2、3时,其和分别为3、9、18。 Visual Basic程序设计教程

  23. Private Sub Command1_Click() Dim Sum As Double, Item As Double, i As Integer Dim N As Integer, X As Double N = Val(InputBox("请输入项数: ")) X = Val(InputBox(" X= ")) Sum = 0: Item = 1 For i = 1 To N Item = Item * X / (i + 1) Sum = Sum + Item Next i MsgBox " x/2!+x^2/3!+...= " & Sum, , "信息" End Sub Visual Basic程序设计教程

  24. 5.4.2 Exit For语句 • 循环中,中途退出循环,称为跳出循环。 • 跳出For/Next循环的语句就是Exit For。 • 跳出循环后,将执行Next语句后面的语句。 • Exit For语句一般往往与If语句合用。如: • If A >= 2 Then '素数判断For i = 2 To Int(Sqr(A)) If A Mod i = 0 Then Exit For 'A能被i整除,不是素数,退出For循环Next i If i > Int(Sqr(A)) Then '表示A不能被2~ Int(Sqr(A))中的数整除Print A; "是素数" Else '此时表示程序运行是通过Exit For转出来的Print A; "不是素数" End IfElse Print A; "不是素数"End If Visual Basic程序设计教程

  25. 5.5.1 Do/Loop语句 • 对只知道循环终止条件,可采用Do/Loop循环 • For/Next语句可改写成Do/Loop循环,反之则不然。 • Do/Loop语句有五种表示形式,它们的格式为: 5.5 使用Do/Loop循环语句 Visual Basic程序设计教程

  26. 1.执行过程(1)对格式一和二,VB将先判断条件,再执行循环体。(2)对格式三和四,先执行循环体,再判断条件。循环体至少执行一次。(3)对用While的语句,当条件满足(True)时,执行循环体。(4)对用Until的语句,当条件不满足(False)时,执行循环体。(5)格式五的循环体内必须存在Exit Do语句,否则会出现死循环。若程序运行出现死循环,同样可用Ctrl Break暂停程序执行。 Visual Basic程序设计教程

  27. 2.关于格式(1)条件一般应为关系或逻辑表达式,一般应有变量。(2)Do和Loop必须成对出现2.关于格式(1)条件一般应为关系或逻辑表达式,一般应有变量。(2)Do和Loop必须成对出现 • 3.关于循环体 • 循环体是一条或多条语句 • 可以包括分支结构和循环结构。 • 可以写成一行或多行。 • 循环体中应有改变循环条件的语句,以避免出现死循环。 Visual Basic程序设计教程

  28. 5.5.1 Do/Loop语句-编程序:求n! Visual Basic程序设计教程

  29. 【例5-6】 在文本框中输入两个整数,求它们的最大公约数和最小公倍数。 • 求最大公约数可用辗转相除法。 • 该方法的基本思想是使用带余除法: • (1)A除以B,得余数为R1; • (2)若R1=0,则B为最大公约数。 若R1≠0,则B赋值给A,R1赋值给B,求余数R2; 若R2≠0,则继续以上步骤。 Visual Basic程序设计教程

  30. (3)经过有限(n+1)步后,Rn+1=0。 • 这时A和B的最大公约数是Rn。最小公倍数为A*B/Rn。 • 该算法循环次数未知,但循环条件已知:余数不为0。因此适用于Do/Loop语句编程。 • 其循环体为: • 把上一个B作为新的A,把上一个余数作为新的B,求出新余数。 Visual Basic程序设计教程

  31. 5.5.1 Do/Loop语句—求最大公约数和最小公倍数 • Private Sub Command1_Click() Dim A As Long, B As Long, R As Long A = Val(Text1.Text) B = Val(Text2.Text) R = A Mod BDo While R <> 0 A = B: B = R R = A Mod BLoop MsgBox "最大公约数=" & B MsgBox "最小公倍数=" & Val(Text1.Text)*Val(Text2.Text)/B • End Sub • 如果s在两个文本框中分别输入351和675,单击命令按钮后,得出最大公约数为27,最小公倍数为8775。 Visual Basic程序设计教程

  32. 【例5-7】 编程:输入一批非负数,当输入负数时,表示输入结束。求这批非负数据的最大值、最小值和平均值。 • 由于输入的个数不确定,故应采用Do/Loop语句。 • 本题关键在于如何设置最大值、最小值的初值。 Visual Basic程序设计教程

  33. Private Sub Command1_Click() Dim X As Integer, Min As Integer, Max As Integer Dim N As Integer, Average As Single 'N作为计数,存放项数X = Val(InputBox("X=")): Max = X: Min = X '最大最小值初值N = 0: Average = 0Do While X >= 0 If X > Max Then Max = X If X < Min Then Min = X N = N + 1 Average = Average + X 'Average暂存数据和,最后再除N X = Val(InputBox("X=")) '从第2个开始输入Loop If N <> 0 Then Average = Average / N Print "Max="; Max, "Min="; Min, "Average="; Round(Average, 3) • End Sub 当输入23、41、35、61、12、1、7、-1后, 运行结果:Max=61 Min=1 Average=25.714 Visual Basic程序设计教程

  34. 5.5.2 Exit Do语句 • Exit Do是跳出Do/Loop循环的语句 • 跳出循环后,将执行Loop语句后面的语句。 • Exit Do语句同样也往往与If语句合用 • 如求阶乘的程序片断为:N = Val(InputBox("n= ")) Result = 1: i = 1 Do Result = Result * i i = i + 1 : If i > N Then Exit Do Loop MsgBox N & "!= " & Result Visual Basic程序设计教程

  35. 5.6 使用While/Wend循环语句 • While/Wend语句的作用与Do While 条件/循环体/Loop相同。 • 格式:While 条件[循环体] Wend • 执行过程: • 先计算条件的值,若条件的值为True,执行循环体,否则执行Wend语句后面的语句。 • While和Wend必须成对出现 • 循环体中必须要有设法改变循环条件的语句 • While/Wend语句没有对应的跳出语句。 Visual Basic程序设计教程

  36. 【例5-8】 编程:求π的值。有关π的级数公式为: • 要求逐项累加,直到最后一项<0.0000001时,求π。 • 因没有确定项数,故可用Do/Loop或While/Wend • 可设一个变量Sign作为各项的符号,在循环中让Sign=-Sign,可以达到一次正、一次负的目的。 • 为达到较为精确的值,变量大多声明为双精度型 Visual Basic程序设计教程

  37. 本例中变量Pi、Sum、Item、N、Precision分别存放π、累计和、项值、项中分母值和精度。本例中变量Pi、Sum、Item、N、Precision分别存放π、累计和、项值、项中分母值和精度。 • Private Sub Command1_Click() Dim Pi As Double, Sum As Double, Item As Double Dim N As Long, Precision As Double, Sign As Integer N = 1: Item = 1 / N: Sum = 0: Sign = 1 Precision = Val(InputBox(“请输入精度: ”, “输入数据”, “0.0000001”))While Item >= Precision Sum = Sum + Sign * Item N = N + 2 Item = 1 / N Sign = -Sign Wend Pi = 4 * Sum Print “π= ”; PiEnd Sub • 在单击命令按钮后,若精度用缺省值0.0000001, • 则显示=3.1415924535898。 Visual Basic程序设计教程

  38. 循环结构中可以嵌套循环 • 当循环体中包含了循环时,称为循环嵌套,或称为多重循环。 • 循环体中包含的循环语句可以与外循环相同,也可以不同。 • 嵌套一层称为二重循环。 • 多重循环中遇到Exit For(Do),只能跳出当前一层循环。 5.7 如何实现多重循环控制 Visual Basic程序设计教程

  39. 【例5-9】 窗体上显示3~100之间的所有素数。每行显示5个。 • 前面的例子中判断A是否为素数是一重循环。 • 现让A分别等于3、5、7、……、97、99就可以了。 • 为了每行显示5个,设置一个计数变量Count。 • Private Sub Command1_Click() Dim A As Integer, i As Integer, Count As Integer Count = 0 '素数个数计数变量Print "以下数据为素数:" For A = 3 To 99 Step 2For i = 2 To Int(Sqr(A)) If A Mod i = 0 Then Exit For '被整除Next i If i > Int(Sqr(A)) Then Count = Count + 1 : Print A, If Count Mod 5 = 0 Then Print '换行End IfNext AEnd Sub Visual Basic程序设计教程

  40. 【例5-10】  在窗体上如图图案,它由“*”组成。分析: • 上三角形中,第I行有I个,可使用循环: • For J = 1 To I : Print "* "; : Next J • 因每行起点不同,而且一行结束后要换行,所以在J循环的前后各有一Print。 • 这样的行有7行,故外循环使I从1至7。 • 下三角形,操作过程与上三角相似 Visual Basic程序设计教程

  41. Private Sub Command1_Click() Dim I As Integer, J As Integer ClsFor I = 1 To 7 Print Spc(20 - I); '打印时空20-i格For J = 1 To I Print "* ";Next J Print '用于换行Next IFor I = 6 To 1 Step -1Print Spc(20 - I);For J = 1 To IPrint "* ";Next J PrintNext IEnd Sub 5.7 如何实现多重循环控制-显示图案 Visual Basic程序设计教程

  42. 5.8 程序举例 • 5.8.1 递推法 • 【例5-11】  有一个数列,前两项是1、1,第三项是前二项之和,以后每一项都是前二项之和。即为:1、1、2、3、5、8、13、21,34……。 要求输出该数列的前30项。 • 该数列又称斐波那契数列。由“兔子问题”引发 • 这是一个递推问题 • 所谓递推关系是指一串函数之间的关系,它把每一个函数表示为前k个函数的线性组合。本题中k=2。 • 解决递推问题必须具备两个条件:(1)  有初始值,如F1=1、F2=1 (2)  存在递推关系。如Fn=Fn-1+Fn-2(n>2) • 在程序中一般设置二或三个变量就可以了。 • 程序中用F1、F2、F3表示三个数,在循环中,它们不断用新值代替旧值。这种操作称为迭代, Visual Basic程序设计教程

  43. 程序代码如下:Private Sub Command1_Click() Dim F1 As Long, F2 As Long, F3 As Long Dim i As Integer Cls F1 = 1: F2 = 1 Print F1, F2, For i = 3 To 30 F3 = F1 + F2 Print F3, If i Mod 4 = 0 Then Print '每行显示4个数F1 = F2 : F2 = F3 '用新值代替旧值NextEnd Sub F1和F2始终作为前两个数,F3作为新产生的数 因第24个月兔子数已超过32767对,故变量声明为Long Visual Basic程序设计教程

  44. 5.8.2 穷举法 • 【例5-12】  我国古代数学家在《算经》中出了一道题:“鸡翁一,值钱五;鸡母一,值钱三;鸡雏三,值钱一。百钱买百鸡,问鸡翁、母、雏各几何?” • 即:当时用100元钱买100只鸡,其中公鸡每只5元,母鸡每只3元,小鸡3只1元,问可买公鸡、母鸡、小鸡各多少只? • 设公鸡X只,母鸡Y只,小鸡Z只,列出方程式:X+Y+Z=100 5X+3Y+Z/3=100 • 2个方程求3个未知数,无法用代数方法求解 • 可将X、Y、Z分别为0~100的每一种可能性都去试一下,如符合,则就是其中的一种购买方案。 • 列举所有可能的方案,找出符合要求的,这样的算法称为穷举法。 Visual Basic程序设计教程

  45. 可测试方案分别为: • 0、0、0;0、0、1;……;0、0、100; • 1、0、0;1、0、1;……;1、0、100; • ……; • 100、100、0;100、100、1;……;100、100、100 • 事实上当X和Y确定时,Z可以用100-X-Y求得,因此可以把三重循环改为二重循环。 • Private Sub Command1_Click()Dim X As Integer, Y As Integer, Z As IntegerPrint "公鸡", "母鸡", "小鸡"For X = 0 To 100 For Y = 0 To 100 Z = 100 - X - Y If 5 * X + 3 * Y + Z / 3 = 100 Then Print X, Y, Z Next YNext XEnd Sub 事实上X和Y的循环可分别为0到20和0到33 Visual Basic程序设计教程

  46. 5.8.3 求水仙花数 • 【例5-13】  求数100~999所有满足:数X = 数X个位、十位、百位的立方和。如:153 = 1*1*1 + 5*5*5 + 3*3*3 • 说明:该程序主要是能分出个位、十位、百位 • Private Sub Command1_Click() Dim i As Integer Dim N1 As Integer, N2 As Integer, N3 As IntegerFor i = 100 To 999 N1 = i \ 100 '求百位N2 = (i - N1 * 100) \ 10 '求十位N3 = i Mod 10 '求个位If i = N1 ^ 3 + N2 ^ 3 + N3 ^ 3 Then '计算水仙花数Print i; "="; N1; "^3 +"; N2; "^3 +"; N3; "^3" End If NextEnd Sub Visual Basic程序设计教程

  47. 5.8.4 验证哥德巴赫猜想 • 【例5-14】  输入一个大于等于6的偶数,将它分解为两个素数之和。 • 对每一个大于等于6的偶数N都可表示成: • N=3+(N-3)、N=4+(N-4)、N=5+(N-5)、……、N=(N-3)+3, • 即A、B的范围为3~N-3 • 由于大于2的偶数不是素数,处理前可以去掉这些数, • 由于3+(N-3)和(N-3)+3是一致的,故A的范围为3~N/2,B=N-A。 • 程序设计思路: • 当输入一个大于等于6的偶数N后, • 让A在3~N/2的奇数范围内循环, • 若A是素数,则求出B=N-A,再判断B是否为素数, • 若B也是素数,则输出A和B。 Visual Basic程序设计教程

  48. Private Sub Command1_Click() Dim A As Long, B As Long, N As Long, i As Integer, j As IntegerDo '该循环是为了必须获得一个大于等于6的偶数N = Val(InputBox("请输入一个大于6的偶数")) Print "输入的数为" & NLoop While N / 2 <> N \ 2 Or N < 6For A = 3 To N / 2 Step 2 '步长为2是只判断偶数For i = 2 To Sqr(A) '判断A是否为素数If A Mod i = 0 Then Exit ForNext i If i > Sqr(A) Then '若A是素数B = N - A '求出BFor j = 2 To Sqr(B) '判断B是否也为素数If B Mod j = 0 Then Exit ForNext j If j > Sqr(B) Then '若B也是素数Print N & "=" & A & "+" & B '输出Exit For '已验证,跳出A循环End If End IfNext AEnd Sub 当输入2322时,显示2322=11+2311 Visual Basic程序设计教程

  49. 5.8.5 数制转换 • 【例5-15】  请编写程序:将十进制正整数转换为二进制数或十六进制数; • 控件: • 两个标签 • 两个文本框 • 两个单选按钮 • 两个命令按钮 • 十进制整数转换成二进制数,采用除2取余法。 • 十进制整数转换成十六进制数,采用除16取余法 • 最后把这些余数以字符方式拼接起来。 Visual Basic程序设计教程

  50. 5.8.5 数制转换-程序 Private Sub Command1_Click() '转换Dim A As Long, B As String, R As Integer 'B存放转换后结果,R放余数A = Val(Text1.Text): B = ""If Option1.Value Then '转换成二进制Do While A <> 0 B = (A Mod 2) & B : A = A \ 2 '拼接除2后的余数,获得除2后的商Loop Text2.Text = B '将结果(二进制)放入文本框Else '转换成十六进制Do While A <> 0 R = A Mod 16 '除16取余Select Case R '获得余数对应的十六进制数,即0~9,A~F之一并拼接Case 0 To 9 : B = R & B Case 10 : B = "A" & B Case 11 : B = "B" & B Case 12 : B = "C" & B Case 13 : B = "D" & B Case 14 : B = "E" & B Case 15 : B = "F" & B End Select A = A \ 16 '获得除16后的商 Loop Text2.Text = B '将结果(十六进制)放入文本框End IfEnd Sub Visual Basic程序设计教程

More Related