temp=a(j)
a(j)=a(j+1)
a(j+1)=temp
EndIf
Nextj
Nexti
Fori=1To10
Text1.Text=Text1.Text&a(i)&space
(2)
Nexti
EndSub
七、字符操作
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'行下标和列下标相同
sum=sum+a(i,j)
EndIf
Nextj
Nexti
Print"主对角线数据之和";sum
EndSub
第二种矩阵算法:
(副对角线)
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+j=5Then'行下标和列下标之和是一个定数
sum=sum+a(i,j)
EndIf
Nextj
Nexti
Print"副对角线数据之和";sum
EndSub
第三种矩阵算法:
(外圈数据)
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=1Ori=4then
sum1=sum1+a(i,j)
Elseifj=1Orj=4Then
sum1=sum1+a(i,j)
Endif
Nextj
Nexti
Print"外围数据之和";sum
EndSub
第四种矩阵算法:
(内圈数据)
PrivateSubCommand1_Click()
Dima(4,4)AsInteger,iAsInteger,jAsInteger
Dimsum1AsInteger,sum2AsInteger,sumAsInteger
Fori=1To4
Forj=1To4
a(i,j)=Int(Rnd*90)+10
Nextj
Nexti
Fori=1To4
Forj=1To4
Ifi=1Ori=4then
sum1=sum1+a(i,j)
Elseifj=1Orj=4Then
sum1=sum1+a(i,j)
Endif
'上句为求周边元素和。
sum=sum+a(i,j)'数组所有元素之和。
Nextj
Nexti
Print"内围数据之和";sum-sum1
EndSub
九、文件读写操作
1、字符型读写数据
见概念分析篇的知识点12有详细说明。
2、数值型读写数据
见概念分析篇的知识点12有详细说明。
3、综合例题:
a.通用对话框和读写文件结合使用
在考生文件夹下有一个工程文件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
PrivateSubC3_Click()
CD1.FileName="out5.dat"
CD1.Action=2'保存通用对话框,此句也可以为:
CD1.ShowSaveOpenCD1.FileNameForOutputAs#1
Print#1,Text1.Text
Close#1
EndSub
考生需编写的代码:
PrivateSubC2_Click()
Text1.Text=Ucase(Text1.Text)'小写字母转换成大写字母的过程
EndSub
b.输入数据、计算与存盘
在考生文件夹下有一个工程文件sjt5.vbp,请先装入该工程文件,然后完成以下操作:
在名称为Form1的窗体上画三个命令按钮,其名称分别为C1、C2和C3,标题分别为“读入数据”、“计算”和“存盘”(如图16-5)所示。
程序运行后,如果单击“读入数据”按钮,则调用题目已提供的ReadData1和ReadData2过程读入datain1.txt和datain2.txt文件中的各20个整数,分别放入Arr1和Arr2两个数组中;如果单击“计算”按钮,则把两个数组中对应下标的元素除以10并截尾取整后相乘,其结果放入第三个数组中(即:
把第一个数组的第n个元素除以10并截尾取整,再把第二个数组的第n个元素除以10并截尾取整,两者相乘后的结果作为第三个数组的第n个元素,这里的n为1、2、3……20),最后计算第三个数组中各元素之和,并把所求得的和在窗体上显示出来;如果单击“存盘”按钮,则调用题目中给出的WriteData过程将所求得的和存入考生文件夹的dataout.txt文件中。
注意:
考生不得修改窗体文件中已经存在的程序,必须把求得的结果用“存盘”按钮存入考生文件夹下的dataout.txt文件中。
最后把修改后的文件以原来的文件名存盘。
图16-5运行界面
已有程序代码如下:
OptionBase1
DimArr1(20)AsInteger
DimArr2(20)AsInteger
SubReadData1()
OpenApp.Path&"\"&"datain1.txt"ForInputAs#1
Fori=1To20
Input#1,Arr1(i)
Nexti
Close#1
EndSub
SubReadData2()
OpenApp.Path&"\"&"datain2.txt"ForInputAs#1
Fori=1To20
Input#1,Arr2(i)
Nexti
Close#1
EndSub
SubWriteData(FilenameAsString,NumAsInteger)
OpenApp.Path&"\"&FilenameForOutputAs#1
Print#1,Num
Close#1
EndSub
考生需编写的程序代码:
DimsumAsInteger
PrivateSubC1_Click()
ReadData1
ReadData2
EndSub
PrivateSubC2_Click()
DimiAsInteger,Arr3(20)AsInteger
Fori=1To20
Arr3(i)=Int(Arr1(i)/10)*Int(Arr2(i)/10)
sum=sum+Arr3(i)
Nexti
Printsum
EndSub
PrivateSubC3_Click()
WriteData"dataout.txt",sum
EndSub
注意:
本题中的sum为模块级变量。
c.英文字母出现次数统计
在考生文件夹下有一个工程文件sjt5.vbp,窗体上有二个标题分别为“读数据”和“统计”的命令按钮和初始值为空、名称分别为Text1和Text2的二个文本框,如图12-5所示。
程序功能如下:
1)单击“读数据”按钮,则将考生文件夹下in5.dat文件的内容(该文件中仅含有字母和空格)显示在Text1文本框中(此过程已给出);
2)在Text1文本框中选中内容后,单击“统计”按钮,则统计选中文本中出现次数最多的字母(不区分大小写),以大写形式在Text2文本框中显示这些出现次数最多的字母。
请将“统计”按钮Click事件过程中的注释符去掉,把?
改为正确的内容,以实现上述程序功能。
注意:
不得修改窗体文件中已经存在的控件和程序,最后将程序按原文件名存盘。
已有程序代码如下:
OptionBase1
DimxAsString,max_nAsInteger
PrivateSubCommand1_Click()
OpenApp.Path&"\in5.dat"ForInputAs#1
s=Input(LOF
(1),#1)
Close#1
Text1.Text=s
EndSub
PrivateSubCommand2_Click()
Dima(26)AsInteger
sl=Text1.SelLength
st=Text1.SelText
Text2=""
Ifsl=0Then
MsgBox"请先选择文本"
Else
Fori=1Tosl
c=Mid(st,i,1)
Ifc<>""Then
n=Asc(UCase(c))-Asc("A")+1'出现某字母的编号
a(n)=a(n)+1'出现某字母的次数
EndIf
Nexti
max_n=a
(1):
n=1'先设"A"与"a"字母的次数a
(1)为最多
Forj=2To26
Ifmax_nmax_n=a(j)
EndIf
Nextj
Fori=1To26
Ifmax_n=a(i)Then
Text2.Text=Text2.Text+""+Chr(Asc("A")+i-1)
EndIf
Nexti
EndIf
EndSub
注:
本例中n=Asc(UCase(c))-Asc("A")+1是用来计算所取字母的编号,"A"与"a"