VB程序设计的常用算法教案(共3篇)
VB程序设计的常用算法教案 篇1
VB常用算法总结
一、变量值的交换
算法思想:若交换两个变量的值,必须引入第三个新的变量进行传递。以下代码是错误的:
X=12 :Y=34 :X=Y :Y=X 正确的代码是:
X=12 :Y=23 :T=X :X=Y :Y=T
二、判断一个数是否能被另一个数整除
算法思想:可以用整除的定义(余数为0)或X除以Y等于X整除Y等表达式进行判断。条件表达式可以为:X mod Y=0
或
X\ Y=X/Y
或
Int(X/Y)=X/Y 如果以上条件表达式为True,则表示X能被Y整除。
三、累加、阶乘、计数和求平均值
算法思想:使用循环语句,并用一个变量存放累加的中间及最终结果。注: 累加求和时变量初值为0,计算阶乘时变量初值为1。
统计计个数(计数)时可用一个变量作为统计个数的累加变量,每次加1即可。求平均值算法思想是先求和,再除以个数。条件求和(或计数):在循环语句中加入If-End If判断语句。
例题:计算1到10之间所有整数的累加和以及10!。n=10 sum=0
‘累加求和时,变量的初值一定为0 prod=1
‘累乘(连乘)时,变量的初值一定为1 For i=1 To n
sum=sum+i
prod=prod*i Next i Print sum,prod
例题:统计0—100之间能被3整除的数的个数、累加和及其平均值。
s=0
n=0
For i=0 To 100
If i mod 3 =0 Then
s=s+i
n=n+1
End If
Next i
Print n,s,s/n
四、随机数的产生 [a,b]之间的随机整数 Int((b-a+1)*rnd)+a(a,b)随机数(b-a)*rnd +a
五、求若干个数中最大值或最小值
六、常用字符处理函数
Mid函数:从字符串指定位置取指定个字符,格式为Mid(字符,p,n),从第p个字符开始,向后截取n个字符(若n省略则取到最后)。
Left和Right函数:从字符串左边或右边取指定个字符,格式为 Left(字符,n)和Right(字符,n)。Len函数:测试字符串长度。
UCase和LCase函数:UCase将小写字母转换为大写字母;LCase将大写字母转换为小写字母。
Instr([首字符位置 , ] 字符串1, 字符串2 [ , n]):在字符串1中查找字符串2,如果找到,返回字符串2的第一个字符在字符串1中出现的位置。首字符位置是可选的,如果不指定,从字符串起始位置开始查找;如果指明,从指定的位置开始查找。
Asc函数:返回字符串中第一个字符的ASCII码。Chr函数:将一个数值转换为其所对应的字符。
字符的比较规则是按ASCII码顺序比较,规则为 空格<”A”~”Z”<”a”~”z” 小写字母的ASCII比大写字母的ASCII小32。
例题:
1.将所有文本转换为大写(小写)字母
可以直接使用UCase(LCase)函数转换。例如: Text2.Text=UCase(Text1.Text)2.对某个字符串的所有字符逐一处理
算法思想:如果对某个字符串的所有字符逐一处理,即从字符串的第1个字符开始到最后一个字母,每次处理1个字符。可以使用For循环实现。通用代码为:
For i=1 To Len(s)
s1=Mid(s,i,1)……
Next i 3.字符转换
算法思想:通过字符的ASCII码进行处理(使用Asc函数),然后再使用Chr函数将ASCII转换成字符。例题:将文本框Text1中字符按如下规律转换a-b、b-c……z-a,并显示在文本框Text2中。
s = Text1.Text n = Len(s)For i = 1 To n
s1 = Mid(s, i, 1)
If s1 >= “a” And s1 <= “y” Then
s2 = s2 + Chr(Asc(s1)+ 1)
ElseIf s1 = “z” Then
s2 = s2 + “a”
End If Next i Text2.Text = s2 例题:将文本框Text1中的小写字母转换其对应的大写字母,将大写字母转换成小写字母,并显示在文本框Text2中。
Private Sub Command1_Click()s = Text1.Text n = Len(s)m = Asc(“a”)m)
End If
If s1 >= “A” And s1 <= “Z” Then
s2 = s2 + Chr(Asc(s1)+ m)
End If Next i Text2.Text = s2 End Sub 5.统计某字符出现次数
算法思想:对字符串中字符逐一判断,如果是某字符,则统计变量加1。
例题:统计文本框Text1中字符i和j出现的次数(不区分大小写)。
Private Sub Command1_Click()
s = Text1.Text
n = Len(s)
For i = 1 To n
s1 = Mid(s, i, 1)
If UCase(s1)= “I” Then ni = ni + 1
If UCase(s1)= “J” Then nj = nj + 1
Next i
Print ni, nj
End Sub
八、素数
素数定义:只能被1和本身整除的正整数称为素数(或称质数)。例如11就是素数,它只能被1和11整除。算法思想:判别某数n是否是素数的方法有很多,最简单的是从素数的定义来求解。对于n,从i=2,3,…,n-1判别n能够被i整除,只要有一个能整除,n就不是素数,否则n是素数。此种算法比较简单,但速度慢,因此,可以将n被2到(或n/2)间的所有整数除,如果都除不尽,则n就是素数,否则n是非素数。
注:执行For循环时,循环变量等于终值仍进入循环,遇到Next语句,循环变量会自动加上步长,因此如果循环正常完成后,循环变量的值将大于终值。例如:
For i=1 To 4 If …… Then Exit For Next i Print i 如果循环正常结束,则输出结果为5(大于4)。如果循环过程中满足If条件,执行Exit For语句退出循环,则i的值一定小于5。
例题:判断n是否是素数。Private Sub Command2_Click()n = Val(Text1.Text)For j = 2 To n100 * a)/ 10)c = i-Int(i / 10)* 10 If i = a ^ 3 + b ^ 3 + c ^ 3 Then Print i End If Next i End Sub
Private Sub Command1_Click()For n = 100 To 999 s = 0 a = n Do While a <> 0 b = a Mod 10 s = s + b * b * b a = a\ 10 Loop If s = n Then Print n Next n End Sub
十一、斐波那切数列的输出
该数列前两项为1,1从第三项开始,an=an-1+an-2
十二、进制转换 十三、三个数排序
十四、分段函数
十五、图形输出(双重循环)
十六、百鸡百钱问题
十七、迭代法P116页
十八、输入a,b,c,的值,求方程ax2+bx+c=0的解。
注意:对象只考文本框、标签、命令按钮和窗体。
本学期计算机基础及VB程序设计复习指导如下:
1、计算机基础的50道复习题,试卷上占20分,选择15题,填空5题。
2、VB习题集第一到五章控制结构的课后习题及试题解析(其中,控件只考窗体、文本框、标签、命令按钮)试卷上占40分。
3、经典算法。占40分。
VB程序设计的常用算法教案 篇2
关键词:程序设计,算法,连乘算法,溢出
在程序设计课程中, 算法是课程的重点, 同时也是难点, 如何将算法原理向学生讲解透彻并可以让其轻松接受, 是在教学过程中需要思考的一个问题。
在计算机中, 算法 (Algorithm) 是对特定问题求解步骤的一种描述, 它是指令序列的集合。程序设计就是设计算法、编写代码、调试运行的过程。显而易见, 算法是程序设计的基础, 程序设计是算法的具体实现。在程序设计课程的教学设计过程中, 常用算法一般包括求最大/最小值、累加/连乘、穷举法、递推法等, 该文将主要针对连乘算法进行分析。
1 连乘算法
在程序基础教学中, 为了提高教学效果, 针对刚入门的程序设计初学者, 教师们一般采用任务驱动法[1]进行算法的分析, 引导学生理解和掌握该算法的核心思想, 进而再用程序的方式来描述与验证该算法。例如:
给出一个求阶乘的任务:求N!, 其中N!=1×2×3×4×…×n。
以上是一个典型的连乘算法, 该算法描述的关键点可归纳如下:
(1) 每一项和每次连乘之积是变化量。
(2) 因此, 需要两个变量:
①用T表示每一项的值:T=T+1。
②用S表示连乘之积:S=S*T。
(3) 循环终止条件:循环次数>n。
(4) 初始化:S=1。
2 内存溢出问题
在讲解程序算法时, 大多数程序设计教程都很少提及赋值或计算中的“溢出”问题, 然而在学生的编程操作中, “溢出”却是经常会遇到的一个问题[2], 这些问题常常会让学生觉得困惑, 查找原因时却无从下手, 导致学生出现畏难情绪。因此, 教师有必要在授课过程中, 对程序在内存中的存储方式进行初步讲解, 让学生可以了解程序的运行机制, 加深理解。
软件在运行过程中, 如果程序调用的数据文件过大, 或程序设计中存在着死循环等bug, 软件写入内存中的数据量超过了系统分配给该软件的内存空间大小, 则会发生内存空间装不下而溢出的现象, 这种现象就叫内存溢出。在求阶乘的算法中, 由于阶乘的结果累积速度较快较大, 容易发生数据溢出。
以下述VB代码为例, 给出一个求∏的近似值的任务:
让学生进行程序的调试与运行, 当n=10和=50时运行结果如图1所示, 但当n=100时, 却弹出如图2所示的警告信息。
分析导致“溢出”错误的原因:
当程序运行发生“溢出”错误时, 通过调试跟踪, 在T= (2*i) ^2/ ( (2*i-1) * (2*i+1) ) 语句处, 把光标移至i变量上, 可以发现溢出时i的值为91;当i=91时, 表达式 ( (2*i-1) * (2*i+1) ) =<溢出>, 该表达式的值为33123。程序将结果值S设置为double类型, 当i=91时, 结果为33123, 这个值按道理应在double类型的数值范围内, 但程序仍然发生了溢出错误, 问题在哪里呢?
实际上, 产生这个溢出问题的原因是由于VB本身的内存分配机制造成的, VB在进行计算过程中, 它总是分配一个最省内存的临时内存空间去存储这些中间计算结果数值, 这个最省的内存空间容量根据表达式中数据类型决定, 如上述相乘的两个表达式 (2*i-1) 和 (2*i+1) , 他们当中的变量i是整型, 因此, VB也将使用一个类型为整型的临时变量来存储两个表达式的乘积。所以, 当i=91时, 得到乘积结果33 123, 此时即使是乘积结果变量S设置为double类型, 但乘积结果 (33 123) 已超过了声明为整型的临时变量空间的极限 (-32 768~+32 767) , 所以仍然会发生溢出错误。
根据上面的原因分析, 可以从以下几方面进行修正:
(1) 将变量i定义为长整型或实数型或变体型。
(2) 将错误语句中的变量i或常量 (1或2) 其一操作数利用转换函数Clng (i) 或Clng (1) , 以求足以容纳计算结果。
(3) 避免大数相乘, 可将错误语句改为T= (2*i) ^2/ (2*i-1) / (2*i+1) 。
(4) 连乘算法的改进。
同一问题可用不同算法解决, 而一个算法的质量优劣将影响到算法乃至程序的效率。虽然上述方法解决了“溢出”问题, 但是表达式T= (2*i) ^2/ (2*i-1) * (2*i+1) 显得很笨重, 表达式明显复杂。能否有办法可以降低复杂度, 简化表达式以求程序优化呢?
可以把通项表达式T= (2*i) ^2/ (2*i-1) * (2*i+1) 中的分子式分解开来, 把问题理解为简单表达式T=A/B (其中A= (2*i) ^2和B= (2*i-1) * (2*i+1) , 如此一来问题就变得较为简单且易于解决。因此, 求∏的近似值的VB程序代码优化实现如下:
在此例中, 关键点在于如何将复杂的通项表达式分解为简单表达式, 进而实现连乘算法的优化。因此, 如何构造通项表达式尤为关键, 必须注意2点。
(1) 通项表达式T=B/A中的A或B均可为常量或变量表达式, A和B可以继续分解;①若A=1, 则T=B;②若B=1, 则T=1/A;
(2) 必须精选变量A与B的数据类型, 避免出现“溢出”。
3 结语
该文对程序设计课程中关于连乘算法的问题进行了初步探讨, 指出程序设计初学者中学习过程中经常会遇到的“溢出”问题, 提出修正方法, 并对连乘算法进行改进优化, 加深理解, 强化教学效果。
参考文献
[1]杨晨霞, 涂风涛.任务驱动教学法在Visual Basic程序设计教学中的应用[J].职教论坛, 2012 (18) :79-81.
VB程序设计的常用算法教案 篇3
一、对高中阶段开设程序设计教学的认识
高中阶段开设算法与程序设计教学有其必要性。学生在高中阶段打下基础,有利于他们进入大学的深造和就业以后的继续教育。此外,高考数学中加入了算法模块,也证明了开设算法与程序设计教学的重要性。
二、程序设计教学中学习兴趣的激发
恩格斯说:“兴趣与爱好是最好的老师。”刚开始接触程序时,很多学生感到新奇,这不能说是兴趣,只是一种好奇。随着学习的深入,许多的规则、定义、要求和机械的格式出现,很容易使部分学生产生枯燥无味的感觉。为了把学生的好奇转化为学习兴趣,教师在教学过程中要运用恰当的教学方法,引起学生的有意注意或有意后注意,培养学习兴趣。
1.创设情境,精彩“导入”
例,模拟在元旦晚会上,随机抽取一位班级幸运同学的学号,赠送小礼品。这样,激起了学生们的学习热情。然后,引出教学内容RND( )函数和INT( )函数。
2.让学生成为课堂“主角”
在课堂教学中,还应该让学生进入主体角色,主动地去发现从而成为知识的主动探索者。
可以让这些独特见解的学生充当小教师角色,一边操作一边讲解自己设计的算法。通过示范,在学生之间起到相互促进,相互影响的作用,达到共同进步。
3.让学生体会成功
在教学探究和交流活动过程中学生编写的代码成功调试运行后,便会体验到一种成功感。解决同一个问题可能有多种算法,某些同学解决问题的思路新颖独特,教师要让学生之间进行相互评价,让学生学会赞赏他人,培养学生欣赏他人的意识。教师不光要表扬善于思考、勇于探索、具有创新意识的学生,也要关注并表扬成绩较之前进步的学生。教师要学会运用适当的评价机制,让学生在体会到成功快乐的同时,也能保持学习兴趣持续高涨。
三、程序设计教学中培养学生反思性学习能力
反思性学习,顾名思义就是通过对学习活动过程的反思来进行学习。学生具有反思性学习的意识是反思性学习的前提。让学生明确没有反思便难有自我改错纠偏的道理;明确反思不仅能及时改正错误,还能优化已有认识,提高自身合理性水平。对于学生的成功予以适当表扬与鼓励,还可以达到强化学生反思意识的效果。另外,教师要营造开放、合作、协调、信任的教学氛围,鼓励学生大胆地质疑,给出别出心裁的答案。学生智慧的激活,会反作用于教师和其他学生,使其能在更高层次上积极思维,从而在师生、学生间积极思维的互动中,不断闪耀出智慧的光芒,从而建立一种互动的反思关系。
1.由浅入深,循序渐进
教学过程中,教师不能局限于教材内容系统条块化的安排,要能够做到重新分析教材,增强教学内容的层次性。从而既符合人的认识过程规律,也能使学生在掌握知识的同时掌握运用知识的方法。引导学生的思维层次提高,逐渐深刻,促进学生的进一步反思,诱发他们的创新思维。
2.举一反三,触类旁通
学习过程中,不难发现解决许多问题的算法是相互联系的。如果教师善于整理、归纳,并结合一些典型例题来讲解的话,学生的思路必然拓宽,培养了他们思维的灵活性,使学生学会举一反三,提高学生对知识的应用水平与创新能力。
例如,用VB编程实现S=1+2+3+……+100的和。
Private Sub Form_Click( ) For I=1 To 100 Step 1
Dim I As IntegerS=S+I
Dim S As IntegerNext I
S=0 Print S
End Sub
在该题基础上,如何实现:
①编程求S=1+3+5+……+99的和。
编程求S=2+4+6+……+100的和。
②编程实现S=1*2*3*……*10,即求S=10!。
③编程实现S=1!+2!+3!+……+10!。
综上可见,教师如果认真的对题目进行筛选,并对教学内容进行合理编排组织进行教学,将有效帮助学生学会举一反三、触类旁通。
信息技术老师应以《中小学信息技术课程指导纲要》为指导,“中学信息技术课程要以基础性知识和技能性操作为主,程序设计是更高层次的学习内容”。程序设计教学的目标不是培养“小型的程序员”。教师要培养学生用程序设计的方式进行思考,使学生的学习成为探究性活动,提高学生的创新能力,促进学生信息素养的提高,帮助学生成为适应信息化时代发展的人才。
参考文献:
[1]中华人民共和国教育部.普通高中信息技术课程标准[S].
[2]熊川武.反思性教学[M].上海:华东师大出版社.
[3]陈伟平,金炳尧.高中程序设计教学中培养学生反思性学习能力[J].中国教育信息化,2008(1):33-34.
[4]任建国.程序设计语言的教学方法浅探[J].中国教育信息化,2008(2).
【VB程序设计的常用算法教案】推荐阅读:
VB程序设计教法06-06
程序设计基础VB09-04
vb程序设计谭浩强答案06-21
vb程序设计试题及答案08-10
vb+sql程序设计论文08-19
VB语言程序设计-在线作业_C 答案08-22
提高VB程序设计教学质量方法浅析5则范文07-30
算法与程序设计教学08-09