高中学考选考VB常用算法
程序设计的常用算法 算法(Algorithm):计算机解题的基本思想方法和步骤。算法的描述:是对要解决一个问题或要完成一项任务所采取的方法和步骤的描述,包括需要什么数据(输入什么数据、输出什么结果)、采用什么结构、使用什么语句以及如何安排这些语句等。通常使用自然语言、结构化流程图、伪代码等来描述算法。 此类问题都要使用循环,要注意根据问题确定循环变量的初值、终值或结束条件,更要注意用来表示计数、和、阶乘的变量的初值。 例:用随机函数产生100个[0,99]范围内的随机整数,统计个位上的数字分别为1,2,3,4,5,6,7,8,9,0的数的个数并打印出来。 本题使用数组来处理,用数组a(1 to 100)存放产生的确100个随机整数,数组x(1 to 10)来存放个位上的数字分别为1,2,3,4,5,6,7,8,9,0的数的个数。即个位是1的个数存放在x(1)中,个位是2的个数存放在x(2)中,……个位是0的个数存放在x(10)。 将程序编写在一个GetTJput过程中,代码如下: Public Sub GetTJput() Dim a(1 To 100) As Integer Dim x(1 To 10) As Integer Dim i As Integer, p As Integer '产生100个[0,99]范围内的随机整数,每行10个打印出来 For i = 1 To 100 a(i) = Int(Rnd * 100) If a(i) < 10 Then Form1.Print Space(2); a(i); Else Form1.Print Space(1); a(i); End If If i Mod 10 = 0 Then Form1.Print Next i '统计个位上的数字分别为1,2,3,4,5,6,7,8,9,0的数的个数,并将统计结果保存在数组x(1),x(2),...,x(10)中,将统计结果打印出来 For i = 1 To 100 p = a(i) Mod 10 ' 求个位上的数字 If p = 0 Then p = 10 x(p) = x(p) + 1 Next i Form1.Print "统计结果" For i = 1 To 10 p = i If i = 10 Then p = 0 Form1.Print "个位数为" + Str(p) + "共" + Str(x(i)) + "个" Next i End Sub 分析:求最大公约数的算法思想:(最小公倍数=两个整数之积/最大公约数) (1) 对于已知两数m,n,使得m>n; (2) m除以n得余数r;
实验三、交换标志位法排序
实验名称:三、数据块排序实验日期:2010.5.29得分: 同组人:不填指导教师:马惠兰 一、实验目的 1.熟练掌握Keil uvision3单片机仿真软件的使用方法。 2.进一步熟悉单片机实验操作步骤。 3.掌握分别用双循环法、交换标志位法和求极值法实现数据块排序的编程方法和技巧。 4.掌握Keil uvision3软件内RAM单元数据查看和修改的命令和方法。 二、实验设备 PC机一台 三、实验内容 在起始地址为60H的内RAM数据存储区中,连续存放有10个无符号数,编程将其由大到小排序。 四、实验原理 本人采用交换标志位法实现上述实验内容。 用交换标志位法实现无符号数据块排序,需要设置一个交换标志位,实验中选择PSW的b5位——F0,F0=0表示数据比较大小时没有交换,F0=1表示数据比较大小时有交换。循环初始化置F0为0,第1次大循环数据块中的10数据两两比较9次,两个数据比较大小,若第一个数大于第二个数,则不变,若第一个数小于第二个数,则交换,并且置F0=1;这样比较到最后,最后一个单元中存放的应该是参加排序的数据块中最小的数据。然后判断F0的状态,若F0=0,则说明一次交换都没有,数据块已经排好序了;若F0=1,则说明至少有一次交换,数据块还没有排好序,需要继续进行排序操作。 第2次大循环时,F0又置初值0,但参加排序的数据只有9个(10个数据中的最小数已经排在了最后一个单元),循环次数变成了8次,循环结束后同样判断F0的状态,以判断数据块是否排好序,是否再进行排序操作。如此循环,直到某一次大循环结束后,判断发现F0为0时,则说明数据块排好序了。 用交换标志位法实现无符号数据块排序,必须注意一种情况,就是最后只剩下最上面的两个数据排序时,若比较后交换标志位F0=1,排序也结束,因为所有数据都排序好了。这种情况两个数据的比较次数等于用双循环法排序时两个数据的比较次数。 根据此实验原理编写的实验源程序清单见附页。 五、实验步骤 1.在F盘下为工程建立文件夹马惠兰3; 2.新建工程项目文件马惠兰 3.uv2,保存在文件夹马惠兰3中,并为工程选择目标器件为 SST89E554RC; 3.编辑源程序,建立源文件马惠兰3.ASM,保存在文件夹马惠兰3中; 4.将源文件马惠兰3.ASM添加到工程项目组中; 5.设置调试环境,选择调试模式为软件模拟; 6.加载程序,打开存储器窗口,在地址栏中输入:“D:60H”回车,修改内RAM60H单 元开始的10个单元数据,运行程序,根据预习设计的数据记录表格记录实验数据;7.修改源程序,将指令“JNC NEXT”改为“JC NEX T”,保存、汇编后重新加载运 行程序,记录实验数据; 8.实验数据经过实验指导教师检查正确后,实验结束。 实验数据记录见附页。 六、实验结果分析(自己写) 七、心得体会(自己写)
奇偶交换排序
数据结构上机实验报告题目:奇偶交换排序 学生姓名 学生学号 学院名称计算机学院 专业计算机科学与技术 时间 2015.01.13
目录 第一章需求分析 (1) 1.1 原题表述 (1) 1.2 问题解决方案 (1) 第二章概要设计 (2) 2.1 抽象数据类型 (2) 2.2 主要算法描述 (2) 2.3 主要算法分析 (3) 第三章详细设计 (4) 3.1 程序代码 (4) 第四章调试分析 (6) 4.1 出现的问题及解决方法 (6) 第五章测试分析 (7) 5.1 测试样例 (7)
第一章需求分析 1.1原题表述 奇偶交换排序是另一种交换排序。算法的基本思想如下:排序过程通过对文件x[i](l≤i≤n)的若干次扫描来完成,第奇数次扫描,对所有下标为奇数的记录x[i]与其后面的记录x[i+1](l≤i≤n–1)相比较,若x[i].KEY(记录x[i]的key值)>x[i+1].KEY,则交换x[i]和x[i+1]的内容; 第偶数次扫描,对所有下标为偶数的记录x[i]与其后面的记录x[i+1](2≤i≤n–1)相比较,若x[i].KEY>x[i+1].KEY,则交换x[i]和x[i+1]之内容。一趟奇数次扫描和一趟偶数次扫描被称为一趟奇偶扫描。重复上述过 程直到排序完成为止。 设计奇偶排序函数,对于任意输入元素,输出排序过程。 1.2 问题解决方案 题目需要建立建立一种新的排序方式,奇数趟对数组中的所有奇数项扫描,偶数趟对序列中的所有偶数项扫描。若A[i] > A[i+1],则交换它们。 如此反复,最后得出排好的序列为止,最后的终止条件是进行一趟排序对比时,不在出现A[i] > A[i+1]的情况
解题报告poj1674交换排序
Sorting by Swapping Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 5760 Accepted: 3033 Description Given a permutation of numbers from 1 to n, we can always get the sequence 1, 2, 3, ..., n by swapping pairs of numbers. For example, if the initial sequence is 2, 3, 5, 4, 1, we can sort them in the following way: 2 3 5 4 1 1 3 5 4 2 1 3 2 4 5 1 2 3 4 5 Here three swaps have been used. The problem is, given a specific permutation, how many swaps we needs to take at least. Input The first line contains a single integer t (1 <= t <= 20) that indicates the number of test cases. Then follow the t cases. Each case contains two lines. The first line contains the integer n (1 <= n <= 10000), and the second line gives the initial permutation. Output For each test case, the output will be only one integer, which is the least number of swaps needed to get the sequence 1, 2, 3, ..., n from the initial permutation. Sample Input 2 3 1 2 3 5 2 3 5 4 1 Sample Output
VB写的快速排序算法
VB写的快速排序算法 快速排序算法(递归算法) Public Sub QuickSort(ByRef aStrSort() As String, ByVal lngleft As Long, ByVal lngright As Long) Dim i As Long Dim j As Long Dim temp As String i = lngleft j = lngright temp = aStrSort(i) NextStep: Do Until i >= j While (aStrSort(j) > temp And j > i) j = j - 1 Wend If j > i Then aStrSort(i) = aStrSort(j) aStrSort(j) = temp i = i + 1 End If While (aStrSort(i) < temp And j > i) i = i + 1 Wend If j > i Then aStrSort(j) = aStrSort(i) aStrSort(i) = temp j = j - 1 End If Loop If lngleft < i - 1 Then QuickSort aStrSort, lngleft, i - 1 If lngright > i + 1 Then QuickSort aStrSort, i + 1, lngright End Sub '二分法查找算法(查找失败返回-1,数组下标从0开始)
Public Function BinSearch(ByRef strElement() As String, ByVal strKey As String) As Long Dim lngLow As Long Dim lngHigh As Long Dim lngMiddle As Long lngLow = 0 lngHigh = UBound(strElement) While (lngLow <= lngHigh) lngMiddle = (lngLow + lngHigh) / 2 If strElement(lngMiddle) = strKey Then BinSearch = lngMiddle Exit Function Else If strElement(lngMiddle) > strKey Then lngHigh = lngMiddle - 1 Else lngLow = lngMiddle + 1 End If End If Wend BinSearch = -1 '查找失败 End Function
(完整版)VB常用算法——排序
VB 常考算法(八)排序: 1、算法 1)选择法排序 算法说明:根据上例中求最小值的思路, 一轮,以第一个元素逐个跟后面的所有元素比较, 轮比 较,第一个元素被确定为最小;同样的方法,下一轮以第二个元素跟剩下的所有元素进 行比较确定下次小的元素;以此类推… 下面我们以图形的形 式体现对 第一轮: 第二轮: 素参与跟2号元素的比较,共 3次,以次类推,比较次数逐步减少。经过四轮的比较,利用 逐步求最小值的方法将 5个数从小到大排好序。 对于这样一个排序的过程, 我们可以使用两 个循环分别控制比较的轮数和每一轮的次数。 程序代码: Private Sub Comma nd1_Click() Dim n As In teger n = In putBox(" 请输入数组元素的个数: ") Dim a() As In teger, i As In teger, j As In teger Print " 排序前:” 我们可以使用如下方法进行从小到大排序: 第 如果比后面的元素大就进行交换, 经过一 1 6 4 2 5 最小值 次小值 5个数进行选择排序的过程: 第三轮:
ReDim a(n) For i = 1 To n a(i) = In t(R nd * (99 -10 + 1) + 10) Print a(i);
Next i For i = 1 To n - 1 For j = i To n If a(i) > a(j) Then temp = a(i)' a(i) = a(j) a(j) = temp End If Next j Next i Print Print " 排序后:" For i = 1 To n Print a(i); Next i End Sub 2)冒泡法排序 算法说明:相邻的元素进行比较,如果前面的元素比后面的元素大, 则将它们进行交换, 具体思路:设在数组 a 中存放n 个元素,第一轮,将 a(1)和a(2)进行比较,若a(1)>a(2), 则交换这两个元素的值,然后继续用 a(2)和a(3)比较,若a(1)>a(2),则交换这两个元素 的值,以此类推,直到a(n-1)和a(n)进行比较处理后,a(n)中就存放了 n 个数中最大的值; 第二轮,用 a(1)与a(2),a(2) 与a(3),…,a(n-2)与a(n-1)进行比较,处理方法相同,这一 轮下来,a(n-1)中存放n 个数 中第二大的值;…;第 n-1轮,a(1)与a(2)进行比较处理, 确保最小值在a(1)中。经过n-1轮比较处理,n 个数已经按从小到大的顺序排列好。 2 1 p j 1 1 1 1 2 2 2 2 4 4 4 4 4 5 5 5 5 5 6 6 6 6 6 程序代码: Private Sub Comma nd1_Click() Dim n As In teger n = In putBox(" 请输入数组元素的个数: ") 交换元素 F 面我们以图形的形式体现对 5个数进行冒泡排序的过程: 第一轮: 最大值
vb常用排序法
冒泡法: (1) 从第一个元素开始,将相邻的数比较,若为逆序,就交换,比较完一轮,最大的数已沉底,成为数组中的最后一个元素a(n) (2) 对a(1)和a(n-1)的n-1个数进行同(1)的操作,次大的数放入a(n-1)中,完成第二轮排序。 (3) 进行n-1轮排序,所有的数排序完毕。 Dim a%(), i%, j%, n% For i = 1 To n - 1 For j = 1 To n - 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 Print For i = 1 To n Print a(i); Next i 顺序交换法: (1) 从第一个元素开始,将它和其后的每个元素进行比较,若为逆序,就交换,比较完一轮,a(1)成为数组中的最小的元素。 (2) 对a(2)和a(n)的n-1个数进行同(1)的操作,次小的数放入a(2)中,完成第二轮排序。 (3) 进行n-1轮排序,所有的数排序完毕。 Dim a%(), i%, j%, n% For i = 1 To n - 1 For j = i + 1 To n If a(i) > a(j) Then t = a(i): a(i) = a(j): a(j) = t End If Next j Next i
选择法 (1) 从n个数的序列中选出最小的数,与第1个数交换位置; (2) 除第1个数外,其余n-1个数再按(1)的方法选出次小的数,与第2个数交换位置; (3) 重复(1)n-1遍,最后构成递增序列。 Dim a%(), i%, j%, n% For i = 1 To n – 1 k=i For j = i + 1 To n If a(j) < a(k) Then k=j Next j if k<>i then t=a(i): a(i)=a(k): a(k)=t Next i 插入法: 1. 找到插入数在数组中的位置i 2. 将从n到i的每个元素向后移动一个位置 3. 插入数 插入法1:将一个数插入到有序数列,使插入后数列仍然有序Dim a(1 To 10) As Integer Key = Val(InputBox("输入一个数")) For i=1 to 9 If a(i)>Key Then Exit For next i For k = 9 To i Step -1 a(k + 1) = a(k) Next k a(i) = Key 插入法2:用上面的插入方法将一批数排序(从小到大),设数列中开始只有一个元素。 Dim x(1 To 10) As Integer For i = 1 To 9 Key = x(i + 1) j = 1 Do While (Key >= x(j) And j <= i) j = j + 1 Loop For k = i To j Step -1 x(k + 1) = x(k) Next k x(j) = Key Next i
vb常用控件习题(含答案)
1.下列控件中没有Caption属性的是 ________。 A)框架 B)列表框 C)复选框 D)单选按钮 2.复选框的Value 属性为 1 时,表示 ________。 A)复选框未被选中 B)复选框被选中 C)复选框内有灰色的勾 D)复选框操作有误 3.用来设置斜体字的属性是 ________。 A)FontItalic B)FontBold C)FontName D)FontSize 4.将数据项“China”添加到列表框List1中成为第二项应使用 ________语句。 A)“China”,1 B)“ China ”, 2 C) 1,“China” D) 2,“ China ” 5.引用列表框List1最后一个数据项,应使用 ________语句。 A)) B)(ListCount) C)) D)(ListCount-1) 6.假如列表框List1有四个数据项,那么把数据项“China”添加到列表框的最后,应使用 ________语句。 A) 3,“ China ” B)“ China ”, C)“ China ”, 3 D)“China”, 7.执行了下面的程序后,列表框中的数据项有________。 Private Sub Form_Click() For i = 1 to 6 i Next i For i = 1 to 3 i Next i End Sub A)1,5,6 B)2,4, 6 C )4,5,6 D)1,3,5 8.如果列表框List1中没有选定的项目,则执行 语句的结果是 ________。 A)移去第一项 B)移去最后一项 C)移去最后加入列表中的一项 D)以上都不对 9.如果列表框List1中只有一个项目被用户选定,则执行 )语句的结果是________。 A)在Debug窗口输出被选定的项目的索引值 B)在Debug窗口输出True C)在窗体上输出被选定的项目的索引值 D)在窗体上输出True 10.在窗体上画一个名称为List1的列表框,一个名称为Label1的标签,列表框中显示若干城市的名称。但单击列表框中的某个城市名时,该城市名从列表框中消失,并在标签中显示出来。下列能正确实现上述操作的程序是______。 A)Private Sub List1_Click()
VB几种排序算法的比较设计报告
几种排序算法的比较设计报告学院班级学号姓名成绩 一、设计思路 1.要达到的目的 ①启动时可以对初始的几个数值进行排序 ②随机生成比较多的整数。要求数值在一个整数的所有范围内生成 ③对于基本要求的排序方法可实现生序,冒泡排序。 ④可以计算排序的初始时间和结束时间以及排序所用时间 ⑤实现使用选择排序,冒泡排序 ⑥可以比较几种排序算法的循环次数 ⑦支持的背景设置,可以设置成任意色彩 ⑧增加插入排序,快速排序 ⑨增加希而排序,桶排序 ⑩增加堆排序 2.关键问题的解决 ①随机生成多个整数,并放入数组中 ②排序时间的计算 ③循环次数的计算 ④几种排序算法的基本思想 二、模块之间的调用关系,或程序流程图 三、部分程序关键源代码及注释 Select Case Combo2.ListIndex Case 0 For i = 1 To n
For j = 1 To n - 1 If m(j) > m(j + 1) Then B = m(j): m(j) = m(j + 1): m(j + 1) = B End If a = a + 1 Next j,i Case 1 For i = 1 To n - 1 imin = i For j = i + 1 To n If m(imin) > m(j) Then imin = j a = a + 1 Next j B = m(i): m(i) = m(imin): m(imin) = B Next i End Select 四、设计方案的完善及目前存在的问题 1.设计方案要完善的地方 ①增加捅排序 ②增加堆排序 2. 目前存在的问题 ①无捅排序 ②无堆排序 ③耗时有时不准 五、本次设计的收获及心得体会 本次设计我收获很多,学到了很多以前没有学到过的有关VB的知识。并把所学知识用到了实践上了。对VB的基本控件和算法有了更深一步的了解。 六、对该题目和VB设计的意见和建议 1. 对该题目的意见和建议 排序算法太多了,有点乱,有好多方法还没有真正掌握。总的来说题目设计的很好。 2.对本次设计的意见和建议 没有告诉学生捅排序和排序的基本思路。