t=a(j):
a(j)=a(j+1):
a(j+1)=t两数交换
EndIf
Nextj
Nexti
Fori=1To10
Text1.Text=Text1.Text&a(i)&space
(2)’排好序的数输出显示文本框
Nexti
七、字符操作
1、字符串取反
例题:
在文本框中输入一个字符串,比如:
ABCDEFGH,然后反向输出,结果为:
HGFEDCBA。
PrivateSubCommand1_Click()
DimsAsString,nAsInteger,iAsInteger
n=Len(Text1.Text)
Fori=nTo1Step-1'Fori=1Ton
s=s+Mid(Text1.Text,i,1)'s=Mid(Text1.Text,i,1)+s
Nexti
Prints
EndSub
2、判断字符串中的某个字符是否为字母
例题:
在文本框中输入一个字符串,比如:
A$4Ch&*Fiy%41H,输出字符串中的所有字母,结果为:
AChFiyH。
PrivateSubCommand1_Click()
DimsAsString,nAsInteger,iAsInteger,cAsString
n=Len(Text1.Text)
Fori=1Ton
c=Mid(Text1.Text,i,1)
Ifc>="A"Andc<="Z"Orc>="a"Andc<="z"Then
s=s+c
EndIf
Nexti
Prints
EndSub
3、统计每类字符的个数
例题:
在文本框中输入一个字符串,比如:
A$m4Ch&*F13iy%p41H,请分别统计出大写字母、小写字母、数字字符和其他字符的个数。
PrivateSubCommand1_Click()
DimnAsInteger,iAsInteger,cAsString
Dimn1AsInteger,n2AsInteger,n3AsInteger,n4AsInteger
n=Len(Text1.Text)
Fori=1Ton
c=Mid(Text1.Text,i,1)
SelectCasec
Case"A"To"Z"
n1=n1+1
Case"a"To"z"
n2=n2+1
Case"0"To"9"
n3=n3+1
CaseElse
n4=n4+1
EndSelect
Nexti
Print"大写字母个数:
";n1;"小写字母个数:
";n2;"数字字符个数:
";n3;"其他字符个数:
";n4
EndSub
八、矩阵(二维数组)的应用
几种矩阵的算法:
(图形表示)
①主对角线元素和②副对角线元素和③靠边元素和④内圈元素和
⑤所有元素和⑥所有元素最大、小值⑦求行和、列和
图①图②图③图④
例题:
有一个4行4列二维数组,现随机生成16个两位整数,并将它们存入到二维数组中,现根据以上几种图形分别求之。
第一种(主对角线元素和)
PrivateSubCommand1_Click()
Dima(4,4)AsInteger,iAsInteger,jAsInteger
DimsumAsInteger
Fori=1To4
Forj=1To4
a(i,j)=Int(Rnd*90)+10
Nextj
Nexti
Fori=1To4
Forj=1To4
Ifi=jThen'主对角线特点:
行下标和列下标相同,即I=J
sum=sum+a(i,j)‘①
EndIf
Nextj
Nexti
Print"主对角线元素和";sum
EndSub
第二种(副对角线元素和)
Fori=1To4
Forj=1To4
Ifi+j=5Then'行下标和列下标之和是一个定数
sum=sum+a(i,j)
EndIf
Nextj
Nexti
Print"副对角元素和";sum
EndSub
第三种(对角线元素和)
Fori=1To4
Forj=1To4
Ifi=jori+j=5Thensum=sum+a(i,j)'行下标和列下标相同
Nextj
Nexti
Print"副对角元素和";sum
EndSub
第四种(靠边元素和)
PrivateSubCommand1_Click()
Fori=1To4
Forj=1To4
Ifi=1Ori=4Then‘第一行和最后一行元素
sum=sum+a(i,j)
ElseIfj=1Orj=4Then‘中间行最外边元素
sum=sum+a(i,j)
EndIf
Nextj
Nexti
Print"靠边元素和";sum
EndSub
第五种(内圈元素和)
PrivateSubCommand1_Click()
Fori=1To4
Forj=1To4
Ifi=1Ori=4Then
sum1=sum+a(i,j)
ElseIfj=1Orj=4Then
sum1=sum+a(i,j)
EndIf
sum=sum+a(i,j)
Nextj
Nexti
Print"内圈元素和";sum-sum1
EndSub
第六种(所有元素和)
Fori=1To4
Forj=1To4
sum=sum+a(i,j)
Nextj
Nexti
Print所有元素和";sum
第七种(所有元素最大、小值)
Max=a(1,1):
Min=a(1,1)
Fori=1To4
Forj=1To4
Ifa(i,j)>maxThenMax=a(i,j)
Ifa(i,j)Nextj
Nexti
Print"元素最大值";sum
Print"元素最小巧玲珑值";sum
第八种(求行和、列和)
Fori=1To4
Forj=1To4
Ifi+j=5Then'行下标和列下标之和是一个定数
sum=sum+a(i,j)
EndIf
Nextj
Nexti
Print"副对角线数据之和";sum
九、文件读写操作
1、字符型读写数据
见概念分析篇的知识点12有详细说明。
2、数值型读写数据
见概念分析篇的知识点12有详细说明。
3、综合例题:
(通用对话框和读写文件结合使用)
在考生文件夹下有一个工程文件sjt5.vbp,其窗体上有一个文本框,名称为Textl,可以多行显示;有一个名称为CD1的通用对话框;还有三个命令按钮,名称分别为C1、C2、C3,标题分别“打开文件”、“转换”、“存盘”,如图2-5所示。
命令按钮的功能是:
“打开文件”——弹出打开文件对话框,默认打开文件的类型“文本文件”。
选择考生文件夹下的in5.txt文件后,该文件中的内容显示在Text1中;“转换”——把Text1中的所有小写英文字母装换成大写;“存盘”——把Text1中的内容存入考生文件夹下的out5.dat文件中。
在窗体中已经给出了部分程序,要求:
1)请去掉程序中的注释符,把程序中的?
改为正确的内容。
但不能修改程序中的其他部分,也不能修改控件的属性。
2)编写“转换”按钮的Click事件过程。
最后把修改后的文件按原文件名存盘。
注意:
不得修改已有的程序和控件的属性,必须对考生文件夹下的in5.txt文件进行转换,并把转换结果通过“存盘”按钮存入考生文件夹下的out5.dat文件中。
图2-5运行界面
已有程序代码如下:
PrivateSubC1_Click()
DimaAsString
CD1.Filter="所有文件|*.*|文本文件|*.txt|Word文件|*.doc"
CD1.FilterIndex=2
CD1.Action=1'打开通用对话框,可以是CD1.ShowOpen
OpenCD1.FileNameForInputAs#1'CD1.FileName是文件路径
Input#1,a
Close#1
Text1.Text=a
EndSub
PrivateSubC2_Click()
Text1.Text=Ucase(Text1.Text)'小写字母转换成大写字母的过程
EndSub
PrivateSubC3_Click()
CD1.FileName="out5.dat"
CD1.Action=2'保存通用对话框,可以是CD1.ShowSave
OpenCD1.FileNameForOutputAs#1
Print#1,Text1.Text
Close#1
EndSub
VB常见程序段
一、计算类题
1.已知三位数,提取出百位数、十位数和个位数
分析:
设三位数以变量x表示,x1、x2、x3分别代表百位数、十位数和个位数
x1=x\100
x2=(x\10)Mod10
x3=xMod10
x1=Fix(x/100)
x2=Fix((x-x1*100/10
x3=x-x1*100-x2*10
Dima1AsInteger,bAsInteger,cAsInteger,sAsInteger,kAsInteger
s=0:
k=0's代表和,k代表水仙花数的个数
Fori=1To100
a=a(i)\100'求百位数
b=(a(i)\10)Mod10'求十位数
c=a(i)Mod10'求个位数
Ifa(i)=a^3+b^3+c^3Then
k=k+1
s=s+a(i)
EndIf
Next
Text1.Text=CStr(s\k)
EndSub
2.已知两数m和n,求最大公约数
Do
r=mModn
m=n
n=r
LoopUntilr=0
m即为所求最大公约数
一般程序教材P69函数形式教材P166
3.随机产生n个在[b1,b2]之间互不相同的值
解:
利用一个一维数组存放n个在[b1,b2]之间互不相同的值,用Int(Rnd*(b2-b1+1)+b1)求在[b1,b2]的随机值
Fori=1Ton
a(i)=Int(Rnd*(b2-b1+1)+b1)
Forj=1Toi-1
Ifa(i)=a(j)Then
i=j
ExitFor
EndIf
Nextj
Nexti
注:
实际程序中b1、b2和n均会给出具体值,直接将值代进程序
4.求满足一定条件的数组元素之和sum和个数n、最大数max、最小数min和平均值ave
分析:
设数组元素的数值范围已知[a,b]数组元素的个数为m
Sum=0:
n=0:
max=a:
min=b:
ave=0
Fori=1Tom
If满足的条件Then
n=n+1
Sum=Sum+a(i)
Ifa(i)>maxThen
max=a(i)
EndIf
Ifa(i)min=a(i)
EndIf
EndIf
Next
Ave=Sum/n
按题目要求显示结果
若题目改为求一维数组所有元素之和sum和个数n、最大数max、最小数min和平均值ave,只需在初始值设置时max=a
(1):
min=a
(1),i的初始值1改为2,并将判断条件If满足的条件then省去即可
二、查找与排序
1.顺序查找:
在数组a中查找数num,设数组元素个数为n
DimnumAsInteger,iAsInteger
num=InputBox("请输入待查找的数")
Fori=1Ton
Ifa(i)=numThen
Text2.Text=Str(num)+"是数组中的第"+Str(i)+"个值"
ExitFor
EndIf
Nexti
Ifi>nThen
Text2.Text=Str(num)+"不存在于数组中"
EndIf
4.矩阵(二维数组)行或列交换P37、P141
设N行M列矩阵(二维数组)用Mat(N,M)表示
将第L1行和L2行元素交换
Forj=1ToM
t=Mat(L1,j)
Mat(L1,j)=Mat(L2,j)
Mat(L2,j)=t
Nextj
将第C1列和C2列元素交换
Fori=1ToN
t=Mat(i,C1)
Mat(i,C1)=Mat(i,C2)
Mat(i,C2)=t
Nexti
注意:
具体程序要对L1、L2、C1和C2指定特定值
三、字符操作类
1.字符串s取反
Fori=len(s)to1step-1
c=Mid(s,i,1)
fs=fs&C
next
fs即为所求
2.判断字符串myStr中的某个字符是否为字母
ForI=1toLen(myStr)
IfMid(myStr,I,1)>=”a”andMid(myStr,I,1)<=”z”orMid(myStr,I,1)>=“A”andMid(myStr,I,1)<=“Z”Then
是的处理
EndIf
NextI
判断字符串中的某个字符是否为数字
ForI=1toLen(myStr)
IfMid(myStr,I,1)>=”0”andMid(myStr,I,1)<=”9”Then
是的处理
EndIf
NextI
3.统计字符个数
典型试题:
已知一段文章,出现的字符均是字母,求出现的字母频率最高的字母(不区分大小写,都以大写字母表示),并将未出现的字母显示出来。
上机强化训练P56
分析:
以字符串变量s代表这段文章,s1代表出现的字母频率最高的字母组成的字符串,s2代表未出现的字母组成的字符串,用数组a存放26个字母的频率(a
(1)代表“A”出现的频率,a
(2)代表”B”出现的频率,……,a(26)代表”Z”出现的频率),n代表字母在字母表的位置
Fori=1Tolen(s)
c=Mid(s,i,1)
Ifc<>""Then
n=Asc(UCase(c))-Asc("A")+1
a(n)=a(n)+1
EndIf
Nexti
max_n=a
(1)
Forj=1To26
Ifa(j)>max_nThen
max_n=a(j)
EndIf
Nextj
Fori=1To26
Ifa(i)=max_nThen
s1=s1+""+Chr(Asc("A")+i-1)
EndIf
Ifa(i)=0Then
s2=s2+""+Chr(Asc("A")+i-1)
EndIf
Nexti
按题目要求显示s1和s2
4.字符串加密和解密
主要考查移位加密和解密,设移位的个数为n
加密:
Fori=1ToLen(s)
c=Mid(s,i,1)
se=se&Chr(Asc(c)+n)
Next
Printse
解密:
Fori=1ToLen(s)
c=Mid(s,i,1)
sd=sd&Chr(Asc(c)-n)
Next
Printsd
要按实际情况设置移位个数
四、文件操作类
OpenApp.Path&"\in.txt"ForInputAs#1
DoWhileNotEOF
(1)
Input#1,str
Text1.Text=Text1.Text&str
Loop
Close#1
读数据:
SubReadData()
OpenApp.Path&"\"&"datain1.txt"ForInputAs#1
Fori=1To100
Input#1,A(i)
Text1=Text1+str(a(i))+Space
(1)
Nexti
Close#1
EndSub
PrivateSubForm_Load()
OpenApp.Path&"\in5.txt"ForInputAs#1
n=0
DoWhileNotEOF
(1)
Input#1,x
n=n+1
a(n)=x
Loop
Close#1
EndSub
数据存盘:
SubWriteData(FilenameAsString,NumAsInteger)