第一篇:VB常用算法总结
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程序设计的常用算法教案
VB程序设计的常用算法教案
算法(Algrith):计算机解题的基本思想方法和步骤。算法的描述:是对要解决一个问题或要完成一项任务所采 取的方法和步骤的描述,包括需要什么数据(输入什么数据、输出什么结果)、采用什么结构、使用什么语句以及如何 安排这些语句等。通常使用自然语言、结构化流程图、伪代码等来描述算法。
一、计数、求和、求阶乘等简单算法
此类问题都要使用循环,要注意根据问题确定循环变量的初值、终值或结束条,更要注意用来表示计数、和、阶 乘的变量的初值。
例:用随机函数产生100个[0,99]范围内的随机整数,统计个位上的数字分别为1,2,3,4,6,7,8,9,0的 数的个数并打印出来。
本题使用数组来处理,用数组a存放产生的确100个随机整数,数组x来存放个位上的数字分
别为1,2,3,4,6,7,8,9,0的数的个数。即个位是1的个数存放在x中,个位是2的个数存放在x中,…… 个位是0的个数存放在x。
将程序编写在一个GetTput过程中,代码如下: PubliSubGetTput
DiaAsInteger
DixAsInteger
DiiAsInteger,pAsInteger
'产生100个[0,99]范围内的随机整数,每行印出来
Fri=1T100
a=Int
Ifa<10Then
Fr1PrintSpae;a;
10个打
Else
Fr1PrintSpae;a;
EndIf
Ifid10=0ThenFr1Print
Nexti
'统计个位上的数字分别为1,2,3,4,6,7,8,9,0的数的个数,并将统计结果保存在数组x,x,x中,将统计结果打印出来
Fri=1T100
p=a
d
0
'求个位上的数字
Ifp=0Thenp=10
x=x+1
Nexti
Fr1Print&qut;统计结果&qut;
Fri=1T10
p=i
Ifi=10Thenp=0 Fr1Print&qut;个位数为&qut;+Str+&qut;&qut;+Str)+&qut;个&qut;
Nexti EndSub
二、求两个整数的最大公约数、最小公倍数 分析:求最大公约数的算法思想:
对于已知两数,n,使得>n;
共
除以n得余数r;
若r=0,则n为求得的最大公约数,算法结束;否则执行;
←n,n←r,再重复执行。
例如:求=14,n=6的最大公约数
n
r
0 =inputBx n=inputBx n=n* If r=dn Dhile =n n=r r=dn Lp Print&qut;最大公约数=&qut;,n [1] [2] [3] [4] [] [6] [7] 下一页 < VB08 1、打开“考生文件夹781”中的文件“test4.vbp”,完善Command1_Click事件代码并保存。 实现功能:回文字符串是指一个字符串从左往右读与从右往左读是一样的,如“ABCBA”,“123321”等等。输入一个字符串,若是回文字符串,则输出“Yes”,否则输出“No”。使用文本框Text1输入字符串,使用文本框Text2输出结果。 Private Sub Command1_Click()Dim s As String Dim ok As String Dim i As Integer s = Text1.Text ok = “Yes” For i = 1 To ① If Mid(s, i, 1)<> ② Then ok = “No” Next i ③ End Sub ①len(s)2 ②Mid(s, len(s)+1-i, 1)③text2.text=ok 2、打开文件“考生文件夹606工程1.vbp”,完善Command1_Click事件代码并保存。 实现功能:当单击“计算1+2+3+…+100”按钮后,文本框Text1显示1+2+3+…+100的值。 Private Sub Command1_Click()Dim s As Integer Dim i As Integer s = ① For i = 1 To ② s = ③ Next i Text1.Text = Str(④)End Sub ①0 ②100 ③s+i ④s 3、打开“考生文件夹779test2.vbp”,完善Command1_Click事件代码并保存。 实现功能:输入一个正整数,计算并输出它的各位数字之和。如输入123,则输出6。使用文本框Text1输入正整数,使用文本框Text2输出计算结果。 Private Sub Command1_Click()Dim x As Integer Dim s As Integer x = Val(Text1.Text)① Do s = s + ② x = x 10 Loop Until x = 0 ③ End Sub ①s=0 ②x mod 10 ③text2.text=str(s) 4、打开文件“考生文件夹607工程1.vbp”,完善Command1_Click事件代码并保存。 实现功能:当单击“显示”按钮后,随机产生10个属于区间[0,100)的自然数,并保存于数组a中,然后在窗体上显示这10个数及其平均值。(注:学生运算结果有可能跟样图中数值不一致) Private Sub Command1_Click()Dim a(9)As Integer Dim s As Single Dim i As Integer Me.Cls s = 0 Randomize For i = 0 To ① a(i)= Int(Rnd * 100)Print a(i)Next i For i = 0 To 9 s = ② ③ Print “这10个自然数的平均值=”;s / 10 End Sub ①9 ②s+a(i)③next i 5、打开文件“考生文件夹609工程1.vbp”,完善Form_Click事件代码并保存。 实现功能:单击窗体时在窗体上打印下面所示的图案。 **** *** ** * Private Sub Form_Click()Dim i As Integer Dim j As Integer For i = ① To 1 Step-1 For j = 1 To i ② Next j Print ③ End Sub ①4 ②print “*”;③next i 6、打开文件“考生文件夹610工程1.vbp”,完善Command1_Click事件代码并保存。 实现功能:当单击“显示”按钮后,在窗体上显示下面的图形: @ @@ @@@ @@@@ @@@@@ @@@@@@ Private Sub Command1_Click()Dim i As Integer Dim j As Integer For i = 1 To 6 For j = 1 To ① Print ② Next ③ Print Next i End Sub ①i ②”@”;③j VB10 1、打开文件“考生文件夹178工程1.vbp”,完善Command1_Click事件及fac函数并保存。 实现功能:用递归法求3!+5!+7!的值,将结果输出到窗体上。 Public Function fac(a As Integer)As Integer If a = 1 Then fac = ① Else fac = a * ②(a1)+ fib(n1)End If End Function Private Sub Command1_Click()Dim sum As Integer sum = s(③)Print “sum=”;sum End Sub ①1 ②n ③100 6、打开“考生文件夹776”中的文件“蜗牛爬竹.vbp”,完善Command1_Click事件代码并保存。 实现功能:青竹高17米,蜗牛从青竹底端慢慢爬向顶端,晴天每天爬1.4米,雨天每天爬1.8米,若蜗牛爬到顶端用了11天,计算晴天、雨天各多少天?(晴天对应文本框text1,雨天对应文本框text2) Private Sub Command1_Click()Dim x As Single Dim y As Integer y =(171.4)① = 11-y Text1.Text = Str(②)+ “天” Text2.Text = Str(③)+ “天” End Sub ①x ②x ③y VB程序连乘算法的教学设计 摘 要:该文主要对程序设计课程中的连乘算法进行教学设计,结合实例介绍了连乘算法的关键点,对算法中经常会遇到的内存溢出问题进行解析,针对连乘算法的通用表达式进行了优化,使程序更易理解,达到加深理解,优化教学效果。 关键词:程序设计 算法 连乘算法 溢出 中图分类号:G64 文献标识码:A 文章编号:1672-3791(2015)12(a)-0220-02 在程序设计课程中,算法是课程的重点,同时也是难点,如何将算法原理向学生讲解透彻并可以让其轻松接受,是在教学过程中需要思考的一个问题。 在计算机中,算法(Algorithm)是对特定问题求解步骤的一种描述,它是指令序列的集合。程序设计就是设计算法、编写代码、调试运行的过程。显而易见,算法是程序设计的基础,程序设计是算法的具体实现。在程序设计课程的教学设计过程中,常用算法一般包括求最大/最小值、累加/连乘、穷举法、递推法等,该文将主要针对连乘算法进行分析。连乘算法 在程序基础教学中,为了提高教学效果,针对刚入门的程序设计初学者,教师们一般采用任务驱动法[1]进行算法的分析,引导学生理解和掌握该算法的核心思想,进而再用程序的方式来描述与验证该算法。例如: 以上是一个典型的连乘算法,该算法描述的关键点可归纳如下: (1)每一项和每次连乘之积是变化量。 (2)因此,需要两个变量: ①用T表示每一项的值:T=T+1。 ②用S表示连乘之积:S=S*T。 (3)循环终止条件: 循环次数>n。 (4)初始化:S=1。内存溢出问题 在讲解程序算法时,大多数程序设计教程都很少提及赋值或计算中的“溢出”问题,然而在学生的编程操作中,“溢出”却是经常会遇到的一个问题[2],这些问题常常会让学生觉得困惑,查找原因时却无从下手,导致学生出现畏难情绪。因此,教师有必要在授课过程中,对程序在内存中的存储方式进行初步讲解,让学生可以了解程序的运行机制,加深理解。 软件在运行过程中,如果程序调用的数据文件过大,或程序设计中存在着死循环等bug,软件写入内存中的数据量超过了系统分配给该软件的内存空间大小,则会发生内存空间装不下而溢出的现象,这种现象就叫内存溢出。在求阶乘的算法中,由于阶乘的结果累积速度较快较大,容易发生数据溢出。 让学生进行程序的调试与运行,当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的数据类型,避免出现“溢出”。结语 该文对程序设计课程中关于连乘算法的问题进行了初步探讨,指出程序设计初学者中学习过程中经常会遇到的“溢出”问题,提出修正方法,并对连乘算法进行改进优化,加深理解,强化教学效果。 参考文献 [1] 杨晨霞,涂风涛.任务驱动教学法在Visual Basic程序设计教学中的应用[J].职教论坛,2012(18):79-81.[2] 贾颖.“VB 程序设计”课程教学中的变量类型使用问题研究[J].Computer Education,2008(20):138-139.第三篇:算法与程序设计VB试题与答案08
第四篇:算法与程序设计VB试题与答案10
第五篇:VB程序连乘算法的教学设计