2020版算法与程序设计第五单元第1节 过程与自定义函数(16张PPT课件+学案)

文档属性

名称 2020版算法与程序设计第五单元第1节 过程与自定义函数(16张PPT课件+学案)
格式 zip
文件大小 2.8MB
资源类型 教案
版本资源 通用版
科目 通用技术
更新时间 2019-11-30 14:13:55

文档简介


第1节 过程与自定义函数
考试内容
考试要求
过程
c
自定义函数
c
一、过程
1.VB应用程序是按模块化的方式组成的,程序模块分为过程和函数两种,过程强调的是动作,而函数强调的是值的计算。
2.什么是过程
将程序划分为一个个较小的逻辑单元,每个逻辑单元构成一个过程。过程中的代码可以被重复地调用。
3.过程的分类
过程分成两类:事件处理过程和通用过程。
①事件处理过程的一般格式:
Sub 事件处理过程名(参数表)
 语句块
End Sub
②通用过程的一般格式:
Sub 通用过程名(参数表)
 语句块
End Sub
过程调用:Call 过程名(参数表)
4.常见的VB事件
常见的VB事件有:Click(单击)、DblClick(双击)、KeyPress(按键)、Load(装载)、Change(改变)等。
作用在VB对象上的常见事件处理过程有:
文本框Text:Text1_Click、Text1_DblClick、Text1_KeyPress、Text1_Change
命令按钮Command:Command1_Click
标签Label:Label1_Click
窗体Form:Form_Load(窗体装载)
二、自定义函数
1.函数
函数也是一个程序模块,不同之处是函数执行完成后,函数的计算结果被送到函数的调用点上,供程序的后继部分继续执行,会返回一个函数值。函数值是通过函数名返回的。
2.自定义函数格式
Function 函数名(参数表)As类型名
 语句块
End Function
一、过程
【典例1】 下面VB程序的功能是利用海伦公式求三角形面积。程序运行时,分别在文本框Text1、Text2、Text3中输入三条边的长度,单击“计算”按钮,若能构成三角形,则在标签Label5中显示三角形的面积,否则显示信息“无法构成三角形”。
提示:海伦公式=,其中p为周长的一半。
运行效果如下图所示:
实现上述功能的VB程序如下,请回答下列问题:
Private Sub Command1_Click()
 Dim a As Integer, b As Integer, c As Integer, d As Single, s As Single
 a = Val(Text1.Text)
 b = Val(Text2.Text)
 c = Val(Text3.Text)
 If a + b > c And a + c > b And ____①____ Then
d = (a + b + c) / 2
s = ________②________
Label5.Caption = Str(s)
 Else
Label5.Caption = “无法构成三角形”
 End If
End Sub
(1)“Private Sub Command1_Click()”中Command1是指__________,Click是指________,Command1_Click为__________________(选填:对象名 /事件名/属性名/过程名)。
(2)请在划线处填入合适的代码。
解析 (1)本小题主要考查的是VB的对象、事件及事件处理过程。Command1是指对象名,Click是指事件名(鼠标单击),Command1_Click为过程名。
(2)本小题主要考查的是VB表达式。程序①处语句表示能否构成三角形的条件(任二条之和大于第三边),因此①处代码为b + c > a;程序②处代码表示用海伦公式求三角形面积,将数学公式转换为VB公式,因此②处代码为Sqr(d * (d - a) * (d - b) * (d - c))。
答案 (1)对象名 事件名 过程名 
(2)①b + c > a 或a < b + c ②Sqr(d * (d - a) * (d - b) * (d - c))
二、自定义函数
【典例2】 编写一个求[a,b]区间内的所有素数的VB程序。程序运行时,分别在文本框Text1、Text2中输入a、b的值,单击“求解”按钮,在列表框List1中输出[a,b]区间内的所有素数,并统计个数,显示在列表框的最后一行。程序运行效果如下图所示:
实现上述功能的VB程序如下,请回答下列问题:
Function prime(x As Integer) As Boolean
 Dim k As Integer
 k = 2
 prime = True
 Do While k < x And prime
If x Mod k = 0 Then
  ________①________
Else
  k = k + 1
End If
 Loop
End Function
Private Sub Command1_Click()
 Dim i As Integer, a As Integer, b As Integer, n As Integer
 a = Val(Text1.Text)
 b = Val(Text2.Text)
 For i = a To b
If ________②______ Then
  List1.AddItem Str(i)
  n = n + 1
End If
 Next i
 List1.AddItem “共有素数:” + ______③______ + “ 个”
