添加收藏
 系统管理
 联系方式
  汉南在线考试认证计算机二级

二级VB 第8章 数组课后习题答案
作  者:汉南居士
关键字:计算机二级等级考试



8.1  VB中的数组与其他语言中的数组有什么区别?

解:主要区别是其他语言中一个数组的每个元素必须是同一种类型的数据,而在VB中,一个数组中的各个元素可以是不同类型的数据。

8.2  在VB中可以通过哪几个语句定义数组?它们之间的区别是什么?

解:在VB中,可以用4个语句来定义数组,这4个语句格式相同,但适用范围不一样。

(1)Dim  用在窗体模块或标准模块中,定义窗体或标准模块数组,也可用于过程中。

(2)ReDim  用在过程中。

(3)Static  用在过程中。

(4)Public  用在标准模块中,定义全局数组。

8.3  用下面语句定义的数组中各有多少个元素?

①Dim arr(12)                   ②Dim arr(3 To 8)

③Dim arr(3 To 5,-2 To 2)       ④Dim arr(2,4,6)

⑤Option Base 1                 ⑥Option Base 1

  Dim arr(3,3)                    Dim arr(22)

⑦Dim arr(-5 to 5)              ⑧Option Base 1

                                  Dim arr(-8 To –2,4)

解:

①13        ②6     ③15        ④105       ⑤9     ⑥22    ⑦11    ⑧28

8.4  从键盘上输入10个整数,并放入一个一维数组中,然后将其前5个元素与后5个元素对换,即:第1个元素与第10个元素互换,第2个元素与第9个元素互换……第5个元素与第6个元素互换。分别输出数组原来各元素的值和对换后各元素的值。

Option Base 1

Private Sub Form_Click()

  arr = Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)

  Print "原来数组:"

  For i = 1 To 10

    Print arr(i);

  Next i

  Print

  For i = 1 To 5

    For j = 6 To 10

      t = arr(i)

      arr(i) = arr(j)

      arr(j) = t

    Next j

  Next i

  Print "对换后数组:"

  For i = 1 To 10

    Print arr(i);

  Next i

End Sub

 

8.5 设有如下两组数据。

(1)2,8,7,6,4,28,70,25

(2)79,27,32,41,57,66,78,80

编写一个程序,把上面两组数据分别读入两个数组中,然后把两个数组中对应下标的元素相加,即2+79,8+27,……,25——80,并把相应的结果放入第三个数组中,最后输出第三个数组的值。

解:

Option Base 1

Private Sub Form_Click()

  Dim A, B, C(8) As Integer

  A = Array(2, 8, 7, 6, 4, 28, 70, 25)

  B = Array(79, 27, 32, 41, 57, 66, 78, 80)

  For i = 1 To 8

    C(i) = A(i) + B(i)

  Next i

  Print "第一个数组为:";

  For i = 1 To 8

    Print A(i);

  Next i

  Print

  Print "第二个数组为:";

  For i = 1 To 8

    Print B(i);

  Next i

  Print

  Print "第三个数组为:";

  For i = 1 To 8

    Print C(i);

  Next i

  Print

End Sub

8.6  有一个n×m的矩阵,编写程序,找出其中最大的那个元素所在的行和列,并输出其值及行号和列号。

解:

Option Base 1

Private Sub Form_Click()

  Dim Mat() As Integer

  Dim N, M As Integer

  N = InputBox("请输入矩阵的行数")

  M = InputBox("请输入矩阵的列数")

  ReDim Mat(N, M) As Integer

  For i = 1 To N

    For j = 1 To M

      Mat(i, j) = InputBox("请输入数组第" & Str(i) & "行第" & Str(j) & "列元素值")

    Next j

  Next i

  Print "所建立的矩阵为:"

  For i = 1 To N

    For j = 1 To M

      Print Mat(i, j); " ";

    Next j

    Print

  Next i

  Max = Mat(1, 1)

  For i = 1 To N

    For j = 1 To M

      If Max < Mat(i, j) Then

        Max = Mat(i, j)

        col = j

        row = i

      End If

    Next j

  Next i

  Print

  Print "矩阵最大的元素的值为:"; Mat(row, col)

  Print "它所在的行号为:"; row; ",列号为:"; col

End Sub

8.7  编写程序,把下面的数据输入一个二维数组中。

25 36 78 13

12 26 88 93

75 18 22 32

56 44 36 58

然后执行以下操作:

①输出矩阵两个对角线上的数;

②分别输出各行和各列的和

③交换第一行和第三行的位置;

④交换第二列和第四列的位置;

⑤输出处理后的数组。

解:

Option Base 1

 

