Next j
Next i
Print "元素最大值";sum
Print "元素最小巧玲珑值";sum
第八种(求行和、列和)
For i = 1 To 4
For j= 1 To 4
If i + j = 5 Then
sum = sum + a(i,j)
End If
行下标和列下标之和是一个定数 '
Next j
Next i
Print "副对角线数据之和";sum
九、文件读写操作
1、字符型读写数据
见概念分析篇的知识点12有详细说明。
2、数值型读写数据
见概念分析篇的知识点12有详细说明。
3、综合例题:(通用对话框和读写文件结合使用)
在考生文件夹下有一个工程文件,其窗体上有一个文本框,名称为
Textl,可以多行显示;有一个名称为CD1的通用对话框;还有三个命令按钮,名称分别
为C1、C2、C3,标题分别“打开文件”、“转换”、“存盘”,如图2-5所示。命令按钮的
功能是:“打开文件”——弹出打开文件对话框,默认打开文件的类型“文本文件”。选择
考生文件夹下的文件后,该文件中的内容显示在Text1中;“转换”——把Text1
中的所有小写英文字母装换成大写;“存盘”——把Text1中的内容存入考生文件夹下的
文件中。在窗体中已经给出了部分程序,要求:
1) 请去掉程序中的注释符,把程序中的 ? 改为正确的内容。但不能修改程序中的其
他部分,也不能修改控件的属性。
2) 编写“转换”按钮的Click事件过程。最后把修改后的文件按原文件名存盘。
注意:不得修改已有的程序和控件的属性,必须对考生文件夹下的文件进行
转换,并把转换结果通过“存盘”按钮存入考生文件夹下的文件中。
图2-5 运行界面
已有程序代码如下:
Private Sub C1_Click()
Dim a As String
= "所有文件|*.*|文本文件|*.txt|Word文件|*.doc"
Index = 2
= 1 '打开通用对话框,可以是en
Open me For Input As #1 ' me是文件路径
Input #1, a
Close #1
= a
End Sub
Private Sub C2_Click()
=Ucase() '小写字母转换成大写字母的过程
End Sub
Private Sub C3_Click()
me = ""
= 2 '保存通用对话框,可以是ve
Open me For Output As #1
Print #1,
Close #1
End Sub
VB常见程序段
一、计算类题
1.已知三位数,提取出百位数、十位数和个位数
分析:设三位数以变量x表示,x1、x2、x3分别代表百位数、十位数和个位数
x
1
= x 100
x
2
= (x 10) Mod 10
x
3
= x Mod 10
x
1
= Fix(x /100)
x
2
= Fix( (x-x
1
*100 / 10
x
3
= x- x 1*100-x
2
*10
Dim a1 As Integer, b As Integer, c As Integer, s As Integer, k As Integer
s = 0: k = 0 's代表和,k代表水仙花数的个数
For i = 1 To 100
a = a(i) 100 '求百位数
b = (a(i) 10) Mod 10 '求十位数
c = a(i) Mod 10 '求个位数
If a(i) = a ^ 3 + b ^ 3 + c ^ 3 Then
k = k + 1
s = s + a(i)
End If
Next
= CStr(s k)
End Sub
2.已知两数m和n,求最大公约数
Do
r=m Mod n
m=n
n=r
Loop Until r=0
m即为所求最大公约数
一般程序 教材P69 函数形式 教材P166
3.随机产生n个在[b1,b2]之间互不相同的值
解:利用一个一维数组存放n个在[b1,b2]之间互不相同的值,用Int(Rnd *
(b2-b1+1)+b1)求在[b1,b2]的随机值
For i = 1 To n
a(i) = Int(Rnd * (b2-b1+1)+b1)
For j = 1 To i-1
If a(i) = a(j) Then
i = j
Exit For
End If
Next j
Next i
注:实际程序中b1、b2和n均会给出具体值,直接将值代进程序
4.求满足一定条件的数组元素之和sum和个数n、最大数max、最小数min和平均值
ave
分析:设数组元素的数值范围已知[a,b]数组元素的个数为m
Sum=0:n = 0:max = a:min=b:ave=0
For i = 1 To m
If 满足的条件 Then
n = n + 1
Sum=Sum+a(i)
If a(i) > max Then
max = a(i)
End If
If a(i) < min Then
min= a(i)
End If
End If
Next
Ave=Sum/n
按题目要求显示结果
若题目改为求一维数组所有元素之和sum和个数n、最大数max、最小数min和平
均值ave,只需在初始值设置时max=a(1):min=a(1),i的初始值1改为2,并将判断条
件If 满足的条件 then 省去即可
二、查找与排序
1.顺序查找:在数组a中查找数num,设数组元素个数为n
Dim num As Integer, i As Integer
num = InputBox("请输入待查找的数")
For i = 1 To n
If a(i) = num Then
= Str(num) + "是数组中的第" + Str(i) + "个值"
Exit For
End If
Next i
If i > n Then
= Str(num) + "不存在于数组中"
End If
4.矩阵(二维数组)行或列交换 P37、P141
设N行M列矩阵(二维数组)用Mat(N,M)表示
将第L1行和L2行元素交换
For j = 1 To M
t = Mat(L1, j)
Mat(L1, j) = Mat(L2, j)
Mat(L2, j) = t
Next j
将第C1列和C2列元素交换
For i = 1 To N
t = Mat(i, C1)
Mat(i, C1) = Mat(i, C2)
Mat(i, C2) = t
Next i
注意:具体程序要对L1、L2、C1和C2指定特定值
三、字符操作类
1.字符串s取反
For i= len(s) to 1 step -1
c=Mid(s,i,1)
fs=fs & C
next
fs即为所求
2.判断字符串myStr中的某个字符是否为字母
For I=1 to Len(myStr)
If Mid(myStr,I,1)>=”a” and Mid(myStr,I,1)<=”z”
Mid(myStr,I,1)>=“A” and Mid(myStr,I,1)<=“Z” Then
是的处理
End If
Next I
or
判断字符串中的某个字符是否为数字
For I=1 to Len(myStr)
If Mid(myStr,I,1)>=”0” and Mid(myStr,I,1)<=”9” Then
是的处理
End If
Next I
3.统计字符个数
典型试题:已知一段文章,出现的字符均是字母,求出现的字母频率最高的字母(不
区分大小写,都以大写字母表示),并将未出现的字母显示出来。上机强化训练P56
分析:以字符串变量s代表这段文章,s1代表出现的字母频率最高的字母组成的字符
串,s2代表未出现的字母组成的字符串,用数组a存放26个字母的频率(a(1)代表“A”
出现的频率,a(2)代表”B”出现的频率,……,a(26)代表”Z”出现的频率),n代表字母
在字母表的位置
For i = 1 To len(s)
c = Mid(s, i, 1)
If c <> " " Then
n = Asc(UCase(c)) - Asc("A") + 1
a(n) = a(n) + 1
End If
Next i
max_n = a(1)
For j = 1 To 26
If a(j) > max_n Then
max_n = a(j)
End If
Next j
For i = 1 To 26
If a(i) = max_n Then
s1 = s1 + " " + Chr(Asc("A") + i - 1)
End If
If a(i) = 0 Then
s2 = s2 + " " + Chr(Asc("A") + i - 1)
End If
Next i
按题目要求显示s1和s2
4.字符串加密和解密
主要考查移位加密和解密,设移位的个数为n
加密:
For i = 1 To Len(s)
c = Mid(s, i, 1)
se = se & Chr(Asc(c) + n)
Next
Print se
解密:
For i = 1 To Len(s)
c = Mid(s, i, 1)
sd= sd & Chr(Asc(c) - n)
Next
Print sd
要按实际情况设置移位个数
四、文件操作类
Open & "" For Input As #1
Do While Not EOF(1)
Input #1, str
= & str
Loop
Close #1
读数据:
Sub ReadData()
Open & "" & "" For Input As #1
For i = 1 To 100
Input #1, A(i)
Text1=Text1+str(a(i))+Space(1)
Next i
Close #1
End Sub
Private Sub Form_Load()
Open & "" For Input As #1
n = 0
Do While Not EOF(1)
Input #1, x
n = n + 1
a(n) = x
Loop
Close #1
End Sub
数据存盘:
Sub WriteData(Filename As String, Num As Integer)
Open & "" & Filename For Output As #1
Print #1, Num
Close #1
End Sub
Open & "" For Output As #2
Print #2,
Close #2
五、动画类
典型试题:小球横向和纵向运动 上机强化训练P25
完整程序:
Dim d As Integer '控制方向,d=1,代表向右和向下,d=-1代表向左和向上
Private Sub Command1_Click()
d = True '计时器开
End Sub
Private Sub Command2_Click()
d = False '计时器关
End Sub
Private Sub Form_Load()
d = 1 '开始时默认向右和向下
End Sub
Private Sub Timer1_Timer()
If Option1 Then '纵向
= + d * 50
If <= Or
+ Then
d = -d '到底或到顶时变换方向
End If
ElseIf Option2 Then '横向
= + d * 50
+ >=
If <= Or + >=
+ Then ‘ <=
d = -d '到右或到坐时变换方向
End If
End If
End Sub
注意:计时器Timer开始时,要在属性窗口中将Enabled设为False,Interval按
要求设置
六、窗体类
典型试题:上机强化训练 P19
完成程序代码:注意菜单控件数组如何设置
Form1中的代码
Private Sub mnuOper_Click(Index As Integer)
Select Case Index
Case 1
Case 2
d = True
Case 3
End
End Select
End Sub
Private Sub Timer1_Timer()
= + 100
If + >= Then
= 0
End If
End Sub
Form2中的代码:
Private Sub Command1_Click()
End Sub
七、综合操作类
1.文件操作+数组+过程+菜单
典型列题:上机强化训练 P51综合应用
完整程序:
Option Base 1
Dim Arr(100) As Integer, s As Integer
1
Private Sub Calc_Click()
For i = 1 To 100
If i Mod 2 <> 0 Then
= & Arr(i) & Chr(13) & Chr(10)
s = s + Arr(i)
End If
Next
Print s
End Sub
Private Sub Read_Click()
ReadData
End Sub
Private Sub Save_Click()
Call WriteData("", s)
End Sub
2.文件操作+数组+列表框控件
典型试题:上机强化训练P26 P68综合应用
P26完整程序代码:
Dim a(10) As Integer, n As Integer
Private Sub Command1_Click()
Open & "" For Input As #1
While Not EOF(1)
n = n + 1
Input #1, ch$, a(n)
m ch
Wend
Close #1
End Sub
Private Sub Command2_Click()
'需要考生编写的内容
Dim f As Integer, d As Single
d = Val()
If d < 500 Then
f = d * 0.3
ElseIf d < 1000 Then
f = d * 0.98 * 0.3
ElseIf d < 1500 Then
f = d * 0.95 * 0.3
ElseIf d < 2000 Then
f = d * 0.92 * 0.3
Else
f = d * 0.9 * 0.3
End If
= Int(f)
End Sub
Private Sub Command3_Click()
Open & "" For Output As #1
Print #1, , Text1, Text2
Close #1
End Sub
Private Sub List1_Click()
'需要考生编写的内容
= a(dex + 1)
End Sub
VB基本程序段
随机数的产生
A(I)=Int((大数-小数+1)*Rnd)+小数
例:随机取三位正整数,则大数999,小数100 形式如:Int(900*Rnd)+100
累加/累乘
s=0:f=1
For i=1 to n
s=s+i
f=f*i
next i
交互函数
输入数置于变量或数组中:
for I=1 to n
a(I)=InputBox(“请输入第”+CStr(I)+”个数", "输入数",[缺省值])
next I
提示信息输入:
MsgBox("输入数据类型不对",Button, "出错提示")
有关Button的取值见教材62页。
两数交换
用于在要求交换两数的场合:
If a>b then
temp=a
a=b
b=temp
End If
找出最大/小数
找出一维数组中最大的数/下标
nMax=a(1)或nMaxNo=1
For I=2 to n
If a(I)>nMax或a(nMaxNo) then
nMax=a(I)或 nMaxNo=I
End if
Next I
一维数组排序
用二重循环(选择法)
for I=1 to n-1
for j=I+1 to n
If a(j)>a(I) then
两数交换
End If
next j
next i
排序(冒泡法)
For i=1 to n-1
for j=1 to n-I
if a(j)>a(j+1) then
两数交换
end if
next i
是否整除的判断
用Mod运算(以整除2为例)
If x Mod 2=0 Then
可整除的操作
Else
不可整除的操作
End If
找因子(强化训练书P85)
For i=2 to sqr(n)
if n mod I =0 then
idx=idx+1
redim preserve a(idx)
a(idx)=I
end if
Next i
打印矩阵
用二重循环在图片框中打印一个矩阵
For I=1 to n
For j=1 to m
a(I,j);
Next j
next I
素数的判断
判断一个数是否为素数
For I=2 to sqr(x)
If x Mod I=0 Then Exit For
Next I
If I>sqr(x) then
是
Else
不是
End If
字符的比较
判断字符串中的某个字符是否为字母
For I=1 to Len(myStr)
If Mid(myStr,I,1)>=“a” and
Mid(myStr,I,1)>=“A” and Mid(myStr)<=“Z”
是的处理
End If
Then
or Mid(myStr)<=“z”
Next I
表达式
1.初值的设定
2.找通项
3.函数的调用(参数的设定)
4.循环中的赋值和跳出循环的条件
S=x :n=1
Do
a=afun(x,n)
if a<=eps then exit do
s=s+a : n=n+1
loop
Private function afun(Byval x as Integer,Byval n as Integer)
通项的计算…
End function
发表评论