Visual Basic 程序设计 第四章 数组.

Slides:



Advertisements
Similar presentations
编程加工 信息的. 趣味导入拓展提升大显身手总结反思学以致用 传说古代印度有个国王叫舍罕,他很迷恋棋类,而 宰相达依尔是个聪明的大臣,发明了国际象棋。国王玩 得爱不释手,决定奖赏宰相。达依尔说:陛下,我别无 他求,请你在这张棋盘的第一个格子里赏我 1 粒麦子; 在第二个格子里赏我 2 粒麦子;在第三个格子里赏我.
Advertisements

高等学校计算机基础教育教材 上海中医药大学现代教育技术中心 计算机教学部. 第五章 数 组 ( 4 学时) 5.1 数组的概念 5.2 静态数组及声明 5.3 动态数组及声明 5.4 数组的基本操作 5.5 控件数组 5.6 自定义数据类型 5.7 常用算法(二) 5.8 常见错误.
数据结构的引入. 通讯录管理 社团机构管理 校园导航管理 通讯录管理 社团机构管理 校园导航管理.
VB 程序设计语言 主讲教师:王 杨. 西南石油大学计算机科学学院  n=12 Dim a(1 To n) As Integer  Dim a%[3,3]  Dim a(1,1,2) As Integer  Dim a%(10) ReDim a(1 To 12)  Dim a!() ReDim.
第七章 常用控件 7.1 控件概述 7.2 常用内部控件 本章要求 返回目录 第七章 常用控件 (Common Control)
第5章 数组 5.1数组的基本概念 5.2静态数组与动态数组 5.3数组的基本操作 5.4综合应用程序举例.
計算機概論 第4章 基本視窗程式應用 4-1 程式語言簡介 4-2 演算法與流程圖 4-3 視窗程式語言設計 4-4 資料結構.
課程名稱:程式設計 授課老師:________
第6章 习题讨论 单选题 多选题(无) 填空题 编程题 退出.
Visual Basic 程 序 设 计 山东外贸职业学院 信息管理系 柳淑花
高中信息技术新课程探讨 算法与程序设计教学实践与探讨 江苏省新海高级中学  张丽.
C语言程序设计.
网 络 课 程 马 鞍 学 网 络 山 课 程 大 络 网 Visual Basic程序设计 第 一 讲 最容易接受的编程语言
高等医药院校药学类第三轮规划教材——大学计算机基础
第五章 数组.
Visual Basic程序设计.
Visual Basic 第六章 循环程序结构
Visual Basic 2010 程式設計16堂特訓 第七堂 VB的迴圈流程控制.
第6章 数 组 6.1 一维数组 6.2 控件数组 6.3 二维数组.
第二章 Visual Basic语言基础.
講師:戴志華 國立台灣大學電機工程研究所 Visual Basic 程式設計 講師:戴志華 國立台灣大學電機工程研究所.
VB程序设计语言 主讲教师:王 杨.
数组 第 6 章.
第5章 数组 Visual Basic程序设计.
Visual Basic程序设计 第七章 数组
第五章 数组 5.1 数组的概念 5.2 数组的基本操作 5.3 数组举例 5.4 动态数组 5.5 程序示例及相关算法.
1、数组的概念 2、静态数组 3、动态数组 4、数组的基本操作 5、控件数组
第5章 数组 Visual Basic程序设计.
初识Visual Basic.
第4章 程序控制结构与算法基础.
新觀念的 VB6 教本 第七章 讓程式轉彎的控制敘述.
流程控制、陣列 台南市聖功女子高級中學 毛全良.
第五章 VB中的数组.
计算机程序设计强化复习 Visual Basic 6.0.
走进编程 程序的顺序结构(二).
辅导课程六.
第五讲 四则运算计算器(一) 精品教程《C#程序设计与应用(第2版)清华大学出版社 谭恒松 主编
新觀念的 VB6 教本 第 6 章 資料型別.
第5章 Visual Basic控制结构 之 常用算法举例
第 8 章 过程.
高等学校计算机基础教育教材 Visual Basic 6.0 程序设计 上海中医药大学现代教育技术中心 计算机教学部 1.
第二章 创建用户界面 本章重点和难点 2.1 基本属性 2.2 创建窗体 2.3 Visual Basic的常用控件 2.4 制作菜单.
VB程序设计语言 主讲教师:王 杨.
VB程序设计语言 主讲教师:王 杨.
VB程序设计语言 主讲教师:王 杨.
VB程序设计语言 主讲教师:王 杨.
For x = 0 To 9 For y = 0 To 9 z = *x + 10*y …… Next y
江西财经大学信息管理学院 《数据库应用》课程组2007
VB语言程序设计教程.
C++语言程序设计 C++语言程序设计 第七章 类与对象 第十一组 C++语言程序设计.
第七章 数组 一维数组:一个变量每次只能存储一个值。一个包含40个元素的数组变量可以存放40个值,采用循环结构实现计算过程非常方便。
小结 郭清溥.
顺序表的删除.
第二章、第三章错题分析.
VB与Access数据库的连接.
VB程序设计语言 主讲教师:王 杨.
第六章 Excel的应用 一、Excel的单元格与区域 1、单元格:H8, D7, IV26等 2、区域:H2..D8, HS98:IT77
第4章 Excel电子表格制作软件 4.4 函数(一).
3.16 枚举算法及其程序实现 ——数组的作用.
1位选手参加了歌唱比赛,评委们的评分如下:
多层循环 Private Sub Command1_Click() Dim i As Integer, j As Integer
Visual Basic程序设计 第13章 访问数据库
1位选手参加了歌唱比赛,评委们的评分如下:
Print方法和函数 2019/5/19.
第5章 数组 5.1 数组概述 5.2 静态数组和动态数组 5.3 数组的基本操作 5.4 控件数组 5.5 数组在自定义数据类型中的应用.
MFC控件 本节内容 视频提供:昆山爱达人信息技术有限公司 视频录制:yang 官网地址:
解析算法与枚举算法.
1、复选框和单选按钮 2、框架 3、列表框和组合框 4、滚动条 5、鼠标器事件 6、键盘
程序调试与错误处理.
顺序结构程序设计 ——关于“字符串”和数值.
Presentation transcript:

