习题五,参考答案
5.1~5.10略
5.11 编写程序,计算1~100内能被3整除的数的和。
【分析】本例对1~100内每一个数进行判断(用循环实现),符合条件的累加到和变量中,循环体内用条件结构进行判断。
【源程序代码】
Private Sub Form_Click() Dim s%,n% s = 0
For n=1 to 100
If n Mod 3 = 0 Then s=s+ n End If Next
Print \内3的倍数的和= \End Sub
5.12 世界现有人口为60亿,设年增长率为1.2%,编写程序,计算多少年后增加到70亿。
【分析】本题与教材中的例5.6相似,只是人口底数与增长率不同而已,可以参照例5.6完成,此处不再赘述。
5.13 一个球从100m高度自由下落,每次落地后反弹回原高度的一半,再落下。求它在第10次落地时,共经过多少米?落地10次反弹高度多少?
【分析】求在第10次落地时,共经过的高度实际是求10个高度的和,所以用循环实现。从第二次落地到第十次落地既有反弹的高度又有落下的高度,应该是2倍的高度;第一次只有落下的100米,所以循环10次之后的和减掉100即可。
【源程序代码】
Private Sub Form_Click() Dim s%,h%,n% s = 0 h=100
For n=1 to 10 s=s+ h h=h/2 Next
Print \第10次落地时共经过的高度= \ Print \落地10次反弹的高度= \End Sub
5.14 编写程序,打印如下图的“数字金字塔”: 1
1 2 1
1 2 3 2 1 1 2 3 4 3 2 1 ??
1 2 3 4 5 6 7 8 9 8 7 6 5 4 3 2 1
【分析】本题实际上是一个输出图形图案的问题,所以用二层循环即可实现。外层控制行从1到9,每一行分四部分:首先输出空格(用循环),其次输出左半部分数字,再次输出右半部分数字,最后换行。
【源程序代码】
Private Sub Command1_Click() Cls
For i = 1 To 9
For j = 1 To 27 - 3 * i Print \ Next j
For k = 1 To i Print k; Next k
For k = i - 1 To 1 Step -1 Print k; Next k Print Next i End Sub
5.15 猴子吃桃问题。有一群猴子吃桃,第一天吃了总数的一半又多吃了一颗,第二天吃了剩下的一半又多吃了一颗,第三天如此,??直到第九天,第十天还未吃却只有一个桃子,求原来有多少桃子?
【分析】本例倒着思考,因为第10天只剩1个(S=1),如果把第9天多吃的1个放到第10天(S+1)即第9天为2*(S+1),由此往前推,循环9次即得第1天的总数。主要代码如下所示:
s=1: n=10 Do while n>1 s=2*(s+1) n=n-1 Loop Print s
循环完以后s中即为所求的总数。
5.16 马克思曾经做过这样一道趣味数学题:有30个人在一家小饭馆用餐,其中有男人、女人和小孩。每个男人花了3先令,每个女人花了2先令,每个小孩花了1先令,一共花了50先令。问男人、女人、小孩各有几人?
【分析】本题与教材中的例5.10相似,可以参照例5.10完成,此处不再赘述。 5.17 从键盘上输入两个数,求出这两个数之间的“完全数”。如果一个数的因子之和等于这个数本身,就称这个数为“完全数”,如数28的因子为:1、2、4、7、14,其和1+2+4+7+14=28,因此28是一个“完全数”
【分析】判断一个数是否为完全数的方法为:循环从1 开始到该数的一半为止,如果除尽则累加到和变量中,循环完之后和变量与该数比较;依此为循环体,在输入的两个数之间循环判断即可。
【源程序代码】
Dim i As Integer, j As Integer, s As Integer m = Val(Text1.Text) n = Val(Text2.Text) If m > n Then
t = m: m = n: n = t End If
For i = m To n s = 0
For j = 1 To Int(i / 2)
If (i Mod j = 0) Then s = s + j Next j
If i = s Then Print i, Next i End Sub
习题六,参考答案
1. A 2. C 3.C 4. A 5. C 6. A 7. D 8. A 9.C 10. C
习题七,参考答案 一、选择题
1. D 2. B 3. C 4. B 5. D 二、编程题
1. 1)界面设计如图1所示
2)编写代码如下: Private Sub Form_Load() Text1.Text = \ Text2.Text = \ Text3.Text = \ Text4.Text = \ Text5.Text = \
图1“数据统计”
End Sub
Private Sub Form_click() Dim a(1 To 10) As Integer Dim I As Integer
Dim Pn As Integer, Psum As Integer Dim Fn As Integer, Fsum As Integer Pn = 0: Psum = 0: Fn = 0: Fsum = 0 For I = 1 To 10
a(I) = InputBox(\请输入第\个数据\ Text1.Text = Text1.Text & \ \ If a(I) > 0 Then Pn = Pn + 1
Psum = Psum + a(I) Else
Fn = Fn + 1
Fsum = Fsum + a(I) End If Next I
Text2.Text = Pn: Text4.Text = Psum Text3.Text = Fn: Text5.Text = Fsum End Sub
2.定义一个有11个元素的一维数组MarkTj(0 to 10),其中MarkTj(0)中存放0~9分的学生人数,MarkTj(1)中存放1~19分的学生人数,?,MarkTj(10)中存放100分的学生人数。 (1) 界面设计如图 图2 “统计分数段”
(2) 编写代码
Dim MarkTj(10) As Integer Private Sub CmdTj_Click() Dim x As Single
Dim I As Integer, n As Integer, k As Integer n = InputBox(\请输入学生人数\ For I = 1 To n
x = Val(InputBox(\请输入第\名学生的成绩\ If x >= 0 And x <= 100 Then LstMark.AddItem x k = Int(x / 10)
MarkTj(k) = MarkTj(k) + 1 Else
MsgBox \请输入正确分数\ I = I - 1 End If Next I
For k = 0 To 9
LstTj.AddItem k * 10 & \分的 _ 人数为:\ Next k
LstTj.AddItem \分的人数为:\
End Sub
习题八,参考答案 一、填空题
1 解析:A。事件过程是当用户对一个对象发出一个动作时所产生的事件,不能脱离控件而独立存在;通用过程时通用的,不与任何特定事件相联系,它完成特定的任务,只能由别的过程调用;Sub过程包括事件过程和通用过程,称之为子过程。有些Sub过程与对象有联系,有些Sub过程与对象没有联系;函数过程类似于内部函数,由用户定义的,完成一些特殊函数关系的计算,并且要返回函数值,函数过程不必与控件发生联系。
2 解析:B。在Visual Basic中有两类过程,一类是系统提供的内部函数和事件过程;另一类是用户根据自己的需要定义的,供事件过程的多次调用,而第二类过程中,涉及最多的是子过程。它们的共同点都是完成某种特定功能的一组程序代码;不同的是函数是带有返回值的特殊过程,所以函数过程定义时有返回值的类型说明。
3 解析:C。题目的意思是在调用过程后,返回两个结果,那么定义此过程时,应设两个参数,且参数传送应用传址方式,也就是引用,而\关键字加在形参前面,则表示形参与实参结合方式为传值。所以,4个选项中只有选项C符合题意。
4 解析:A。选项B中函数的返回值只有一个;选项C中当数组做为函数的形参时,只能以传址方式传送;选项D中如果不指明函数过程的参数类型,则该参数为变体类型。
5 解析:C。在Visual Basic中有两类过程,一类是系统提供的内部函数和事件过程;另一类是用户根据自己的需要定义的,供事件过程的多次调用的过程。它们的共同点都是完成某种特定功能的一组程序代码;不同的是函数是带有返回值的特殊过程。
6 解析:B。题目中Sub过程的形式参数都没有特别指明是传址方式还是传值方式,隐含的是传址。实际调用时,还要根据实参的形式,才能确定是传值还是传址的数据传送方式。若实参为常量或表达式,则为传值的传送方式;若实参是变量名或数组名,则为传值的传送方式。
7 解析:B。在Visual Basic中,定义变量的关键字为Dim、Static、Redim、Public或Private,Dim用于在标准模块、窗体模块或过程中定义变量或者数组;Static用于过程中定义静态变量或数组;Public用于在标准模块中定义全局变量或数组;Redim主要用于定义数组。
8 解析:A。变量的作用域指变量的作用范围,根据变量的定义位置和使用的变量定义语句的不同,变量可以分为3类,即局部变量、模块变量和全局变量。局部变量是在过程(事件过程或通用过程) 内定义的变量,其作用域是它所在的过程,通常用来存放中间结果或用作临时变量,可以默认声明;模块变量包括窗体变量和标准模块变量,窗体变量可用于该窗体内的所有过程,使用前必须先声明,也就是说,窗体层变量不能默认声明;全局变量,其作用域最大,可在工程的每个模块、每个过程中使用,和模块级变量类似,全局变量也在标准模块的声明部分声明,所不同的是全局变量必须用Public或Global语句声明,不能用Dim语句声明,更不能用Private声明;全局变量只能在标准模块中声明,不能在过程或窗体模块中声明。
9 解析:B。在传址的结合过程时,当调用一个过程时,它将实参的地址传给形参,因此在被调用的过程中,对形参的任何操作都变成了对相应实参的操作,因此实参的值会随形参的改变而改变。
传值的结合过程时,当调用一个过程时,系统将实参的值传送给形参并断开了联系,被调用过程中的操作是在形参自己的存储单元中进行的,当过程调用结束时,这些形参所占用