VB程序设计的常用算法09
Visual Basic常用算法
从逻辑结构上看,应用程序= 算法+ 数据结构。
(1)数据结构(Data-Structure),计算机将数据元素依据某种逻辑联系进行存储和组织的方式。
许多大型系统的构造经验表明,系统实现的困难程度和系统构造的质量都严重依赖于是否选择了最优的数据结构。选择了数据结构,算法也随之确定,是数据而不是算法是系统构造的关键因素。这种洞见导致了许多种软件设计方法和程序设计语言的出现,面向对象的程序设计语言就是其中之一。
数据是对客观事物的符号表示,在计算机科学中是指所有能输入到计算机中并由计算机程序处理的符号的总称。
(2)算法(Algorithm),由基本运算及规定的运算顺序所构成的完整解题步骤。
一个算法应该具有以下五个重要的特征:
①有穷性,算法必须保证执行有限步之后结束。
②确切性,算法的每一步骤必须有确切的定义。
③输入,算法有0个或多个输入,以描述运算量的初始值。0个输入是指算法本身包含了初始值。
④输出,算法有一个或多个输出,以反映对输入数据加工后的结果。没有结果的算法是毫无意义的。
⑤可行性,算法原则上能够精确地运行,而且人们用笔和纸做有限次运算后即可完成。
计算机科学家尼克劳斯-沃思曾著过一本著名的书《数据结构十算法= 程序》,可见算法在计算机科学界与计算机应用界的地位。
算法的描述:是对要解决一个问题或要完成一项任务所采取的方法和步骤的描述,包括需要什么数据(输入什么数据、输出什么结果)、采用什么结构、使用什么语句以及如何安排这些语句等。
程序(Programme)就是用计算机语言描述的算法。流程图(Flow Charts)就是图形化的算法。解决同一问题可以有多种算法描述。实际问题的算法种类繁多,总体上可以分为两大类:数值算法和非数值法。
对VB程序语言设计的初学者,可能会感到掌握控件的使用不难,难得的是理解和掌握算法。但是,算法是程序的核心、编程的基础,离开算法,一事无成。我们将介绍常用的VB算法。
一、常见数学问题算法
1、累加和连乘
累加是在原有和的基础上在循环体中每次加上一个数,最后根据条件结束累加,最终得到累加和。 连乘是在原有积得基础上在循环体中每次乘以一个数,最后根据条件结束连乘,最终得到连乘积。 此类问题都要结合循环结构实现,根据问题确定循环变量的初值、终值或结束条件。
【注意】① 累加和变量、连乘积变量必须在循环外赋初值。一般累加和初值为0、连乘积初值为1。 ② 对于多重循环,赋初值在外循环体外还是在内循环体外根据实际问题决定。
【计算π的近似值】用公式:
Λ+-+-≈7
1
513114π
计算,直到最后一项的绝对值小于10^-6 为止。
Private Sub Form_Click( )
Dim s As Integer, n As Single, t As Single, pi As Single t = 1 '第一项 pi = 0 '累加和初始值为0 n = 1 '每一项的分母值 s = 1 '第一项符号 Do While (Abs(t) >= 0.000001)
pi = pi + t '将每一项求和,得到π/4的近似值 n = n + 2 '产生每一项的分母值 s = -s '产生每一项的符号值 t = s / n '产生每一项 Loop
pi = pi * 4
Print "π="; pi End Sub
【斐不拉齐数列】输出斐不拉齐数列(Fibonacci )的前40个项:1、1、2、3、5、8、13、……
数列中的第1、2项为1,其后每项都等于其前两项之和,其递推公式:()
()()
???
??≥+=====--321
112111n F
F F n F n F n n n
Private Sub Form_Click( )
Dim f1 As Long, f2 As Long, i As Integer f1 = 1 '数列第一项 f2 = 1 '数列第二项 Print f1, f2, '打印数列前两项
For i = 3 To 40 '循环输出第3至40项 f3 = f1 + f2 '计算下一个数列项 Print f3, '打印输出下一个数列项 f1 = f2 '为下一个数列项计算做准备 f2 = f3 '为下一个数列项计算做准备
If i Mod 5 = 0 Then Print '当每行输出5个以后换行 Next i End Sub
【计算e 的近似值】求自然对数e 的近似值,要求其误差小于0.00001,近似公式为:
∑∑=∞=+≈+=++++++=n
i i i i n e 00!
11!11!1!31!21!111ΛΛ
Private Sub Form_Click( )
Dim i%, n&, t!, e!
e = 0 '存放累加和
i = 0 '循环控制变量
n = 1 '存放连乘积
t = 1 '级数第i项初始值
Do While t > 0.00001
e = e + t '将每一项加入累加和
i = i + 1 '产生阶乘下一个乘数
n = n * i '乘以乘数i得到每一项的阶乘
t = 1 / n '产生每一项
Loop
Print "计算了"; i; "项的和是"; e
End Sub
【计数统计】用随机函数产生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)。
Private Sub Form_Click( )
Dim a(1 To 100) , x(1 To 10) As Integer
Dim i, p As Integer
For i = 1 To 100 '产生100个[0,99]范围内的随机整数,每行10个打印出来a(i) = Int(Rnd * 100)
If a(i) < 10 Then
Print Space(2); a(i);
Else
Print Space(1); a(i);
End If
If i Mod 10 = 0 Then 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
Print "统计结果"
For i = 1 To 10 '打印计数统计的结果
p = i
If i = 10 Then p = 0
Print "个位数为" + Str(p) + "共" + Str(x(i)) + "个"
Next i
End Sub
#######################################################################################
2、最大公约数(最小公倍数)
求两个正整数X和Y的最大公约数,可以使用递推算法,辗转相除得到。用M表示被除数,N表示除数(M>N),R表示余数。
①输入两个正整数M和N,且M>N;②计算M除以N得余数R;③如果R不为0时,使M=N 和N=R后转移到第2步再次计算;④如果R=0时,N就是所求的最大公约数。
最小公倍数就是两个数的乘积再除以最大公约数的结果。
Private Sub Command1_Click( )
Dim x, y, m, n, r As Integer
x = Val(Text1.Text) : y = Val(Text2.Text) '从文本框中输入连个正整数 If x > y Then '使得M>N ,即将两个正整数排序 m = x : n = y Else m = y : n = x End If Do '求最大公约数 r = m Mod n m = n : n = r
Loop While r <> 0
'求最小公倍数并分行打印出两个结果
Label3.Caption = "最大公约数为:" & m & vbCrLf & "最小公倍数为:" & x * y / m End Sub
【说明】① x 和y 保存了两个正整数的原值,以便最后计算最小公倍数;② If 语句保证了m>n ,但省略If 语句也不会出错,因为r = m Mod n :m = n : n = r 会自动将较大的数交换到m 中。
###############################################################################
3、穷举法解方程
将可能出现的各种情况一一测试,判断是否满足条件,一般采用循环来实现,也称为“枚举法”。 这是一种“在没有其它办法的情况的方法”,是一种最“笨”的方法,然而对一些无法用解析法求解的问题往往能奏效,通常采用循环来处理穷举问题。
【百钱买百鸡】我国古代数学家张丘建在《算经》中曾提出一个有趣的“百钱买百鸡”问题。题意为:已知用5文钱可以买一只公鸡,3文钱可以买1只母鸡,用1文钱可以买3只小鸡,如果要用100文钱买100只鸡。请问公鸡、母鸡和小鸡应各买多少只?
(1)分析:设变量x 表示公鸡,y 表示母鸡,z 表示小鸡。则有方程组:?????
=++=++100
100
3
35z y x z y x 上述方程组中,有3个求和数,但只有两个方程,帮方程组有多个解。为解决这类问题一般需要使用
穷举法。即先对各求知数的所有可能进行穷举,然后再依次判断哪些值能满足要求。 Private Sub Form_Click( )
Dim x As Integer, y As Integer, z As Integer, num As Long For x = 0 To 100 For y = 0 To 100 For z = 0 To 100 num = num + 1
If (x + y + z = 100 And 5 * x + 3 * y + z / 3 = 100) Then Print "公鸡="; x, "母鸡="; y, "小鸡="; z End If Next z
Next y
Next x
Print "方法一的If语句测试了"; num; "次"
End Sub
(3)通过分析可知,公鸡、母鸡和小鸡的可能值为:0~20、0~33、100-x-y。
Private Sub Form_Click()
Dim x As Integer, y As Integer, z As Integer, num As Integer
For x=0 To 20
For y=0 To 33
z=100-x-y
num=num+1
If 5*x+3*y+z/3=100 Then
Print “公鸡=”; x; “母鸡=”; y; “小鸡=”; z
End if
Next y, x
Print "方法二If语句测试"; num; "次"
End Sub
【说明】①通过num变量可以测试循环的次数,还可以使用系统变量Now测试循环使用的时间。
②在方法二中两层循环的Next相邻时,可以合而为一:Next y, x。
【注意】在多重循环中,为了提高运行的速度,要考虑对程序优化问题:
①利用已知条件,尽量减少循环的次数。
②合理地选择内、外层的循环控制变量,即将循环次数多的放在内循环。
③尽量少用变体型变量,在方法一中x、y、z使用变体型,运行的时间可由4s减少到19s。
【换零钱程序】将一张面值为100元的人民币等值换成100张5元、1元和0.5元的零钞,要求每种零钞不少于1张,问有哪几种组合?
Private Sub Form_Click( )
Dim i%, j%, k%
Print "5元", "1元", "0.5元"
For i = 1 To 20
For j = 1 To 100 - i
k = 100 - i - j
If 5 * i + 1 * j + 0.5 * k = 100 Then
Print i, j, k
End If
Next j
Next i
End Sub
##############################################################################
4、素数问题
素数(质数)就是只能被1和它本身整除的整数。
①如果整数m不能被2~m-1之间的数所整除,则m是素数。反之,如果找到一个2~ m-1之间的数能够整除m,则证明m不是素数。结合循环结构使用穷举法测试2~ m-1。
②实际上,如果整数m能被分解为两个因子a和b,那么其中较小一个因子必定小于m0.5。
③只要找到一个能整除m的数x后,已经能证明m不是素数,x的后续数据可以不再验证,可使用Exit for有条件提前退出循环。
【穷举法素数判断】输入一个正整数m,并判断m是否为素数。
Private Sub Form_Click()
Dim m As Integer, k As Integer, i As Integer
m=Val(InputBox(“请输入一个正整数:”))
k=Sqr(m) '求m的平方根
For i=2 To k '从2到k测试是否为m的因子,如果是素数则正常退出循环
If m Mod i=0 Then Exit For '找到一个因子,不是素数则提前退出循环Next i
If i>k Then '根据结束循环的方式,打印素数判断的结果
Print m,”是素数”
Else
Print m,”不是素数”
End If
End Sub
【说明】如果程序是因为找到了一个能整除m的数,而通过Exit for语句退出For循环的,则i<=Sqr(m);反之,如果是正常结束循环的话,则应执行i=k+1。因此,可以根据是否(i>k)来判断“是素数”或“不是素数”。
【随机产生素数】随机产生20个两位素数。
Private Sub Form_Click()
Dim m As Integer, count As Integer, i As Integer, k As Integer
Randomize
Do Until count>=20
m=Int(Rnd*90)+10 '随机产生一个两位十进制数
k=Sqr(m) '判断该数是否素数
For i=2 To k
If m Mod i=0 Then Exit For
Next i
If i>k Then '如果是素数则打印输出到窗体上,并计数加1
Print m; ”” ;
count=count+1
If count Mod 10=0 Then Print '一行打印输出10个
End If
Loop
End Sub
【说明】①首先通过随机函数产生一个两位整数,然后再判断该整数是否是素数。如果是素数,则素数计数器count加1;如果不是素数,则产生下一个随机数。程序反复执行,直到产生20个满足条件的随机素数为止。
②外循环是一个Do Until…Loop循环,内循环是一个For…Next循环。
③语句“If count Mod 10=0 Then Print”的作用,是保证每行输出10个素数。
【寻找素数】找出100以内的素数。
Private Sub Command1_Click( )
Dim i As Integer, m As Integer
Text1.ForeColor = vbRed
Text1.Text = ""
For m = 2 To 100
For i = 2 To m - 1
If m Mod i = 0 Then GoTo NotS '不是素数则停止判断,直接退出当前的两层循环Next i
Text1.Text = Text1.Text & " " & m
End Sub
上述循环体内只要能被i整除,就不可能是素数,可利用GoTo语句退出循环。但程序中尽量少用或不用GoTo语句,通过设计一个标志变量Flag,在循环体内用Flag记录素数的判断结果,在循环结束后再根据Flag显示判断结果。
Private Sub Command2_Click( )
Dim i As Integer, m As Integer, Flag As Boolean
Text1.ForeColor = vbBlue
Text1.Text = ""
For m = 2 To 100
Flag = True '假设待判断的m为素数,将标志变量修改为True
For i = 2 To m - 1
If m Mod i= 0 Then Flag = False '不是素数,则将素数标志变量修改为False Next i
If Flag Then Text1.Text = Text1.Text & " " & m
Next m
End Sub
#################################################################
5、最大值和最小值
在若干个数中求最大值,一般先假设一个较小的数为最大值的初值,若无法估计较小的值,则取第一个数为最大值的初值,然后将每一个数与最大值比较,若该数大于最大值,将该数替换为最大值,依次逐一比较。
【最短残料】有一根长度为321m的钢材料,要将它截取成两种规格的短料,规格a、b的长度分别为17m和27m,每种至少1段,分隔成a、b各多少段后,剩余的残料r最少?
该题利用二重循环求残料r的最小值正数,因为残料不可能为负。
Private Sub Form_Click( )
Dim a%, b%, r!, ia%, ib%, t!
r = 321 '最小值初值取钢材料的长度
For b = 1 To Int((321 - 17) / 27) 'b最多的段数
For a = 1 To Int((321 - b * 27) / 17) 'a最多的段数
t = 321 - b * 27 - a * 17 '当前的残料
If t >= 0 And t < r Then '当前的残料>=零并且比最短的残料小
r = t '求最短的残料
ia = a '最短残料时a的段数
ib = b '最短残料时b的段数
End If
Next b
Print "最短残料时a的段数:"; ia
Print "最短残料时b的段数:"; ib
Print "最短残料为:"; r
End Sub
【寻找最大值和最小值】从10个范围[1, 100]随机数中找出其最大值和最小值。
Private Sub Form_Click( )
Dim a(1 To 10) As Integer, i As Integer
Dim min, max As Integer, minindex As Integer, maxindex As Integer
For i = 1 To 10
a(i) = Int(Rnd * 100) + 1
Print a(i);
Next i
min = a(1) : max = a(1) : minindex = 1 : maxindex = 1
For i = 2 To 10
If a(i) < min Then min = a(i) : minindex = i
If a(i) > max Then max = a(i) : maxindex = i
Next i
Print "第" & minindex & "个数最小:" & min
Print "第" & maxindex & "个数最大:" & max
End Sub
###################################################################################
6、递推(迭代)
“递推法”也称为“跌代法”,把一个复杂的计算过程转化为“简单过程的多次重复”。每次重复都从旧值的基础上“递推”出新值,并由“新值代替旧值”进行下一次递推。
算法思想:对于一个问题的求解x,可由给定的一个初值x0,根据某一迭代公式得到一个新的值x1,这个新值x1比初值x0更接近要求的值x;再以新值作为初值,即:x1→x0,重新按原来的方法求x1,重复这一过和直到|x1-x0|<ε(某一给定的精度)。此时可将x1作为问题的解。
【猴子吃桃的递推】小猴子在一天摘了若干个桃子,当天吃掉一半多一个;第二天接着吃了剩下的桃子的一半多一个;以后每天都吃尚存桃子的一半零一个,到第7天早上要吃时只剩下一个了,问小猴子那天共摘下了多少个桃子?
这是一个典型的“递推”问题,先从最后一天推出倒数第二天的桃子,再从倒数第二天的桃子推出倒数第三天的桃子······。设第n天的桃子为X n,那么它是前一天的桃子数X n—1的二分之一减一。即:X n=0.5 X n—1—1,也就是:X n—1=(X n+1)×2
Private Sub Form_Click( )
Dim n%, i%, x%
x = 1 '第7天的桃子
Print "第7天的桃子数为:1只"
For i = 6 To 1 Step -1
x = (x + 1) * 2
Print "第"; i; "天的桃子数为:"; x; "只"
Next i
End Sub
【迭代法求平方根】已知求平方根的迭代公式为:)(210
01x a
x x +=
,用迭代法求某个数的平方根。 Private Sub Form_Click( )
Dim x As Single
x = Val(InputBox("输入一个大于0的正数:", "求平方根", 0)) If x > 0 Then
Print x & "的平方根为:"; Fsqrt(x) ElseIf x = 0 Then
Print "0的平方根为0!" Else
Print "此数不能求平方根!" End If End Sub
Private Function Fsqrt( a As single ) AS single
Dim x0 As Single, x1 As Single x0 =a/2 '迭代初值 x1 = 0.5*(x0 + a/x0) Do
x0 = x1 '为下一次迭代作准备 x1 = 0.5*(x0 + a/x0)
Loop While Abs(x1 - x0) > 0.00001 Fsqrt=x1 End Function
###############################################################################
7、二分法解高次方程
假设方程f(x)=0在区间(a, b)内有唯一的根x ,则f(a)与f(b)的符号必然相反。二分法利用这个性质进过若干次迭代缩小根所在的区间,得到一个在一定误差范围内的近似根。
(a )方程的根在中点左侧 (b )方程的根在中点右侧
二分法求根示意图
① 取(a, b)的中点x 0=(a+b)/2,将求根区间分成两半,开始缩小根的区间。
② 如果f(x 0)与f(a)同号,则根的真值x 在中点x 0的右侧,如图(b )所示。这时根的取值区间缩小为(x 0 ,b),即用x 0取代a 的位置。如果f(x 0)与f(a)异号,则根的真值x 在中点x 0的左侧,如图(a )所示。这时根的取值区间缩小为(a, x 0) ,即用x 0取代b 的位置。
③ 根据新的区间范围重复“取中点判断”,直到f(x 0)=0或区间长度b -a<ε,则x 0即为方程f(x)=0的近似根,误差小于ε。
【二分法求解方程】求方程x 3+4x 2-10=0在区间(1,4)内的实数根。要求精确到小数点后第4位。
Private Sub Form_Click( ) Dim a, b, x As Double a = 1 : b = 4 While b - a > 0.00001 x = (a + b) / 2 '求出根所在区间的中间点x f1 = a ^ 3 + 4 * a ^ 2 – 10 '求左边界点a 的方程值 f = x ^ 3 + 4 * x ^ 2 – 10 '求中间点x 的方程值 If f1 * f > 0 Then a = x Else b = x '根据两个方程值的符号异同,缩小根的区间范围 End If Wend
Print "x="; CInt(x * 10000) / 10000 End Sub
############################################################## 8、牛顿切线法解高次方程 给方程f(x)假定一个初值x 0作为方程的近似根,牛顿切线法迭代公式为:()()
i i i i x f x f x x /
1-
=+,()i x f /
是()i x f 的导数,经过若干次迭代后,当ε≤-+i i x x 1时,1+i x 就作为方程的高精度近似根。
由图可知,牛顿切线法的实质是逐步以切线与x 轴的交点来作为曲线与x 轴交点的近似值。 【牛顿切线法解高次方程】求方程f(x)=3x 3-4x 2-5x +13=0的根。 Private Sub Form_Click( )
Dim x, x0, f, f1 As Double x0 = 3 '假设一个初始近似根 Do
f = 3 * x0 ^ 3 - 4 * x0 ^ 2 - 5 * x0 + 13 '求近似根的方程值 f1 = 9 * x0 ^ 2 - 8 * x0 – 5 '求近似根的导数方程值 x = x0 - f / f1 '根据牛顿切线公式计算新的近似根x If Abs(x - x0) < 0.00001 Then Exit Do '新的近似根x 是否满足精度要求 x0 = x Loop
Print "x="; Int(x * 1000000) / 1000000 End Sub
##################################################################################### 9、数组与矩阵运算 矩阵元素可以存放在二维数组中,对矩阵的各种运算也就变成了对数组的运算。 【矩阵转置】对于n ×n 的矩阵,转置实质上是:每个元素与下标交换后对应的元素交换数据,其中两条对角线上的元素和自身交换数据。
例如,有二维数组a(5,5),要对它实现转置,有两种方法可以实现。
Option Base 1
Private Sub Command1_Click( )
Dim a(5, 5) As Integer, i%, j%
Picture1.Cls : Picture2.Cls
For i = 1 To 5 '矩阵a赋初始值并显示在Picture1中For j = 1 To 5
a(i, j) = Int(Rnd * 9 + 1)
Picture1.Print a(i, j);
Next j
Picture1.Print
Next i
For i = 1 To 4 '将矩阵a转置
For j = i + 1 To 5
temp = a(i, j) : a(i, j) = a(j, i) : a(j, i) = temp Next j
Next i
For i = 1 To 5 '转置结果显示在Picture2中
For j = 1 To 5
Picture2.Print a(i, j);
Next j
Picture2.Print
Next i
End Sub
Private Sub Command2_Click( )
Dim a(5, 5) As Integer, i%, j%
Picture1.Cls : Picture2.Cls
For i = 1 To 5 '矩阵a赋初始值并显示在Picture1中For j = 1 To 5
a(i, j) = Int(Rnd * 9 + 1)
Picture1.Print a(i, j);
Next j
Picture1.Print
Next i
For i = 2 To 5 '将矩阵a转置
For j = 1 To i - 1
temp = a(i, j) : a(i, j) = a(j, i) : a(j, i) = temp Next j
Next i
For i = 1 To 5 '转置结果显示在Picture2中
For j = 1 To 5
Picture2.Print a(i, j);
Next j
Picture2.Print
Next i
End Sub
【矩阵乘以常数】存在2行4列矩阵nx1,对矩阵各元素乘以常数n,把结果存入矩阵nx2中。Option Base 1
Private Sub Form_Click( )
Dim nx1(2, 4) As Integer, nx2(2, 4) As Integer, x As Integer
Print "nx1数组为:"
For i = 1 To 2
For j = 1 To 4
nx1(i, j) = Val(InputBox("请输入nx1数组元素:"))
Print nx1(i, j); Space(8 - Len(Str(nx1(i, j))));
Next j
Next i
x = Val(InputBox("输入相乘的常数:"))
Print "乘以常数:"; x
For i = 1 To 2
For j = 1 To 4
nx2(i, j) = x * nx1(i, j)
Next j
Next i
Print "输出nx2数组:"
For i = 1 To 2
For j = 1 To 4
Print nx2(i, j); Space(8 - Len(Str(nx2(i, j))));
Next j
Next i
End Sub
【矩阵相加减】假设行、列相同的两个矩阵nx1和nx2,两个矩阵相加(减),即将两个矩阵中相对应得两个元素直接相加(减),结果存放在另一矩阵中。
Option Base 1
Private Sub Form_Click( )
Dim nx1(2, 3) As Integer, nx2(2, 3) As Integer, nx3(2, 3) As Integer
Print "相加的第一个数组nx1:"
For i = 1 To 2
For j = 1 To 3
nx1(i, j) = Val(InputBox("输入nx1数组:"))
Print nx1(i, j); Space(8 - Len(Str(nx1(i, j))));
Next i
Print "相加的第二个数组nx2:"
For i = 1 To 2
For j = 1 To 3
nx2(i, j) = Val(InputBox("输入nx2数组:"))
Print nx2(i, j); Space(8 - Len(Str(nx2(i, j))));
Next j
Next i
For i = 1 To 2
For j = 1 To 3
nx3(i, j) = nx1(i, j) + nx2(i, j)
Next j
Next i
Print "结果为第三个数组nx3:"
For i = 1 To 2
For j = 1 To 3
Print nx3(i, j); Space(8 - Len(Str(nx3(i, j))));
Next j
Next i
End Sub
【矩阵相乘除】两个矩阵nx1和nx2相乘(除)的必要条件:nx1矩阵的列数必须等于nx2矩阵的行数。结果存放在矩阵nx3(nx1行数,nx2列数) 中。根据矩阵乘法定义,nx3矩阵中各元素的值为:
()∑
=?
=
n
k
j
k
k
i
nx nx
j
i
nx
1
, ,
2 1
,
3(n为nx1的列数或nx2的行数)
Option Base 1
Private Sub Form_Click( )
Dim nx1(4, 2) As Integer, nx2(2, 3) As Integer, nx3(4, 3) As Integer Print "第一个数组nx1为:"
For i = 1 To 4
For j = 1 To 2
nx1(i, j) = Val(InputBox("输入第一个数组nx1:"))
Print nx1(i, j); Space(10 - Len(Str(nx1(i, j))));
Next j
Next i
Print "第二个数组nx2为:"
For i = 1 To 2
For j = 1 To 3
nx2(i, j) = Val(InputBox("输入第二个数组nx2:"))
Print nx2(i, j); Space(10 - Len(Str(nx2(i, j))));
Next j
Print "结果的第三个数组nx3为:"
For i = 1 To 4
For j = 1 To 3
nx3(i, j) = 0
For k = 1 To 2
nx3(i, j) = nx3(i, j) + nx1(i, k) * nx2(k, j)
Next k
Print nx3(i, j); Space(10 - Len(Str(nx3(i, j))));
Next j
Next i
End Sub
#####################################################################################
10、验证哥德巴赫猜想
哥德巴赫猜想:任意一个大于等于6的偶数都可以分解为两个素数之和。
基本思想:n为大于等于6的任一偶数,可分解为n1和n2两个数,分别检查n1和n2是否为素数,如都是,则为一组解。如n1不是素数,就不必再检查n2是否素数。先从n1=3开始,检验n1和n2(n2=N-n1)是否素数。然后使n1+2 再检验n1、n2是否素数,……直到n1=n/2为止。
Private Function Prime(m As Integer) As Boolean '判断素数函数
Dim i%
Prime = True
For i = 2 To Int(Sqr(m))
If m Mod i = 0 Then Prime = False : Exit For
Next i
End Function
Private Sub Command1_Click( )
Dim num%, num1%, num2%
num = 6 : num1 = 2
aa: num1 = num1 + 1 '分解一个偶数出第一个加数
num2 = num - num1 '分解一个偶数出第二个加数
If Prime(num1) = False Then GoTo aa '判断第一个加数是否素数
'如果第二个加数也是素数,则添加到list1中
If Prime(num2) = False Then
GoTo aa
Else
List1.AddItem num & "=" & num1 & "+" & num2
End If
num = num + 2 '准备判断下一个偶数
If num <= 100 Then num1 = 2 : GoTo aa
End Sub
Private Sub Command2_Click( )
Dim num%, num1%, num2%
For num = 6 To 100 Step 2
For num1 = 3 To num \ 2 Step 2
num2 = num - num1
If Prime(num1) Then
If Prime(num2) Then
List1.AddItem num & "=" & num1 & "+" & num2 :Exit For
End If
End If
Next num1
Next num
End Sub
二、字符处理算法
【字母图形程序】当单击“生成图形”按钮后,按用户指定的“首字母”和“行数”,生成如图所示的由大写字母构成的图形。
Private Sub Command1_Click( )
Dim ch As String, ln As Integer, temp As Integer
Dim i, j, n As Integer
Picture1.Cls
ch = UCase(Text1.Text) '取得首字母
ln = Val(Text2.Text) '取得行数
n = Asc(ch) - Asc("A") '求与A的距离
For i = 1 To ln
Picture1.Print Tab(12 - i); '输出每行空格距离
For j = 1 To 2 * i – 1 '打印每行的其他字母字符
temp = Asc("A") + n '计算下一个将要打印的字符
If (temp > Asc("Z")) Then '判断是否超出英文字母范围
n = 0 :temp = Asc("A") '如果超出范围,则回到A字母位置
End If
Picture1.Print Chr(temp); '打印出一个英文字母字符
n = n + 1
Next j
Picture1.Print
Next i
End Sub
【字符分类统计】单击“统计”按钮后,统计文本框Text1中各种字母(不区分大小写)出现的次数,将统计的结果存放在数组intCount中,并将出现次数大于1的字母及其出现次数显示在picture1中。要求按每行6个的格式输出。
Option Base 1
Private Sub Command1_Click( )
Dim intCount(26) As Integer
Dim str$, n%, ch As String * 1
Dim i%, j%, num%
Picture1.Cls
Text1.Text = "This is a Visual Basic Program!"
str = Text1.Text :n = Len(str)
For i = 1 To n '统计计数
ch = UCase(Mid(str, i, 1)) '取得字符串中的一个字符
If (ch >= "A" And ch <= "Z") Then '判断并分类统计字母个数
j = Asc(ch) - Asc("A") + 1 : intCount(j) = intCount(j) + 1
End If
Next i
For j = 1 To 26 '打印统计的结果
If intCount(j) > 0 Then
Picture1.Print Chr$(j + 64); "="; intCount(j);
num = num + 1
If num Mod 6 = 0 Then Picture1.Print '每行打印六个统计结果
End If
Next j
End Sub
【统计文本单词个数】从字符串的左边开始,取出每一个字符,判断是否是英文字母字符。如果一个字符是英文字母字符,同时前一个字符是非英文字母字符时,说明该英文字母字符是一个新单词的第一个字母,单词数量增加一个。如果一个非英文字母字符或连续两个英文字母表示没有新单词出现。
Private Sub Command1_Click( )
Dim Nw, nL As Integer, Wt As Boolean, strIN, strT As String
Nw = 0 '整数变量Nw保存单词个数
Wt = False '逻辑变量Wt保存是否英文字符
strIN = Text1.Text '从Text1.Text中读取英文字符串
nL = Len(RTrim(strIN))
For i = 1 To nL '依次判断每一个字符是否英文字母
strT = Mid$(strIN, i, 1) '取第i个字符保存到字符串变量strT中
If (strT > "A" And strT < "Z") Or (strT > "a" And strT < "z") Then
If Not Wt Then '如果前一个字母不是英文字母,则找到一个新单词
Nw = Nw + 1 '单词计数变量Nw加1
Wt = True '这个字符是英文字母
End If
Else
Wt = False '这个字符非英文字母
End If
Next i
Label1.Caption = "单词数为:" & Str(Nw) '显示单词个数
End Sub
【英文打字练习】编写一个英文打字训练的程序。要求:①在标签框内随机产生30个字母的范文;
②当焦点进入文本框时开始计时,并显示当时的时间;③在文本框按产生的范文输入相应的字母;④当计时时间结束后,禁止向文本框输入内容,显示打字的速度和正确率。
Dim t As Date
Private Sub Command1_Click( ) '产生30个字母的范文
Randomize : Label5 = ""
For i = 1 To 30
a = Chr$(Int(Rnd * 26) + 65)
Label5 = Label5 & a
Next i
End Sub
Private Sub Text1_GotFocus( )
t = Time '输入文本框获得焦点,开始计时
End Sub
Private Sub Text1_KeyPress(KeyAscii As Integer)
Dim t2 As Date
If Len(Text1) = 30 Then '输入满30个字符
t2 = Time - t '计算时间
Label3.Caption = "时间(s):" & t2 '显示时间
Text1.Locked = True '不允许再修改
y = 0 : n = 0
For i = 1 To 30 '计算正确率
If UCase(Mid(Text1, i, 1)) = UCase(Mid(Label5.Caption, i, 1)) Then
y = y + 1
Else
n = n + 1
End If
Next i
y = y / (y + n) * 100
Label4.Caption = "准确率(%):" & Str(y)
End If
End Sub
Private Sub Command2_Click( ) '结束计算时间和正确率
Call Text1_KeyPress(0)
End Sub
【文本的加密解密】基本思想是:将文本的每个字符采用“统一规律”转换为其他字符,同时必须存在一个逆向转换过程进行解密。
最简单的字母加密方法是:将每个字母加(或减)一个序数K,变换式公式:c=chr(Asc(c)+k)。
例如,加序数5,这时“A”→“F”,“a”→“f”,“B”→“G”,“Z”→“E”。
解密为加密的逆过程:将每个字母减(或加)加密时的序数K,变换式公式:c=chr(Asc(c)-k)。
例如,序数K为5,这时“Z”→“U”,“z”→“u”,“Y”→“T”。
当减序数后的字母小于“A”或“a”,则c=Chr(Asc(c)-k +26)
当加序数后的字母大于“Z”或“z”,则c=Chr(Asc(c)+k-26)
例如,将文本框1中的字母加密,将文本框2中的字母解密。
Private Sub Command1_Click( )
Dim strIN, strS, strT, strP As String, keycode, nl, i As Integer
Label1.Visible = False : Label2.Visible = True
i = 1 : strP = ""
strIN = Text1.Text '获取整个文本
keycode = Val(Text3.Text) '获取加密值
nl = Len(RTrim(strIN)) '测试整个文本长度
Do While (i <= nl) '逐个判断并加密每个字母
strT = Mid$(strIN, i, 1) '取出第i个字符
If (strT >= "A" And strT <= "Z") Then '对大写字母加密
strS = Asc(strT) + keycode
If strS > Asc("Z") Then strS = strS - 26
strP = strP + Chr$(strS)
ElseIf (strT >= "a" And strT <= "z") Then '对小写字母加密
strS = Asc(strT) + keycode
If strS > Asc("z") Then strS = strS - 26
strP = strP + Chr$(strS)
Else
strP = strP + strT '非英文字母不加密
End If
i = i + 1
Loop
Text2.Text = strP '在Text2输出加密文本
End Sub
Private Sub Command2_Click( )
Dim strIN, strS, strT, strP As String, keycode, nl, i As Integer
Label2.Visible = False : Label1.Visible = True
i = 1 : strP = ""
strIN = Text2.Text '获取整个文本
keycode = Val(Text3.Text) '获取解密值
nl = Len(RTrim(strIN)) '测试整个文本长度
Do While (i <= nl) '逐个判断并解密每个字母
strT = Mid$(strIN, i, 1) '取出第i个字符
If (strT >= "A" And strT <= "Z") Then '对大写字母解密
strS = Asc(strT) - keycode
If strS < Asc("A") Then strS = strS + 26
strP = strP + Chr$(strS)
ElseIf (strT >= "a" And strT <= "z") Then '对小写字母解密
strS = Asc(strT) - keycode
If strS < Asc("a") Then strS = strS + 26
strP = strP + Chr$(strS)
Else
strP = strP + strT '非英文字母不解密
End If
i = i + 1
Loop
Text1.Text = strP '在Text1输出解密文本
End Sub
三、数据处理算法
1、数制转换
【进制转换】任意输入一个十进制整数,单击“转换”按钮后,将该数转换为指定R(2-16)进制的数值字符串。
思路:将m不断除r取余数,直到商为零,以反序得到结果。下面写出一转换函数,参数idec为十进制数,ibase为要转换成数的基(如二进制的基是2,八进制的基是8等),函数输出结果是字符串。
Private Sub Command1_Click( )
Dim num%, base%, r%
num = Val(Text1.Text) '输入十进制正整数
base = Val(Text2.Text) '输入r进制
If base > 2 And base < 16 Then '判断进制是否合理
Text3.Text = DecTran(num, base) '调用转换函数显示转换结果
Else
MsgBox "输入的进制超出范围" :Text2.Text = "" :Text2.SetFocus
End Sub
Private Function DecTran(idec%, ibase%) As String
Dim strDecR$, iDecR%
strDecR = "0"
Do While idec <> 0 '不断出某进制数ibase取余数直到商为0
iDecR = idec Mod ibase
If iDecR >= 10 Then '余数>=0转换为A--F
strDecR = Chr$(65 + iDecR - 10) & strDecR
Else '余数<0直接转换
strDecR = iDecR & strDecR
End If
idec = idec \ ibase
Loop
DecTran = strDecR
End Function
【使用说明】将需要转换的数据存入num,将需要转换的进制存入base,调用DecTran(num,base)后即可得到转换结果。
############################################################################
2、查找
【顺序查找程序】是最简单、最直接查找算法,其思想为:从第一个数据开始逐一与查找对象比较,直到找到(或未找到)指定的数据。
Private Sub Form_Click( )
Dim a%( ),i%, objNum%, num%, n%, flag As Boolean
Randomize : Cls
Do
n = Val(InputBox("确定数据个数n:"))
Loop Until n = Int(n) And n > 0
Print "在下列" & n & "个数中查找数据:"
ReDim a(n)
For i = 1 To n '通过随机函数,初始化原始数据
a(i) = Int(Rnd * 99) + 1
Print a(i); Tab(5 * (i Mod 10));
If i Mod 10 = 0 Then Print
Next i
objNum = Val(InputBox("请输入要查找的数:"))
flag = False : num = 0 '设置查找标志
For i = 1 To n
If objNum = a(i) Then '如果找到制定数据,则退出
flag = True :num = i :Exit For
End If
Next i
If flag = True Then
vb代码大全
用VB5实现窗口图象缩放、滚动技巧 成都理工学院计算机工程系 洪志全 ---- Visual Basic 是Windows 平台中最常用的应用软件开发语言, 窗口图像缩放、滚动是图像处理、多媒体数据库等应用软件开发中的基本功能。本文将介绍如何用VB 5.0 实现地窗口图像缩放和滚动技巧, 供读者在各种语言系统开发中参考。 ---- 一、获取图像 ---- 本文所介绍的图像缩放并没有对真正的图像进行缩放, 而是复制一幅窗口图像的真实画面, 对这个窗口图像附本进行局部缩放和滚动, 获取窗口图像可使用Windows 的API 函数来实现。具体来说, 实现窗口图像缩放、滚动需要用GetDeskTopWindow() 函数获取桌面窗口句柄, 再通过GetDC() 函数转换为描述表句柄, 则用BitBlt() 函数把桌面图像复制到任意图形容器控件中, 桌面图像复制完成后, 再用ReleaseDC 释放窗口描述表, 各API 函数的具体使用方法参见本文的例子程序。 ---- 本文所用的API 函数包含在WIN95/98 的GDI32.DLL 和USER32.DLL 动态链接库中, 在使用时可通过VB5.0 的TEXT VIEWER 复制到所开发的应用程序中。 ---- 二、图像缩放 ---- 图像缩放显示的基本原理就是把原图像的一部分缩放后再送入窗口的图形容器控件中, 在VB 中可用内部命令PaintPicture 来进行, 语法格式为: PaintPicture Pic,DestX,DestY,DestWidth, DestHeight,ScrX,ScrY,ScrWidth,ScrHeight ---- 其中,Pic 为图片对象, 如图形控件对象等; DestX,DestY为目标图像起始坐标; DestWidth,DestHeight为目标图像幅面尺寸; ScrX,ScrY为源图像起始坐标; ScrWidth,ScrHeight为源图像剪裁尺寸。 ---- 该命令就是把一个源图像资源任意复制到指定的区域, 其功能相当于API 函数的BitBlt, 但使用更简单, 若复制时改变源图像的ScrWidth,ScrHeight 或目标图像的DestWidth,DestHeight 可使复制后的图像尺寸发生变化, 实现窗口图像的缩放显示。若ScrWidth,ScrHeight 或
VB程序设计习题
练习一 一、选择题 1、下面列出的程序设计语言中(A )是面向问题的语言。 A、机器语言 B、汇编语言 C、高级语言 D、0、1二进制语言 解释:机器语言和汇编语言都是面向机器的语言,二进制语言为机器语言,故其为面向机器的语言 2、下面列出的程序设计语言中(C )不是面向对象的语言。 A、C B、C++ C、Java D、VB 3、下列(D )不属于VB 6.0的版本。 A、学习版 B、专业版 C、企业版 D、共享版 解释:VB6.0共有三个版本:标准版、专业版、企业版。而其中的标准版是为初学者了解基于windows的应用程序开发而设计的,也可称为学习版。 二、填空题 1、从程序设计语言发展过程的角度来分类,计算机程序设计语言分:机器语言、汇编语言和高级语言。 2、VB 6.0采用了面向对象、事件驱动(可视化编程)的编程机制。 3、启动VB 6.0后可以从“现存”选项卡选择并打开系统中现存的工程文件。 练习二 一、选择题 1、如果窗体对象的名称为Forma1,Backcolor是窗体对象的一个属性,用来设置窗体的背景色,那么设置窗体背景色为蓝色的语句正确的是( A ) A、Forma1.Backcolor=vbBlue B、Backcolor= vbBlue C、Forma1 =vbBlue D、Forma1′s Backcolor is vbBlue. 2、下面方法中,不能打开编码编辑器的是(D) A、单击“视图”菜单中的“代码窗口”命令。 B、双击窗体设计器的窗体或控件。 C、双击窗体设计器的窗体或控件,单击工程资源管理器中的“查看代码”按钮。 D、双击窗体设计器的窗体或控件,单击标准工具栏中的“代码窗口”按钮。 3 、保存VB应用程序时,下列方法中正确的是(A) A、先保存窗体文件,再保存工程文件。 B、先保存工程文件,再保存窗体文件 C、直接保存窗体文件,系统会自动按顺序先保存窗体文件再保存工程文件。 D、直接保存窗体文件,系统会自动按顺序先保存工程文件再保存窗体文件。 二、填空题 1、VB工程文件的扩展名是工程文件(*.vbp),窗体文件的扩展名是窗体文件(*.frm)。 2、选中工程资源管理器中的窗体对象,再单击按钮可打开窗体设计器。 3、在VB中,按下工具栏中的“启动”按钮或
VBProject代码操作代码之常用语句
一、增加模块 1.增加一个模块,命名为“我的模块” ThisWorkbook.VBProject.VBComponents.Add(vbext_ct_StdModule).Name = "我的模块" 系统常量vbext_ct_StdModule=1 2.增加一个类模块,命名为“我的类” ThisWorkbook.VBProject.VBComponents.Add(vbext_ct_ClassModule).Name = "我的类" vbext_ct_ClassModule=2 3.增加一个窗体,命名为“我的窗体” ThisWorkbook.VBProject.VBComponents.Add(vbext_ct_MSForm).Name = "我的窗体" vbext_ct_MSForm=3 二、删除模块 1.删除“模块1” ThisWorkbook.VBProject.VBComponents.Remove hisWorkbook.VBProject.VBComponents("模块1") 2.删除窗体“UserForm1” ThisWorkbook.VBProject.VBComponents.Remove ThisWorkbook.VBProject.VBComponents("UserForm1") 3.删除类模块“类1” ThisWorkbook.VBProject.VBComponents.Remove ThisWorkbook.VBProject.VBComponents("类1") 4.删除所有的窗体 Sub RmvForms() Dim vbCmp As VBComponent For Each vbCmp In ThisWorkbook.VBProject.VBComponents If vbCmp.Type = vbext_ct_MSForm Then ThisWorkbook.VBProject.VBComponents.Remove vbCmp Next vbCmp End Sub 相关: 工作表和ThisWorkbook的模块类型为vbext_ct_Document=100 三、增加代码 1.在“模块1”中插入代码 如果需要在“Sheet1”、“Thisworkbook”、或“Userform1”中操作,用只需将下面的“模块1”换成相应的名称即可。 方法1: 在模块的开始增加代码,增加的代码放在公共声明option,全局变量等后面。 Sub AddCode1() ThisWorkbook.VBProject.VBComponents("模块1").CodeModule.AddFromString _ "sub aTest()" & Chr(10) & _ "msgbox ""Hello""" & Chr(10) & _ "end sub" End Sub
高中信息技术《算法与程序设计VB(选修)》
一、算法 (1)、计算机解决问题的过程 计算机程序(Computer Program)是计算机如何去解决问题完成任务的一组可执行指令。 程序设计(Program Design)是寻找解决问题的方法,并将其实现步骤编写成计算机可执行的程序的过程。 程序设计语言(Program Language)泛指一切用于书写计算机程序的语言。 计算机解决问题和人解决问题有着本质区别:计算机解决问题要经历分析问题、确定算法、编程求解等基本过程主。计算机解决问题的流程如下: 开始→分析问题→设计算法→编写程序→运行程序→结束 编写程序时,首先要对问题进行详细分析,明确已知条件下的初始状态及要达到的目标,找出解决问题的方法和过程,并抽取出一个数学模型,形成算法;然后将这个数学模型连同它要处理的数据,用计算机能识别的方式描述出来,使之成为计算机能处理的对像;最后用程序设计语言设计出具体的问题求解过程,形成计算机程序。 (2)算法的描述方法 ①、算法的定义及其特征 算法:就是解决问题的思想方法,对解题过程的精确描述。 计算机解决问题的步骤为分析问题、设计算法、编写程序、调试程序。 算法是程序设计的“灵魂”,世界著名计算机科学家尼克劳斯·沃斯(N.With)指出:算法+数据结构(Data Structure)=程序。 算法具有以下特征。 1、有穷性:一个算法必须保证执行有限步之后结束; 2、确定性:算法的每一步骤必须有确切的定义; 3、输入:一个算法有0个或多个输入,以刻画运算对象的初始情况,所谓0个输入是指算法本身定出了初始条件; 4、输出:一个算法有一个或多个输出,以反映对输入数据加工后的结果。没有输出的算法是毫无意义的; 5、可行性:算法中执行的任何计算步都是可以被分解为基本的可执行的操作步,即每个计算步都可以在有限时间内完成;(也称之为有效性) ②、算法的描述方法有自然语言、流程图、伪代码三种形式 自然语言描述法:指用人们日常生活中使用的语言(本国语言),用自然语言描述符合我们的习惯,且容易理解。 例1:求圆的周长和面积 算法如下:(自然语言描述法) (1)输入半径r ; (2) 计算周长c=2*π*r ; (3) 计算面积 s=π*r*r ; (4) 输出周长c,输出面积s ; (5) 结束 流程图描述:也称程序框图,它是算法的一种图形化表示方法。且描述算法形象、直观,更易理解。
vb常见题型汇总代码
1.Private Sub Command1_Click() Dim r As Double, c As Double, s As Double Dim pi As Double pi = 3.1415926 r = Val(Text1.Text) c = pi * 2 * r s = pi * r * r Label3.Caption = "圆的周长为" + Str(c) + "厘米" Label4.Caption = "圆的面积为" + Str(s) + "平方厘米" End Sub 2.(5秒5分倒计时) Dim n As Integer Private Sub Command1_Click() If Option1.Value Then n = 5 If Option2.Value Then n = 300 Timer1.Enabled = True Frame1.Enabled = False Command1.Enabled = False End Sub Private Sub Form_Load() Timer1.Enabled = False Timer1.Interval = 1000 End Sub Private Sub Timer1_Timer() n = n - 1 Text1.Text = Str(n \ 60) & "分" & Str(n Mod 60) & "秒" If n <= 0 Then Timer1.Enabled = False Frame1.Enabled = True Text1.Text = "时间到" End If End Sub 3.心想事成 Dim x As Integer Private Sub Command1_Click() Timer1.Enabled = True If Command1.Caption = "开始" Then Timer1.Enabled = True Command1.Caption = "停止" Else Timer1.Enabled = False Command1.Caption = "开始" End If End Sub Private Sub Form_Load() Timer1.Interval = 100 x = -100 End Sub Private Sub Timer1_Timer() Label1.Left = Label1.Left + x If Label1.Left <= 0 Then x = 100 If Label1.Left >= Form1.ScaleWidth - Label1.Width Then x = -100 End Sub 4.我的调色板(滚动条) Private Sub Command1_Click() Label5.ForeColor = Label4.BackColor End Sub Private Sub HScroll1_Change() Label4.BackColor = RGB(HScroll1.Value, HScroll2.Value, HScroll3.Value) End Sub Private Sub HScroll2_Change() Label4.BackColor = RGB(HScroll1.Value, HScroll2.Value, HScroll3.Value) End Sub Private Sub HScroll3_Change() Label4.BackColor = RGB(HScroll1.Value, HScroll2.Value, HScroll3.Value) End Sub 5.字形字体颜色(复选框,单选)Private Sub Check1_Click() If Check1.Value = 1 Then Text1.FontBold = True Else Text1.FontBold = False End If End Sub Private Sub Check2_Click() If Check1.Value = 1 Then
VB程序设计的常用算法填空题
VB程序设计的常用算法 例:用随机函数产生100个[0,99]范围内的随机整数,统计个位上的数字分别为1,2,3,4,5,6,7,8,9,0的数的个数并打印出来。 将程序编写在一个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 If a(i) < 10 Then Form1.Print Space(2); a(i); Else Form1.Print Space(1); a(i); End If If Then 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 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 二、求两个整数的最大公约数、最小公倍数 m=inputBox("m=") n=inputBox("n=") nm=n*m If m < n Then r=m mod n Do While m=n n=r
高中信息技术算法与程序设计VB知识点
高中信息技术《算法与程序设计VB(选修)》 知识要点 相关知识点 (一)算法 1、定义 相关题解: 1算法:就就是解决问题的方法与步骤。算法就是程序设计的“灵魂”,算法+数据结构=程序。运用计算机程序解决实际问题时,合理的步骤就是B、分析问题→设计算法→编写程序→调试程序 2.算法的描述方法: 1算法的描述:可分多种表达方法,一般用自然语言、流程图与伪代码进行描述。 2自然语言描述法:指用人们日常生活中使用的语言(本国语言),用自然语言描述符合我们的习惯,且容易理解。 3流程图描述:也称程序框图,它就是算法的一种图形化表示方法。且描述算法形象、直观,更易理解。 4伪代码描述法:就是介于自然语言与计算机程序语言之间的一种算法描述。就是专业软件开发人员常用方法。 (二) 程序设计基础 对象、属性=属性值 对象中属性可以在设计界面时通过属性窗中设置,也可以在运行时通过程序代码设置,方法如下例:给文本框“Txt123”的“Text”属性赋值为字符串“20”,代码如下 Txt123、text =”20” 变量=对象、属性 如果要获取对象的状态或特性,这时就要读取对象的属性值,方法如下 例:读取文本框“txt123”的“Text”属性的代码如下 a = txt123、text 2方法 [对象]、方法[参数名表] 例:form、print ”欢迎使用” 该语句使用print方法在form1窗体中显示字符串“欢迎使用” 3事件及事件驱动 事件就是对象对外部操作的响应,如在程序执行时,单击命令按钮会产生一个Click事件。如需要命令按钮响应Click事件,就把完成Click事件功能的代码写到Click事件的事件过程中,与事件一
VB键盘常量大全 256个虚拟键码
Public Const VK_LBUTTON = &H1 Public Const VK_RBUTTON = &H2 Public Const VK_CANCEL = &H3 Public Const VK_MBUTTON = &H4 Public Const VK_BACK = &H8 Public Const VK_TAB = &H9 Public Const VK_CLEAR = &HC Public Const VK_RETURN = &HD Public Const VK_SHIFT = &H10 Public Const VK_CONTROL = &H11 Public Const VK_MENU = &H12 Public Const VK_PAUSE = &H13 Public Const VK_CAPITAL = &H14 Public Const VK_ESCAPE = &H1B Public Const VK_SPACE = &H20 Public Const VK_PRIOR = &H21 Public Const VK_NEXT = &H22 Public Const VK_END = &H23 Public Const VK_HOME = &H24 Public Const VK_LEFT = &H25 Public Const VK_UP = &H26 Public Const VK_RIGHT = &H27 Public Const VK_DOWN = &H28 Public Const VK_Select = &H29 Public Const VK_PRINT = &H2A Public Const VK_EXECUTE = &H2B Public Const VK_SNAPSHOT = &H2C Public Const VK_Insert = &H2D Public Const VK_Delete = &H2E Public Const VK_HELP = &H2F Public Const VK_0 = &H30 Public Const VK_1 = &H31 Public Const VK_2 = &H32 Public Const VK_3 = &H33 Public Const VK_4 = &H34 Public Const VK_5 = &H35 Public Const VK_6 = &H36 Public Const VK_7 = &H37 Public Const VK_8 = &H38 Public Const VK_9 = &H39 Public Const VK_A = &H41 Public Const VK_B = &H42 Public Const VK_C = &H43 Public Const VK_D = &H44
VB程序设计知识点归纳
第一章 1 从功能上讲,Visual Basic 6.0有3种版本,即:学习版、专业版、企业版 2 与传统的程序设计语言相比,Visual Basic最突出的特点是事件驱动编程机制。 3 Visual Basic 6.0集成环境的主窗口中含有标题栏、菜单栏、工具栏 4用标准工具栏中的工具按钮不能执行的操作是打印源程序。 5关于Visual Basic"方法"的概念错误的是方法是对事件的响应 6在Visual Basic中,称对象的数据为属性 7Visual Basic应用程序可以用解释方式执行也可以用编译方式执行 第二章 1 计时器控件的Interval属性用于设置Timer事件发生的时间间隔,为了暂时关闭计时器,应把该计时器的Enabled 属性设置为False ,如果要求设置定时器时间间隔为1秒钟,那么它的Interval属性值应该等于1000 2 利用Ctrl + G操作可以打开立即窗口。 3 假定窗体上有一个标签,名为Lable1。为了使该标签透明并且没有边框,则正确的属性设置为:Lable1.BackStyle = 0 Lable1.BorderStyle = 0 4在设计阶段,当双击窗体上的某个控件时,所打开的窗口是代码窗口 5 在Visual Basic中,窗体文件的扩展名为FRM 6 窗体的Name属性指定窗体的名称,用来标识一个窗体 7 改变控件在窗体中的上下位置,应修改该控件的属性是Top 8 表示滚动条控件取值范围最大值的属性是Max 9 如果要改变窗体的标题,则需要设置的属性是Caption 10 在文本框(Text)中,通过ForeColor属性来设置字体颜色 11 若要求从文本框中输入密码时在文本框中只显示*号,则应当在此文本框的属性窗口中设置Passwordchar属性值 为* 12 能够改变复选框中背景颜色的属性是Backcolor 13 图片框是不具有Picture属性的对象 14 窗体的Name属性指定窗体的名称,用来标识一个窗体 15 要想返回文本框中输入的内容则可利用text属性进行编程 第三章 1用于从字符串左边截取字符的函数是Left( ),设a="Visual Basic",使b="Basic"的语句是b=Left(a,8,5)。 2下列符号中哪个是VB程序中合法的变量名:A ab7 B 7ab C If D a*bc (A)数字开头,关键字,* 3X是小于100的非负数,用VB表达式表达正确的是0<=X and X<100 4设有如下变量声明Dim TestDate As Date 为变量TestDate正确赋值的表达方式是 TextDate=#1/1/200 2# 5表达式4 + 5 \ 6 * 7 / 8 Mod 9的值是5,设a=3,b=5,则表达式(a>b)Or(b>0)值为真。5/5.25 为1 如果除数与被除数不是整数时,系统会自动对其进行取整运算,取整是有规律的:如果整数部分为偶数,大于 0.5的就进位,小于等于0.5的就直接把小数去掉,5舍6入;如果整数部分为奇数,4舍5入。例如: 5\2.5等价于5\2 5\2.6等价于5\3 6函数String(n,"str")的功能是返回由n个字符组成的字符串 7设有如下声明: Dim X As Integer 如果Sgn(X) 的值为-1,则X的值是小于0的数Sgn(3-5)=-1 Sgn(5-3)=1 8Integer类型的数据由2字节组成,Long类型的数据由4字节组成。 9已知X<Y,A>B,正确表示它们之间关系的式子是Sgn(Y-X)-Sgn(A-B)=-2 10在一个有①逻辑运算②算术运算及③关系运算混合在一起的表达式(无括号)中,其运算顺序为②③①
vb常用程序代码
1、求半径为r的圆的面积,要求用户从键盘输入半r。 程序代码: Private Sub Form_click() Const PI = 3.14 Dim r% Dim s! r = InputBox("请输入半径r的值:", "求圆的面积") s = PI * r * r Form1.FontSize = 16 Print "半径是" + Str(r) + "的圆的面积是" + Str(s) End Sub 2、输入三个整数,从小到大顺序输出。 程序代码: Private Sub Form_click() a = InputBox("a") b = InputBox("b") c = InputBox("c") Print "排序前:"; a, b, c If a > b Then t = a: a = b: b = t If a > c Then t = a: a = c: c = t If b > c Then t = b: b = c: c = t Print "排序后:"; a, b, c End Sub 3、输入三个整数,从大到小顺序输出。 程序代码: Private Sub Form_click() a = InputBox("a") b = InputBox("b") c = InputBox("c") Print "排序前:"; a, b, c If a 算法与程序设计VB选修
高中信息技术《算法与程序设计VB (选修)》 知识要点 相关知识点 (一)算法 1.定义 相关题解: 1算法:就是解决问题的方法和步骤。算法是程序设计的“灵魂”,算法+数据结构=程序。 单选题 1、下列关于算法说法不正确的是( A ) A 、算法独立于任何具体的语言,BASIC 算法只能用BASIC 语言来实现 B 、解决问题的过程就是实现算法的过程 C 、算法是程序设计的“灵魂” D 、其它三项都正确 2.算法的描述方法: 1算法的描述:可分多种表达方法,一般用自然语言、流程图和伪代码进行描述。 2自然语言描述法:指用人们日常生活中使用的语言(本国语言),用自然语言描述符合我们的习惯,且容易理解。 3流程图描述:也称程序框图,它是算法的一种图形化表示方法。且描述算法形象、直观,更易理解。 4伪代码描述法:是介于自然语言和计算机程序语言之间的一种算法描述。是专业软件开发人员常用方法。 相关题解: 单选题 1、图形符号" " 在算法流程图描述中表示( B ). A 处理或运算的功能 B 输入输出操作 C D 算法的开始或结束 2、图形符号在算法流程图描述中表示( A ). A B 输入输出操作 C 用来判断条件是否满足需求 D 算法的开始或结束 3、以下哪个是算法的描述方法?( A ) A 流程图描述法 B 枚举法 C 顺序法 D 列表法 4、以下哪个是算法的描述方法?( D ) A 顺序法 B 列表法 C 集合法 D 自然语言描述法 (二)程序设计基础
(1)常用高级编程语言:BASIC、VB、Pascal、C、C++、Java 1面向对象的程序设计语言:其中的对象主要是系统设计好的对象,包括窗体等、控件等 2控件:是指工具箱中的工具在窗体中画出的、能实现一定功能的部件,如文本框,命令按钮等。 对象属性=属性值 对象中属性可以在设计界面时通过属性窗中设置,也可以在运行时通过程序代码设置,方法如下例:给文本框“Txt123”的“Text”属性赋值为字符串“20”,代码如下 Txt123.text =”20” 变量=对象.属性 如果要获取对象的状态或特性,这时就要读取对象的属性值,方法如下 例:读取文本框“txt123”的“Text”属性的代码如下 a = txt123.text
VB常用命令大全
常用命令 FontStrikeThru属性是逻辑型,决定对象上正文是否加一删除线。 FontItalic属性是逻辑型,决定对象上正文是否是斜体。 窗体的其它常用属性 2.Icon 控制图标属性:返回或设置窗体左上角显示或最小化时显示的图标。 注意:此属性必须在ControlBox属性设置为Ture才有效 3.ControlBox控制菜单框属性:设置Ture为有,如设置为False则无控件菜单,同时窗体也无最大化按钮和最小化按钮,即使MaxButton属性和MinButton属性设置为Ture。 5. BorderStyle:边框风格, 通过改变BorderStyle 属性,可以控制窗体如何调整大小。 0-None:无边框; 1-Fixed Single:单线边框,不可以改变窗口大小; 2-Sizable:双线边框,可以改变窗口大小; 3-Fixed Double:双线框架,不可以改变窗口大小。 4-Fixed Tool Window:窗体外观与工具条相似。有关闭按钮,不可以改变窗口大小。 5-Sizable Tool Window:窗体外观与工具条相似。有关闭按钮,可以改变窗口大小。 6. WindowsState属性 用来设置窗体的运行状态。 0-Normal:正常窗口状态,有窗口边界; 1-Minimized:最小化状态,以图标方式运行; 2-Maximized:最大化状态,无边框,充满整个屏幕。 7. AutoRedraw属性 该属性决定窗体被隐藏或被另一窗口覆盖之后,是否重新还原该窗体被隐藏或覆盖以前的画面。即是否重画如Circle、Line、Pset和Print等方法的输出。 当为True时,重新还原该窗体以前的画面。 当为False时,则不重画AutoRedraw属性。 4 Resize事件 无论是因为用户交互,还是通过代码调整窗体的大小,都会触发一个Resize事件。 5 Activate事件:当窗体由非活动窗体变为活动窗体,即当窗体得到焦点时触发该事件。窗体常用的方法有: 打印输出Print 移动Move 清除Cls 显示Show 隐藏Hide等方法。 方法的使用的形式: [对象.]方法[参数] 1.Print方法 形式: [窗体名.]Print[{Spc(n)|Tab(n)}][表达式列表][;|,] 作用: 在对象上输出信息 Spc(n)函数:插入n个空格,允许重复使用。 Tab(n)函数:从窗体第n列开始输出,允许重复使用。 ;(分号):光标定位上一个显示的字符后(紧凑格式)。 ,(逗号):光标定位在下一个打印区的开始位置处。每个打印区占14列(标准格式)。无;,换行。
VB代码大全
隐藏form1: form1.hide 显示form1: form1.show --------------------------------------------------------------------------------------------- 退出程序时,弹出窗口提示是否要退出: Private Sub Form_Unload(Cancel As Integer) Dim iAnswer As Integer iAnswer = MsgBox("真要退出吗?", vbYesNo) If iAnswer = vbNo Then Cancel = True Else End End If End Sub ---------------------------------------------------------------------------------------------- 只能用任务管理器关闭程序的代码: Private Sub From_Unload(Cancel As Integer) Cancel = true End Sub ------------------------------------------------------------------------------------------------ 点击command1打开33IQ网: Dim strURL Private Sub Command1_Click() strURL = "错误!超链接引用无效。 Shell "explorer.exe " & strURL, 1 End Sub ------------------------------------------------------------------------------------------------ 运行c:\1.exe shell "c:\1.exe" 执行c:\1.bat shell "c:\1.bat" 注:只适用于大部分exe和全部bat。
算法与程序设计(VB)论文:算法与程序设计(VB)的反思性学习
算法与程序设计(VB)论文:算法与程序设计(VB)的反思性学 习 【摘要】高中信息技术课程标准是以普通高中整体改革为背景的,新课标注重提高信息素养,打造终身学习的平台,培养解决问题的能力,共同建构健康的信息文化。本文就高中算法与程序设计教学,浅谈了自己的几点思考:即教师在正确认识高中阶段开设程序设计教学的重要性基础之上,如何培养学生的反思性学习能力,从而更好的开展程序设计教学,提高学生的信息素养。 【关键词】程序设计教学;认识;反思性学习 江苏省《高中信息技术课程标准要求》指出:选修“算法与程序设计”模块以算法与程序设计为主线,揭示利用计算机解决实际问题的过程。通过本模块的教学,让学生体验算法思想,了解算法与程序设计在解决问题过程中的地位和作用。使学生能从简单问题出发,设计解决问题的算法,并能初步使用一种程序设计语言编制程序、实现算法、解决问题。就高中程序设计教学而言,笔者有这样几点思考。 一、对高中阶段开设程序设计教学的认识 高中阶段开设算法与程序设计教学有其必要性。学生在高中阶段打下基础,有利于他们进入大学的深造和就业以后的继续教育。此外,高考数学中加入了算法模块,也证明了
开设算法与程序设计教学的重要性。 算法与程序设计属于较高层次的学习内容,所以学习的深度和广度要由教师具体情况具体对待。教师要帮助学生充分认识到该部分内容的重要性,让学生在学习过程中积极发挥主观能动性,从而促使教学工作科学、合理、有效地开展。 二、程序设计教学中培养学生反思性学习能力 反思性学习,顾名思义就是通过对学习活动过程的反思来进行学习。学生具有反思性学习的意识是反思性学习的前提。让学生明确没有反思便难有自我改错纠偏的道理;明确反思不仅能及时改正错误,还能优化已有认识,提高自身合理性水平。对于学生的成功予以适当表扬与鼓励,还可以达到强化学生反思意识的效果。另外,教师要营造开放、合作、协调、信任的教学氛围,鼓励学生大胆地质疑,给出别出心裁的答案。学生智慧的激活,会反作用于教师和其他学生,使其能在更高层次上积极思维,从而在师生、学生间积极思维的互动中,不断闪耀出智慧的光芒,从而建立一种互动的反思关系。 反思性学习不仅仅是对学习一般性的回顾或重复,而是深究学习活动中所涉及的知识、方法、思路、策略等,具有了较强的科学研究的性质。新课标强调关注每个学生的情感、态度、价值观和一般能力的培养。所以在教学中,教师
VB编程常用代码 大一练习专用
A,B,C排序由大到小 Dim a As Single,b As Single,c As Single a=Val(Text1.Text) b=Val(Text2.Text) c=Val(Text3.Text) If b>a Then d=a:a=b:b=d End If If c>a Then d=a:a=c:c=d End If If c>b Then d=b:b=c:c=d End If Text4.Text=a Text5.Text=b Text6.Text=c End Sub Private Sub Command2_Click() Text1.Text="" Text2.Text="" Text3.Text="" Text4.Text="" Text5.Text="" Text6.Text="" End Sub 计算a+b Private Sub Command1_Click() Text4.Text=Val(Text2.Text)+Val(Text3.Text) Text1.Text="欢迎新同学" End Sub 清除
Private Sub Command2_Click() Text1.Text="" Text2.Text="" Text3.Text="" Text4.Text="" End Sub 奇偶数显示器 显示 Private Sub Command1_Click() Dim a As Integer a=Val(Text1.Text) If a/2=Int(a/2)Then Text2.Text="您输入的数是偶数" Else Text2.Text="您输入的数是奇数" End If End Sub 清除 Private Sub Command2_Click() Text1.Text="" Text2.Text="" End Sub 奇偶数判断 Dim a,b As Integer Dim result As Integer a=Val(InputBox("请输入一个整数","数的输入",300,400)) b=Val(InputBox("请输入一个整数","数的输入",300,400)) If a/2=Int(a/2)Then result=MsgBox("您输入的数:"&a&"是一个偶数",1,"判断结果") Form1.Print rusult Else m="您输入的数:"&a&"是一个奇数" result=MsgBox("您输入的数:"&a&"是一个奇数",1,"判断结果") Form1.Print result End If If b/2=Int(b/2)Then result=MsgBox("您输入的数:"&b&"是一个偶数",1,"判断结果") Form1.Print rusult Else result=MsgBox("您输入的数:"&b&"是一个奇数",1,"判断结果")
算法与程序设计
算法与程序设计(选修) 相关知识点 (一)算法 1.定义 相关题解: 单选题 1、下列关于算法说法不正确的是( A ) A 、算法独立于任何具体的语言,BASIC 算法只能用BASIC 语言来实现 B 、解决问题的过程就是实现算法的过程 C 、算法是程序设计的“灵魂” D 、其它三项都正确 2、下列关于算法说法不正确的是( D ) . A 、算法是程序设计的“灵魂” B 、解决问题的过程就是实现算法的过程 C 、其它三项都正确 D 、算法独立于任何具体的语言,BASIC 算法只能用BASIC 语言来实现 2.算法的描述方法: (1)自然语言描述法; (2)流程图描述法; (3)常用流程图的符号意义。 相关题解: 单选题 1、图形符号" "在算法流程图描述中表示( B ). A 处理或运算的功能 B 输入输出操作 C 用来判断条件是否满足需求 D 算法的开始或结束 2、图形符号 在算法流程图描述中表示( A ). A 处理或运算的功能 B 输入输出操作 C 用来判断条件是否满足需求 D 算法的开始或结束 3、以下哪个是算法的描述方法?( A ) A 流程图描述法
B 枚举法 C 顺序法 D 列表法 4、以下哪个是算法的描述方法?( D ) A 顺序法 B 列表法 C 集合法 D 自然语言描述法 (二)程序设计基础 (1)常用高级编程语言:BASIC、VB、Pascal、C、C++、Java 相关题解: 单选题 1、下列关于程序设计说法正确的是( B )。 A、程序设计语言的发展经历了机器语言、汇编语言到高级语言的过程,比 较流行的高级语言是PASCAL, FORTRAN, EXCEL, C++等 B、程序设计就是寻求解决问题的方法,并将其实现步骤编写成计算机可以执行的程序的过程 C、程序设计语言和计算机语言是同一个概念的两个方面 D、程序设计就是指示计算机如何去解决间题或完成一组可执行指令的过程 2、下列说法错误的是(D ). A、程序设计就是寻求解决问题的方法,并将其实现步骤编写成计算机可以执行的程序的过程 B、程序设计语言的发展经历了机器语言、汇编语言、高级语言的过程 C、计算机程序就是指计算机如何去解决间题或完成一组可执行指令的过程 D、程序设计语言和计算机语言是同一概念的两个方面 2.数据及运算 (1)常用数据类型:Integer、Long、Single、Double、Boolean 表示范围: Integer (-32768 ——32767,存储为16 位,2 个字节) Long(-21亿——21亿,可以表示人口数量) Boolean(True 或False) (2)常量和变量的命名、声明及赋值 符号常量的声明:Const 常量名As 常量类型= 常量值 如:Const pi As Single = 3.14159 变量的声明: Dim 变量名As 变量类型 如:Dim a As Integer 定义一个整型变量,变量名为a 相关题解: 单选题 1、下列变量名写法错误的是( B ) A、abc_123 B、123abc C、abc123 D、abc 2、下列语句中定义了一个实型变量的是( B ) A、Dim end as Integer