Visual Basic 程序设计 第四章 数组

第三章控制结构 学习目标 了解数组的基本概念,理解静态数组和动态数组的概念,掌握静态、动态数组的定义及使用方法,掌握控件数组的建立及使用方法,掌握数组的基本算法。 计算机公共基础课程作为大学通识课程的一个重要环节

第四章 数组 学习要点 计算机公共基础课程作为大学通识课程的一个重要环节 数组基本概念 静态数组的定义及使用 动态数组的定义及使用 控件数组的建立和使用 数组算法 计算机公共基础课程作为大学通识课程的一个重要环节

第四章 数组 知识重点 静态数组的定义及使用 动态数组的定义及使用 控件数组的建立及使用 数组算法(求最值、排序、查找) 计算机公共基础课程作为大学通识课程的一个重要环节

第四章 数组 知识难点 动态数组的使用 数组算法 计算机公共基础课程作为大学通识课程的一个重要环节

第四章 数组 学习提示 在程序中,当处理单个或多个数据时,通常使用一般变量即可,但当需要处理的数据量较大,且数据间存在关联时,再用普通变量进行数据存储和处理不仅繁琐,而且容易出错,此时采用数组进行数据存储和处理会给程序实现带来极大的便利。 计算机公共基础课程作为大学通识课程的一个重要环节

第四章 数组 数组的概念 数组的分类和操作 数组算法 控件数组 综合案例 本章控件

引例:求某班100名同学VB期末成绩平均分,并统计高于平均分的人数。 引例1 引例:求某班100名同学VB期末成绩平均分,并统计高于平均分的人数。 方法一:使用一个简单变量依次存储每位同学成绩。 问题: 1. 100名学生成绩需要重复输入; 2. 数据在重复输入过程中容易出错。

引例:求某班100名同学VB期末成绩平均分,并统计高于平均分的人数。 引例1 引例:求某班100名同学VB期末成绩平均分,并统计高于平均分的人数。 方法一:定义100个变量,存储所有同学成绩。 问题: 1. 程序代码书写繁琐; 2. 容易出错。

Dim score(1 To 100) As Integer 4.1 数组概念 定义100个变量 Dim score(1 To 100) As Integer 数组名 下标的范围 数据类型 数组是一组相同类型的变量的集合 数组名代表一批数据,用下标表示该数组中的各个元素 1、解释数组的含义 score(100) …… score(i) score(2) score(1) 数组元素

