VB江苏辅导第五次函数与过程.ppt_第1页
VB江苏辅导第五次函数与过程.ppt_第2页
VB江苏辅导第五次函数与过程.ppt_第3页
VB江苏辅导第五次函数与过程.ppt_第4页
VB江苏辅导第五次函数与过程.ppt_第5页
已阅读5页,还剩44页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

编程:过程与函数程序结构,第五次VB辅导 For 江苏二级,本次期末考试一概没有透露范围,但肯定难度小于等级考试; 二级VB考试复习,要求暑假中根据江苏二级VB考点与题解给的全部考点进行,包括计算机基础知识。,编程须知,学习相关语句的语法时,必须掌握可以实现的算法; 编程解题步骤: 理解题目要求; 分析题目,思考解题要分哪几步(每一步是有VB算法的); 为主要步骤具体编写程序; 编写其它步骤的程序,如初始化(变量赋初值)、定义变量 到现在阶段,同学们应该已经掌握大部分语法知识,而老师将主要分析题目与算法,由同学自己根据语法来编程实现算法。(有问题当然可提!),基本算法(直接用相关语句就可实现)(1),变量应用 作为计数器(不断加1) 用于DoLoop循环代替ForNext循环; 计数动态数组元素个数,同时又是末个元素的指针; 作为字符串中字符位置的计数指针; 作为指针(给定一个数) 各种插入点的指针 各种区间端点的指针 作为状态标志 两种状态标志Flag采用布尔型 多种状态标志Switch常采用数值型、字符型,基本算法(直接用相关语句就可实现)(2),循环变量变大,获得随之变小的数 用两重循环分别对矩阵副对角线/主对角线平行的每条线上各元素求累加(实例:N阶矩阵,写累加表达式中数组元素的两个下标表达式) 副对角线元素:a(元素行号,N+1-元素行号) 副对角线上三角平行线:a(i+1-j,j),i为平行线左端元素行号,j为元素列号 副对角线下三角平行线:a(i+1-j,j),i为平行线左端元素行号,j为元素列号 判断下标是否属于矩阵副对角线/主对角线上/下三角元素 数字与字母比大小(按照其ASCII编码) 区别一个字符是数字或是字母,分/不分大小写(判断是字母部分大小写) 字符加密,换成ASC编码加/减某值的字符() 为什么:102为True,而”10”2”为False,基本算法(直接用相关语句就可实现)(3),文字与数字互换 123换成壹贰叁、壹佰贰拾叁,或反过来换() 字符串操作 主串中从指定位置插入子串:Left(主,J)+插入串+Right(主,J+1) 将原串中字符逆序存入变量: 左边取出左边存入: 取:For i=1 To Len(原串),Mid(原串,I,1), 存:变量=字符 & 变量 右边取出右边存入: 取:For i=Len(原串) To 1 Step -1,Mid(原串,I,1), 存:变量=变量 & 字符 取字符串中非空格字符(遇空格则放弃,继续取下一个字符) CH=Mid(Text1, I, 1) i可以是循环变量 Do While ch=“ “ i=i+1 ch=Mid(Text1,I,1) Loop,基本算法(直接用相关语句就可实现)(4),If语句应用 有条件地执行一段程序处理(或屏蔽一段程序处理) 根据不同条件执行不同程序处理 DoLoop循环 根据条件反复执行一段程序(求级数) 类似单分支If语句功能,有条件地执行一段程序处理(或屏蔽一段程序处理) 借助于计数变量,完成For循环同样功能 For循环应用 重复执行一段程序若干次 用循环变量作为数组或字符串指针,逐个对数组元素或字符进行相同处理 用循环变量按规律变化的数进行运算 循环变量用作运算量,进行累加、累乘; 循环变量在某区间内变化,产生不同x坐标值,计算产生各y值;,需要掌握的常用解题算法(非基本的),请见江苏考点与题解第13章“上机考试辅导”中考点1考点16; 要求大家把这些算法的例子程序记录积累,并熟练掌握!,今天重点关注 整个程序完成的总任务怎么划分成一个个小的任务? 小的任务功能用什么程序形式实现为好?大程序中的一块、过程、函数? 过程、函数与主程序之间如何连接?调用形式 过程、函数怎么从主程序得到数据参数 过程、函数运算得到的数据怎么回送给主程序传址参数、函数值,过程 参数:传入数据(传值或传址)、传出数据(传址) 过程中数据的传出还可以以直接输出形式 调用方式2种 函数 参数:只能传入,函数一般不用参数传出数据; 传出数据:用函数值形式; 调用方式3种,包含过程的2种(一般不用),普通函数调用形式1种(主要方式),字符串问题之三类例题,9下面程序的【功能】是,1.从C盘根目录下的data.txt文件中读取一组从小到大已排序的英文词汇,2.并显示到列表框List1中;3.再把文本框Text1中输入的英文词汇按序插入到已排序的英文词汇组的适当位置,4.并显示到列表框List2中。【要求】利用二分法确定待插入的英文词汇的插入位置。Data.txt的内容如下图所示,程序界面图参见下面。,字符串问题之三类例题,Option Explicit Private Sub Command1_Click( ) Dim s( ) As String, k As Integer Dim temp As String, i As Integer Open “c:data.txt” For Input As #11 Do (26) k=k+1 ReDim Preserve s(k) (27) List1.AddItem s(k) Loop Close #11 temp=Text1 Text1中为待插入数组的英文词汇 Call sort(temp, s) 将temp中字符串插入s数组 For i=1 to UBound (s) 在List2中显示出来 List2.AddItem s(i) Next i End Sub,字符串问题之三类例题,Private Sub sort(temp As String, st( ) As String) Dim low As Integer, high As Integer, mid As Integer Dim i As Integer low=1: high=UBound(st) ReDim Preserve st(UBound(st)+1) If temp st (high) Then 大端 st(UBound(st)=temp Exit Sub End If,Do While low st( mid ) And temp st( mid+1 ) Then For i=UBound(st)-1 to mid+1 Step -1 st(i+1)=st(i) Next i (29) Exit Do ElseIf temp st(mid) Then (30) Else Low=mid+1 End If Loop End Sub,掌握算法,掌握算法,掌握算法,关于二分法查找与插入,二分法查找 Low Mid High 两个区间一个点:x =Mid,x Mid,x =Mid And x Mid+1,找出既是素数又是回文数的三位数,编写程序,找出所有既是素数又是回文数的三位数。所谓回文数是指正序与逆序相同的数,如121,12321均为回文数。,老师分析,同学做并上机,后老师讲解。 编程要求: 1、程序参考界面如下图所示,编程时不得增加或减少界面对象或改变对象的种类,窗体及界面元素大小适中,且均可见。,2、按“查找”按钮,则开始查找并在列表框中显示结果;按“清除”按钮,则将列表框清空。 3、程序中应定义一个名为fw的函数过程,用于判断一个正整数是否为素数;定义一个名为hw的过程,用于判断一个正整数是否为回文数。 4、窗体文件和工程文件分别命名为F2和P2。,主程序事件过程,Private Sub Command1_Click() Dim I As Integer For i=100 To 999 If fw(i) Then Call hw(i) End If Next I End Sub,分析:本题中是否需要数组存放数据? 1.三位数可以直接由循环产生,不用数组; 2.每一个数值只要当时判断是否素数和回文数,添加到列表框中就完事了,不要数组; 3。判断素数和回文数的算法都不需要数组。,判断是否素数的函数,Private Function fw(n As Integer) As Boolean Dim I As Integer Fw=True For i=1 To Int(Sqr(n) If n Mod i=0 Then fw=False Exit Function End If Next i End Function,什么样的程序适合编写成函数: 根据若干个参数,得到一个结果值,判断是否回文、是则插入List1的过程,Private Sub hw(I As Integer) If i 100 = I Mod 10 Then List1.AddItem i End If End Sub,什么样的程序适合编写成过程: 根据若干个参数,得到一个或多个结果值,可以输入或输出信息与事件过程同样。,控件是模块级的数据,因此在模块任何位置,都可以使用控件。,例题分析1试卷三编程,编写一个数据转换程序,将一组大小差异很大的数据变换为0,1区间的数值。设样本数据的最大值为maxa,最小值为mina,将第k个样本值Vk 变换为Vk的变换公式为,2、按“生成样本数据”按钮,1.利用InputBox函数输入需要生成的数据个数n(缺省值设为10),2.再生成n个1999之间的随机整数,并在文本框中显示;按“数据变换”按钮,进行数据变换,将变换结果显示到列表框;按“清除”按钮,将文本框及列表框清空。分析算法:写到黑板,取数、变换、显示。 3、程序中应定义一个名为maxmin的通用过程,用于求样本数据的最大值与最小值。分析算法:写到黑板,函数合适吗?,输入一个数。什么是缺省值?,分析,生成样本数据事件过程 数据变换事件过程,Private Sub Command1_Click() Dim n As Integer,I As Integer N=Val(Input(“样本数据个数是:”) For i=1 To n Text1=Text1 & Int(Rnd*999)+1 & “ “ Next I End Sub,Private Sub Command2_Click() Dim maxa As Integer,mina As Integer maxmin n,maxa,mina For i=1 To n Step 4 ch=Mid(Text1,I,3) List1.AddItem ch & “-” & 公式 Next i End Sub,-1不算数据,例题分析2_试卷四填空9,C盘根目录下的数据文件data.txt中有两组数据,第一组数据未排序,并以-1表示该组数据结束;第二组数据按从小到大顺序排列。下面程序的功能是,单击“读入数据”按钮,将文件中的两组数据,分别读入到A、B数组中,单击“插入排序”按钮,则把A数组的元素按其大小依次插入到B数组的适当位置,使得B数组中元素仍为从小到大排列。完善程序,实现以上功能。,黑板上分析: 总体步骤(每一步是VB有算法的,有时有多种算法),Dim a() as integer, b() as integer Private sub command1_click() Dim I as integer,j as integer,n as integer, s as string Do _ (26) _ input #11,n if n=-1 then exit do I=I+1 Redim preserve a(i) A(i)=n S=s & str(a(i) Loop Text1=s,S=” _(27)_ j=j+1 Redim preserve b(j) input #11,b(j) s=s & str(b(j) Loop text2=s close 11 end sub,读文件-文本框1,“读入数据”按钮单击事件,读文件-文本框2,“插入排序”按钮,Private Sub Command2_Click() Dim I As Integer, j As Integer, s As String For I=1 To UBound(a) If a(i)b(UBound(b) Then _ (28) _ b(UBound(b)=a(i) Else For j=2 to UBound(b) If (a(i)b(j-1) And a(i)=b(j) Then Call change(a(i),j) Next j End If Next I For I=1 to UBound(b) s=s & Str(b(i) Next I text3=s End Sub,分析程序主要应从程序完成的逻辑功能上着手,就容易理解程序语句的作用。记录! 错误方法是只看语句本身,结果始终看不懂。,Private Sub change( n As Integer,k As Integer) Dim I As Integer Redim Preserve b(UBound(b)+1) For I=UBound(b) To k+1 Step 1 _(29)_ Next I _ (30) _ End Sub,例题分析3_试卷四改错,本程序是生成个位数分别是0、1、2、3、9的10个三位随机整数,再按插入排序方法由大到小排序,并输出到列表框中。本题程序界面如下图所示。,Option Explicit Private Sub Command1_Click() Dim a(9) As Integer, x As Integer, k As Integer, i As Integer Do While i = 9 x = Int(Rnd * 900 + 100) k = x Mod 10 If a(k) = 0 Then a(k) = 0 意味着什么? a(k) = x i = i + 1 Text1 = Text1 & Str(a(k) End If Loop sort (a) For i = 0 To 9 List1.AddItem a(i) Next i End Sub,Private Sub sort( a() As Integer ) Dim x As Integer, i As Integer, j As Integer For i = 1 To UBound(a) x = a(i) j = i - 1 Do While j = 0 And x a(j) a(j) = a(j + 1) j = j - 1 If j j + 1 Then a(j + 1) = x End If Next i End Sub,试卷四-编程题(26分),编写程序,求出所有无重复数的三个整数组合,使它们的最小公倍数等于指定数据N。(设N取值范围为100,150,三个整数的范围为3,40。) 编程要求: 1.参考界面如下图所示,编程时不得增加或减少界面对象或改变对象的种类,窗体及界面元素大小适中,且均可见。,编程题每题26分,一定要拿到!,2、在文本框1中输入N值,按“计算”按钮,则开始求解并在列表框中显示结果;按“清除”按钮,将文本框及列表框清空,焦点置于文本框;按“结束”按钮,结束程序运行。 3、程序中应定义一个名为LCM的函数过程,用于求三个整数的最小公倍数。(算法提示:求三个整数的最小公倍数,可先求出其中两个整数的最小公倍数,再求出该数与第三个数的最小公倍数即可。),_下面程序的功能是找出由两个不同的数字组成的回文平方数。程序界面参见图 2 。 Option Explicit Private Sub Command1_Click() Dim a(0 To 9) As Integer, i As Long, flg As Boolean Dim l As Long, j As Integer, sum As Integer For i = 10 To 1000 L = i * I . Call . If flg Then For j = 0 To 9 sum = sum + a(j) Next j If sum = 2 Then List1.AddItem CStr(i) & “2=“ & Str(l) End If End If sum = 0 Next i End Sub,试卷五填空8,Private Sub sub1(x As Long, a() As Integer, bl As Boolean) Dim n As Integer, idx As Integer, i As Integer bl = False n = Len(CStr(x) For i = 1 To n / 2 If Then Exit Sub End If Next i bl = True For i = 1 To n idx = x Mod 10 . x = (x 10) Next i End Sub,例题分析6_试卷五填空9,下面程序的功能是随机生成 10 个不同的两位数,从中找出所有互质数对。若两个数除了 1 以外没有其他公约数,这两个数就是互质数。其中函数 Rec 是一个递归函数。程序界面参见图 3 。,Private Sub Command1_Click() Dim a(10) As Integer, i As Integer, j As Integer Dim n As Integer, k As Integer Randomize a(1) = Int(90 * Rnd) + 10 : Text1 = a(1) . Do . n = Int(90 * Rnd) + 10 If (Text1, CStr(n) = 0 Then Text1 = Text1 & Str(n) k = k + 1 a(k) = n End If Loop For i = 1 To 9 For j = i + 1 To 10 If Not rec(a(i), a(j), 2) Then List1.AddItem Str(a(i) & Str(a(j) End If Next j Next I End Sub,Private Function rec(n As Integer, m As Integer, k As Integer) As Boolean If k n Then . Else If n Mod k = 0 And m Mod k = 0 Then rec = True . Else . End If End If End Function,例题分析6-改错题(14分),本程序的功能是找出这样的四位数:1、该数各位上的数字不重复,且不为0;2、相邻两个数字之和为素数;3、首尾两个数字之和也为素数。(算法提示:从可能符合条件的四位数中,首先判断其是否含有重复的数码和0,若无则调用函数Prime,判断这个四位数的相邻两个数字和首尾两个数字之和是否都是素数。)本题程序界面如下图所示。,Private Sub Command1_Click() Dim a(9) As Integer, i As Integer, k As Integer, s As Integer, j As Integer For i = 1234 To 9876 Erase a s = CStr(i) For j = 1 To Len(s) k = Val(Mid(s, j, 1) If k = 0 Then Exit Sub If a(k) = 0 Then a(k) = 1 Else Exit For End If Next j If j = Len(s) And Prime(i) Then List1.AddItem i End If Next i End Sub,Private Function Prime(n As Integer) As Boolean Dim s As String, l As Integer, k As Integer, tem As Long, i As Integer s = CStr(n) l = Len(n) For i = 1 To l If i l Then tem = Val(Mid(s, i, 1) + Mid(s, i + 1, 1) Else tem = Val(Mid(s, 1, 1) + Mid(s, l, 1) End If For k = 2 To Sqr(tem) If tem Mod k = 0 Then Exit Function Next k Next i Prime = True End Function,例题分析7、编程题(26分),编写程序,求乘积在给定区间内的互为反序的两个自然数。所谓互为反序的自然数是指如102和201,35和53,11和11这样的数。而120和21则不是。,编程要求: 1、程序参考界面如下图所示,编程时不得增加或减少界面对象或改变对象的种类,窗体及界面元素大小适中,且均可见。,2、在文本框架中输入A值,在文本框2中输入B值,再按“运行”按钮,则在11-2000的范围内查找乘为AB区间的反序数对,并在列表框中显示结果;按“清理”按钮,则将两个文本框及列表框清空,焦点置于文本框1;按“结束”按钮,结束程序运行。 3、程序中应定义一个名为的函数过程,用于求一个整数的反程序。(算法提示:如果一个整数末位数为0,则不需要求反序数。),Private Function Vilidata(Fz As Interger,Fm As Interger) As Boolean Dim N As Interger,I As Interger,S As String For N =2 To Fz If Fz Mod N=0 And Fm Mod N=0 Then (23) End If Next N S= (24) For I=1 To Len(s)-1 For N=I+1 To Len(s) If (25) Then Exit Function End If Next 1 Vilidata=True End Function,例题分析9,9、本程序可快速排序。排序算法是以数组中间位置的一个数为基准,将数组中所有小于它的数移动到它的左边,大于它的数移动到它的右边,然后再对它的左右两边的数据分别按此办法进行处理,依次类推,直到每一边中剩下一个数据为止,本方法是递归算法。程序界面如下图。,Option Explicit Private Sub Command1_Click() Dim a(10) as Integer , s as string , i as Integer Randomize For i=1 to 10 a(i)=int(90*rnd)+10 s=s & str(a(i) next i text1=s call rs(a,1,10) 26 for i=1 to 10 s= s & str(a(i) next i text2=s end sub,Private Sub rs(a() as Integer , left as Integer, right as Integer) Dim i as Integer , j as Integer , x as Integer , y as Integer , mid as Integer i=left:j=right mid=(left+right)/2 x= 27 do if a(i)x then i=i+1 elseif xa(j) then 28 elseif ij then y=a(i) a(i)=a(j) a(j)=y i=i+1 j=j-1 endif loop while 29 if left j then call rs(a,left,j) if iright then 30 End Sub,例题分析10、编程题(26分),数组中10个元素的值各不相同,以数组第一个元素作为基准数,将小于基准数的元素向低下标端移,将大于基准数的元素向高下标端移。划分结束,基准数定位于第1个元素。并且下标小于1的元素的值均小于基准数,下标大于1的元素的值均大于基准数。,编程要求: 1、程序参考界面如下图所示,编程时不得增加或减少界面对象的种类,窗体及界面元素大小适中,且均可见。,2、按“运行”按钮,生成10个范围在1-20之间的各

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论