资源描述
VB复习
一:基础知识
对象的有关概念l
1. 对象Object:VB中常用的对象有:窗体、控件等。
2. 对象的三要素
(1)属性Property:用来描述和反映对象外部特征的参数。
(2)方法Method:允许其他对象与之交互的方式,表明一个对象所具有的能力。
(3)事件Event:响应对象的动作称为事件,它发生在用户与应用程序交互时。如单击控件、鼠标移动、键盘按下等。
事件驱动Event Driven:VB为窗体和大多数控件都规定了一组事件,当应用程序被启动后,VB随时准备捕获各种事件。一旦发生了某个事件,VB就会执行与该事件相联系的事件过程;执行完后,VB等待下一个事件的发生。
VB程序的执行步骤如下:l
(1)启动应用程序,装载和显示窗体;
(2)窗体(或窗体上的控件)等待事件的发生;
(3)事件发生时,执行对应的事件过程;
(4)重复执行步骤(2)和(3) ;
(5) 直到遇到END结束语句结束程序的运行;或按“结束”强行停止程序的运行。
VB集成开发环境l
1. 主窗口
应用程序窗口,由标题栏、菜单栏和工具栏组成。
2. 窗体(form)窗口
设计VB程序的界面。
3. 代码(code)窗口
编辑窗体、标准模块中的代码。
4. 属性(properties)窗口
所有窗体或控件的属性设置。
5. 工程资源管理器(project expror)窗口
保存一个应用程序所有的文件。
6. 工具箱(toolbox)窗口
显示各种控件的制作工具,供用户在窗体上设计
建立VB程序的步骤l
1. 建立用户界面的对象,并设置对象属性;
2. 对象事件过程及编程;
3. 程序运行和调试;
4. 保存文件:
窗体frm格式和vb工程vbp格式
VB 编 码 基 础l
1. VB代码不区分字母的大小写
系统保留字自动转换每个单词的首字母大写;
用户自定义行以第一次为准。
2. 语句书写自由
一行可书写几句语句,之间用冒号分隔;
一句语句可分若干行书写,用续行符_(空格+下画线)连接一行<=255个字符。
3. 注释有利于程序的维护和调试
Rem开始 或 单撇号 '
4. 保留行号与标号
数据类型l
常 量
在程序运行过程中,其值不能被改变的量称为常量。
1. 整型常量
(1)整型(Integer):表示-32768至32767之间的整数
例如:10 110 20
(2)长整型(Long):
表示-2,147,483,648至2,147,483,647之间的整数
例如:长整型常数的书写: 23&
通常我们说的整型常量指的是十进制整数,但VB中可以使用八进制和十六进制形式的整型常数,因此整型常数有如下三种形式:
1)十进制整数。如125,0,-89。20
2)八进制整数。以&或&O(字母O)开头的整数是八进制整数,如&O25表示八进制整数25,即(25)8 ,等于十进制数21。
3)十六进制。以&H开头的整数是十六进制整数,如&H25表示十六进制整数25,即(25)16 ,等于十进制数37。VB中的颜色数据常常用十六进制整数表示。
2、实数
1) 单精度实型(Single):有效数为7位
表示-3.37E+38至3.37E+38之间的实数
2)双精度实型(Double):有效数为15位
常量的表示:
1)十进制小数形式。它是由正负号(+,-)、数字(0~9)和小数点(.)或类型符号(!、#)组成,即±n.n,±n!或±n#,其中n是0~9的数字。
例如0.123、.123、123.0、123!、123#等都是十进制小数形式。
2)指数形式。
±nE±m 或 ±n.nE±m, ±nD±m 或 ±n.nD±m
例:1.25E+3 和 1.25D+3相当于1250.0 或者1.25×103。
3、字符串常量
在VB中字符串常量是用双引号“"”括起的一串字符,例如"ABC","abcdefg","123","0","VB程序设计"等。
说明:
(1)字符串中的字符可以是所有西文字符和汉字、标点符号等;
(2)""表示空字符串,而" "表示有一个空格的字符串;
算术运算符>字符运算符>关系运算符>逻辑运算
说明:
1.当一个表达式中出现多种运算符时,首先进行算术运算符,接着处理字符串连接运算符,然后处理比较运算符,最后处理逻辑运算符,在各类运算中再按照相应的优先次序进行。
2.可以用括号改变优先顺序,强令表达式的某些部分优先运行。括号内的运算总是优先于括号外的运算。对于多重括号,总是由内到外。
3. 表达式的书写中需注意的问题
(1)运算符不能相邻。例a+-b是错误的。
(2)乘号不能省略。例x 乘以y 应写成:x*y
(3)括号必须成对出现,均使用圆括号。
(4)表达式从左到右在同一基准并排书写,不能出现上下标
(5)要注意各种运算符的优先级别,为保持运算顺序,在写VB表达式时需要适当添加括号(),若用到库函数必须按库函要求书写。
4. 不同数据类型的转换
运算结果的数据类型向精度高的数据类型靠。
Integer<Long<Single<Double<Currency常用内部函数
1、 数学函数
常用的数学函数
Abs(N) Cos(N) Sin(N) Exp(N)
Log(N) Sqr(N) Rnd[(N)] Sgn(N)
说明:
(1) 在三角函数中的自变量是以弧度为单位。
如:sin300 sin(3.14159/180*30)
(2) Rnd函数返回0 ~ 1(包括0和不包括1)之间的双精度随机数。
若要产生1-100的随机整数: Int(Rnd *100)+1
提问:怎样产生[N,M]区间的随机数?Int ( ( M - N + 1 ) * Rnd + N )
2、转换函数
常用的转换函数见表3-9所示
说明:
(1)要区别两个取整函数int()和fix()
Fix(N)为截断取整,即去掉小数后的数。
Int(N)不大于N的最大整数。
N>0与int(N) 相同,当N<0时, int(N) 与fix(N) -1相等。
例如: Fix(9.59) =9, Int(9.59) =9
Fix(-9.59) =-9, Int(-9.59) =-10
思考:如何实现四舍五入取整?
(2)Asc("Abcd") 值为: 65 (只取首字母的Ascii值)
(3)Val("abc123") 值为:0, Val("1.2sa10") 值为1.2
注意: Val( )函数只将最前面的数字字符转换为数值
常用方法
方法是面向对象的,故使用的形式为: [对象.]方法
Print方法
形式: [对象.]Print[{Spc(n)|Tab(n)}][表达式列表][;|,]
作用:在对象上输出信息
对象:窗体、图形框或打印机(Printer) ,省略对象在窗体上输出。
Spc(n)函数:插入n个空格,允许重复使用。
Tab(n)函数:左端开始右移动n列,允许重复使用。
;(分号):光标定位上一个显示的字符后。
,(逗号):光标定位在下一个打印区的开始位置处。
无 ;,时换行。
开始打印的位置缺省为打印对象的左上角0,0。
注意:Print方法在Form _Load事件过程中起作用,必须设置窗体的
AutoRedraw为True。
二:程序结构
• 顺序结构
VB程序设计采用结构化程序设计的思想。在VB中有3种基本的程序流程结构:顺序结构、选择结构和循环结构。所有的程序都可以看成是这三种结构或三种结构的组合。
★顺序结构
所谓顺序结构,就是在程序运行过程中,按照语句的顺序逐条执行。。顺序结构中主要的语句是赋值语句、输入输出语句及End语句等。赋值语句
赋值语句是最基本的语句之一,通过赋值语句,可以在程序中改变变量的值,或改变对象属性值。其语法格式为:
• 变量名 = 表达式
• 对象.属性 = 表达式
例如:A = Text1.Text
B = 0
Text1.Text = Text1.Text + Command1.Caption
A = 2 = 3 '结果为false(表达式2=3的值)
sb = Round(Sqr(delt) / (2 * a), 7)
• 选 择 结 构
1. If…Then语句(单分支结构)
If <表达式> Then
语句块
End If
或 If <表达式> Then <语句>
例:已知两个数x和y,比较它们的大小,将大的数存在x中
If x<y Then
t=x
x=y
y=t
End If
或 If x<y Then t=x: x=y: y=t
例题:求一元二次方程的根。
y=ax^2+bx+c 的形式的一元二次方程,输入a,b,c的值,的到方程的根
Dim a As Single
Dim b As Single
Dim c As Single
Dim x1 As Single
Dim x2 As Single
Private Sub Command1_Click()
a = Val(Text1.Text)
b = Val(Text2.Text)
c = Val(Text3.Text)
If b * b - 4 * a * c > 0 Then
x1 = (-b + Sqr(b * b - 4 * a * c)) / (2 * a)
x2 = (-b - Sqr(b * b - 4 * a * c)) / (2 * a)
Label4.Caption = "方程有两实根,分别为:" + Str(x1) + Str(x2)
ElseIf b * b - 4 * a * c = 0 Then
x2 = (-b) / (2 * a)
Label4.Caption = "方程有一根,为:" + Str(x2)
Else
Label4.Caption = "方程没有实根"
End If
End Sub
• 循环结构
循环结构语句
1.For 循环
FOR循环一般格式:
For 循环变量=初值 to 终值 step 步长
语句组(也被叫做循环体)
next 循环变量
例题:累加器 s=1+3+5+7+9+…+19
s=0
for i=1 to 20 step 2
s=s+i
next i
print s
答案:100
注意1:初值和终值即可是整数,也可是小数
s=0
for i=1.2 to 4.9 step 0.2
s=s+1
next i
print s
答案:19
注意2:步长=1时,可省略不写; 步长值不能为0
例题:累乘器:
s=1
for i=1 to 5
s=s*i
next i
print s
答案:120
注意3:初值和终值大小
s=1
for i=5 to 1 step 2
s=s*i
next i
print s
答案:1(因为循环条件不满足,循环语句没执行)
将步长改为-2,答案为______
练习:求1到100的和。
Private Sub Command1_Click()
Dim i As Integer, sum As Integer
sum = 0
For i = 1 To 100
sum = sum + i
Next i
Print sum
End Sub
累乘器:乘=1*2*3*…*100
Private Sub Command2_Click()
Dim i As Integer, cheng As Single
cheng = 1
For i = 1 To 10
cheng = cheng * i
Next i
Print cheng
End Sub
累加、累乘
累加、累乘是较常见的数值问题。累加(累乘)是将多个数
相加(乘),所以一般采用循环结构来实现。在循环体中应有表
示累加(如sum=sum+x)或累乘(如t=t*i)的赋值语句。需要注
意的是,累加中用于存放和的变量一般赋初值为0,而累乘中用于
存放积的变量赋初值为1。
例题:阶乘 求1!+2!+…+n!,n由键盘输入。
【分析】该题先求阶乘,再将阶乘值累加。循环次数由用户输入确定(即n的值)。
Private Sub Form_Click()
Dim s as double,t as double,n as integer
s=0
t=1
n=val(InputBox(“请输入n的值”))
For i=1 to n
t=t*i ’ 求i!
s=s+t
Next i
Print “1!+2!+…+”;n;”!=”;s
End Sub
4037913
三:静态数组及声明
数组不是一种数据类型,而是一组相同类型的变量的集合,数组必须先声明后使用。
两类数组: 静态(定长)数组、动态(可变长)数组
1. 静态数组及声明
形式: Dim 数组名(下标1[,下标2…]) [As 类型]
声明了数组的名、维数、大小、类型
维数:几个下标为几维数组,最多60维。
下标:[下界 To ] 上界 省略下界为0 ,必须为常数。
每一维大小:上界-下界+1
数组大小: 每一维大小的乘积
例:Dim mark(1 to 100) As Integer
数组的基本操作
1.用循环数组元素进行赋值
For i = 1 To 10
iA(i)=0
Next i
2. 用循环输出数组元素
For i = 1 To 10
print iA(i)
Next I
四:穷举法
穷举法的基本思想是:对要解决的问题的所有可能情况一一检查,从中找到符合要求的答案。
例题:
百元买百鸡问题。假定公鸡每只5元,母鸡每只3元,小鸡1元钱3只。现在有100元钱要求买100只鸡,而且每一种鸡都要有,请编程列出所有可能的购鸡方案。
设公鸡、母鸡、小鸡各为x、y、z只,根据题目要求,列出方程为:
x+y+y=100
3x+5y+z/3=100
三个未知数,两个方程,此题有若干个解,采用“穷举法”,把每一种情况都考虑到。
最简单三个未知数利用三重循环来实现。
Private Sub Command1_Click()
Dim x, y, z As Integer
Dim a As Integer
For x = 1 To 20
For y = 1 To 33
For z = 1 To 100
If 5 * x + 3 * y + z / 3 = 100 And x + y + z = 100 Then
Print "x="; x;
Print "y="; y;
Print "z="; z
End If
Next z
Next y
Next x
Print
End Sub
运行结果如下:
例题:求100-999之间的所有“水仙花数”。“水仙花数”是一个三位数,其各位数字的立方和等于该数本身。例如:153=1^3+5^3+3^3,153是一个水仙花数。
【分析】采用穷举法对指定范围内的每一个数进行判断它是否为水仙花数。判断一个数是否为水仙花数的关键是如何将此数的各位数字分离出来。如对于数据153,可采用下面的方法分离其各位数字
(1)int(153/100),得到百位数字1。
(2)int((153-1*100)/10),得到十位数字5。
(3)153-1*100-5*10,得到个位数字3。
程序代码如下:
Private Sub Form_Click()
Dim i%,a%,b%,c%
For i=100 to 999
a= i\100
b= (i-a*100)\10
c=i-a*100-b*10
If i=a*a*a+b*b*b+c*c*c Then Print i;
Next i
End Sub
运行结果如下:
153 370 371 407
选择结构
1.if…Then语句
语句格式:
(1) If < 表达式> Then <语句>
(2) If < 表达式> Then
<语句块>
End If
语句功能:当<表达式>的值为True或非零时,执行Then
后面的语句(或语句块),否则不做任何操作,实现单分支
选择结构。。
2.If…Then…Else语句
语句格式:
(1) If < 表达式> Then <语句1> Else <语句2>
(2) If <表达式> Then
<语句块1>
Else
<语句块2>
End If
语句功能:当<表达式>的值为True或非零时,执行Then后面的语句(语
句块),否则执行Else后面的语句(或语句块),实现双分支选择结构
例如:输入一个整数,判断其奇偶性。
程序代码如下:
Private Sub Form_Click()
Dim x as integer
x=InputBox(“请输入一个整数”)
If x mod 2=0 Then
Print x;”是偶数”
Else
Print x;”是奇数”
End if
End Sub
3.If…Then…ElseIf语句
语句格式:
If <表达式1> Then
<语句块1>
ElseIf <表达式2> Then
<语句块2>
…
[Else
<语句块n+1>]
End If
语句功能:根据不同的表达式值确定执行哪个语句块,实现多分支选择结构。
使用说明:先计算<表达式1>的值,若为真,则执行<语句块1>,并跳过其他
分支语句执行If语句的后续语句(即End If后面的语句);若为假,则计算<表
达式2>的值,依此类推,直到找到一个为真的条件时,才执行相应的语句块,然
后执行End If后面的语句。格式中的Else是可选项,表示若无任何表达式值为真
时,则执行<语句块n+1>;
若无Else选项,且所有条件表达式值都不为真,则不执
行If语句中的任何语句块。
【注意】
当If语句内有多个表达式的值为真时,只执行第一个为
真的表达式后的语句块。
例题:求一元二次方程的根。
y=ax^2+bx+c 的形式的一元二次方程,输入a,b,c的值,的到方程的根
Dim a As Single
Dim b As Single
Dim c As Single
Dim x1 As Single
Dim x2 As Single
Private Sub Command1_Click()
a = Val(Text1.Text)
b = Val(Text2.Text)
c = Val(Text3.Text)
If b * b - 4 * a * c > 0 Then
x1 = (-b + Sqr(b * b - 4 * a * c)) / (2 * a)
x2 = (-b - Sqr(b * b - 4 * a * c)) / (2 * a)
Label4.Caption = "方程有两实根,分别为:" + Str(x1) + Str(x2)
ElseIf b * b - 4 * a * c = 0 Then
x2 = (-b) / (2 * a)
Label4.Caption = "方程有一根,为:" + Str(x2)
Else
Label4.Caption = "方程没有实根"
End If
End Sub
三:算法及程序
穷举法的基本思想是:对要解决的问题的所有可能情况一一检查,从中找到符合要求的答案。
例题:百钱买百鸡问题:我国古代数学家张丘建在《算经》中提出了“百鸡问题”:“鸡翁一,值钱五;鸡母一,值钱三;鸡雏三,值钱一。百钱买百鸡,问鸡翁、母、雏各几何?”每种鸡至少有一只分析】设母鸡、公鸡、小鸡各为x,y,z只,
程序代码如下:
Private Sub Command1_Click()
Dim x, y, z As Integer
Dim a As Integer
For x = 1 To 20
For y = 1 To 33
For z = 1 To 100
If 5 * x + 3 * y + z / 3 = 100 And x + y + z = 100 Then
Print "x="; x;
Print "y="; y;
Print "z="; z
End If
Next z
Next y
Next x
Print
End Sub
vb期末20道编程题 姐姐我吐血整理的
1:求随机10个整数的最大值、最小值、平均值以及和
Option Base 1
Dim a(10) As Integer, i As Integer
Private Sub Command1_Click()
Randomize
For i = 1 To 10
a(i) = Int(Rnd * 90) + 10
Text1 = Text1 & a(i) & " "
Next i
End Sub
Private Sub Command2_Click()
Dim max As Integer
max = a(1)
For i = 2 To 10
If a(i) > max Then
max = a(i)
End If
Next i
Text2 = max
End Sub
Private Sub Command3_Click()
Dim min As Integer
min = a(1)
For i = 1 To 10
If a(i) < min Then
min = a(i)
End If
Next i
Text3 = min
End Sub
Private Sub Command4_Click()
Dim s As Integer
For i = 1 To 10
s = s + a(i)
Next i
Text4 = s
End Sub
Private Sub Command5_Click()
Dim s As Integer, ave As Integer
For i = 1 To 10
s = s + a(i)
ave = s / 10
Next i
Text5 = ave
End Sub
2:水仙花数
Private Sub Command1_Click()
Dim x As String, y As Integer
x = Val(Text1.Text)
a = x \ 100
b = (x - a * 100) \ 10
c = x Mod 10
y = a ^ 3 + b ^ 3 + c ^ 3
Text2.Text = CStr(a)
Text3.Text = CStr(b)
Text4.Text = CStr(c)
Text5.Text = CStr(y)
If y = x Then
MsgBox "" & x & "是水仙花数"
Else
MsgBox "" & x & "不是水仙花数"
End If
End Sub
3:百元买鸡问题
Option Explicit
Dim x As Integer, y As Integer, z As Integer
Private Sub Command1_Click()
List1.AddItem "公鸡 母鸡 小鸡"
For x = 1 To 20
For y = 1 To 33
z = 100 - x - y
If 5 * x + 3 * y + z / 3 = 100 Then
List1.AddItem CStr(x) & Space(6) & CStr(y) & Space(6) & CStr(z)
End If
Next y
Next x
End Sub
4:1000以内完数
Private Sub Form_Click()
Dim i, j As Integer
For i = 4 To 1000
temp = 1
For j = 2 To i / 2
If i Mod j = 0 Then
temp = temp + j
End If
Next j
If temp = i Then
Print i
End If
Next i
End Sub
5: 三位数之和
Private Sub Command1_Click()
Dim x As String, y As Integer
x = Val(Text1.Text)
a = x \ 100
b = (x - a * 100) \ 10
c = x Mod 10
y = a + b + c
Text2 = CStr(y)
End Sub
6: 最小公倍数
Private Sub Command2_Click()
Dim m As Integer, n As Integer
m = Text1
n = Text2
Text4 = m * n / gcd(m, n)
End Sub
Private Function gcd(m As Integer, n As Integer)
Dim k As Integer
Do
k = m Mod n
m = n
n = k
Loop Until k = 0
gcd = m
End Function
7:求逆序数
Private Sub Command1_Click()
Dim a As Long, b As Long
a = Val(Text1.Text)
Call con(a, b)
Text2 = b
End Sub
Private Sub con(n As Long, m As Long)
If n <> 0 Then
m = m & n Mod 10
n = n \ 10
Call con(n, m)
End If
End Sub
8级数有限项求和
(1)计算下列通项的和,当通项小于0.000001 时,停止计算
S=1/2+1/(2*4)+1/(2*4*6)+···+1/(2*4*6*···*2n)+···
Private Sub Form_Click()
Dim sum!, term!, i%
sum = 0
i = 0
term = 1
Do
i = i + 1
term = term * (2 * i)
sum = sum + 1 / term
Loop Until (1 / term < 0.000001)
Print "i="; i, "1/term="; 1 / term, "sum="; sum
End Sub
(2)输入正整数N,求最小的K,使得1*1+2*2+3*3+···+k*k>N 成立
Private Sub Form_Click()
Dim n%, sum%, k%
n = InputBox("请输入整数")
sum = 0
k = 0
Do While sum < n
k = k + 1
sum = sum + k * k
Loop
Print "n="; n, "k="; k, "sum="; sum
End Sub
9: 求质因子问题
Private Sub Command1_Click()
Dim i As Integer
Randomize
For i = 1 To 10
a(i) = Int(100 * Rnd + 1)
List1.AddItem a(i)
Next i
End Sub
Private Sub Command2_Click()
Dim i As Integer, j As Integer, b(10, 10) As Integer
For i = 1 To 10
Text1 = Text1 + CStr(a(i)) + "="
Call factor(a(i), i, b())
j = 1
Do While b(i, j) <> 0
If b(i, j + 1) <> 0 Then
Text1 = Text1 & b(i, j) & " *" & " "
Else
Text1 = Text1 & b(i, j)
End If
j = j + 1
Loop
Text1 = Text1 + vbCrLf
Next i
End Sub
Private Sub factor(ByVal n As Integer, m As Integer, fac() As Integer)
Dim i As Integer, j As Integer
j = 1
For i = 2 To n
Do While n Mod i = 0
fac(m, j) = i
n = n / i
j = j + 1
Loop
Next i
End Sub
10:字符统计
Private Sub Command1_Click()
Dim i As Integer
Randomize
For i = 1 To 20
a(i) = Int(90 * Rnd + 10)
Text1 = Text1 & a(i) & " "
If i Mod 10 = 0 Then Text1 = Text1 & vbCrLf
Next i
End Sub
'“统计”按钮
Private Sub Command2_Click()
Dim b(10 To 99) As Integer
Dim i As Integer, j As Integer
Dim sum As Integer
For i = 1 To 20
b(a(i)) = 1
Next i
For i = 10 To 99
sum = sum + b(i)
Next i
Text2 = CStr(sum)
End Sub
'“清除”按钮
Private Sub Command3_Click()
Text1.Text = ""
Text2.Text = ""
Command1.SetFocus
End Sub
'“结束”按钮
Private Sub Command4_Click()
End
End Sub
1:判定素数过程
Dim a(20) As Integer
Private Sub Command1_Click()
Dim n As Integer, i As Integer
Randomize
For
展开阅读全文