End Sub
(1)代码“List1.AddItem Str(i)”中的AddItem是指____________(填:属性名 / 事件名 / 方法名)。
(2)请在划线处填入合适的代码。
解析 本题主要考查的是自定义函数。(1)代码“List1.AddItem Str(i)”中的AddItem是指方法名。(2)函数值是通过函数名来返回的,prime函数的初值为True,当整数x能被整数k整除时,表示x不是素数,因此修改函数值为False,即①处代码为prime = False;②处代码为调用prime函数,当整数i为素数时,则在列表框List1中输出,因此代码为Prime(i)= True ,也可写为prime(i);变量n用来统计素数个数,因为与其他字符串连接后在列表框中输出,因此③处代码为Str(n),而不能写为n。
答案 (1)方法名 (2)①prime = False
②Prime(i)= True 或prime(i) ③Str(n)
1.下列VB程序的功能是:求数组d中指定范围内元素的最大值,并将最大值显示在标签Label3中。
Dim d(1 To 10) As Integer
Sub zds(x As Integer, y As Integer)
Dim i As Integer, ans As Integer
ans = -32767
For i =__________①________
If ans < d(i) Then ans = d(i)
Next i
Label3.Caption = Str(ans)
End Sub
Private Sub Command1_Click()
 Dim a As Integer, b As Integer, j As Integer, ans As Integer
 For j = 1 To 10
  d(j) = Int(Rnd * 100 + 1)
  List1.AddItem Str(d(j))
 Next j
 a = Val(Text1.Text)
 b = Val(Text2.Text)
 Call ________②________
End Sub
请回答下列问题:
(1)在程序划线①②处填入合适的代码。
(2)若数组元素d(1)~d(10)分别为“50,36,23, 85,45,12,88,49,91,100”,文本框Text1、Text2中输入的数据分别为3和9,则在标签Label3中输出的结果为______________。
解析 (1)①处代码表示求数组元素d(x)~d(y)中的最大数,i表示范围,因此①处代码为x To y;②处代码表示调用过程,过程名为zds,参数为a、b,表示求数组元素d(a)~d(b)中的最大数,因此②处代码为zds(a, b)。(2)求数组元素d(3)~d(9)中的最大值是91,因此答案为91。
答案 (1)①x To y ②zds(a, b) (2)91
2.下列程序的功能是统计某个数字在正整数中出现的次数。若数字y在正整数x中出现,则在标签Label1中输出出现的次数,否则输出“未出现”。
实现上述功能的VB程序如下,请在程序划线处填入合适的代码。
Function fx(x As String, y As String) As Integer
 Dim n As Integer, i As Integer, times As Integer
  times = 0
  i = 1
  n = Len(x)
  Do While i <= n And Not flag
If Mid(x, i, 1) = y Then times = times + 1
i = i + 1
  Loop
  ________①________
End Function
Private Sub Command1_Click()
 Dim st1 As String, st2 As String
 st1 = Text1.Text
 st2 = Text2.Text
 If fx(st1, st2) > 0 Then
Label1.Caption =“共出现” + ____②____+ “ 次”
 Else
Label1.Caption = “未出现”
 End If
End Sub
解析 划线①处主要考查的是函数值的返回,函数值是通过函数名来返回的,变量times用来存储数字y在整数x中出现的次数,因此①处代码为fx=times;划线②处代码考查函数的调用表示将出现的次数显示在标签Label1中,fx(st1, st2)返回的结果为出现的次数,因此②处代码为Str(fx(st1, st2)),因为times是局部变量,因此不能填Str(times)。
答案 ①fx = times ②Str(fx(st1, st2))
基础巩固
1.有如下程序段:
Private Sub Command1_Click()
 Dim d(1 To 10) As Integer, f(1 To 10) As Boolean
 Dim i As Integer, ans As Integer
 ′给数组元素d(1)~d(10)赋值,代码略
 For i = 1 To 10
f(i) = False
 Next i
 For i = 2 To 10
If d(i) - d(i - 1) > 0 Then
  f(i) = True
  d(i) = d(i) - d(i - 1)
End If
 Next i
 For i = 1 To 10
If f(i) Then ans = ans + 1
 Next i
 Label1.Caption = Str(ans)
