admin 管理员组

文章数量: 1184232


2024年3月27日发(作者:textarea placeholder颜色修改)

Visual Basic程序设计基础知识要点(程序设计篇)

九大问题具体例子分析:

一、求最大数、最小数、求和以及求平均数

For i= 1 To 10

a(i)=Int(Rnd*90)+10 ’产生10—99之间的随机数

Next i

Max=a(1):Min=a(1) ’假设最大数和最小数

For i= 1 To 10

If Max

If Min>a(i) Then Min=a(i) ’求最小数

Sum=Sum+a(i) ’求和

Next i

Avg=Sum/10 ’求平均数

二、求阶层

例题:求10!.

Private Sub Command1_Click()

Dim p As Long, i As Integer

p=1

For i= 1 To 10

p=p*i

Next i

Print “10!=”;Sum

End Sub

三、求最大公约数

例题:求M和N两个数的最大公约数。

Private Sub Command1_Click()

Dim M As Integer, N As Integer, R As Integer

M=36:N=24

Do

R=M Mod N

M=N

N=R

Loop While R<>0 ’或 Loop Until R=0

Print “M和N的最大公约数为:”;M

End Sub

四、求素数

例题:求100—200之间的所有素数,并按每行5个元素格式输入所有素数。

Private Sub Command1_Click()

Dim n As Integer ,i As Integer j As Integer

For n = 100 To 200

For i = 2 To n-1 ’n-1可以是n/2,也可以是Sqr(n)形式

If n Mod i =0 Then Exit For

Next i

If i>n-1 Then

j=j+1 ’统计素数个数

Print n;

If j Mod 5 =0 Then Print ’输出5个数换行

End If

Next n

End Sub

五、求水仙花数(拆数法)

例题:求100—999之间的所有水仙花数,并将所有水仙花数在文本框中显示。所谓

水仙花数:即153=1^3+5^3+3^3条件成立。

方法1:(数值型:使用运算符Mod 和 )

Private Sub Command1_Click()

Dim i As Integer ,a As Integer ,b As Integer ,c As Integer

For i = 100 To 999

a=i100 ’取百位数

b=i10 Mod 10 ’取十位数

c=i Mod 10 ’取个位数

If i=a^3+b^3+c^3 Then

= & i & Space(2)

End If

Next i

End Sub

方法2:(字符型:使用函数Mid、Val和CStr)

Private Sub Command1_Click()

Dim i As Integer ,a As Integer ,b As Integer ,c As Integer

For i = 100 To 999

a= Val(Mid(Cstr(i),1,1)) ’取百位数

b= Val(Mid(Cstr(i),2,1)) ’取十位数

c= Val(Mid(Cstr(i),3,1)) ’取个位数

If i=a^3+b^3+c^3 Then

= & i & Space(2)

End If

Next i

End Sub

排序问题

方法1:选择排序

for i=1 to n-1 ’比较n-1轮

for j=i+1 to n ’每一轮比较几次

If a(j)

t=a(i):a(i)=a(j):a(j)=t

End If

next j

next i

方法2:直接插入排序

For i= 1 To 9

Pointer=i

For j = i+1 To 10

若要降序,则a(j)>a(i)

两数交换

’比较n-1轮

’每一轮比较几次

If a(Pointer)>a(j) Then Pointer=j

Next j

If i <> Pointer Then

t=a(i):a(i)=a(j):a(j)=t

End If

Next i

方法3:冒泡排序

For i= 1 To n-1

For j = 1 To 10-i

If a(j)>a(j+1) Then

t=a(j):a(j)=a(j+1):a(j+1)=t

End If

Next j

两数交换

’比较n-1轮

’每一轮比较几次

’从大到小:a(i)

两数交换

Next i

For i =1 To 10

= & a(i) & space(2) ’排好序的数输出显示文本框

Next i

七、字符操作

1、字符串取反

例题:在文本框中输入一个字符串,比如:ABCDEFGH,然后反向输出,结果为:

HGFEDCBA。

Private Sub Command1_Click()