4.2 数组的分类和操作 静态数组 动态数组

4.2.1 静态数组 1、数组定义 格式:Dim 数组名(下标1[,下标2,……])[As类型] Dim a(10) As Integer, b(3, 2 To 6) As Single a(0) a(1) a(2) a(3) a(4) a(5) a(6) a(7) a(8) a(9) a(10) b(0,2) b(0,3) b(0,4) b(0,5) b(0,6) b(1,2) b(1,3) b(1,4) b(1,5) b(1,6) b(2,2) b(2,3) b(2,4) b(2,5) b(2,6) b(3,2) b(3,4) b(3,5) b(3,6)

4.2.1 静态数组 2、数组元素的引用 格式:数组名(下标) 例如:Dim a(10) As Integer, b(3, 2 To 6) As Single a(1) = 100 b(2, 5) = 200

静态数组举例 例4.1 用静态数组解决引例1(班级人数100) Private Sub Command1_Click() Dim score%(1 To 100), total%, aver!, i%, n% aver = 0: n = 0 For i = 1 To 100 ' 输入并累加100名同学成绩 score(i) = Val(InputBox("请输入第" & i & "个同学成绩")) total = total + score(i) Next i aver = total / 100 ' 计算成绩平均分 For i = 1 To 100 ' 统计高于平均分人数 If score(i) > aver Then n = n + 1 Print "班级平均分:"; aver, "高于平均分人数:"; n End Sub 数组定义 数组赋值 数组输出

可以省略类型,如果给定类型,必须与前面类型保存一致 4.2.2 动态数组 1. 动态数组的定义 2. ReDim语句的格式 Step1: Step2: 定义一个空的数组 在过程中用ReDim语句定义带下标的数组 例如: Dim a() As Integer …… ReDim a(10) As Integer ReDim [Preserve] 数组名 (下标) [As 数据类型] 可以省略类型,如果给定类型,必须与前面类型保存一致

动态数组举例 例4.2 用动态数组解决引例1(班级人数可变) Private Sub Command1_Click() Dim score%(), total%, aver!, i%, n%, number% number = Val(InputBox("请输入班级人数")) ReDim score%(1 To number) aver = 0: n = 0 ' 输入并累加number名同学成绩 For i = 1 To number score(i) = Val(InputBox("请输入第" & i & "个同学成绩")) total = total + score(i) Next i aver = total / number ' 统计高于平均分人数 If score(i) > aver Then n = n + 1 Print "总人数:"; number; "平均分:"; aver; "高于平均分人数:"; n End Sub

思考 判断下列数组声明是否合法? 1. n=12 Dim a(1 To n) As Integer 2. Dim a%[3,3] 合法的数组声明可以存放多少个数组元素?  1. n=12 Dim a(1 To n) As Integer 2. Dim a%[3,3] 3. Dim a(1,1,2) As Integer 4. Dim a%(10) ReDim a(1 To 12) 5. Dim a!() ReDim a(3,2) As Integer    

4.2.3二维数组的操作 二维数组一般用于解决多行多列数据处理的问题,如矩阵或行列式等 【例4.3】在窗体上输出如下所示3*4矩阵。 1 2 3 4 5 6 7 8 9 10 11 12

4.2.4 数组其它相关操作 数组的初始化(Array函数) For Each...Next语句 Lbound/Ubound函数 Option Base语句 Lbound/Ubound函数 数组的初始化(Array函数) For Each...Next语句

Option Base语句 Option Base n 功能: 指定数组下标下界的缺省值 说明: n为数组下标指定的下界,取值为0或1。

Lbound,Ubound Lbound,Ubound Lbound(数组名[, 维]): 返回数组中指定维的下界 Dim y(1 To 12, 5 To 20, -3 To 6) Print Lbound(y, 1), Ubound(y, 1) 1 12 Print Lbound(y, 2), Ubound(y, 2) 5 20 Print Lbound(y, 3), Ubound(y, 3) -3 6

Array函数 Array函数初始化数组条件: 一维数组 Variant(变体类型) 例如: 非静态数组(动态数组或数组变量) Dim a As Variant a = Array(1, 2, 3, 4, 5)

Array函数 格式 For Each 成员 In 数组 循环体 [Exit For] …… Next [成员] 变体变量,代表了数组中的每个元素 For Each 成员 In 数组 循环体 [Exit For] …… Next [成员] 没有括号和上下界的数组名

