背景:                 
[本书目录] [图书首页] [本书讨论区]  
链接地址:http://www.17xie.com/read-3372.html    注册17xie 一起来写书 实现您的出书梦想!


5-10 利用递归求最大公约数。

程序如下:

Private Sub Command1_Click()

    Dim x As Integer, y As Integer

    Cls

    x = CInt (InputBox("请输入第一个整数"))

    y = CInt (InputBox("请输入第二个整数"))

    Print x & "" & y & "的最大公约数为" & gcd (x, y)

End Sub

 

Public Function gcd (m As Integer, n As Integer) As Integer

    If (m Mod n = 0) Then

       gcd = n

    Else

       gcd = gcd (n, m Mod n)

    End If

End Function

在上述gcd函数中,若没有语句

If (m Mod n = 0) Then  gcd = n

即只有gcd = gcd (n, m Mod n)

根据递归的处理过程,程序运行会出现“除数为0”的错误。由此可见,构成递归的条件为:

1)递归结束条件及结束时的值。

2)能用递归形式表示,并且递归向终止条件发展。

5.6  项目指导

5.6.1  项目一操作步骤:

1.新建一个标准EXE工程。

2.设计窗体

窗体上放置三个标签框控件,三个文本框控件和一个命令按钮,程序运行后窗体界面如图5-1所示。

按表5-3设置各控件的主要属性。

    5-3                    数制转换窗体及控件的属性设置                        

默认对象名称

设置对象名称

Name属性)

标题属性

Caption

其他属性

Form1

使用默认对象名称

数制转换

 

Label1

输入R进制(2~16

 

Label2

输入R制数

 

Label3

转换成十进制数

 

Text1~ Text3

无定义

Text属性为空

Command1

转换

 

 

3.编写程序代码

“转换”按钮的Click事件代码:

Private Sub Command1_Click()       

    Dim r As Integer, st As String

    r = Val(Text1.Text)

    st = Text2.Text

    Text3.Text = str (toDec (st, r))         ' 调用转换函数

    End Sub

 

Text1文本框的LostFocu事件代码:

Private Sub Text1_s()                     ' 判断Text1的内容是否超出指定范围

    If Val (Text1.Text) < 2 Or Val (Text1.Text) > 16 Then

        MsgBox ("输入的进制数超出范围,请重新输入")

        Text1.Text = ""

        Text1.SetFocus

    Else

        Label2.Caption = "输入" & Text1.Text & "进制数"

    End If

End Sub

 

“转换”函数过程代码:

Public Function toDec (str$, r%) As Integer      

    Dim tmp As String * 1, i As Integer

    Dim k As Integer, n As Integer, sum As Long

    n = Len (Trim(str))

    sum = 0

    For i = n To 1 Step -1

        tmp = Mid (str, i, 1)                ' 从右到左逐位取数码

        Select Case tmp                   ' 确定逐位取出的数码值

            Case "A", "a"

                k = 10

            Case "B", "b"

                k = 11

            Case "C", "c"

                k = 12

            Case "D", "d"

                k = 13

            Case "E", "e"

                k = 14

            Case "F", "f"

                k = 15

            Case Else

                k = Va l(tmp)

        End Select

        sum = sum + k * r ^ (n - i)     ' 按数码位不同码值进行转换

    Next i

    toDec = sum

End Function


字数:4706    最后更新:1年以前 [08-19 21:45]我爱钱 修改
本页编辑者:我爱钱  
[前一页]:第五章  [后一页]:第五章
[在本页中加入书签] [收藏本书] [推荐本书]
  17xie论坛 > 本书讨论区 > 本页评论   (共0条)
发表评论

用户名称 匿名发表
评论内容
验证码

关于我们 | 版权声明 | 免责声明 | 诚聘英才 | 联系我们 | 合作伙伴 | 友情链接 | 广告合作 | 提交意见
Copyright © 2007 17xie.com 互联网协同写书平台 京ICP备08002671号