Download presentation
Presentation is loading. Please wait.
1
计算机程序设计强化复习 Visual Basic 6.0
2
全文结构 VB语法知识基础 VB语法知识进阶 常用算法及编程技巧 界面元素与程序调试 模拟试题 第1章 程序代码的组织方式
第2章 数据类型、常量与变量 第3章 运算符、表达式与公共函数 第4章 数组 第5章 顺序结构 第6章 选择结构 第7章 循环结构 第8章 过程设计 第9章 文件操作 第10章 算法中使用的基本技巧 第11章 数列、级数求和及矩阵运算问题 第12章 数组的移动、排序及查找 第13章 因数、最大公约数与素数等问题 第14章 整数拆分、进制转换 第15章 字符运算及圆圈数问题 第16章 常用控件的通用属性、事件及方法 第17章 窗体的通用属性、事件及方法 第18章 重要控件 第19章 程序调试和程序设计
3
第1章 程序代码的组织方式 1.1 程序代码的基本构成 字符集 关键字 标识符 运算符 表达式 语句及语法规则 语义 Print a
关键字/标识符 表达式 语句 过程 模块 程序 1.1 程序代码的基本构成 字符集 关键字 标识符 运算符 表达式 语句及语法规则 语义 Print a Print a, Print a;
4
第1章 程序代码的组织方式 1.2 VB中的过程 1.3 VB中的模块 用过程编程的两大好处 VB中过程的种类 窗体模块 标准模块 类模块
事件过程——系统提供的过程 通用过程——用户自定义过程 1.3 VB中的模块 窗体模块 标准模块 类模块
5
第2章 数据类型、常量与变量 2.1 基本数据类型 数值型 字符串型 逻辑型 日期型 变体型 数据类型转换 类型名称 表示数据 存储空间
数值类型间的转换 数值类型与字符串类型的转换 数值类型与逻辑类型的转换 字符串类型与逻辑类型的转换 Print True+3 ‘显示结果为2 Print “123”+100 ‘显示结果为223 Print #5/1/2000# + 3 ‘显示结果是00-5-4 类型名称 表示数据 存储空间 取值范围 整型 Integer 2个字节 -32,768 ~ 32,767 Long 长整型 4个字节 -2,147,483,648 ~ 2,147,483,647 Byte 字节型 1个字节 0 ~ 255 实型 Single 单精度浮点数 -3.402,823E38 ~ ,298E-45 1.401,298E-45 ~ 3.402,823E38 Double 双精度浮点数 8个字节 -1.797,693,134,862,32D308 ~ -4.940,656,458,412,47D-324 4.940,656,458,412,47D-324 ~ 1.797,693,134,862,32D308 Cunency 货币型 -922,337,203,685, ,8 ~ 922,337,203,685, ,7
6
第2章 数据类型、常量与变量 变量 2.2 构造数据类型 数组 自定义类型 2.3 常量与变量 字面常量 符号常量 固定大小数组 动态数组
系统内部常量——VbRed、VbCrLf等 用户自定义符号常量 Const Pi As Single =3.14 变量
7
第3章 运算符、表达式与公共函数 3.1 VB中的运算符与表达式 算术运算符与算术表达式 字符串连接符 关系运算符与关系表达式
逻辑运算符与逻辑表达式 运算符的优先级 算术运算符 ^、-、*或/、\、Mod、+或- 字符运算符 +或& 关系运算符 =、>、>=、<、<=、<>、Is、Like 逻辑运算符 Not、And、Or、Xor、Eqv、Imp
8
第3章 运算符、表达式与公共函数 3.2 VB中的公共函数 数学函数 字符串函数 类型转换函数 随机函数 输入与输出函数
生成某个范围内的随机整数 Int((upperbound – lowerbound +1)*Rnd + lowerbound) 输入与输出函数
9
第4章 数 组 4.1 数组的命名及说明 数组的命名 数组的说明 4.2 数组结构与数组元素 数组的逻辑结构与存储结构 数组元素
第4章 数 组 4.1 数组的命名及说明 数组的命名 数组的说明 4.2 数组结构与数组元素 数组的逻辑结构与存储结构 数组元素 4.3 固定大小数组与动态数组 固定大小数组 动态数组 4.4 Erase语句
10
第5章 顺序结构 A B 5.1 赋值语句 赋值语句的格式 <变量名|属性名>=<表达式> 不同类型数据之间的赋值
赋值号与等号的区别 变量 表达式 逻辑型 True 非0 数值型 False 整型 -1 字符型 “True” “False” 编译出错 非数值字符串 对应的数值 数值字符串
11
第5章 顺序结构 5.2 Print 方法、Cls 方法 方法调用语句的一般形式 [<对象>.]<方法名>[参数列表] Print 方法 [对象.]Print p1<s>p2<s>…… 例5-7:下列程序片断的输出结果是什么? a=3 : b=5 Print “ ” Print a;b Print a, Print b Print a Cls 方法、Clear方法 3 5 3 5
12
第6章 选择结构 6.1 If…Then 结构语句 标准分支选择结构
例6-1:写出根据键盘输入的百分制学生成绩判断该学生是否及格并输出“Pass”或“Fault”。 单分支结构 例6-2:写出根据键盘输入的百分制学生成绩判断该学生是否及格并将及格学生的成绩输出的程序片段。 多分支结构 例6-3:写出将键盘输入的百分制学生成绩转换成五分制并输出的程序片段。 e A B True False
13
第6章 选择结构 6.2 Select Case 结构语句 一般形式 测试项的形式
例6-4:在 Select Case X 结构中,描述判断条件3≤X≤7的测试项应该写成 。 A. Case 3 ≤ X≤7 B. Case 3 ≤ X, X≤7 C. Case Is≤7 , Is≥3 D. Case 3 To 7
14
第7章 循环结构 7.1 Do…Loop 结构语句 Do-While循环结构 Do-Until循环结构 e A e A False True
“当”型循环 “直到”型循环 7.1 Do…Loop 结构语句 Do-While循环结构 Do-Until循环结构
15
第7章 循环结构 7.2 For…Next 结构语句 一般形式
For<循环控制变量>=<循环变量初值>To<循环变量终值>Step<循环变量步长> …… [Exit For] Next<循环控制变量> For循环与Do循环的比较 循环嵌套
16
第8章 过程设计 8.1 Sub过程与Function过程的定义与调用 Sub过程的定义
[Private | Public] [Static] Sub 过程名 ([参数列表]) [局部变量和常量声明] 语句体 [Exit Sub] …… End Sub Sub事件过程的定义 Sub通用过程的定义
17
第8章 过程设计 8.1 Sub过程与Function过程的定义与调用 Function过程的定义
[Private | Public] [Static] Function 函数名 ([参数列表]) [As 数据类型] [局部变量和常量声明] 语句体 [Exit Function] …… [函数名=表达式] End Function 例8-5:以下有关过程的说法中错误的是 。 A. 在Sub或Function过程中不能再定义其他Sub或Function过程 B. 在调用过程时,与使用ByRef说明的形参对应的实参只能按地址传递方式结合。 C. 递归过程既可以是递归Function过程,也可以是递归Sub过程。 D. 在调用过程时,形参为数组的参数对应的实参只能是数组。
18
第8章 过程设计 8.1 Sub过程与Function过程的定义与调用 Function过程与Sub过程的区别
例8-6:分别用Sub过程和Function过程编写一个求n!的自定义过程。 Sub过程: Private Sub fact(n As Integer, f As Long) Dim i As Integer f = 1 For i = 1 To n f = f * i Next i End Sub Function过程: Private Function fact(n As Integer) As Long Dim i As Integer fact = 1 For i = 1 To n fact = fact * i Next i End Sub
19
第8章 过程设计 8.1 Sub过程与Function过程的定义与调用 Sub过程与Function过程的调用 Sub事件过程的调用
Call 语句调用: Call <过程名> (实参表) 将过程名作为语句调用:过程名 [实参表] Function过程的调用 变量=过程名(实参表) 主调程序 语句 n 调用过程 A 语句 n+1 End Sub 过程 A
20
第8章 过程设计 8.1 Sub过程与Function过程的定义与调用 过程的嵌套调用 过程调用的注意事项
由于Function过程本身返回值,所以一般不使用Sub通过过程的调用方法,因为这两种方法将放弃函数名的返回值 若对Function过程的调用出现在表达式中,则其运算优先级最高 主调程序 调用过程 A End Sub 过程 A 调用过程 B 过程 B 程序 A 调用过程 B End Sub 程序 B 调用过程 A
21
第8章 过程设计 8.2 过程调用时的参数 参数传递的限制 形参与实参的个数、类型和顺序必须严格匹配 形参 实参 变量
变量、常量、表达式、数组元素、对象 数组
22
第8章 过程设计 8.2 过程调用时的参数 按值传递 ByVal 按地址传递 ByRef
数组、自定义记录类型的变量、对象变量不能按值传递;常数和表达式必须按值传递 按值传递的参数,形参和实参的类型只需要相容即可 按地址传递 ByRef
23
第8章 过程设计 8.3 递归过程 递归过程的定义 递归过程的构成条件 三题递归相关 在过程定义中调用自身或以其他方式间接调用自身的过程
可以递归Sub过程,也可以递归Function过程 递归过程的构成条件 有对本身的调用语句 有一个结束递归过程的条件(终止条件或边界条件) 三题递归相关 求 N! 求 菲布拉及数列 求 最大公约数
24
第8章 过程设计 8.4 变量的作用域与生命期 变量的作用域 在窗体模块中,不能定义数组、定长字符串、用户自定义类型等为全局变量。 局部变量
模块级变量 全局变量 窗体模块 标准模块 声明方式 Dim/Static Dim/Private Public 声明位置 过程内 窗体/模块的通用声明段 作用范围 本过程 本模块 整个程序 能否本模块其它过程访问 不能 能 能否被其它模块访问 能,但需在变量名前加上窗体名
25
第8章 过程设计 8.4 变量的作用域与生命期 变量的生命期
8-22:若希望在离开某过程后,还能保存该过程中局部变量的值,则应使用 关键字在该过程中定义局部变量。 A. Dim B. Private C. Public D. Static 同名变量 局部变量 静态变量 模块级变量 全局变量 声明方式 Dim Static Dim/Private Public 作用域 本过程 本模块 整个程序 生命期 从声明到过程终止 从声明到程序终止
26
第9章 文件操作 9.1 文件的基本概念 文件的概念 文件类型 文件操作步骤 9.2 基本文件操作控件 驱动器列表框 目录列表框 文件列表框
27
第9章 文件操作 9.3 常用文件操作语句与文件操作函数 Open语句 Close语句与Reset语句 Lock和Unlock语句
Seek语句 Print #和Write #语句 Input#和Line Input # 语句 Put # 和 Get #语句 常用文件操作函数
28
第10章 算法中使用的基本技巧 10.1.1 交换 t=a : a=b : b=t t=b: b=a : a=t
t=a : a=b : b=c : c=t a=a+b : b=a-b : a=a-b 累加、累乘 n=n+1 Sum=Sum+n P=P*n 10.2 最大/小值问题 max=a(1) for i=2 to Ubound(a) if a(i)>max then max=a(i) next i
29
第10章 算法中使用的基本技巧 穷举 10-1:用100元买100只鸡,公鸡每只5元,母鸡每只3元,小鸡每1元3只,问可以买多少只公鸡、母鸡和小鸡?有多少种组合? Private Sub Command1_Click() Dim X As Integer, Y As Integer, Z As Integer Dim Count As Integer Count = 0 For X = 0 To Fix(100 / 5) For Y = 0 To Fix(100 / 3) For Z = 0 To 100 If X * 5 + Y * 3 + Z / 3 = 100 And X + Y + Z = 100 Then Print X, Y, Z Count = Count + 1 End If Next Print "组合个数:"; Count End Sub
30
第10章 算法中使用的基本技巧 10-2:求出所有的水仙花数,如153=13+53+33
Private Sub Command1_Click() Dim X As Integer, Y As Integer, Z As Integer For X = 1 To 9 For Y = 0 To 9 For Z = 0 To 9 If X ^ 3 + Y ^ 3 + Z ^ 3 = 100 * X + 10 * Y + Z Then Print 100 * X + 10 * Y + Z End If Next End Sub
31
第10章 算法中使用的基本技巧 迭代 10-3:设方程为4*x2-3*x-7=0,给出不精确的初始根x0=2,利用公式:xn+1=xn-f(xn)/f’(xn) n=0,1,2…求出方程的近似根,直到 |xn+1-xn|< 。 Dim X0 As Double, X1 As Double X0 = 2 Do X1 = X0 - (4 * X0 ^ * X0 - 7) / (8 * X0 - 3) If Abs(X1 - X0) < Then Exit Do X0 = X1 Loop Print X1 Dim X0 As Double, X1 As Double X1 = 2 Do X0 = X1 X1 = X0 - (4 * X0 ^ * X0 - 7) / (8 * X0 - 3) Loop Until Abs(X1 - X0) < Print X1
32
第10章 算法中使用的基本技巧 f=f(n-1)*2 10.4.1 递推
10-4:已知一对成熟的兔子每月可以生一对小兔子。出生的小兔子两个月后成熟,就可再生一对小兔子。问一对成熟的兔子在一年内能繁殖成多少对兔子? 10-5:细胞分裂,每分裂一次要用3分钟,30分钟后有细胞2048个。问开始时有多少个细胞? Dim F(10) As Integer, i As Integer F(10) = 2048 For i = 9 To 0 Step -1 F(i) = F(i + 1) / 2 Next i Print F(0) 递归 Private Sub Command1_Click() Print "开始时的细胞数:"; f(0) End Sub Function f(n As Integer) As Integer If n = 10 Then f = 2048 Else f = f(n + 1) / 2 End If End Function f=f(n-1)*2
33
第11章 数列、级数求和及矩阵运算问题 11.1 数列问题 固定公式 11-1:利用公式 k*k+k+17 生成一组两位数的整数。 递推公式
11-2:利用初值 x1=15 以及公式 xi+1=(3*xi+153) mod 256产生一个10个数的数列。 Dim x1 As Integer, x2 As Integer Dim count As Integer x1 = 15: Print x1 For count = 2 To 10 x2 = (3 * x ) Mod 256 Print x2 x1 = x2 Next count Dim a(1 To 10) As Integer Dim count As Integer a(1) = 15: Print a(1) For count = 2 To 10 a(count) = (3 * a(count - 1) + 153) Mod 256 Print a(count) Next count
34
第11章 数列、级数求和及矩阵运算问题 11.2.1 级数求和 确定通项 确定求和结束条件
11-3:求 cos(x)=1-x2/2!+x4/4!-…+(-1)n+1x2(n-1)/[2(n-1)]!+… n=1,2,…… 直到级数的第n项的绝对值小于等于10-6为止。 Private Sub Command1_Click() Const x As Single = / 3 Dim Sum As Single, N As Integer, T As Single N = 1: T = 1 Do Sum = Sum + T N = N + 1 T = -T T = T * x ^ 2 / (2 * (N - 1) * (2 * N - 3)) Loop While Abs(T) >= 10 ^ -10 Print Sum End Sub
35
cos(x)=1-x2/2!+x4/4!-…+(-1)n+1x2(n-1)/[2(n-1)]!+…
Private Sub Command1_Click() Const x As Single = / 3 Dim Sum As Single, n As Integer, T As Single n = 1: T = 1 Do Sum = Sum + T n = n + 1 T = (-1) ^ (n + 1) * x^ (2 * (n - 1)) /F(2 * (n - 1)) Loop While Abs(T) >= 10 ^ -10 Print Sum End Sub q Function F(ByVal k As Integer) As Double Dim i As Integer F = 1 For i = 2 To k F = F * i Next i End Function
36
第11章 数列、级数求和及矩阵运算问题 11.2.2 连乘积 11-4: 到通项接近1时停止计算。
11-4: 到通项接近1时停止计算。 Private Sub Command1_Click() Dim Sum As Single, T As Single Sum = 2: T = Sqr(2) Do Sum = Sum * 2 / T T = Sqr(2 + T) Loop While Abs(2 / T - 1) >= 10 ^ -10 Print Sum End Sub
37
第11章 数列、级数求和及矩阵运算问题 11.3.1 矩阵的生成和打印 生成数组 打印数组 11.3.2 矩阵的行列交换
矩阵的变换 11-10:将一个4行4列矩阵进行转置 11-11:求出一给定矩阵的旋转矩阵。
38
第11章 数列、级数求和及矩阵运算问题 11.3.4 寻找某些特殊点 11-12:求6*5数组的鞍点,鞍点是指本行最大、本列最小的元素。
特殊矩阵 按以下样式输出5行杨辉三角。 1 1 1 Private Sub Command1_Click() Dim A(5, 5) As Integer, I As Integer, J As Integer For I = 1 To 5 A(I, 1) = 1 A(I, I) = 1 Next I For I = 3 To 5 For J = 2 To I - 1 A(I, J) = A(I - 1, J - 1) + A(I - 1, J) Next J Print Space(5 - I); For J = 1 To I Print CStr(A(I, J)); " "; Print End Sub
39
综合例题 11-4:标记出5*5方阵中每一行最小元素的位置。如果某一行有多个数值相等的最小元素,也要同时标记出来。标记方式为每一行的最小元素为0,其他元素为1。 Option Explicit Option Base 1 Private A(5, 5) As Integer Private Sub Form_click() Text1 = "" Dim I As Integer, J As Integer Randomize For I = 1 To 5 For J = 1 To 5 A(I, J) = Int(( ) * Rnd + 10) Text1.Text = Text1 & A(I, J) & " " Next J Text1 = Text1 & vbCrLf Next I End Sub Private Sub Command1_Click() Dim I As Integer, J As Integer, Min As Integer For I = 1 To 5 Min = A(I, 1) For J = 2 To 5 If A(I, J) < Min Then Min = A(I, J) Next J For J = 1 To 5 If A(I, J) = Min Then Text2 = Text2 & "0 " Else Text2 = Text2 & "1 " End If Text2 = Text2 & vbCrLf Next I End Sub
40
11.3.6 综合例题 11-15:找出5*5数组中最大元素和最小元素所在行,如果不在同一行则交换这两行。 Option Explicit
Private Sub Command1_Click() Dim I As Integer, J As Integer, T As Integer Dim Min As Integer, Max As Integer Dim LMin As Integer, LMax As Integer Min = A(1, 1): Max = A(1, 1) For I = 1 To 5 For J = 1 To 5 If A(I, J) < Min Then Min = A(I, J) LMin = I Else If A(I, J) > Max Then Max = A(I, J) LMax = I End If Next J Next I If LMin <> LMax Then T = A(LMin, I) A(LMin, I) = A(LMax, I) A(LMax, I) = T Text2 = Text2 & A(I, J) & " " Text2 = Text2 & vbCrLf End Sub 11-15:找出5*5数组中最大元素和最小元素所在行,如果不在同一行则交换这两行。 Option Explicit Option Base 1 Private A(5, 5) As Integer Private Sub Form_click() Dim I As Integer, J As Integer Randomize For I = 1 To 5 For J = 1 To 5 A(I, J) = Int(( ) * Rnd + 10) Text1.Text = Text1 & A(I, J) & " " Next J Text1 = Text1 & vbCrLf Next I End Sub
41
第12章 数组的移动、排序及查找 12.1 移动 12-1:将一个10个元素的数组A循环向右移动一位。
→ 12-2:将一个10个元素的数组A循环向左移动一位。 12-3:将一个10个元素的数组A循环向右移动三位。 12-4:将一个4行4列数组的列循环右移一列。
42
第12章 数组的移动、排序及查找 12.2 排序 12.2.1 选择法排序 12.2.2 冒泡法排序 12.2.3 插入法排序
合并排序 拉锯式排序法 每一轮先把最小的元素从前到后送到最后面的位置,然后从后到前把最大的元素送到最前面的位置。
43
第12章 数组的移动、排序及查找 12.3 查找 12.3.1 顺序查找 12.3.2 二分法查找 Option Base 1
Private a(10) As Integer Private Sub Command1_Click() Dim N As Integer, Midd As Integer, Low As Integer, High As Integer Dim Flag As Boolean For i = 1 To 10 a(i) = i * 10 + i Print a(i); Next i Print Flag = False N = 120 Low = 1: High = 10 Do Midd = Int((Low + High) / 2) If a(Midd) = N Then Print CStr(N); " is in array "; CStr(Midd) Flag = True Exit Do Else If a(Midd) > N Then High = Midd - 1 Low = Low + 1 End If Loop While Low <= High If Not Flag Then Print "Can't find the Number "; CStr(N); "!" End Sub 12.3 查找 顺序查找 二分法查找
44
第13章 因数、最大公约数与素数等问题 13.1 整数的因数计算问题 穷举法求整数的所有因子 动态数组保存整数的所有因子 整数的连乘积表达
24=2×2×2×3 Private Sub Command1_Click() Dim i As Integer, N As Integer N = InputBox("Please Input a number") i = 2 Print CStr(N); "="; Do While i < N If N Mod i = 0 Then Print CStr(i); "*"; N = N \ i Else i = i + 1 End If Loop Print CStr(N) End Sub
45
第13章 因数、最大公约数与素数等问题 13.2 最大公约数与最小公倍数问题 最大公约数的求法 最小公倍数的求法 穷举法 欧几里德法 递归法
利用最大公约数求最小公倍数
46
穷举法 求最大公约数 Private Sub Command1_Click()
Dim R As Integer, M As Integer, N As Integer, T As Integer M = InputBox("Please Input number A") N = InputBox("Please Input number B") '确认M>N If M < N Then T = M: M = N: N = T End If For R = 1 To N If M Mod R = 0 And N Mod R = 0 Then T = R Next R MsgBox ("最大公约数是:" & T) End Sub
47
欧几里德法 求最大公约数 Private Sub Command1_Click()
Dim R As Integer, M As Integer, N As Integer, T As Integer M = InputBox("Please Input number A") N = InputBox("Please Input number B") '确认M>N If M < N Then T = M: M = N: N = T End If '欧几里德法 求最大公约数 R = M Mod N Do While R <> 0 M = N N = R Loop MsgBox ("最大公约数是:" & N) End Sub
48
递归法 求最大公约数 Private Sub Command1_Click()
Dim R As Integer, M As Integer, N As Integer, T As Integer M = InputBox("Please Input number A") N = InputBox("Please Input number B") '确认M>N If M < N Then T = M: M = N: N = T End If MsgBox ("最大公约数是:" & GCD(M, N)) End Sub Private Function GCD(a As Integer, b As Integer) As Integer If a Mod b = 0 Then GCD = b Else GCD = GCD(b, a Mod b) End Function
49
第13章 因数、最大公约数与素数等问题 13.3 素数问题 素数判断的基本方法 找出给定范围内的素数 扩展
无暇素数:本身为素数,且其逆序数也是素数(149) 超级素数:一个素数从低数到高位依次去掉一位数后仍然是素数(2939) 孪生素数:数值相差为2的两个素数(29,31) 分解质因数
50
第14章 整数拆分、进制转换 14.1 整数拆分 转换成字符型处理 数值法处理 整数拆分的应用 求一个整数的各位数字之和 水仙花数 逆序数
51
求一个整数的各位数字之和 Private Sub Command1_Click()
Dim N As Integer, I As Integer, Sum As Integer N = InputBox("Please input a number:") For I = 1 To Len(CStr(N)) Sum = Sum + Mid(CStr(N), I, 1) Next I Print "Sum="; Sum End Sub
52
逆序数 Private Sub Command1_Click()
Dim M As Integer, I As Integer, N As Integer M = InputBox("Please input a number:") Print M; "的逆序数是:"; Do While M >= 1 N = N * 10 + M Mod 10 M = M \ 10 Loop Print N End Sub
53
第14章 整数拆分、进制转换 14.2 进制转换 14.2.1 十进制转换为二进制 14.2.2 十进制转换为十六进制
二进制转换为十进制 十六进制转换为十进制 二进制转换为八进制
54
十进制转换为二进制 Private Sub Command1_Click()
Dim M As Integer, I As Integer, N As String M = InputBox("Please input a number:") Do While M >= 1 N = CStr(M Mod 2) & N M = M \ 2 Loop Print N End Sub
55
A→C,B →D……X →Z,Y →A,Z →B
第15章 字符运算及圆圈数问题 15.1 字符运算 字符的替换 例:将由大写字母组成的某字符串中的字符进行转换,转换规则如下: A→C,B →D……X →Z,Y →A,Z →B 字符串的替换 例:将字符串x中出现的子串s统统替换成子串 s1,如图
56
第15章 字符运算及圆圈数问题 15.1 字符运算 15.1.3 逆序、回文串 例15-3:将一个字符串逆转。如“1234”转为“4321”
Dim Char() As String, S As String, T As String, C As String Dim I As Integer, Flag As Boolean, Count As Integer S = Text1: T = "": C = "": Count = 0 For I = 1 To Len(S) C = Mid(S, I, 1) If C >= "a" And C <= "z" Or C >= "A" And C <= "Z" Then T = T & C Flag = True Else If Flag Then Count = Count + 1 ReDim Preserve Char(Count) Char(Count) = T T = "" End If Flag = False Next 15.1 字符运算 逆序、回文串 例15-3:将一个字符串逆转。如“1234”转为“4321” 例15-4:判断一个数是否为回文串 统计 例15-1:统计一段文本中英文字母出现的次数 例15-2:统计一段文本中单词的个数,约定连续出现的英文字母为一个单词。
57
第15章 字符运算及圆圈数问题 15.2 圆圈数问题 15.2.1 报数问题
例15-3:14人围成一圈,从1开始报数,凡报到3的出列,接着继续从1开始报数,直到全部出列为止,问依次出列的顺序。 Dim A(1 To 14) As Integer Dim I As Integer, Count As Integer, Js As Integer For I = 1 To 14 A(I) = 1 Next I Count = 0: Js = 0: I = 0 Do Do While Count <> 3 I = IIf(I = 14, 1, I + 1) Count = Count + A(I) Loop Print I; A(I) = 0: Js = Js + 1: Count = 0 Loop While Js < 14
58
第15章 字符运算及圆圈数问题 15.2 圆圈数问题 15.2.2 圆圈中的特殊点
例15-4:将20个两位正整数排成圆圈依次编号。找出其中的拐点元素(即指它比左右相邻元素都大或都小),并输出拐点元素的值及位置。 Dim A(1 To 20) As Integer Dim I As Integer, Count As Integer Dim Left As Integer, Right As Integer For I = 1 To 20 A(I) = Int(( ) * Rnd + 10) Print A(I); Next I Print For Count = 1 To 20 Left = IIf(Count = 1, 20, Count - 1) Right = IIf(Count = 20, 1, Count + 1) If A(Count) > A(Left) And A(Count) > A(Right) Or A(Count) < A(Left) And A(Count) < A(Right) Then Print A(Count); Count End If Next Count
59
第15章 字符运算及圆圈数问题 15.2 圆圈数问题 15.2.3 翻转问题
Private Sub Command1_Click() Dim a(1 To 14) As Integer Dim I As Integer, Id As Integer For I = 1 To 14 a(I) = 1 Next I List1.AddItem F(a) Id = 1 For I = 1 To 100 If I Mod 3 = 0 Then a(Id) = IIf(a(Id) = 0, 1, 0) End If Id = IIf(Id < 14, Id + 1, 1) End Sub Function F(Arr() As Integer) As String Dim I As Integer For I = 1 To UBound(Arr) F = F & Str(Arr(I)) End Function 15.2 圆圈数问题 翻转问题 例15-5:翻转硬币。设硬币画面为1,字面为0。14个硬币画面向上围成一圈,按顺时针方向数,凡数到可被3整除的数时,将硬币翻转。问数到100以后硬币的状态。
60
示例——文件操作语句/函数 9-8:下列关于文件的说法正确的是 。 A. 打开随时文件时,参数Len的值可任意设置
9-8:下列关于文件的说法正确的是 。 A. 打开随时文件时,参数Len的值可任意设置 B. 若以Output、Append、Random或Binary方式打开一个不存在的文件,系统会出错 C. 在Input方式下,不能使用不同文件号同时打开同一个文件 D. 在一个过程中,一个文件号有可能被用于打开不同的文件 9-9:若磁盘文件C:\Data1.dat不存在,下列打开文件语句中,会产生错误的是 。 A. Open “C :\Data1.dat” For Output As #1 B. Open “C :\Data1.dat” For Input As #2 C. Open “C :\Data1.dat” For Append As #3 D. Open “C :\Data1.dat” For Binary As #4
61
示例——文件操作语句/函数 9-10:下面能够正确打开文件的一级语句是 。 A. Open “data” For Output As #5
9-10:下面能够正确打开文件的一级语句是 。 A. Open “data” For Output As #5 Open “data2” For Input As #5 B. Open “data1” For Output As #5 Open “data1” For Input As #6 C. Open “data1” For Input As #5 D. Open “data1” For Output As #5 Open “data1” For Random As #6 9-11:下面 说法是不正确的。 A. 当程序正确结束时,所有没有用Close语句关闭的文件都会自动关闭 B. 在关闭文件或程序结束之前,可以不用Unlock语句对已锁定的记录解锁 C. 可以用不同的文件号打开同一随机文件 D. 用Output模式打开一个顺序文件,即使不对它进行写操作,原来的内容也会被清除。 Back
62
示例——基本文件操作控件 9-4:改变目录列表框控件的Path属性的途径可以有 。 ①单击目录列表框某一项
③双击目录列表框某一项 ④在程序中用ChDir命令设置当前工作目录 A. ①② B. ②③ C. ②③④ D. ①②③④ 9-5:下面有关文件管理控件的说法,正确的是 。 A. ChDir语句的作用是指明新的缺省工作目录,同时也改变目录列表框的Path属性 B. 改变文件列表框的FileName属性值,仅改变列表框中显示的文件名,不会引发其它事件 C. 改变驱动器列表框的ListIndex属性值,会改变Drive属性并触发Change事件 D. 单击目录列表框中某一项会触发Change事件
63
示例——基本文件操作控件 9-6:执行赋值语句 后,会触发相应控件的Change事件。
A. Dir1.ListIndex=-2 B. Drive1.ListIndex=2 C. List1.ListIndex=3 D. File1.ListIndex=3 9-7:在窗体上设置了DriveListBox、DirListBox和FileListBox等三个控件,下面 语句一定不会改变相应控件的Path或Drive属性。 A. Drive1.ListIndex=2 B. Dir1.ListIndex=-2 C. File1.FileName=“a:\*.*” D. File1.Path=Drive1.Drive Back
64
示例——文件类型 9-1:在Visual Basic中文件访问的类型有 。 A. 顺序、随机、二进制 B. 顺序、随机、字符
C. 顺序、十六进制、随机 D. 顺序、记录、字符 9-2:下面关于顺序文件的描述,正确的是 。 A. 每条记录的长度必须相同 B. 可通过编程对文件中的某条记录方便地修改 C. 数据只能以ASCII码形式存放在文件中,所以可通过文本编辑软件显示 D. 文件的组织结构复杂 9-3:下面关于随机文件的描述,不正确的是 。 A. 每条记录的长度必须相同 B. 一个文件中记录号不必唯一 C. 可通过编程对文件中的某条记录方便地修改 D. 文件的组织结构比顺序文件复杂 Back
65
示例——同名变量 8-25:程序中的不同过程之间,不能通过 进行数据传递。 ①全局变量 ②窗体或模块级变量 ③形参与实参结合 ④静态变量
8-25:程序中的不同过程之间,不能通过 进行数据传递。 ①全局变量 ②窗体或模块级变量 ③形参与实参结合 ④静态变量 A. ①②④ B. ①②③ C. ②④ D. ④ 8-27:若在应用程序的标准模块、窗体模块和过程模块Sub1的说明部分,分别用“Public G As Integer”、“Private G As Integer”和“Dim G As Integer”语句说明了三个同名变量G。如果在过程Sub1中使用赋值语句“G=3596”,则语句是在 说明部分定义的变量G赋值。 A. 标准模块 B. 过程Sub1 C. 窗体模块 D. 标准模块、窗体模块和过程Sub1
66
示例——同名变量 3 9.6 8-26:执行下面程序后,输出结果是什么? Option Explicit Dim a As Single
Private Sub Command1_Click() Dim a As Single, b As Integer a = 1.2: b = 3 Debug.Print fun1(a, b) Debug.Print a End Sub Private Function fun1(x As Single, y As Integer) As Integer Dim i As Integer For i = 1 To y x = x * 2 a = a + 1 Next i fun1 = a End Function 3 9.6 Back
67
示例——变量的生命期 3 5 8 16 8-23:执行下面程序后,输出结果是什么? Private Sub Command1_Click()
Dim i As Integer, j As Integer i = 1: j = 2 Call Test(i, j) Print i, j End Sub Private Sub Test(m As Integer, n As Integer) Static Sta As Integer m = m + n n = n + m + Sta Sta = Sta + m
68
示例——变量的生命期 8-24:执行下面程序后,输出结果是什么? 16 6 10 40 12 28 56
Private Sub Command1_Click() Dim A As Integer, B As Integer, K As Integer A = 2: B = 4 K = Fun((A), B) + Fun(A, B) Debug.Print K End Sub Private Function Fun(N As Integer, M As Integer) As Integer Static K As Integer N = N + M K = K + N M = M + K Fun = N + M Debug.Print Fun; N; M End Function 56 Back
69
示例——变量的作用域 8-19:在多窗体程序中,可以在标准模块或某个窗体模块的通用声明处,分别用 语句定义一个在所有窗体模块都可以引用的变量IntA。 A. Private IntA As Integer , Public IntA As Integer B. Public IntA As Integer , Private IntA As Integer C. Public IntA As Integer , Public IntA As Integer D. Private IntA As Integer , Private IntA As Integer 8-20:可以在 中,使用语句 Public PubStr As String *8 定义一个定长字符串。 A. 窗体模块 B. 标准模块 C. 类模块 D. 三者均可
70
示例——变量的作用域 0 0 0 0 8-21:单击Command1后,下列程序的输出结果是什么?
Private Sub Command1_Click() Dim a As Integer, b As Integer a = 1: b = 2 Call Pro(a, b) Debug.Print a, b End Sub Private Sub Pro(c As Integer, d As Integer) c = a + b d = a - b Debug.Print c, d 0 0 Back
71
示例——递归过程 8-17:单击Command1后,程序的输出结果是什么? Private Sub Command1_Click() F 3
End Sub Public Function F(M As Integer) As Integer Dim value As Integer If M = 0 Then value = 3 Else value = F(M - 1) + 5 End If F = value Debug.Print M, value End Function
72
示例——递归过程 试用递归和非递归两种方法编写求Fibonacci数列第N项的过程。
非递归方法: Private Function F1(N As Integer) As Long Dim i As Integer, a1 As Long, a2 As Long If N = 1 Or N = 2 Then F1 = 1 Else a1 = 1: a2 = 1 For i = 3 To N F1 = a1 + a2 a1 = a2 a2 = F1 Next i End If End Function 递归方法: Private Function F2(N As Integer) As Long If N = 1 Or N = 2 Then F2 = 1 Else F2 = F2(N - 1) - F2(N - 2) End If End Function Back
73
示例——传值调用/传址调用 调用前x= 10 y= 20 调用前m= 10 n= 20 调用后m= 20 n= 10
8-10:下列程序的输出结果是什么? Private Sub Command1_Click() Dim x As Integer, y As Integer x = 10: y = 20 Print "调用前"; Print "x="; x, "y="; y Call Exchange(x, y) Print "调用后"; End Sub Private Sub Exchange(ByVal m As Integer, ByVal n As Integer) Print "m="; m, "n="; n m = m + 10 n = n - 10 调用前x= y= 20 调用前m= n= 20 调用后m= n= 10 调用后x= y= 20
74
示例——传值调用/传址调用 调用前x= 10 y= 20 调用前m= 10 n= 20 调用后m= 20 n= 10
8-12:下列程序的输出结果是什么? Private Sub Command1_Click() Dim x As Integer, y As Integer x = 10: y = 20 Print "调用前"; Print "x="; x, "y="; y Call Exchange(x, y) Print "调用后"; End Sub Private Sub Exchange(m As Integer, n As Integer) Print "m="; m, "n="; n m = m + 10 n = n - 10 调用前x= y= 20 调用前m= n= 20 调用后m= n= 10 调用后x= y= 10
75
示例——传值调用/传址调用 8-11:在语句Public Sub Sort( i As Integer)中i是一个按 传递的参数。
A. 地址 B. 值 C. 变量 D. 常量 8-13:程序中有两个过程Private Sub Fun1( S As String )和 Private Sub Fun2( a( ) As String * 6),在调用过程中用Dim St(6) As String *6 定义了一个字符串数组。下面调用语句中正确的是 。 ①Call Fun1(St(3)) ②Call Fun2(St) ③Call Fun1(St) ④Call Fun2(St(6)) A. ①② B. ①③ C. ②③ D. ②④ 8-14:调用由语句Private Sub Convert(Y As Integer)定义的Sub过程时,以下不是按值传递的语句是 。 A. Call Convert((X)) B. Call Convert(x*1) C. Convert (X) D. Convert X
76
示例——传值调用/传址调用 i= 11 j= 2 k= 43 8-15:单击命令按钮Command1,立即窗口上的输出结果是什么?
Private Sub Command1_Click() Dim i As Integer, j As Integer Dim k As Integer i = 1: j = 2 k = fun(i, fun(i, j)) + i + j Debug.Print "i="; i; "j="; j; "k="; k End Sub Function fun(a As Integer, ByVal b As Integer) As Integer a = a + b b = a + b fun = a + b End Function i= 11 j= 2 k= 43
77
示例——传值调用/传址调用 18 30 8-16:单击命令按钮Command1,立即窗口上的输出结果是什么?
Private Sub Command1_Click() Dim M As Integer, N As Integer M = 1: N = 2 Debug.Print M + N + Fun1(M, N) M = 2: N = 1 Debug.Print Fun1(M, N) + Fun1(M, N) End Sub Private Function Fun1(X As Integer, Y As Integer) X = X + Y Y = X + 3 Fun1 = X + Y End Function 18 30 Back
78
示例——参数传递的限制 8-7:名为Sort的Sub子过程的形式参数为一数组,以下的定义语句中正确的是 。
A. Private Sub Sort(A( ) As Integer) B. Private Sub Sort(A(10) As Integer) C. Private Sub Sort(ByVal A( ) As Integer) D. Private Sub Sort(A( , ) As Integer) 8-8:在应用程序中用“Private Function Fun(X As Integer , Y As Single)”定义了函数Fun。调用函数Fun的过程中的变量I、J均定义为Integer型,能正确引用函数Fun的是 。 ① Fun(I , J) ② Call Fun(I , 3.65) ③ Fun (3.14 , 234) ④ Fun(“245” , “231.5”) A. ①③ B. ②③④ C. ①②③ D. ①②③④
79
示例——参数传递的限制 8-9:下面关于过程参数的说法,错误的是 。 A. 过程的形参不可以是定长字符串类型的变量
8-9:下面关于过程参数的说法,错误的是 。 A. 过程的形参不可以是定长字符串类型的变量 B. 形参是定长字符串的数组,则对应的实参必须是定长字符串型数组,且长度相同 C. 若形参是按地址传递的参数,形参和实参也能以按值传递方式进行形实结合 D. 按值传递参数,形参和实参的类型可以不同,只要相容即可 Back
80
示例——Sub过程的定义 8-1:应用程度窗体的名称属性为Frm1,窗体上有一个命令按钮,其名称属性为Cmd1。窗体和按钮的Click事件过程名分别为 。 A. Form_Click , Command1_Click B. Frm1_Click , Command1_Click C. Form_Click , Cmd1_Click D. Frm1_Click , Cmd1_Click 8-2:下列有关事件过程的说法错误的是 。 A. 标准模块中不能包含事件过程 B. 事件过程都是无参(没有形式参数) C. 事件过程也可以通过Call语句调用执行 D. 在事件过程中不能声明全局变量
81
示例—— Sub过程的定义 8-3:下列定义Sub过程的语句中,正确的语句是 。
(1)Private Sub Test(St As String * 8) (2)Private Sub Test(Sarray( ) As String * 5) (3)Private Sub Test(Sarray( ) As String) (4)Private Sub Test(St As String) A. (1)(2) B. (1)(4) C. (2)(3)(4) D. (1)(2)(3)(4) 8-4:下面Sub子过程的各个语句中,正确的是 。 a. Private Sub Sub1(A( ) As String) b. Private Sub Sub1(A( 1 to 10) As String *8) c. Private Sub Sub1(S As String) d. Private Sub Sub1(S As String *8) A. abcd B. abc C. acd D. ac Back
82
示例——循环嵌套 Dim i As Integer, j As Integer, k As Integer For i = 1 To 10
7-10:下列程序执行后,窗体上的输出结果是多少? Dim i As Integer, j As Integer, k As Integer For i = 1 To 10 For j = 1 To 5 k = k + 1 Next j Next i Print "k="; k K= 50
83
示例——循环嵌套 7-11:下列程序执行后,窗体上的输出结果是多少?
Dim i As Integer, j As Integer, k As Integer Dim ai As Integer, aj As Integer, ak As Integer For i = 1 To 4 ai = ai + 1 For j = 1 To 3 aj = aj + 1 For k = 1 To 2 ak = ak + 1 Next k Next j Next i print ai,aj,ak Back
84
示例—— For…Next 结构 7-4:在过程中有语句 For I=N1 To N2 Step N3 ,在该循环体内有下列四条语句,其中 会影响循环执行的次数。 ①N1=N1+I ②N2=N2+N3 ③I=I+N3 ④N3=2*N3 A. ①② B. ①②③ C. ③ D. ①②③④ 7-5:下列程序执行后,窗体上输出结果是什么? Dim A As Integer , B As Integer B=10 For A=1 To B A=A+1 B=B+1 Next A Print A , B
85
示例—— For…Next 结构 7-6:执行下面程序,输出的结果是什么? 13 4 -5 8
Dim I As Integer, k As Integer Dim a1 As Integer, a2 As Integer, a3 As Integer a1 = 1: a2 = 10: a3 = 2 For I = a1 To a2 Step a3 k = k + 1 I = I + 2 a1 = a1 + 1 a2 = a2 - 5 a3 = a3 + 2 Next I Print k, I Print a1, a2, a3 13
86
示例—— For…Next 结构 7-8:执行下面程序后变量 k 和 i 的值各是多少? Dim I As Integer, k As Integer For I = 10 To 1 Step -2 k = k + 1 Next I Print k, I 7-9:在窗体的单击事件中编写程序,从键盘输入一个正整数,判断该数是否为素数,并在窗体上输出“Yes”或“No”的提示信息。
87
示例——例7-9 Private Sub Form_Click() Dim x As Integer, i As Integer
x = InputBox("请输入一个正整数") For i = 2 To x - 1 If x Mod i = 0 Then Exit For Next i If i = x Then Print "Yes" Else Print "No" End If End Sub Back
88
示例—— Do…Loop 结构语句 例7-1:有如下程序片段,程序执行后a的值是多少? Dim a As Integer a=1
Do Until a=100 a=a+2 Loop Print a 例7-2:用Do循环的四种形式分别求出100以内的正整数之和。 例7-3:下列程序片段执行后,变量x的值是多少? x=1 : y=4 Do Until y>5 y=y+1 x=x*y Print x A. 1 B. 4 C. 8 D. 30 Back
89
示例——赋值号与等号的区别 5-4:判断语句a=1和If a=1 Then Print中的“a=1”是否相同?
5-5:说明语句a=b=2的含义。 5-6:针对语句 If I=1 Then J=1,下列说法正确的是 。 A. I=1和J=1均为赋值语句 B. I=1和J=1均为关系表达式 C. I=1 为关系表达式,J=1 为赋值语句 D. I=1 为赋值语句,J=1 为关系表达式 Back
90
示例——不同类型数据之间的赋值 -1 5-2:运行下面程序,单击命令按钮Command1,则立即窗口上显示的结果是 。
Private Sub Command1_Click( ) Dim A As Integer, B As Boolean, C As Integer, D As Integer A=20/3 : B=True : C=B : D=A+C Debug.Print A,D,A=A+C End Sub A False B False C A=6 D A=8 5-3:单击窗体后下面程序的显示结果是什么? Private Sub Form_Click( ) Dim a As Integer, b As Integer, c As Integer b=6 : c=6.5 a=b=c Print a -1 Back
91
示例——数组例题 4-1:下列有关数组的说法中,不正确的是 。 A. 在窗体模块中不可以定义全局数组
4-1:下列有关数组的说法中,不正确的是 。 A. 在窗体模块中不可以定义全局数组 B. 可以使用Erase语句释放所有数组所占据的存储空间 C. 语句Dim X( ) As Integer定义了一个上界是6的一维整型数组 D. 形参数组的类型可以是定长字符串类型 4-2:在窗体的通用声明处有语句Dim A() As Single,以下在某事件过程中重定义此数组的一组正确语句是 。 A. ReDim A(3,3) B. ReDim A(3,3) ReDim A(4,4) As Integer ReDim Preserve A(4,4) C. ReDim A(3) D. ReDim A(3,3) ReDim A(3,3) As Integer ReDim Preserve A(3,4)
92
示例——数组例题 4-3:在窗体模块的通用声明处有如下语句,会产生错误的是 。 (1)Const A As Integer=25
4-3:在窗体模块的通用声明处有如下语句,会产生错误的是 。 (1)Const A As Integer=25 (2)Public St As String *8 (3)ReDim B(3) As Integer (4)Dim Const X As Integer=10 A. (1)(2) B. (1)(3) C. (1)(2)(3) D. (2)(3)(4) 4-4:以下有关数组的说明中,错误的是 。 A. 根据数组说明的方式,可将数组分为动态数组和静态数组 B. 在过程中,不能用Private语句定义数组 C. 利用ReDim语句重新定维时,不得改变已经定义过的数组的数据类型 D. 数组重新定维后,原有的数组元素内容将不予保留 Back
93
示例——函数例题 3-1:设a为整型变量,s为Single型变量,把3.75赋值给s后,再执行下列某一语句,则在文本框中显示的结果的结果与执行语句 a=s : Text1=a 的结果相同的有 个。 ① a=Int(s) : Text1=a ② a=Fix(s) : Text1=a ③ a=CInt(s) : Text1=a ④ a=Format(s,”#####”) : Text1=a A. 1 B. 2 C. 3 D.4 3-2:函数Cint(-3.5)、Int(-3.5)、Fix(-3.5)的值分别是 。 A. -3、-4、-3 B. -4、-4、-3 C. -3、-4、-4 D. -4、-3、-3
94
示例——函数例题 3-3:设整型变量a、b的当前取值分别为200和20,以下赋值语句中不能正确执行的是 。
A. Text1=a/b*a B. Text1=a*a/b C. Text1=“200”*a/b D. Text1=a & b & c 3-4:下面表达式中, 的值是整型(Integer或Long)。 ① 36+4/2 ② 123+Fix(6.61) ③ \2.5 ④ 356 & 21 ⑤ “374” ⑥ 4.5 Mod 1.5 A. ①②④⑥ B. ③④⑤⑥ C.②④⑤⑥ D. ③⑥
95
示例——函数例题 3-5:执行下面语句后,Len函数值最大的是 。 Dim IA As Integer, B As Single
Dim S As String * 5, Ch As String IA=32767 : B=23.5 : S=“A” : Ch=“abcd” A. Len(IA) B. Len(B) C. Len(S) D.Len(Ch) 3-6:假设变量Lng为长整型变量,下面不能正常执行的语句是 。 A. Lng=16384*2 B. Lng=4*0.5*16384 C. Lng=190^2 D. Lng=32768*2 3-7:对正实数x的第四位小数四舍五入的VB表达式是 。 A *Int(x+0.005) B *(1000*x+0.5) C *Int(1000*x+5) D *Int(1000*(x ) Back
96
示例——例2-2 下面所列四组数据中全部是正确的VB常量的是 。 A. 32768 , 1.34D2 , “ABCDE” , &O1767
B , , 1.2E-2 , #True# C. &HABCE , , False , D-3 D. ABCDE , # # , E-2 Back
97
示例——例2-1 在某过程中已声明a为Integer型,s为String型。在该过程中,以下四组语句中不能正常执行的是 。
A.s=2*a+1 B.s=“237” & “.11” : a=s C.s=2*a>3 D.a=2 : S=16400*a Back
98
Back
Similar presentations