Private Sub Form_Click()

  Dim Mat(4, 4) As Integer

  Dim N, M As Integer

  N = 4

  M = 4

 

  Rem 输入矩阵

  For i = 1 To N

    For j = 1 To M

      Mat(i, j) = InputBox("请输入数组第" & Str(i) & "行第" & Str(j) & "列元素值")

    Next j

  Next i

 

  Rem 输出原始矩

  Print

  Print "初始矩阵为:"

  Print

  For i = 1 To N

    For j = 1 To M

      Print Tab(6 * j); Mat(i, j);

    Next j

    Print

  Next i

 

  Rem 输出矩阵对角线上的数

  Print

  Print "矩阵对角线上的数为:"

  Print

  For i = 1 To N

    For j = 1 To M

      If i = j Then

        Print Tab(6 * j); Mat(i, j);

      End If

    Next j

  Next i

 

  Rem 输出各行和各列的和

  Print

  Print "各行的和依次为:"

  Print

  For i = 1 To N

    Sum = 0

    For j = 1 To M

      Sum = Sum + Mat(i, j)

    Next j

    Print Sum;

  Next i

  Print

  Print "各列的和依次为:"

  Print

  For j = 1 To M

    Sum = 0

    For i = 1 To N

      Sum = Sum + Mat(i, j)

    Next i

    Print Sum;

  Next j

 

  Rem 交换第一行和第三行的位置

  Print

  For i = 1 To N

    For j = 1 To M

      If i = 1 Then

        t = Mat(1, j)

        Mat(1, j) = Mat(3, j)

        Mat(3, j) = t

      End If

    Next j

  Next i

 

  Rem 显示交换第一行和第三行后的矩

  Print

  Print "交换第一行和第三行后的矩阵为:"

  Print

  For i = 1 To N

    For j = 1 To M

      Print Tab(6 * j); Mat(i, j);

    Next j

    Print

  Next i

 

  Rem 交换第二列和第四列

  For i = 1 To N

    For j = 1 To M

      If j = 2 Then

        t = Mat(i, 2)

        Mat(i, 2) = Mat(i, 4)

        Mat(i, 4) = t

      End If

    Next j

  Next i

 

  Rem 显示交换第二列和第四列后的矩阵

  Print

  Print "交换第二列和第四列后的矩阵为:"

  Print

  For i = 1 To N

    For j = 1 To M

      Print Tab(6 * j); Mat(i, j);

    Next j

    Print

  Next i

End Sub

8.8  设有如表8.1所列的人员名册。试编写一个程序,对该名册进行检索。程序运行后,只要在键盘上输入一个人名,就可以在屏幕上显示出这个人的情况。例如,输入“张得功”,则显示

张得功   男    24    大学本科    河北

表8.1  人员名册

姓名
 性别
 年龄
 文化程度
 籍贯
 
张得功

李得胜

王  丽
 男


 24

30

25
 大学本科

高中毕业

研究生
 河北

北京

山东
 

要求:

①使用动态数组,输入的人数可以根据实际情况改变;

②当检索名册中不存在的人名时,输出相应的信息;

③每次检索结束后,询问是否继续检索,根据输入的信息确定是否结束程序。

解:

Option Base 1

 

Private Sub Form_Click()

Dim arr(), s

  Dim n As Integer

  s = Array("姓名", "性别", "年龄", "文化程度", "籍贯")

  n = InputBox("请输入人数")

  ReDim arr(n, 5)

  Print

  For i = 1 To n

    For j = 1 To 5

      arr(i, j) = InputBox("请输入第" & Str(i) & "个人的" & s(j))

    Next j

  Next i

 

  Print "输入的人员名册:"

  For i = 1 To n

    For j = 1 To 5

      Print arr(i, j); "  ";

    Next j

    Print

  Next i

 

  Print

  Print "检索情况:"

  Do

    sn = InputBox("请输入要查找的名字")

    For i = 1 To n

      For j = 1 To 5

        If sn = arr(i, 1) Then

          row = i

          Exit For

        Else

          row = 0

        End If

      Next j

      If row <> 0 Then Exit For

    Next i

    Print "要检索的人名为:"; sn

    Print

    If row <> 0 Then

      For i = 1 To 5

        Print arr(row, i); " ";

      Next i

      Print

    Else

      Print "没有要查找的信息"

    End If

    Print

    a = MsgBox("是否继续检索?", 19, "选择")

    If a <> 6 Then

      Exit Do

    End If

  Loop

End Sub

8.9  某单位开运动会,共有10人参加男子100米短跑,运动员号和成绩见表8.2。

表8.2  运动员成绩表

运动员号
 成绩(秒)
 运动员号
 成绩
 
207

156

453

096

339
 14.5

14.2

15.2

15.7

14.9
 077

