1 / 53

Visual Basic 程序设计教程

Visual Basic 程序设计教程. 第 6 章 数 组. 6.4.2 控件数组的建立 6.4.3 控件数组的使用 6.5 For Each … Next 语句 习题六. 6.1 数组的概念 6.1.1 数组与数组元素 6.1.2 数组的类型 6.1.3 数组的维数 6.1.4 数组的形式 6.2 固定大小的数组 6.2.1 数组的声明 6.2.2 数组的使用 6.3 动态数组 6.3.1 创建动态数组 6.3.2 保留动态数组的内容 6.4 控件数组 6.4.1 控件数组的概念.

zelig
Download Presentation

Visual Basic 程序设计教程

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. Visual Basic 程序设计教程

  2. 第6章 数 组 6.4.2 控件数组的建立 6.4.3 控件数组的使用 6.5For Each…Next语句 习题六 6.1数组的概念 6.1.1 数组与数组元素 6.1.2 数组的类型 6.1.3 数组的维数 6.1.4 数组的形式 6.2固定大小的数组 6.2.1 数组的声明 6.2.2 数组的使用 6.3 动态数组 6.3.1 创建动态数组 6.3.2 保留动态数组的内容 6.4控件数组 6.4.1 控件数组的概念

  3. 6.2.1 数组的声明 有3种方法声明固定大小的数组,用哪一种方法取决于数组应用的有效范围: l建立公用数组,在模块的通用段用Public语句声明数组。格式为 Public 数组名(〈维数定义〉) [ As 〈类型〉] l建立模块级数组,在模块的通用段用Private或Dim语句声明数组。格式为 Private | Dim 数组名(〈维数定义〉) [ As 〈类型〉] l建立局部数组,在过程中用Dim或Private语句声明数组。格式为 Dim | Private 数组名(〈维数定义〉) [ As 〈类型〉] 6.2.2 数组的使用 【例6-1】随机产生10个两位整数,找出其最大值、最小值和平均值,如图6-1所示。

  4. 设计步骤如下: (1) 建立应用程序用户界面与设置对象属性。 (2) 编写代码。 考虑到要在不同的过程中使用数组,所以首先在模块的通用段声明数组: Dim a(1 To 10) As Integer 随机整数的生成由窗体的Load事件代码完成:

  5. Private Sub Form_Load() Dim p As String Randomize p = "" For i = 1 To 10 a(i) = Int(Rnd * 90) + 10 p = p & Str(a(i)) & "," Next Label1.Caption = LTrim(Left(p, Len(p) – 1)) End Sub “重置”按钮Command1的Click事件代码: Private Sub Command1_Click() Form_Load Text1.Text = "" Text2.Text = "" Text3.Text = "" End Sub

  6. 求最大、最小以及平均值由“确定”按钮Command2的Click事件代码完成:求最大、最小以及平均值由“确定”按钮Command2的Click事件代码完成: Private Sub Command2_Click() Dim n As Integer, m As Integer, s As Single min = 100: max = 10: s = 0 For i = 1 To 10 If a(i) > n Then max = a(i) If a(i) < m Then min = a(i) s = s + a(i) Next Text1.Text = max Text2.Text = min Text3.Text = s / 10 End Sub 最后是“关闭”按钮Command3的Click事件代码: Private Sub Command3_Click() Unload Me End Sub

  7. (1) 在“重置”按钮的Click事件代码中,通过调用窗体的Load事件过程来重新产生随机数。 (2) 如果要求产生的随机整数互不相同,应改写窗体的Load事件代码: Private Sub Form_Load() Dim p As String Randomize p = "" For i = 1 To 10 Do x = Int(Rnd * 90) + 10 yes = 0 For j = 1 To i - 1 If x = a(j) Then yes = 1: Exit For ' 如与前面的元素相同,则返回到Do循环 Next ' 重新产生随机数 Loop While yes = 1 a(i) = x p = p & Str(a(i)) & "," Next Label1.Caption = LTrim(Left(p, Len(p) - 1)) End Sub

  8. 【例6-2】斐波那契(Fibonacci)数列问题。 ibonacci数列问题起源于一个古典的有关兔子繁殖的问题:假设在第1个月时有一对小兔子,第2个月时成为大兔子,第3个月时成为老兔子,并生出一对小兔子(一对老,一对小)。 第4个月时老兔子又生出一对小兔子,上个月的小兔子变成大兔子(一对老,一对大,一对小)。第5个月时上个月的大兔子成为老兔子,上个月的小兔子变成大兔子,两对老兔子生出两对小兔子(两对老,一对中,两对小)…。 这样,各月的兔子对数为:1,1,2,3,5,8,…。 设计步骤如下: (1) 建立应用程序用户界面与设置对象属性。 (2) 编写代码。

  9. 只需编写命令按钮的Click事件代码: Private Sub Command1_Click() Dim f(15) As Integer List1.Clear f(1) = 1: f(2) = 1 p = Format("Fib(" & 1 & "):", "!@@@@@@@@@@@@") & Format(f(1), "########") List1.AddItem p, 0 For i = 3 To 15 f(i) = f(i – 1) + f(i - 2) p = Format("Fib(" & i & "):", "!@@@@@@@@@@@@") & Format(f(i), "########") List1.AddItem p, i - 1 Next End Sub

  10. 【例6-3】由计算机随机生成10个互不相同的数,然后将这些数按由小到大的顺序显示出来(如图6-6所示)。【例6-3】由计算机随机生成10个互不相同的数,然后将这些数按由小到大的顺序显示出来(如图6-6所示)。 设计步骤如下: (1) 建立应用程序用户界面与设置对象属性。 (2) 编写代码。 考虑到要在不同的过程中使用数组,所以首先在模块的通用段声明数组: Dim a(1 To 10) As Integer 随机整数的生成由窗体的Load事件代码完成: Private Sub Form_Load() Dim p As String Randomize p = "" For i = 1 To 10 Do x = Int(Rnd * 90) + 10 yes = 0

  11. For j = 1 To i - 1 If x = a(j) Then yes = 1: Exit For Next Loop While yes = 1 a(i) = x p = p & Str(a(i)) & "," Next Label1.Caption = LTrim(Left(p, Len(p) - 1)) Label2.Caption = "" End Sub 编写“重置”按钮Command1的Click事件代码: Private Sub Command1_Click() Form_Load End Sub

  12. 编写“排序”按钮Command2的Click事件代码: Private Sub Command2_Click() For i = 1 To 9 For j = i + 1 To 10 If a(i) > a(j) Then t = a(i): a(i) = a(j): a(j) = t End If Next Next p = Str(a(1)) For i = 2 To 10 p = p & "," & Str(a(i)) Next Label2.Caption = LTrim(p) End Sub

  13. 【例6-4】设有一个5×5的方阵,其中元素是由计算机随机生成的小于100的整数。请求出:【例6-4】设有一个5×5的方阵,其中元素是由计算机随机生成的小于100的整数。请求出: (1)对角线上元素之和; (2)对角线上元素之积; (3)方阵中最大的元素。 设计步骤如下: (1) 建立应用程序用户界面与设置对象属性。 (2) 编写代码。 考虑到要在不同的过程中使用数组,所以首先在模块的通用段声明数组: Dim a(5, 5) As Integer 方阵的生成由窗体的Load事件代码完成:

  14. Private Sub Form_Load() List1.Clear Dim p As String Randomize For i = 1 To 5 p = "" For j = 1 To 5 a(i, j) = Int(Rnd * 99) + 1 p = p & Format(a(i, j), "!@@@") Next List1.AddItem p, i – 1 Next Text1.Text = "" Text2.Text = "" Text3.Text = "" End Sub

  15. 计算功能由“计算”按钮Command1的Click事件代码完成:计算功能由“计算”按钮Command1的Click事件代码完成: Private Sub Command1_Click() Dim s As Integer, t As Long s = 0: t = 1 For i = 1 To 5 s = s + a(i, i) t = t * a(i, i) If Max < a(i, i) Then Max = a(i, i): p = i Next Max = a(1, 1): p = 1: q = 1 For i = 1 To 5 For j = 1 To 5 If Max < a(i, j) Then Max = a(i, j): p = i: q = j Next Next Text1.Text = s Text2.Text = t Text3.Text = "a(" & p & "," & q & ")" End Sub

  16. 姓 名 数 学 语 文 外 语 陈高阳 89 85 91 赵世杰 75 78 84 李民维 64 82 72 马英丽 88 68 64 杨广民 79 79 87 李灵君 91 88 87 陈吉至 68 73 64 王东明 58 68 65 姜大伟 76 81 88 吴晓林 78 89 82 “重置”按钮Command2的Click事件代码完成: Private Sub Command2_Click() Form_Load End Sub 【例6-5】设有10位同学的数学、语文、外语3门成绩,见表6-2。

  17. 试编写程序,实现如图6-9所示,即 (1) 成绩的查询。 (2) 各科平均分数的计算。 (3) 显示各科平均分以下的同学姓名。 设计步骤如下: (1) 建立应用程序用户界面与设置对象属性。 (2) 编写代码。 考虑到要在不同的过程中使用数组,所以首先在模块的通用段声明数组: Dim a(1 To 10) As String, b(1 To 10, 1 To 4) As Integer

  18. 数组的赋值由窗体的Load事件代码完成: Private Sub Form_Load() a(1) = "陈高阳": b(1, 1) = 89: b(1, 2) = 85: b(1, 3) = 91 a(2) = "赵世杰": b(2, 1) = 75: b(2, 2) = 78: b(2, 3) = 84 a(3) = "李民维": b(3, 1) = 64: b(3, 2) = 82: b(3, 3) = 72 a(4) = "马英丽": b(4, 1) = 88: b(4, 2) = 68: b(4, 3) = 64 a(5) = "杨广民": b(5, 1) = 79: b(5, 2) = 79: b(5, 3) = 87 a(6) = "李灵君": b(6, 1) = 91: b(6, 2) = 88: b(6, 3) = 87 a(7) = "陈吉至": b(7, 1) = 68: b(7, 2) = 73: b(7, 3) = 64 a(8) = "王东明": b(8, 1) = 58: b(8, 2) = 68: b(8, 3) = 65 a(9) = "姜大伟": b(9, 1) = 76: b(9, 2) = 81: b(9, 3) = 88 a(10) = "吴晓林": b(10, 1) = 78: b(10, 2) = 89: b(10, 3) = 82 End Sub

  19. 在列表框中显示姓名由窗体的Activate事件代码完成:在列表框中显示姓名由窗体的Activate事件代码完成: Private Sub Form_Activate() For n = 1 To 10 List1.AddItem a(n), n – 1 b(n, 4) = b(n, 1) + b(n, 2) + b(n, 3) Next Text1.Text = "": Text2.Text = "": Text3.Text = "": Text4.Text = "" End Sub 查阅学生的各科成绩由列表框的Click事件代码完成: Private Sub List1_Click() n = List1.ListIndex + 1 Text1.Text = b(n, 1) Text2.Text = b(n, 2) Text3.Text = b(n, 3) Text4.Text = b(n, 4) End Sub

  20. 各科平均分数的计算以及显示各科平均分以下的同学姓名则由3个命令按钮的Click事件代码分别完成:各科平均分数的计算以及显示各科平均分以下的同学姓名则由3个命令按钮的Click事件代码分别完成: Private Sub Command1_Click() s = 0 For n = 1 To 10 s = s + b(n, 1) Next s = s / 10 p = "" For n = 1 To 10 If b(n, 1) < s Then p = p & a(n) & " " Next MsgBox "低于平均分数的同学有:" & Chr(13) & Chr(13) & p, 0, "数学的平均分为:" & s End Sub

  21. 各科平均分数的计算以及显示各科平均分以下的同学姓名则由3个命令按钮的Click事件代码分别完成:各科平均分数的计算以及显示各科平均分以下的同学姓名则由3个命令按钮的Click事件代码分别完成: Private Sub Command1_Click() s = 0 For n = 1 To 10 s = s + b(n, 1) Next s = s / 10 p = "" For n = 1 To 10 If b(n, 1) < s Then p = p & a(n) & " " Next MsgBox "低于平均分数的同学有:" & Chr(13) & Chr(13) & p, 0, "数学的平均分为:" & s End Sub

  22. Private Sub Command3_Click() s = 0 For n = 1 To 10 s = s + b(n, 3) Next s = s / 10 p = "" For n = 1 To 10 If b(n, 3) < s Then p = p & a(n) & " " Next MsgBox "低于平均分数的同学有:" & Chr(13) & Chr(13) & p, 0, "外语的平均分为:" & s End Sub

  23. 6.3 动态数组 6.3.1 创建动态数组 要创建动态数组,可按照以下步骤进行: (1) 用Public语句(公用数组)、Dim语句(模块级数组)、Static或Dim语句(局部数组)在过程中声明数组。给数组附以一个空维数表,这样就将数组声明为动态数组。 (2) 用ReDim语句分配实际的元素个数。格式为 ReDim [ Preserve ] 数组名(〈维数定义〉) [ As〈类型〉] 【例6-6】在例6-2的Fibonacci数列问题中,希望能够选择输出的项数。 设计步骤如下: 在例6-2的窗体中,增加一个文本框Text1,删去命令按钮并修改各控件的属性如图6-10所示。

  24. 在模块的通用段声明数组一个动态数组: Dim f() 为了使输入所需项数并按回车后可以得到数列的各项,编写文本框Text1的按健(KeyPress)事件代码:

  25. Private Sub Text1_KeyPress(KeyAscii As Integer) Dim n As Integer List1.Clear If KeyAscii = 13 Then n = Val(Text1.Text) ReDim f(n) f(0) = 0: f(1) = 1 p = Format("Fib(" & 1 & "):", "!@@@@@@@@@@@@") & Format(f(1), "########") List1.AddItem p, 0 For i = 2 To n f(i) = f(i – 1) + f(i – 2) p = Format("Fib(" & i & "):", "!@@@@@@@@@@@@") & Format(f(i), "########") List1.AddItem p, i – 1 Next End If End Sub

  26. 【例6-7】编程序,输出杨辉三角形(国外称Pascal三角形)。【例6-7】编程序,输出杨辉三角形(国外称Pascal三角形)。 设计步骤如下: (1) 建立应用程序用户界面与设置对象属性。 (2) 编写代码。 在模块的通用段声明数组一个动态数组: Dim a() 为了使输入所需项数并按回车后可以得到各项,编写文本框Text1的按健(KeyPress)事件代码:

  27. Private Sub Text1_KeyPress(KeyAscii As Integer) Dim n As Integer If KeyAscii = 13 Then n = Val(Text1.Text) If n > 16 Then MsgBox "请不要超过16" Exit Sub End If ReDim a(n, n) For i = 1 To n a(i, 1) = 1: a(i, i) = 1 Next p = Format(1, "!@@@@") & Chr(13) p = p & Format(1, "!@@@@") & Format(1, "!@@@@@") & Chr(13)

  28. For i = 3 To n p = p & Format(a(i, 1), "!@@@@") For j = 2 To i – 1 a(i, j) = a(i – 1, j – 1) + a(i – 1, j) p = p & Format(a(i, j), "!@@@@@") Next p = p & Format(a(i, i), "!@@@@@") & Chr(13) Next MsgBox p, 0, "杨辉三角形" End If End Sub

  29. 6.4 控件数组 • 6.4.2 控件数组的建立 • 设计时有3种方法创建控件数组: • l将相同名字赋予多个控件。 • l复制现有的控件并将其粘贴到窗体上。 • 将控件的Index属性设置为非Null数值 • 6.4.3 控件数组的使用 • 1. 命令按钮组 • 【例6-8】在例6-5中使用命令按钮控件数组。 • 修改命令按钮的属性设置。 • (2) 修改Command1的Click事件代码。 • 首先在原有Command1的Click事件过程中增加参数声明:Index As Integer,然后修改代码为:

  30. Private Sub Command1_Click(Index As Integer) k = Index Select Case k Case 0 t = "数学的平均分为:" Case 1 t = "语文的平均分为:" Case 2 t = "外语的平均分为:" End Select s = 0 For n = 1 To 10 s = s + b(n, k + 1) Next s = s / 10 p = "" For n = 1 To 10 If b(n, k + 1) < s Then p = p & a(n) & " " Next MsgBox "低于平均分数的同学有:" & Chr(13) & Chr(13) & p, 0, t & s End Sub 最后,删除原有Command2与Command3的事件过程代码。

  31. 2. 选项按钮组 【例6-9】在第4章计算银行定期存款利息的例子中,使用选项按钮组,可以使代码更为简洁。如图6-13所示。 修改步骤如下: (1) 将6个选项按钮改为选项按钮组Option1(0)~Option1(5),删去命令按钮Command1。 (2) 编写选项按钮组Option1()的Click事件代码:

  32. Private Sub Option1_Click(Index As Integer) a = Val(Text1.Text) n = Index Select Case n Case 0 x = (1 + 5 * 0.0288) * a Case 1 x = (1 + 3 * 0.027) * (1 + 2 * 0.0243) * a Case 2 x = (1 + 3 * 0.027) * (1 + 0.0225) ^ 2 * a Case 3 x = (1 + 2 * 0.0243) ^ 2 * (1 + 0.0225) * a Case 4 x = (1 + 2 * 0.0243) * (1 + 0.0225) ^ 3 * a Case 5 x = (1 + 0.0225) ^ 5 * a End Select Text2.Text = Format(x, "#######0.0#") Text1.SetFocus Text1.SelStart = 0 Text1.SelLength = Len(Text1.Text) End Sub

  33. 还可以通过循环来判断选项按钮组中哪个按钮被选中,并调用该事件代码:还可以通过循环来判断选项按钮组中哪个按钮被选中,并调用该事件代码: Private Sub Text1_KeyPress(KeyAscii As Integer) If KeyAscii = 13 Then For n = 0 To 5 If Option1(n).Value Then Option1_Click (n) Next End If End Sub

  34. 3. 复选框组 【例6-10】在第4章控制文本字体风格的例子中使用复选框组。如图6-14所示。 修改步骤如下: (1) 将4个复选框改为复选框组Check1(0)~Check1(3),其中Check1(0)为带锁的那个图文复选框。 (2) 编写复选框组的Click事件代码:

  35. Private Sub Check1_Click(Index As Integer) n = Index Select Case n Case 0 For k = 1 To 3 Check1(k).Enabled = Check1(0).Value Next If Check1(0).Caption = "锁上" Then Check1(0).Caption = "打开" Else Check1(0).Caption = "锁上" End If Case 1 Text1.FontBold = Check1(1).Value Case 2 Text1.FontItalic = Check1(2).Value Case 3 Text1.FontUnderline = Check1(3).Value End Select End Sub

  36. 4. 标签组 【例6-11】用“筛法”找1~100之间的全部素数。“筛法”求素数表是由希腊著名数学家Eratost henes提出来的,其方法是 首先在纸上写出1~n的全部整数。然后逐一判断它们是否素数,找出一个非素数就把它挖掉(筛掉),最后剩下的就是素数。具体做法是 (1) 先将1挖掉。 (2) 用2去除它后面的每个数,把能被2整除的数挖掉,即把2的倍数挖掉。 (3) 用3去除它后面的每个数,把3的倍数挖掉。 (4) 分别用4,5…各数作为除数去除这些数后面的各数(4已被挖掉,不必再用4当除数,只需用未被挖掉的数作除数即可)。这个过程一直进行到除数为为止(如果不是整数就取其整数部分),如图6-15所示

  37. (5) 经如此“筛法”,剩下的部分全都是素数,如图6-16所示。 设计步骤如下: (1) 建立应用程序用户界面。

  38. (2) 设置对象属性, (3) 编写程序代码。 编写窗体Form1的Load事件代码: Private Sub Form_Load() Picture1.Move 0, 0 Picture1.Height = (Label1(0).Height + 5) * 10 + 3 Picture1.Width = (Label1(0).Width + 5) * 10 + 3 Me.Height = Picture1.Height + 900 Me.Width = Picture1.Width + 80 Label1(0).Visible = False For n = 1 To 100 i = (n – 1) \ 10: j = (n – 1) Mod 10 Load Label1(n) With Label1(n)

  39. .Left = 5 + j * Label1(0).Width .Top = 5 + i * Label1(0).Height .Visible = True .Caption = n End With Next End Sub 编写“重置”按钮Command2的Click事件代码: Private Sub Command2_Click() For n = 1 To 100 Label1(n).Visible = True Next End Sub

  40. 编写“开始”按钮Command1的Click事件代码: Private Sub Command1_Click() Label1(1).Visible = False n = 100 For i = 2 To Sqr(n) If Label1(i).Visible = True Then MsgBox "现在开始删去" & Str(i) & "的倍数", 64, "用“筛法”找素数" For j = i + 1 To n If Label1(j).Visible = True And j Mod i = 0 Then Label1(j).Visible = False Next End If Next MsgBox "剩下来的整数已全都是素数!", 64, "用“筛法”找素数" End Sub

  41. 5. 文本框组 【例6-12】演示“比较法”排序过程的程序,如图6-19所示。 设计步骤如下: (1) 建立应用程序用户界面。

  42. (2) 设置对象属性,见表6-4。 (3) 设计代码。 在窗体的通用过程中声明数组变量: Dim a(10) As TextBox ' 显示数据的对象数组 编写窗体的Activate事件代码: Private Sub Form_Activate() Randomize For i = 0 To 10 Set a(i) = Text1(i) a(i).Text = Int(Rnd * 199) – 99 a(i).BackColor = RGB(255, 255, 255) Next Frame1.Height = 2256 End Sub

  43. 编写命令按钮控件数组Command1()的Click事件代码:编写命令按钮控件数组Command1()的Click事件代码: Private Sub Command1_Click() Command1.Enabled = False For i = 1 To 9 a(i).BackColor = RGB(255, 0, 255) Label2.Caption = " 以A(" & Trim(i) & ")为擂主与后边的元素依次比较,如有比A(" & _Trim(i) + ")小者,则与A(" & Trim(i) & ")交换。" For j = i + 1 To 10 a(j).BackColor = RGB(255, 0, 255) MsgBox "比较A(" & Trim(i) & ")和A(" & Trim(j) & ")", , "比较法排序" If Val(a(i).Text) > Val(a(j).Text) Then MsgBox "交换A(" & Trim(i) & ")和A(" & Trim(j) & ")", , "A(" & Trim(i) & _ ") > A(" & Trim(j) & ")"

  44. t = a(i).Text: a(i).Text = a(j).Text: a(j).Text = t End If a(j).BackColor = RGB(255, 255, 255) Next j a(i).BackColor = RGB(0, 255, 0) Next i a(10).BackColor = RGB(0, 255, 0) Label2.Caption = "" Frame1.Height = 1000 End Sub 6.5 For Each…Next语句 For Each〈成员〉In〈数组〉 [〈语句列〉] [Exit For] Next [〈成员〉]

  45. 【例6-13】在本章例6-1中,可以将“确定”按钮Command2的Click事件代码改为【例6-13】在本章例6-1中,可以将“确定”按钮Command2的Click事件代码改为 Private Sub Command2_Click() Dim n As Integer, m As Integer, s As Single m = 100: n = 0: s = 0 For Each x In a If x > n Then n = x If x < m Then m = x s = s + x Next Text1.Text = n Text2.Text = m Text3.Text = s / 10 End Sub

  46. 习题六 6.1 某数组有20个元素,元素的值由键盘输入,要求将前10个元素与后10个元素对换。即第1个元素与第20个元素互换,第2个元素与第19个元素互换,…,第10个元素与第11个元素互换。输出数组原来各元素的值和对换后各元素的值。 6.2 编写程序,建立并输出一个10×10的矩阵,该矩阵两条对角线元素为1,其余元素均为0。 6.3 有一个6×6的矩阵,各元素的值由键盘输入,求全部元素的平均值,并输出高于平均值的元素以及它们的行、列号。 6.4 矩阵转置。即将矩阵行、列互换:

  47. 6.5 找出二维数组n×m中的“鞍点”。所谓鞍点是指它在本行中值最大,在本列中值最小。输出鞍点的行、列号,有可能在一个数组中找不到鞍点,如无鞍点则输出“无”。 6.6 求方阵的两个对角线元素和。 6.7 矩阵的加法运算。两个相同阶数的矩阵A和B相加,是将相应位置上的元素相加后放到同阶矩阵C的相应位置。 + = 6.   6.8 矩阵的乘法运算。设A = (aij)为n×k矩阵,B = (bij)为k×m矩阵,则C = AB为n×m矩阵,C中元素:

  48. 6.9 输出幻方阵。幻方阵也称魔方阵,是指由自然数1~n2(n为奇数)构成的方阵,其各行、各列以及对角线元素之和均相等。如图6-21所示。 6.10 设某班共10名学生,为了评定某门课程的奖学金,按规定超过全班平均成绩10%者发给一等奖,超过全班成绩5%者发给二等奖。试编制程序,输出应获奖学金的学生名单(包括姓名、学号、成绩、奖学金等级)。

  49. 6.11 利用一维数组统计一个班学生0~9、10~19、20~29、…、90~99及100各分数段的人数。如图6-22所示。 6.12 利用随机函数,模拟投币结果。设共投币100次,求“两个正面”、“两个反面”、“一正一反”3种情况各出现多少次。 6.13 选择法排序。选择法排序的基本思路如下 设有10个数存放在数组A中,分别表示为A(1)、A(2)、A(3)、A(4)、A(5)、A(6)、A(7)、A(8)、A(9)、A(10)。 先将A(1)与A(2)比较:指针k指向1,若A(2) < A(1),则将指针k指向2(指针指向较小者)。再将A(k)与A(3)、…、A(10)比较,并依次作出同样的处理,指针k指向10个数中的最小者,然后将A(k)与A(1)互换。

  50. 第2轮:先将指针k指向2,将A(k)与A(3)、…、A(10)比较,并依次作出同样的处理——指针k指向第1轮余下的9个数中的最小者,然后将A(k)与A(2)互换。第1轮余下的9个数中的最小者放入A(2)中。第2轮:先将指针k指向2,将A(k)与A(3)、…、A(10)比较,并依次作出同样的处理——指针k指向第1轮余下的9个数中的最小者,然后将A(k)与A(2)互换。第1轮余下的9个数中的最小者放入A(2)中。 继续第3轮、第4轮、…,直到第9轮后,余下的A(10)自然就是10个数中的最大者。 至此,10个数已从小到大顺序存放在A(1)~A(10)中。 6.14 插入法排序。插入法排序的基本思路如下: 设有10个数存放在数组A中,分别表示为A(1)、A(2)、A(3)、A(4)、A(5)、A(6)、A(7)、A(8)、A(9)、A(10)。 先将A(1)与A(2)比较,若A(2) < A(1),则将A(1)、A(2)中的值互换,A(1)、A(2)顺序排列。 再将A(3)与A(1)、A(2)比较,按顺序确定A(3)应放的位置,A(1)、A(2)、A(3)顺序排列。 依次将后面的数一个一个地拿来插入到排好序的数列中,直到所有的数按顺序排好。 6.15 冒泡法排序。冒泡法排序的基本思路如下: 设有10个数存放在数组A中,分别表示为:A(1)、A(2)、A(3)、A(4)、A(5)、A(6)、A(7)、A(8)、A(9)、A(10)。

More Related