4.3 数组算法 求最值 排序 查找

求最值--最大 方法 假定数组第一个元素为最大,然后依次访问数组 中每个元素,若找到新的最大的元素,即修改最 0.5 3.6 1.3 0.7 -1.5 2.0 方法 假定数组第一个元素为最大,然后依次访问数组 中每个元素,若找到新的最大的元素,即修改最 大值变量,直到数组元素访问结束。

求数组中的最小值和最大值 Dim a As Variant a = Array(2.0, -1.5, 0.7, 1.3,3.6,0.5) max=a(0) : min = a(0) For i = 0 To 5 If a(i) > max Then max = a(i) If a(i) < min Then min =a(i) Next i Print "最大值为:"; max Print "最小值为:"; min

排序算法 冒泡 排序法 比较交换 排序法 选择 排序法

数组排序—比较交换法 原始数据: 75 87 52 94 60 要求:升序 75 87 52 94 60 75 87 52 94 60 原始数据: 75 87 52 94 60 要求:升序 75 87 52 94 60 75 87 52 94 60 52 87 75 94 60 52 87 75 94 60 52 87 75 94 60 第一轮结束,数据52已排好

数组排序—比较交换法 排序关键:某趟排序,固定与某一位置数据比较 第 二 轮 比 较 : 52 87 75 94 60 52 75 87 94 60 52 75 87 94 60 52 60 87 94 75 第一轮结束,数据52 60已排好

' n个数据需进行n-1趟排序 For i = LBound(a) To UBound(a) - 1 For j = i + 1 To UBound(a) If a(i) > a(j) Then t = a(i) a(i) = a(j) a(j) = t End If Next j Next i

数组排序--选择法 排序过程(重复N-1次) 第一步:查找最值位置 第二步:将最值与被排序位置数据交换 a(1) a(2) a(3) a(4) a(5) 原始数据 75 87 52 94 60 第一趟排序 75 87 52 94 60 第一趟排序 52 87 75 94 60 第二趟排序 52 60 75 94 87 第二趟排序 52 87 75 94 60 第三趟排序 52 60 75 94 87 第三趟排序 52 60 75 94 87 第四趟排序 52 60 75 87 94 第四趟排序 52 60 75 94 87 排序过程(重复N-1次) 第一步:查找最值位置 第二步:将最值与被排序位置数据交换

For i = LBound(a) To UBound(a) - 1 ' n个数据需进行n-1趟排序 p = i For j = i + 1 To UBound(a) If a(j) < a(p) Then p = j Next j t = a(i) a(i) = a(p) a(p) = t Next i

数组排序--冒泡法 排序关键:两两相邻数据比较 原始数据:75 87 52 94 60 第一趟排序 依此进行第2,3,4趟排序 原始数据 原始数据:75 87 52 94 60 第一趟排序 75 87 52 94 60 75 87 52 94 60 75 52 87 94 60 75 52 87 60 94 75 52 87 60 94 依此进行第2,3,4趟排序 原始数据 第一趟 排序后

For i = LBound(a) To UBound(a) - 1 ' n个数据需进行n-1趟排序 For j = LBound(a) To UBound(a) - i If a(j) > a(j + 1) Then ' 两相邻数据比较 t = a(j) a(j) = a(j + 1) a(j + 1) = t End If Next j Next i

查找—顺序查找 思路:从头至尾(或从尾至头)依次比较,若找到 则终止,否则继续。查找终止为或找到或数据找完。 适用于有序或无序数组

Dim a As Variant a = Array(-123, -10, 5, 8, 30, 56, 59, 66, 90, 518) n = UBound(a) k = Val(InputBox("输入要查询的关键值")) Print "要查询的数是:"; k For i = 1 To n If k = a(i) Then Exit For Next i If i <= n Then Print k; "has be found,on"; i; "th position" Else Print k; "has not be found,on a" End If

查找—折半查找 适合条件:数据有序 -123 -10 5 8 30 56 59 66 90 518 有序数组a,查找数据59 low mid=Int((low+high)/2) high

