vb难点.docx
- 文档编号:11671917
- 上传时间:2023-03-30
- 格式:DOCX
- 页数:12
- 大小:19.48KB
vb难点.docx
《vb难点.docx》由会员分享,可在线阅读,更多相关《vb难点.docx(12页珍藏版)》请在冰豆网上搜索。
vb难点
一、二维数组(矩阵)操作
1、求矩阵元素的最大值
Dima(5,5)AsInteger
'省略给数组a赋值代码
'求数组a的最大值
Max=a(1,1)'假设第一个数为最大值初值
Fori=1To5
Forj=1To5
Ifa(i,j)>MaxThen
Max=a(i,j)
EndIf
Nextj
Nexti
'循环结束后,max获得最大值
'注意fori循环必须从1开始,不能从2开始
'若fori循环从2开始,那a(1,2),a(1,3),a(1,4),a(1,5)都无法参加比较
2、求方阵对角线元素之和、两个对角线元素之和
假定有如下定义:
ConstN%=6
Dima(1toN,1toN)asInteger
则a数组的主、副对角线元素分别为:
1.主对角线元素:
a(1,1)、a(2,2)、…a(i,i)…a(N,N),“左上-右下”元素,即元素行、列下标相同;
2.副对角线元素:
a(1,N)、a(2,N-1)、…a(i,N–i+1)…a(N,1),“右上-左下”元素,即第1行最后一个、第2行倒数第2个……第i行倒数第i个元素。
黑色线条表示的是主对角线,红色线条表示的副对角线
Sum1=0 '获得主对角线之和
Sum2=0 '获得副对角线之和
Fori=1ToN
Forj=1ToN
Ifi=jThen '求主对角线元素之和
Sum1=Sum1+a(i,j)
EndIf
Ifi+j=N+1Then '求副对角线元素之和
Sum2=Sum2+a(i,j)
EndIf
Nextj
Nexti
3、列与列互换,如第2列和第4列互换
Fori=1ToN
t=a(i,2)
a(i,2)=a(i,4)
a(i,2)=t
Nexti
注意:
a(i,2)表示第2列的数组元素,a(i,4)表示第4列的数组元素,如果是第2行与第4行互换,则可用a(2,i)表示第2行的数组元素,a(4,i)表示第4行的数组元素。
4、二维数组每行最大值及其在该行中的位置
Dima(20,5)AsInteger'定义20行5列的矩阵
Fori=1To20
Max=a(i,1)'假设该行第一个数是最大值初值
maxi=1 '获得假设初值的列下标
Forj=1To5
Ifa(i,j)>MaxThenMax=a(i,j):
maxi=j
Nextj
Print"第";i;"行最大值";Max,"在该行的";maxi;"位置"
Nexti
注意:
该题还可以扩展为求所有行最大值平均值、各行平均数的最大值、各行最小数的平均值;每行在某个范围内(如小于100)元素值之和、平均值;每行的偶数最大值、奇数最小值等。
5、矩阵四周围元素之和,能被某数整除的个数
Dima(7,7)AsInteger
如上声明的数组a,对数组a而言其四周围的元素即为第一行、第七行、第一列和第七列的数组元素。
第一行数组元素满足a(1,j),j从1到7
第七行数组元素满足a(7,j),j从1到7
第一列数组元素满足a(i,1),i从1到7
第七列数组元素满足a(i,7),i从1到7
Sum=0
Fori=1To7
Forj=1To7
Ifi=1Ori=7Orj=1Orj=7Then
Sum=Sum+a(i,j)
EndIf
Nextj
Nexti
二、字符(单词)操作
1、统计文本框中数字、大写字母、小写字母个数
每次取出一个字符,利用ASCII码值进行判断,
数值0~9的ASCII值范围是:
48~57或Asc("0")~Asc("9")
大写字母A~Z的ASCII值范围是:
65~90或Asc("A")~Asc("Z")
小写字母a~z的ASCII值范围是:
97~122或Asc("a")~Asc("z")
Fori=1ToLen(Text1)
s=Mid(Text1,i,1)
IfAsc(s)>=48AndAsc(s)<=57Then
'是数值
ElseIfAsc(s)>=65AndAsc(s)<=90Then
'是大写字母
ElseIfAsc(s)>=97AndAsc(s)<=122Then
'是小写字母
EndIf
Nexti
注意:
与该题类似的还有,统计给定字母的出现次数,此时循环中的if判断条件改成s与该字母的比较即可;判断文本框中输入的是数字信息还是非数字信息等。
2、统计文本中某单词出现的次数、平均长度、最长单词
见上机教程第十三讲考点2单词操作
'统计文本s中单词this出现的次数
Fori=1ToLen(s) '对字符串内所有字符处理
c=Mid(s,i,1) '取字符
Ifc<>""Then '不为空格字符
word=word+c '将该字符连接在单词中
Else '若为空格字符
Ifword="this"then '如果是this单词,对该单词个数计数
n=n+1 '单词个数计数
Endif
word="" '存下一个单词前,将变量word清空
EndIf
Nexti
'循环退出后,还有最后出现一个单词未处理
Ifword="this"then '如果是this单词,对该单词个数计数
n=n+1 '单词个数计数
Endif
3、统计文本中同时含有某几个字母的单词个数(instr函数)
要求统计包含了字母“m”,“n”和“p”的单词个数
Fori=1ToLen(s) '对字符串内所有字符处理
c=Mid(s,i,1) '取字符
Ifc<>""Then '不为空格字符
word=word+c '将该字符连接在单词中
Else '若为空格字符
'利用instr函数判断单词word中有没有包含m、n和p字母
Ifinstr(word,"m")>0andinstr(word,"n")>0andinstr(word,"p")>0then
n=n+1 '单词个数计数
Endif
word="" '存下一个单词前,将变量word清空
EndIf
Nexti
'循环退出后,还有最后出现一个单词未处理
Ifinstr(word,"m")>0andinstr(word,"n")>0andinstr(word,"p")>0then
n=n+1 '单词个数计数
Endif
4、编写函数判断回文
思路:
将第一个字符和最后一个字符进行比较,如果相同,继续判断第二个字符和倒数第二个字符是否相同,若不相同比较结束,该字符串不满足回文。
Functionfoundhuiwen(pAsString) '判断p是否满足回文条件
foundhuiwen=True
Fori=1ToLen(p)/2
IfMid(p,i,1)<>Mid(p,Len(p)-i+1,1)Then
foundhuiwen=False
ExitFor
EndIf
Nexti
EndFunction
三、算法
1、排序算法
(1)对读入的数据进行从小到大排序
Dima(10)AsInteger
PrivateSubCommand1_Click()
OpenApp.Path&"\Data5.txt"ForInputAs#1
DoWhileNotLOF
(1)
Fori=1To10
Input#1,a(i)
Nexti
Loop
Close#1
EndSub
PrivateSubCommand2_Click()
'============以下考生编写程序开始=================
'============考生编写程序结束=====================
EndSub
(2)将奇偶数分开,将奇数移动到前面,偶数移动到后面。
(文本框为控件数组,名称属性分别为Text1(0)~Text1(9))
单击“重排数据”按钮,执行如下代码
'================================================
'算法:
'1)令i指向第1个数,j指向最后1个数,并先暂存最后一个数;
'2)检查第i个数是否为偶数,若不是,再检查下一个,直到第i个是
' 偶数,则把此偶数放到第j个位置,j向前移1个位置;
'3)检查第j个数是否为奇数,若不是,再检查前一个,直到第j个是
' 奇数,则把此奇数放到第i个位置,i向后移1个位置;
'4)重复2)、3),直到i=j
'5)把开始暂存的数放到i的位置
'=================================================
Dimi%,j%,temp%,flagAsBoolean
i=0
' j=?
1
' ?
2=Text1(j)
flag=True
' While(i
3)
IfflagThen
IfText1(i)Mod2=0Then
Text1(j)=Text1(i)
j=j-1
flag=Notflag
Else
i=i+1
EndIf
Else
' IfText1(j)Mod2=?
4Then
Text1(i)=Text1(j)
i=i+1
flag=Notflag
Else
j=j-1
EndIf
EndIf
Wend
Text1(i)=temp
EndSub
参考答案:
1、9
2、temp
3、j
4、1
2、查找算法:
在随机产生(数值互不相同)的数组中输入一个数进行查找
OptionBase1
Dima(10)
'产生数组
PrivateSubCommand1_Click()
Fori=1To10
a(i)=Fix(Rnd*99+1)
' Forj=1To ?
1
Ifa(i)=a(j)Then
' i=?
2
ExitFor
EndIf
Nextj
Nexti
EndSub
'输入一个数进行查找
PrivateSubCommand2_Click()
DimnumAsInteger,iAsInteger
num=InputBox("请输入待查找的数")
Fori=1To10
' Ifa(i)= ?
3 Then
Text2.Text=Str(num)+"是数组中的第"+Str(i)+"个值"
ExitFor
EndIf
Nexti
' If ?
4 >10Then
Text2.Text=Str(num)+"不存在于数组中"
EndIf
EndSub
参考答案:
1、i-1
2、i-1
3、num
4、i
3、插入和删除算法
(1)有序数组中插入一个数,让该数组仍然有序
思路:
通过比较查找到该数要插入的位置i,将该位置以及后续数逐一向后移动(注意移动时应先移最后一个数)。
注意插入后数组的个数要增加1。
Dima(100)AsInteger,numAsInteger
'读入升序的数组元素
PrivateSubCommand1_Click()
DimkAsInteger
OpenApp.Path&"\in4.dat"ForInputAs#1
Fork=1To60
Input#1,a(k)
Nextk
Close#1
EndSub
'输入一个要插入的数
PrivateSubCommand2_Click()
num=InputBox("请输入一个数")
EndSub
'插入后数组仍然为升序
PrivateSubCommand3_Click()
Fori=1To60
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- vb 难点