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 a(3,2) As Integer 总 结
西南石油大学计算机科学学院 西南石油大学运动会开幕式比赛, 各学院得分 10 个评委打分(去掉一个最高分,去掉一个最低分,求平均分) Dim a(1 to 10) as integer Max=a(1) For i = 2 to 10 If a(i)>max then Max=a(i) Endif Next I
西南石油大学计算机科学学院 思考 西南石油大学运动会开幕式比赛, 各学院排名 选择法比较法冒泡法
西南石油大学计算机科学学院 选择法 iMax= i for j= i+1 to 4 if S(j) >S(iMax) then iMax=j next j t=S(i) S(i)=S(iMax) S(iMax)=t For i = 1 to 3 Next i
西南石油大学计算机科学学院 选择法 相邻两个元素进行比较,记下较大元素的下标 当前元素与上次比较后的最大元素进行比较 确定完毕的元素的互换是在每一轮完成后进行 特点
西南石油大学计算机科学学院 比较交换法 (以降序为例):将第一个元素顺序与其后面的 元素比较,比第一个大则进行交换,第一轮完毕 后,最大的元素被挪到了第一个位置,第二轮从 第二个元素开始重复上面的过程,结束后得到第 二个最大的元素,如此下去经过 N-1 轮的比较, 可将 N 个数排好。
第 一 轮 比 较 :第 一 轮 比 较 : 第一轮结束,找到最大值 5
第 二 轮 比 较 :第 二 轮 比 较 : 第二轮结束,找到第二最大值 4
for i=1 to N-1 Next i for (j=i+1 to N) < if ( S(j) < S(i) ) then t=S(i):S(i)=S(j):S(j)=t End if Next j
西南石油大学计算机科学学院 冒泡法 将相邻两个数比较,把 小数对调到前边,如此进行一轮后,就会 把最大的数互换到最后,再进行一次,则 会把第二大数排在倒数第二的位置上,进 行N-1次后,整个数列即可排好。 (以升序为例):将相邻两个数比较,把 小数对调到前边,如此进行一轮后,就会 把最大的数互换到最后,再进行一次,则 会把第二大数排在倒数第二的位置上,进 行N-1次后,整个数列即可排好。
原始数据 第一轮排序
西南石油大学计算机科学学院 For i = 1 To n - 1 Next i For j = n To i+1 step -1 If a(j) < a(j - 1) Then t = a(j) a(j) = a(j - 1) a(j - 1) = t End If Next j
西南石油大学计算机科学学院 人数不定情况下,如何排序? Dim a( ) as integer n=val(inputbox(“ 请输入项数 ”)) Redim a(1 to n) as integer For i = 1 to n a(i) = val(inputbox(“ 输入成绩 ”)) Next I For i = 1 to n-1 Next i For j = n to i+1 If a(j)>a(j-1) then t=a(j) a(j)=a(j-1) a(j-1)=t End if Next j For i = 1 to n print a(i); Next i
西南石油大学计算机科学学院 思考 西南石油大学运动会开幕式比赛, 查询各个学院得分。 For i=1 to 9 If a(i)=m then exit for Next i If i>9 then print “ 数组中没有 ” Else print a(i) Endif 如果要查询 65 ,需要查询几次? 此问题是否有更高效的方法? 如果要查询 65 ,需要查询几次? 此问题是否有更高效的方法?
西南石油大学计算机科学学院 数组算法 最值排序查找
西南石油大学计算机科学学院 作 业 西南石油大学有 15 个院系进行合唱比赛,总共邀请 了 13 名评委打分。打分规章是去掉一个最高分,去 掉一个最低分,剩下求平均分,要求: 13 个评委打分使用文本框控件数组,其余界面自 行设计 根据评委打分计算出每个学院的最后成绩并将名次 和成绩输出在窗体上 输入任意一个学院的名字查询其得分
西南石油大学计算机科学学院 思 考 如果每个院系信息还包括学院编号、指导教 师、歌曲名称信息。查询时候要求输入学院 编号则输出该院系所有信息,应该怎么办?
西南石油大学计算机科学学院 输入 5 个学生的学号、姓名和 3 门课的成绩,计算 每个学生的总分和平均分,在窗体上显示学生的 总分和平均分。 引例 学号姓名 成绩 1 成绩 2 成绩 3 总分平均分 001Li Liu Qiu Xie Mao
西南石油大学计算机科学学院 自定义数据类型 学号姓名 成绩 1 成绩 2 成绩 3 总分平均分 001Li Type student no As String * 3 name As String * 8 mark(1 to 3) As integer total as integer aver As Integer End Type Dim a As Student a.aver88 a.total264 a.mark(3)87 a.mark(2)88 a.mark(1)89 a.name"Li" a.no001 Type 自定义类型名 元素名 1[( 下标 )] As 类型名 … [ 元素名 2[( 下标 )] As 类型名 ] End Type
西南石油大学计算机科学学院 Type 自定义类型名 元素名 1[( 下标 )] As 类型名 … [ 元素名 2[( 下标 )] As 类型名 ] End Type 自定义数据类型定义位置 1 、标准模块中定义,默认为 Public 2 、窗体层定义,需要加上 Private
西南石油大学计算机科学学院 Type student no As String * 3 name As String * 8 mark(1 to 3) As integer aver As Integer End Type Dim a(1 To 5) As Student a(1).aver88 a(1).total264 a(1).mark(3)87 a(1).mark(2)88 a(1).mark(1)89 a(1).name"Li" a(1).no001 For i=1 to 5 a(i).no=Inputbox(“ 姓名 ”) a(i).name=inputbox(“ 姓名 ”) a(i).mark(1)=inputbox(“ 成绩 1”) a(i).mark(2)=inputbox(“ 成绩 2”) a(i).mark(3)=inpuxbox(“ 成绩 3”) a(i).aver= (a(i).mark(1)+ a(i).mark(2)+ a(i).mark(3))/3 Next i
西南石油大学计算机科学学院 思考题 使用自定义类型数组,输入 5 个学生的学号、姓名 和 4 门课的成绩,计算每个学生的总分和平均分。 并按平均成绩从高到低输出每个学生的学号、姓 名、每门课的成绩,总分和平均分。