Dim a As Variant a = Array(-123, -10, 5, 8, 30, 56, 59, 66, 90, 518) n = UBound(a) k = Val(InputBox("输入要查询的关键值")) low = 1: high = n find = -1 'find=-1表示没有找到 While low <= high And find = -1 m = (low + high) \ 2 If k = a(m) Then find = 1 'find=1表示已经找到 Print k; "has be found,on"; m; "the position." Else If k < a(m) Then high = m - 1 low = m + 1 End If Wend If find = -1 Then Print k; "has not be found."

4.3 数组算法 插入 删除

有序数组插入 在有序数列中插入数据x 插入数据步骤: 1. 找到数据x应插入的位置i(1≤i≤n+1); a(1) a(2) …… a(i) a(i+1) a(n-1) a(n)   插入数据步骤: 1. 找到数据x应插入的位置i(1≤i≤n+1); a(1) a(2) …… a(i) a(i+1) a(n-1) a(n)   插入位置 2. 将数组第n~第 i位置数据依次往后移动一个位置; a(1) a(2) …… a(i) a(i+1) a(n-1) a(n)    移动顺序  3. 在数组第i个位置处插入数据x。 a(1) a(2) …… a(i) a(n-2) a(n-1) a(n) x

数组元素删除 1.查找欲删除数据x是否存在,若存在,记录其位置i(1≤i≤n) 2.查找成功情况下,将数组中第i+1至第n个元素依次向前 a(1) a(2) …… a(i) a(i+1) a(n-1) a(n)   数据x 2.查找成功情况下,将数组中第i+1至第n个元素依次向前 移动一个位置,并且数据元素个数-1。 a(1) a(2) …… a(i) a(i+1) a(n-1) a(n)   移动顺序  1 2 最后

引例2 仿Windows计算器设计 问题: 1、按钮数量众多 2、代码雷同

控件数组 相关概念 控件数组是由一组相同类型的控件组成 控件数组共用一个控件名,具有相同Name的属性 控件数组的每个元素有一个唯一的索引号(Index) 控件数组共享相同的事件过程 Private Sub Option1_Click(Index As Integer) … End Sub

控件数组的建立 设计阶段建立控件数组 运行阶段建立控件数组 方法1:Copy和Paste操作 方法2:直接修改控件为相同Name属性 用Load语句建立数组中其他控件 格式:Load 数组名(Index)

控件数组的删除 设计阶段删除控件数组 运行阶段删除控件数组 Step1:将控件Name属性改为不同 Step2:清空Index属性值 用Unload语句实现。 格式:Unload 数组名(Index)

控件数组的使用 用控件数组解决引例2 控件数组的引用 控件数组名(Index) Private Sub CommandInput_Click(Index As Integer) TextCal = TextCal & CommandInput(Index).Caption End Sub

综合案例 【综合1】设计如图所示4*4(4行4列,4种图案,每种图案各出现4次)的QQ表情连连看游戏。 思路: 1、用Load方法产生16个图像框控件 2、将4*4图像框数组转化成4*4的矩阵 3、根据连连看消除规则,判断最近被单击两幅图片所对应二维数组是否有可通行路径

综合案例 【综合1】与游戏所对应的二维数组值如下: 3 2 4 1 3 2 4 1

综合案例 【综合2】超级Mario 功能扩展:将第3章Mario(马里奥)吃蘑菇游戏中的砖块及“?”控件改为数组控件,同时将蘑菇数量增加至2个,以实现相同功能。

本章控件 ComboBox ListBox

列表框&组合框示例 ComboBox ListBox

列表框三要素 属性 List属性 Colunms ListCount:列表框的列表项数 ListIndex:当前选中的列表项的索引 Sorted Text:得到当前列表框的内容 MultiSelect

列表框三要素 事件和方法 含 义 Click/DbClick 列表框的单击/双击事件 AddItem 向列表框插入一行文本 含 义 Click/DbClick 列表框的单击/双击事件 AddItem 向列表框插入一行文本 RemoveItem 用于清除指定表项内容 Clear 清除列表框中所有项目 列表框名.AddItem 字符串[,下标] 列表框名.RemoveItem 下标 列表框名.Clear

列表框举例 【例】利用列表框方法,完成如图所示功能

组合框三要素 属性 事件 方法 Style:用于确定组合框的类型和显示方式 Text Change Click 同列表框 Style=0

组合框、列表框举例 【例】引用列表框、组合框属性,完成如图所示对文本框字体做相应设置。

谢 谢!