1.28k likes | 1.38k Views
湖南省计算机等级考试 VB 程序设计辅导. 200 7 年 10 月 计算机系—刘永逸. 内容提要. 概括性指导 基础知识、重点结构、常用标准函数、自定义函数、基本处理、逻辑表达式 常用算法:穷举法、递推 分类练习 十多种常见类型(详见下页). 1、简单的求和问题 2 、等比数列及求和 3 、递推问题( Excel 可解) 4 、常见数字问题的处理 5 、因子问题 -- 因子个数、和 6 、组合问题:不定方程求解. 7 、高精度计算 — 除法 8 、同构数 9 、完全平方数 10 、数制转换 11 、素数(质数)问题 12 、猴子选大王.
E N D
湖南省计算机等级考试VB程序设计辅导 2007年10月 计算机系—刘永逸
内容提要 • 概括性指导 • 基础知识、重点结构、常用标准函数、自定义函数、基本处理、逻辑表达式 • 常用算法:穷举法、递推 • 分类练习 • 十多种常见类型(详见下页)
1、简单的求和问题 • 2、等比数列及求和 • 3、递推问题(Excel可解) • 4、常见数字问题的处理 • 5、因子问题--因子个数、和 • 6、组合问题:不定方程求解
7、高精度计算—除法 • 8、同构数 • 9、完全平方数 • 10、数制转换 • 11、素数(质数)问题 • 12、猴子选大王
VB面向对象基本概念 • 对象、事件、方法 • 对象:窗体、标签、文本框、命令按钮、计时器、…… • 事件:Load、Unload、Chang、Click、KeyPress、LostFocus、GotFocus、… • 方法:Print、Cls、Show、Move
对象属性 • Name、Caption / Text、Left、Top、Width、Height、 Enabled、Visible、 Font、 … • VB程序执行方式 • 事件驱动编程机制
VB常用数据类型 • 数值型 • Integer(%)、Long(&) • Single(!)、Double(#) • 字符串型 • String($) • 变体型 • Variant
VB常用运算符 • 数值运算 • ^、-(负号)、*、/、\ 、Mod 、 +、- • 字符串运算 • &、+ • 逻辑运算 • And、Or、Not
VB常用函数 • 系统内部标准函数 • 取整:Int(x) • 求余数:a Mod b • 求平方根:Sqr(x) • 绝对值:Abs(x) • 四舍五入:Round(x,n) • 其它...
用户自定义函数 • 逻辑函数判定:prime(x) • 外部函数的方法(不讲) • 内部函数的方法(程序的一部分) • 见:有关素数程序设计部分 • 注:二级必备!
VB基本输入、输出 • InputBox输入和MsgBox输出 • 文本框输入、输出 • x=Val(Text1)、Text1=… • 窗体和立即窗口输出 • Print 和 Debug.Print • Tab(x)、Format(x,"…")
VB程序基本结构与示例 • 顺序结构 • 选择(分支)结构 • If...Then … Else ... • If...Then … Else ... End If
判断成绩是否合格 • x = Val(Text1) • If x < 60 Then Text2 = "不合格" • If x >= 60 Then Text2 = "合格" • 或(第2、3行为) • If x < 60 Then Text2 = "不合格" Else Text2 = "合格" • 也可写成多行形式:…
多选择(分支)结构(一) • If … Then …ElseIf … Then …Else …End If
判断成绩等级 • Private Sub Command1_Click() • x = Val(Text1) • If x < 60 Then • Text2 = "不及格" • ElseIf x < 70 Then • Text2 = "及格" • ElseIf x < 85 Then • Text2 = "良好" • Else • Text2 = "优秀" • End If • End Sub
多选择(分支)结构(二) • Select Case <测试表达式>Case <表达式列表1> … Case Else …End Select • 表达式列表:(三种形式,见例题)
判断成绩等级 • Private Sub Command1_Click() • Select Case Val(Text1) • Case Is < 60 • Text2 = "不及格" • Case 60, 61, 62, 63, 64, 65, 66, 67, 68, 69 • Text2 = "及格" • Case 70 To 84 • Text2 = "良好" • Case Else • Text2 = "优秀" • End Select • End Sub
循环结构 • For ... Next • While...Wend (无退出中途语句) • Do While...Loop (共4种形式) • 中途退出:Exit For/Do • 嵌套 • 分支与分支 • 循环与循环 • 循环与分支
For循环输出20以内的奇数 • Private Sub Form_Click() • For k = 1 To 20 Step 2 • Print k; • Next • End Sub
While循环输出20以内的奇数 • Private Sub Form_Click() • k = 1 • While k <= 20 • Print k; • k = k + 2 • Wend • End Sub
Do循环输出20以内的奇数 • Private Sub Form_Click() • k = 1 • Do While k <= 20 • Print k; • k = k + 2 • Loop • End Sub
VB程序设计重点结构 • 给出一种最常用的形式 • 可作“模板”使用 • 学会填空!!!
FOR结构 • For i=… To … Step … • …… • If …Then • …… • (Exit For) • End If • …… • Next
程序中最基本的处理 • 计数 • 初值:n = 0 或 ... • 循环处理:n = n + 1 • 连加 • 初值:s = 0 或 ... • 循环处理:s = s + i 或 ...
连乘 • 初值:t = 1 或 ... • 循环处理:t = t * i 或 ...
最常用的判断 • a被b整除(倍数、因子) • a Mod b = 0 或 a / b = a \ b • a是整数 • Int(a)=a • 应用:求不定方程的整数解
多条件组合为逻辑表达式 • x能被3整除但不能被4整除 • x Mod 3=0 and x Mod 4)<>0 • x是能被3或5整除的偶数 • x Mod 2=0 and ( … or … ) • 或 x Mod 6=0 and x Mod 10=0
精确与非精确编程思路 • 精确编程:只输出所需结果。 • 非精确编程:输出相关的数据,从中容易得出所需要的结果。
例:设s=2+4+6+…,求s的最大值,使s<=1000。#992 • (下两页有程序)
非精确编程 • Private Sub Form_Click() • s = 0 • For k = 2 To 100 Step 2 • s = s + k • Debug.Print k, s • Next • End Sub
精确编程(不细讲) • Private Sub Form_Click() • s = 0 • For k = 2 To 100 Step 2 • s = s + k • Debug.Print k, s • If s >= 1000 Then Exit For • Next • Print s - k • End Sub
VB程序改错 • 考题1:计算1000以内,既能被6整除又能被8整除的数的个数。程序中有两行有错误。改正错误,使它能输出正确的结果。 • 容易得到答案:1000\24=41
原程序 • Private Sub Command1_Click() • Dim n As Integer • Dim x As Integer • x = 1 • n = 0 • Do While x <= 1000 • If x Mod 6 = 0 Or x Mod 8 = 0 Then • n = n + 1 • End case • x = x + 1 • Loop • Print n • End Sub
错误、改正 • Or:And • End case:End If • 运行结果 • VB窗体上添加命令按钮,再复制代码,改错后启动程序,单击命令按钮,得结果:41
考题2:求1~100中, 两个不同的数之和能被3或7整除的“数对”的对数 (注意:3+5和5+3认为是同一“数对”) ? 程序中有两行有错误。改正错误,使它能输出正确的结果。
原程序 • Private Sub Form_Click() • Dim n As Integer, i As Integer • n = 0 • i = 1 • Do While i <= 100 • J = 1 • Do While J <= 100 • IF MOD(I+J,3)<>0 OR MOD(I+J,7)=0 then • n = n + 1 • End If • J = J + 1 • Loop • i = i - 1 • Loop • Print n / 2 • End Sub
错误、改正 • If中的条件:i <> j And ((i + j) Mod 3 = 0 Or (i + j) Mod 7 = 0) • i=i-1:i=i+1 • 运行结果 • VB窗体代码窗口中复制程序代码,改错后启动,单击窗体,得结果:2121
VB程序填空(二级) • 考题1:金星和地球在某一时刻相对于太阳处于某一确定位置,已知金星绕太阳一周为225日,地球绕太阳一周为365日,问两个行星至少经过多少日仍同时回到原来的位置上? • 易得答案(公倍数):16425
原程序 • Private Sub Form_Click() • Dim m0&, n0& • Dim m As Long • Dim n As Long • Dim r As Long • m0 = 365 • n0 = 225 • m = m0 • n = n0 • r = m Mod n • While _____ • m = n • n = r • r = m Mod n • Wend • Print m0 * n0 / n • End Sub
填空 • r>0(去掉横线!) • 运行结果 • VB窗体代码窗口中复制程序代码,填空后启动,单击窗体,得结果: 16425
考题2:找出1-1000之间的全部同构数的个数。同构数是指一个数,它出现在它的平方数的右端。例如,5的平方是25,5是25中右端的数,5就是一个同构数。同理,25也是一个同构数。考题2:找出1-1000之间的全部同构数的个数。同构数是指一个数,它出现在它的平方数的右端。例如,5的平方是25,5是25中右端的数,5就是一个同构数。同理,25也是一个同构数。
原程序 • Private Sub Form_click() • For i = 1 To 999 • j = i * i • Select Case j • Case Is < 99 • k = j Mod 10 • Case Is < 999 • k = j Mod 100 • Case Else • k = j Mod 1000 • End Select • If ________________Then s = s + 1 • Next i • Print s • End Sub
填空 • i=k(去掉横线!) • 运行结果 • VB窗体代码窗口中复制程序代码,填空后启动,单击窗体,得结果: 6 • 在If语句后增加: Print i, j, k则可得中间结果。
VB编程题 • 整理成十多种类型
1、简单的求和问题 • 数列求和 • 数列ai=f(i), 求 sn=a1+…+ an • For i=1 To n • a=f(i) : s=s+a 或 s=s+f(i) • Next • 一定条件下的求和
求1~108所有整数的平方和。#425754 • i:1~108,f(i)=i*i • 求s=1*2+2*3+…+100*101 • 求s=1*2+3*4+…+99*100 • i:1,3,5,…,99,f(i)=i*(i+1)
求1~135的平方根的和。#1051.31 • i:1~135,f(i)=sqr(i) • 求1~135的和的平方根。 • s=sqr((135+1)*135/2) • 以上各题均可在Excel中求解
求[351,432]之间所有既不能被3整除,又不能被8整除的整数的和。#18413求[351,432]之间所有既不能被3整除,又不能被8整除的整数的和。#18413 • 求1到1000之内能被7或11整除,但不能同时被7和11整除的所有整数的个数。#208
特殊题 • 求一正整数等差数列的前六项的和,该数列前四项之和是26,四项之积是880。 • 求一正整数等差数列的前六项的平方和,该数列的前四项之和是26、之积是880。 • 手工分解880易得数列前4 项:2、5、8、11
2、等比数列及求和 • 求2+4+8+16+32+…,当累加数大于9000时,则终止计算并输出结果。#16382 • 直接公式:f(i)=2^i • 递推公式:a=2、a=2*a • 可Excel中求解