End Sub
程序运行时,数组元素d(1)~d(10)的赋值分别为:25、15、10、8、1、7、8、11、16、5,则标签Label1中显示的内容为(  )
A.3 B.4
C.5 D.6
解析 本题主要考查的是程序的综合运用能力。程序执行过程各变量的变化如下表所示:
i
i=1
i=2
i=3
i=4
i=5
i=6
i=7
i=8
i=9
i=10
数组元素d(i)初值
25
15
10
8
1
7
8
11
16
5
d(i)>d(i - 1)?
N
N
N
N
N
Y
Y
Y
Y
N
f(i)
F
F
F
F
F
T
T
T
T
F
d(i)
6
2
9
7
因此答案为B。
答案 B
2.下面VB程序的功能为:在文本框Text1中输入一个整数n,单击按钮Command1,在标签Label1中显示1+2+…+n的和。
Function qh(x) As Integer
 Dim sum1 As Long,i As Integer
 For i=1 To x
sum1=sum1+i
 Next i
 qh=sum1
End Function
Private Sub Command1_Click()
 Dim n As Integer, sum As Long
 n = Val(Text1.Text)
 sum =________________
 Label1.Caption =Str(sum)
End Sub
要实现上述功能,程序划线处应填入的语句为(  )
A.qh B.qh(x)
C.qh(n) D.qh(n,x)
解析 本题主要考查的自定义函数的调用。自定义函数qh的功能是求整数1+2+…+n的和,由于输入的整数为n,即调用函数时对应的参数为n,因此划线处应填的语句为qh(n),答案为C。
答案 C
能力提升
3.下面VB程序的功能是将一个十进制数n转换为二进制数。
程序运行时,在文本框Text1中输入一个正整数n,单击“转换为二进制数”的按钮,在标签Label2中显示该十进制数对应的二进制数。程序运行效果如下图所示。
实现上述功能的VB程序如下,请回答下列问题:
Function dtob(x As Integer) As String
  Dim y As Integer, s As String
  s = “ ”
  Do While x > 0
  y = x Mod 2
  x = x 2
  s = y & s
  Loop
  ________①________
End Function
Private Sub Command1_Click()
 Dim n As Integer
 n = Val(Text1.Text)
 Label2.Caption = “整数” + Str(n) + “转换为二进制数为:” +________②________
End Sub
(1)要在窗体的标题行上显示“十进制转二进制”,应修改Form1窗体的________属性的属性值。
(2)请在程序划线处填入合适的代码。
解析 (1)本小题主要考查的是窗体的Caption属性。(2)划线①处主要考查的是函数值的返回,因此代码为dtob = s;划线②处主要考查的是自定义函数的调用,函数值为字符串类型,因此②处代码不能加Str函数,答案为dtob(n)。
答案 (1)Caption (2)①dtob = s ②dtob(n)
4.超级素数的定义:当一个素数从低位到高位依次去掉一位数后剩下的数仍然是素数,则此数为超级素数。例如:7331、733、73、7均为素数,所以7331为超级素数。单击“查找按钮”Command1,则在列表框List1中显示所有四位数的超级素数,并在文本框Text1中显示超级素数的数量。
Private Sub Command1_Click()
 Dim i As Integer, temp As Integer
 Dim flag As Boolean, n As Integer
 n = 0
 For i = 1001 To 9999 Step 2
flag = True : temp = i
Do While temp <> 0
  If  Then flag = False: Exit Do′(1)
  temp = temp '10
Loop
If flag Then List1.AddItem Str(i):n = n + 1
 Next i
 Text1.Text = Str(n)
End Sub
Function prime(x As Integer) As Boolean
 Dim j As Integer
 prime = False
 If x >= 2 Then
j = 2
Do While x Mod j <> 0
  j = j + 1
  Loop
  If   Then prime = True′(2)
 End If
End Function
程序中加框(1)处应改正为___________________________________________;
加框(2)处应改正为_________________________________________________。
解析 该题采用枚举算法思想,找出1001到9999之间的超级素数。prime函数的功能是判断x是否是素数,若x是素数,他将不能被2至x-1之间的数整除,每一个能被x整除的数是他本身,因此第二处应为j=x。超级素数的条件是依次去除各个数字,去除后的数还是素数,变量flag表示是否是素数的标志。在第一处错误中,如果prime(temp)为假时,flag才为False。
答案 (1)prime(temp)=False (2)j = x
课件16张PPT。第1节 过程与自定义函数一、过程
1.VB应用程序是按模块化的方式组成的,程序模块分为过程和函数两种,过程强调的是动作,而函数强调的是值的计算。
2.什么是过程
将程序划分为一个个较小的逻辑单元,每个逻辑单元构成一个过程。过程中的代码可以被重复地调用。3.过程的分类过程分成两类:事件处理过程和通用过程。
①事件处理过程的一般格式:
Sub 事件处理过程名(参数表)
 语句块
