试题

试题 试卷

logo

题型:填空题 题类:模拟题 难易度:困难

浙江省杭州市2015年高考模拟命题比赛信息技术(1)

辗转相除法,又名欧几里德算法(Euclidean algorithm),是求两个正整数最大公约数的算法。它是已知最古老的算法之一,其可追溯至3000年前。用辗转相除法来得一个分数的约分后的最简形式的算法如下:

第一步:设两数为a、b,且令a>b;

第二步:a÷b,令r为所得余数,若r=0,算法结束,b 即为最大公约数;若r>0则a←b,b←r,并返回第二步;
第三步: 即为 约分后的最简形式。

编写VB程序,程序运行界面如图1所示,请根据算法将下列程序补充完整。

Private Sub Command1_Click()

 Dim a As Integer, b As Integer, r As Integer 'a、b为分子和分母,r为最大公约数

 a = Val(Text1.Text)

 b = Val(Text2.Text)

 If b = 0 Then c = MsgBox("分母不能为0"): Exit Sub

 '如果分母为0,则提示“分母不能为0”并退出该过程

 r =  

 Text3.Text = Str(a / r)

 Text4.Text = Str(b / r)

End Sub

Function gys(ByVal m As Integer, ByVal n As Integer) As Integer

'gys函数用于求最大公约数

Dim s As Integer

 If m < n Then

    t = m: m = n: n = t

 End If

 Do While n <> 0

    s = m Mod n

    m = n

    n = s

 Loop

   

End Function

举一反三
二叉树是每个结点最多有两个子树的树结构,如值为9的结点有两个子树6和8,值为6的结点有两个子树5和3。若设二叉树的深度为h,则除第h层外,其它各层(1~h-1)的结点数都达到最大个数,第h层所有的结点都连续集中在最左边,这就是完全二叉树。现要构造大根堆,堆是一棵顺序存储的完全二叉树,大根堆又是一种特殊的堆,它的特征是每个双亲结点的值都不小于其孩子结点的值。如下图所示,值为9的结点是6和8的双亲结点,而6和8分别是9的左孩子和右孩子;同理,6是5和3的双亲结点,而5和3分别是6的左孩子和右孩子……

假如我们用数组表示上述大根堆:

a(1)

a(2)

a(3)

a(4)

a(5)

a(6)

a(7)

a(8)

a(9)

9

6

8

5

3

4

7

2

1

现有一算法把一个无序数组改造成大根堆。例如:我们在上图的大根堆中再增加一个值为8的新元素,如下图所示。

数组存储为:

a(2)

a(3)

a(4)

a(5)

a(6)

a(7)

a(8)

a(9)

a(10)

6

8

5

3

4

7

2

1

8

具体操作方法如下:

第一步:因为a(10)大于它的双亲结点a(5),故需交换a(10)和a(5)的值;

数组存储为:

第二步:因为a(5)大于它的双亲结点a(2),故需交换a(5)和a(2)(t)值;

数组存储为:

a(1)

a(2)

a(3)

a(4)

a(5)

a(6)

a(7)

a(8)

a(9)

a(10)

9

8

8

5

6

4

7

2

1

3

第3步:因为a(2)不大于它的双亲结点a(1),故无需做交换操作。此时新元素已经放到了正确的位置,新的大根堆构造完成,上移行动结束。

返回首页

试题篮