第08章 VBA结构化程序设计-例题习题
发布时间:2021-06-08
发布时间:2021-06-08
第8章 VBA程序设计基础
BX+C=0 【例1-1-1】求解一元二次方程:AX2+BX+C=0 求解一元二次方程:算法描述 算法实现 算法分析: 算法分析 一元二次方程求 Dim a, b, c, d As Double a=1 根公式。 b = -6 c=8 d=b*b-4*a*c If d >= 0 Then x1 = (-b + Sqr(d)) / 2 * a x2 = (-b - Sqr(d)) / 2 * a Debug.Print "x1="; x1 Debug.Print "x2="; x2 Else Debug.Print "无实数解" End If2
自己动手1、已知 、
1 当x > 0 sgn( x) = 0 当x = 0 1 当x < 0 试编程求sgn(x)的值。 的值。 试编程求 的值算法分析: 算法分析 用分支语句简单列举x的取值情况。3
Dim x As Integer Dim z As Double x = Val(InputBox("请输入 的值 请输入x的值 请输入 的值")) If x > 0 Then z=1 End If If x = 0 Then z=0 End If If x < 0 Then z = -1 End If Debug.Print "sgn(x)="; z4
自己动手1 、 用 整 数 0-6 依 次 表 示 星 期 日 、 星 期 一、……、星期六,编程实现下列功能: 、星期六,编程实现下列功能: 用键盘输入一个整数, 用键盘输入一个整数 , 在显示器上输出对 应的中文表示星期几, 应的中文表示星期几 , 如果键入的整数范围 不在0到 之内 则显示“输入数据错误” 之内, 不在 到6之内,则显示“输入数据错误” 。算法分析: 算法分析 用多重分支语句简单列举x的取值情况。
Dim x As Integer x = Val(InputBox("请输入 的值 请输入x的值 请输入 的值(0-6)")) If x = 0 Then Debug.Print "星期日 星期日" 星期日 ElseIf x = 1 Then Debug.Print "星期一 星期一" 星期一 ElseIf x = 2 Then Debug.Print "星期二 星期二" 星期二 ElseIf x = 3 Then Debug.Print "星期三 星期三" 星期三 ElseIf x = 4 Then Debug.Print "星期四 星期四" 星期四 ElseIf x = 5 Then Debug.Print "星期五 星期五" 星期五 ElseIf x = 6 Then Debug.Print "星期六 星期六" 星期六 Else Debug.Print "输入数据错误 输入数据错误" 输入数据错误 End If
自己动手1 、 用 整 数 0-6 依 次 表 示 星 期 日 、 星 期 一、……、星期六,编程实现下列功能: 、星期六,编程实现下列功能: 用键盘输入一个整数, 用键盘输入一个整数 , 在显示器上输出对 应的中文表示星期几, 应的中文表示星期几 , 如果键入的整数范围 不在0到 之内 则显示“输入数据错误” 之内, 不在 到6之内,则显示“输入数据错误” 。算法分析: 算法分析 用多重分支语句简单列举x的取值情况。
Dim x As Integer x = Val(InputBox("请输入 的值 请输入x的值 请输入 的值(0-6)")) Select Case x Case 0 Debug.Print "星期日 星期日" 星期日 Case 1 Debug.Print "星期一 星期一" 星期一 Case 2 Debug.Print "星期二 星期二" 星期二 Case 3 Debug.Print "星期三 星期三" 星期三 Case 4 Debug.Print "星期四 星期四" 星期四 Case 5 Debug.Print "星期五 星期
五" 星期五 Case 6 Debug.Print "星期六 星期六" 星期六 Case Else Debug.Print "输入数据错误 输入数据错误" 输入数据错误 End Select8
自己动手1、乘火车旅行的行李收费标准如下:成年 、乘火车旅行的行李收费标准如下: 人可免费携带重量20公斤的行李 公斤的行李, 人可免费携带重量 公斤的行李 ,未成年人 可免费携带10公斤的行李 超出这个重量, 公斤的行李, 可免费携带 公斤的行李 ,超出这个重量, 火车站将加收费用, 火车站将加收费用 , 收费标准是每公斤每百 公里收费为0.20元 , 不足百公里按百公里记 。 公里收费为 元 不足百公里按百公里记。 试编程按不同类型的人和行李重量来记收费 用。
算法分析 行李 <= 20, 费用0 是 行李 > 20,超重费用 是否成年人 行李 <= 10, 费用0 否 行李 > 10, 超重费用
Dim adult, factor As Integer Dim weight, distance, expense As Double adult = Val(InputBox("是否成年人?(是-输入 1,不是 输入 0)")) 是否成年人?( 是否成年人?(是 输入 ,不是-输入 ) If adult = 0 Or adult = 1 Then weight = Val(InputBox("请输入行李重量 请输入行李重量")) 请输入行李重量 distance = Val(InputBox("请输入乘车里程 请输入乘车里程")) 请输入乘车里程 If Int(distance / 100) = distance Then factor = Int(distance / 100) Else factor = Int(distance / 100) + 1 End If If adult = 1 Then If weight <= 20 Then expense = 0 Else expense = (weight - 20) * factor * 0.2 End If Else If weight <= 10 Then expense = 0 Else expense = (weight - 10) * factor * 0.2 End If End If Debug.Print "行李费用 行李费用="; expense; "元" 行李费用 元 Else Debug.Print "输入有误 输入有误" 输入有误 End If
延伸思考、讨论1、如何求s=1*2*3*…*10=10! 、如何求 ! 2、如何求 、如何求s=1+3+5+99 3、如何求 、如何求s=0+2+4+…+100
自己动手1、编写程序完成求和: 、编写程序完成求和: S=1+(1+2)+(1+2+3)+…+(1+2+…+10)。 ( )。 如果求S=1! + 2! + 3! + … + 10!,试编写程 如果求 , 序并比较其同异。 序并比较其同异。 算法分析: 算法分析: 分析 每个加项都是累加(乘)值。
Dim i, s0, s As Long i=1 s0 = 0 s=0 Do While i <= 10 s0 = s0 + i s = s + s0 i=i+1 Loop Debug.Print "s="; s
自己动手2、有一个分数数列: 、有一个分数数列:
2 3 5 8 13 21 , , , , , ,L 1 2 3 5 8 13求出这个数列前20项之和。 求出这个数列前 项之和。 项之和 算法分析: 算法分析: 1)后一项的分子 前一项的分子 前一项的 后一项的分子=前一项的分子 后一项的分子 前一项的分子+前一项的 分母 2)后一项的分母 前一项的分子 后一项的分母=前一项的分子 后一项的分母15
Dim upnum, downnum, temp, i As Integer '
numerator分子,denominator分母 Dim s As Double i=1 upnum = 2 downnum = 1 s=0 Do While i <= 20 s = s + upnum / downnum temp = upnum upnum = upnum + downnum downnum = temp i=i+1 Loop Debug.Print "2/1+3/2+...="; s16
。
【例8-11】试求 算法分析: 算法分析: 1)奇数项的符号为+,偶数项的符号为-,即: (-1)n+1,n为所在项的序号 2)每项的分母是对应项的序号,分子为1, 即:1/n, n为所在项的序号 3)将上述1)2)每项求和,得到结果
Public Sub WhileWend() Dim i As Integer Dim s As Double i=1 While i <= 100 s = s + (-1) ^ (i + 1) / i i=i+1 Wend Debug.Print "s="; s End Sub18
【例8-12-0】打印如下图形 】 ******* ******* ******* ******* 算法分析: 算法分析: 1)4行(类似 个学院)--外循环 个学院) 外循环 行 类似4个学院 2)7列(类似 个班级)--内循环 个班级) 内循环 列 类似7个班级
Dim row, col As Integer row = 1 col = 1 Do While row <= 4 Do While col <= 7 Debug.Print "*"; col = col + 1 Loop Debug.Print col = 1 row = row + 1 Loop20
【例8-12】打印九九乘法表。 】打印九九乘法表。 算法分析: 算法分析: 1)9行(类似 个学院)--外循环 个学院) 外循环 行 类似9个学院 2)9列(类似 个班级)--内循环 个班级) 内循环 列 类似9个班级