231

276

122

302
 15.1

14.7

13.9

13.7

14.5
 

编写程序,按成绩排出名次,并按如下格式输出。

名次      运动员号     成绩

 1       ……         ……

 2       ……         ……

 3       ……         ……

 …       ……         ……

 10      ……         ……

解:

Option Base 1

 

Private Sub Form_Click()

  Dim M, X

  M = Array(207, 156, 453, 96, 339, 77, 231, 176, 122, 302)

  X = Array(14.5, 14.2, 15.1, 15.7, 14.7, 15.1, 14.7, 13.9, 13.7, 14.5)

  Print

  Print , "名次", "运动员号", "成绩"

  Print

  For i = 1 To 9

    For j = i + 1 To 10

      If X(i) > X(j) Then

        t = X(i)

        X(i) = X(j)

        X(j) = t

        t = M(i)

        M(i) = M(j)

        M(j) = t

      End If

    Next j

    Print , i, M(i), X(i)

  Next i

  Print , 10, M(10), X(10)

End Sub

8.10  编写程序,建立并输出一个10x10的矩阵,该矩阵对角线元素为1,其余元素为0。

解:

Option Base 1

 

Private Sub Form_Click()

Dim mat(10, 10)

For i = 1 To 10

  For j = 1 To 10

    If i = j Then

      mat(i, j) = 1

    Else

      mat(i, j) = 0

    End If

  Next j

Next i

For i = 1 To 10

  For j = 1 To 10

    Print mat(i, j);

  Next j

  Print

Next i

End Sub

8.11 编写程序,实现矩阵转置,即将一个n´m的矩阵的行和列互换。例如,α矩阵为

1  2  3                               1  4

α=                 转置后的矩阵b为  b=    2  5

4  5  6                               3  6

解:

Option Base 1

 

Private Sub Form_Click()

  Const n = 2

  Const m = 3

  Dim a(n, m) As Integer, b(m, n) As Integer

 

  For i = 1 To n

    For j = 1 To m

      a(i, j) = Int(Rnd * 90) + 10

    Next j

  Next i

 

  For i = 1 To n

    For j = 1 To m

      b(j, i) = a(i, j)

    Next j

  Next i

 

  Print

  Print "矩阵α(转置前):"

  Print

  For i = 1 To n

    For j = 1 To m

      Print Tab(5 * j); a(i, j);

    Next j

    Print

  Next i

  Print

  Print "矩阵b(转置后):"

  Print

  For i = 1 To m

    For j = 1 To n

      Print Tab(5 * j); b(i, j);

    Next j

    Print

  Next i

End Sub

8.12  编写程序,输出“杨辉三角形”。

杨辉三角形的每一行是(x+y)n的展开式的各项的系数。例如第1行是(x+y)0,其系数为1;第2行为(x+y)1,其系数为1;第3 行为(x+y)2,其展开式为x2+2xy+y2,系数分别为1,2,1……一般形式如下

                1

1         1

1   2   1

1   3   3   1

1   4   6   4   1

1   5   10  10  5   1

……

分析上面的形式,可以找出其规律:对角线和每行的第1列均为1,其余各项是它的上一行中前一个元素和上一行的同一列元素之和。例如第4行第3列的值为3,它是第3行第2列与第3列元素值之和,可以一般地表示为

α(i,j)=α(i-1,j-1)+ α(i-1,j)

请编写程序,输出n=10的杨辉三角形(共11行)。

解:

Option Base 1

Private Sub Form_Click()

  Const N = 10

  Dim Arr(N, N) As Integer

  For i = 1 To N

    Arr(i, i) = 1

    Arr(i, 1) = 1

  Next i

  For i = 3 To N

    For j = 2 To i - 1

      Arr(i, j) = Arr(i - 1, j - 1) + Arr(i - 1, j)

    Next j

  Next i

  For i = 1 To N

    For j = 1 To i

      Print Arr(i, j);

    Next j

    Print

  Next i

End Sub



来源:互联网
阅读:1968
日期:2006-2-20

【 双击滚屏 】 【 推荐朋友 】 【 收藏 】 【 打印 】 【 关闭 】 【 字体: 】 
上一篇:高教版VB课后习题答案
下一篇:《Visual Basic程序设计基础》教材习题参考答案

  >> 相关文章
 
  ·高教版VB课后习题答案

5.12汶川大地震遇难同胞默哀 | 汉南在线总站 | 网站建设 | BT电影下载 | 汉南在线博客 | 流行购商城

授权使用:汉南在线 http://hnzx.hzwz.net/
经营许可证:陕ICP备05000109号 Powered by:汉南在线  
Copyright (c) 2002-2008 汉南在线. All Rights Reserved .