End Sub
②通用过程的一般格式:
Sub 通用过程名(参数表)
 语句块
End Sub
过程调用:Call 过程名(参数表)4.常见的VB事件常见的VB事件有:Click(单击)、DblClick(双击)、KeyPress(按键)、Load(装载)、Change(改变)等。
作用在VB对象上的常见事件处理过程有:
文本框Text:Text1_Click、Text1_DblClick、Text1_KeyPress、Text1_Change
命令按钮Command:Command1_Click
标签Label:Label1_Click
窗体Form:Form_Load(窗体装载)二、自定义函数
1.函数
函数也是一个程序模块,不同之处是函数执行完成后,函数的计算结果被送到函数的调用点上,供程序的后继部分继续执行,会返回一个函数值。函数值是通过函数名返回的。
2.自定义函数格式
Function 函数名(参数表)As类型名
  语句块
End Function一、过程
【典例1】 下面VB程序的功能是利用海伦公式求三角形面积。程序运行时,分别在文本框Text1、Text2、Text3中输入三条边的长度,单击“计算”按钮,若能构成三角形,则在标签Label5中显示三角形的面积,否则显示信息“无法构成三角形”。其中p为周长的一半。
运行效果如下图所示:实现上述功能的VB程序如下,请回答下列问题:
Private Sub Command1_Click()
 Dim a As Integer, b As Integer, c As Integer, d As Single, s As Single
 a = Val(Text1.Text)
 b = Val(Text2.Text)
 c = Val(Text3.Text) If a + b > c And a + c > b And ____①____ Then
d = (a + b + c) / 2
s = ________②________
Label5.Caption = Str(s)
 Else
Label5.Caption = “无法构成三角形”
 End If
End Sub(1)“Private Sub Command1_Click()”中Command1是指__________,Click是指________,Command1_Click为__________________(选填:对象名 /事件名/属性名/过程名)。(2)请在划线处填入合适的代码。解析 (1)本小题主要考查的是VB的对象、事件及事件处理过程。Command1是指对象名,Click是指事件名(鼠标单击),Command1_Click为过程名。
(2)本小题主要考查的是VB表达式。程序①处语句表示能否构成三角形的条件(任二条之和大于第三边),因此①处代码为b + c > a;程序②处代码表示用海伦公式求三角形面积,将数学公式转换为VB公式,因此②处代码为Sqr(d * (d - a) * (d - b) * (d - c))。答案 (1)对象名 事件名 过程名 
(2)①b + c > a 或a < b + c ②Sqr(d * (d - a) * (d - b) * (d - c))二、自定义函数
【典例2】 编写一个求[a,b]区间内的所有素数的VB程序。程序运行时,分别在文本框Text1、Text2中输入a、b的值,单击“求解”按钮,在列表框List1中输出[a,b]区间内的所有素数,并统计个数,显示在列表框的最后一行。程序运行效果如下图所示:实现上述功能的VB程序如下,请回答下列问题:
Function prime(x As Integer) As Boolean
 Dim k As Integer
 k = 2
 prime = True
 Do While k < x And prime
If x Mod k = 0 Then
  ________①________
Else
  k = k + 1
End If Loop
End Function
Private Sub Command1_Click()
 Dim i As Integer, a As Integer, b As Integer, n As Integer
 a = Val(Text1.Text)
 b = Val(Text2.Text)
 For i = a To b
If ________②______ Then
  List1.AddItem Str(i)
  n = n + 1
End If Next i
 List1.AddItem “共有素数:” + ______③______ + “ 个”
End Sub
(1)代码“List1.AddItem Str(i)”中的AddItem是指____________(填:属性名 / 事件名 / 方法名)。
(2)请在划线处填入合适的代码。解析 本题主要考查的是自定义函数。(1)代码“List1.AddItem Str(i)”中的AddItem是指方法名。(2)函数值是通过函数名来返回的,prime函数的初值为True,当整数x能被整数k整除时,表示x不是素数,因此修改函数值为False,即①处代码为prime = False;②处代码为调用prime函数,当整数i为素数时,则在列表框List1中输出,因此代码为Prime(i)= True ,也可写为prime(i);变量n用来统计素数个数,因为与其他字符串连接后在列表框中输出,因此③处代码为Str(n),而不能写为n。
答案 (1)方法名 (2)①prime = False
②Prime(i)= True 或prime(i) ③Str(n)
同课章节目录