Dim s As String ,n As Integer ,i As Integer

n=Len( )

For i = n To 1 Step-1 ' For i = 1 To n

s = s + Mid(,i,1) ' s = Mid(,i,1) + s

Next i

Print s

End Sub

2、判断字符串中的某个字符是否为字母

例题:在文本框中输入一个字符串,比如:A$4Ch&*Fiy%41H,输出字符串中的所

有字母,结果为:AChFiyH。

Private Sub Command1_Click()

Dim s As String ,n As Integer ,i As Integer ,c As String

n=Len( )

For i = 1 To n

c=Mid(,i,1)

If c >= "A" And c<= "Z" Or c >= "a" And c<= "z" Then

s = s + c

End If

Next i

Print s

End Sub

3、统计每类字符的个数

例题:在文本框中输入一个字符串,比如:A$m4Ch&*F13iy%p41H,请分别统计

出大写字母、小写字母、数字字符和其他字符的个数。

Private Sub Command1_Click()

Dim n As Integer ,i As Integer ,c As String

Dim n1 As Integer ,n2 As Integer ,n3 As Integer ,n4 As Integer

n=Len( )

For i = 1 To n

c=Mid(,i,1)

Select Case c

Case "A" To "Z"

n1 = n1 + 1

Case "a" To "z"

n2 = n2 + 1

Case "0" To "9"

n3 = n3 + 1

Case Else

n4 = n4 + 1

End Select

Next i

Print "大写字母个数:";n1;"小写字母个数:";n2;"数字字符个数:";n3;

"其他字符个数:";n4

End Sub

八、矩阵(二维数组) 的应用

几种矩阵的算法:(图形表示)

①主对角线元素和 ②副对角线元素和 ③靠边元素和 ④内圈元素和

⑤所有元素和 ⑥所有元素最大、小值 ⑦求行和、列和

图① 图② 图③ 图④

例题:有一个4行4列二维数组,现随机生成16个两位整数,并将它们存入到二维

数组中,现根据以上几种图形分别求之。

第一种(主对角线元素和)

Private Sub Command1_Click()

Dim a(4,4) As Integer ,i As Integer ,j As Integer

Dim sum As Integer

For i = 1 To 4

For j= 1 To 4

a(i,j) = Int(Rnd*90) + 10

Next j

Next i

For i = 1 To 4

For j= 1 To 4

If i = j Then '主对角线特点:行下标和列下标相同,即I=J

sum = sum + a(i,j) ‘①

End If

Next j

Next i

Print "主对角线元素和";sum

End Sub

第二种(副对角线元素和)

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

End Sub

第三种(对角线元素和)

For i = 1 To 4

For j= 1 To 4

If i = j or i+j=5 Then sum =sum + a(i,j) '行下标和列下标相同

Next j

Next i

Print "副对角元素和";sum

End Sub

第四种(靠边元素和)

Private Sub Command1_Click()

For i = 1 To 4

For j= 1 To 4

If i =1 Or i = 4 Then

sum = sum + a(i,j)

ElseIf j =1 Or j = 4 Then

sum = sum + a(i,j)

End If

Next j

Next i

‘第一行和最后一行元素

‘中间行最外边元素

Print "靠边元素和";sum

End Sub

第五种(内圈元素和)

Private Sub Command1_Click()

For i = 1 To 4

For j= 1 To 4

If i =1 Or i = 4 Then

sum1 = sum + a(i,j)

ElseIf j =1 Or j = 4 Then

sum1 = sum + a(i,j)

End If

sum = sum + a(i,j)

Next j

Next i

Print "内圈元素和";sum-sum1

End Sub

第六种(所有元素和)

For i = 1 To 4

For j= 1 To 4

sum = sum + a(i,j)

Next j

Next i

Print所有元素和";sum

第七种(所有元素最大、小值)

Max=a(1,1): Min =a(1,1)

For i = 1 To 4

For j= 1 To 4

If a(i,j)>max Then Max= a(i,j)

If a(i,j)

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


本文标签: 数组 文件 元素 字符