Download presentation
Presentation is loading. Please wait.
1
VB程序设计语言 主讲教师:王 杨
2
a(i).no=Inputbox(“姓名”) a(i).name=inputbox(“姓名”)
Type student no As String * 3 name As String * 8 mark(1 to 3) As integer aver As Integer End Type 自定义数据类型定义位置 1、标准模块中定义,默认为Public 2、窗体层定义,需要加上Private Type 自定义类型名 元素名1[(下标)] As 类型名 … [元素名2[(下标)] As 类型名] End Type Dim a(1 To 5) As Student For i=1 to 5 a(i).no=Inputbox(“姓名”) a(i).name=inputbox(“姓名”) a(i).mark(1)=inputbox(“成绩1”) a(i).mark(2)=inputbox(“成绩2”) a(i).mark(3)=inpuxbox(“成绩3”) a(i).aver= (a(i).mark(1)+ a(i).mark(2)+ a(i).mark(3))/3 Next i
3
【举例】计算多边形的面积 变量=函数过程名([实参表]) Function area(x!,y!,z!) As Single Dim c!
End Function Dim c! c=1/2*(x+y+z) area=sqr(c*(c-x)*(c-y)*(c-z)) Private Sub Form_Click() Dim a!,b!,c!,d!,e!,f!g,! a=11:b=12:c=13:d=14:e=15:f=16:g=17 End Sub S1=area( a, b , c) S2=area( c, d , e) S3=area( e, f , g) 变量=函数过程名([实参表])
4
课堂练习 定义一个函数过程计算最大公约数供调用
5
不计算某个结果 计算多个结果 【思路】一元二次方程的一般式为 它的两个根可以由 Sub quad( ) , y1, y2
思考:已知a,b,c;计算任意一元二次方程的两个实根 【思路】一元二次方程的一般式为 它的两个根可以由 Sub quad( ) End Sub a!, b!, c! , y1, y2 y1 = (-b + Sqr(b * b - 4 * a * c)) / (2 * a) y2 = (-b - Sqr(b * b - 4 * a * c)) / (2 * a) Sub Command1_Click() dim x!,y!,z! x=2:y=8:z=4 Call quad(x, y, z ) root1 = x1: root2 = x2 End Sub 不计算某个结果 计算多个结果 ,x1!, x2! , x1, x2
6
Sub 子过程 Call test (a,b) Test a,b 子过程名没有返回值 在子过程体内不能给子过程名赋值
[Private|Public][Static] Sub 子程序过程名 [(形参表)] …… [Exit Sub] End Sub 子过程名没有返回值 在子过程体内不能给子过程名赋值 子过程的调用是一个独立的语句 Call test (a,b) Test a,b
7
函数过程和子过程 区别 函数过程名有值,有类型,在函数体内至少赋值一次 子过程名无值,无类型,在子过程体内不能对子过程名赋值
调用时,子过程调用是一句独立的语句 函数过程不能作为单独的语句加以调用,必须是表达式运算 当过程有一个函数值,使用函数过程较直观 若过程无返回值,或有多个返回值,使用子过程较直观
8
程序运行流程: Private Sub Command1_Click() Dim f1#, f2#
f1 = jishu1(2#, ) Call jishu2(f2, 2#, ) Print "f1="; f1, "f2 = "; f2 End Sub Function jishu1(x!, a#) As Doubl … jishu1=表达式 End Function 找函数名调用jishu1 ② ① 函数名带了值返回 ③ ④ Sub jishu2(s#, x!, a#) … s=表达式 End Sub 找子过程名调用jishu2 ⑥ ⑤ ⑦ ⑧
9
问 题 实参可以是? 参数能否是数组?
10
数组参数传递 调用tim,求 和 Function tim(a() As Integer) Dim t#, i% t = 1
For i = Lbound(a) To Ubound(a) t = t * a(i) Next i tim = t End Function Sub Command1_Click() Dim a%(1 To 5),b%(3 To 8) 给数组赋值 t1# = tim(a()) t2 # = tim(b()) Print t1, t2 End Sub
11
调用过程来计算出两个数的最大公约数并根据最大公约数计算出最小公倍数,并将结果输出到窗体上。
问题出在那里呢?
12
参数传递 传地址 Byref(默认) 传值 Byval
13
4 d a = 1: b = 2: c = 3: d = 4 Call test1(a, b, c, d) Print a; b; c; d … Private Sub test1(b%, c%, d%, e%) e=b+c+d End Sub 6 ‘ e 传地址 e 4 d 传值 6 4 a = 1: b = 2: c = 3: d = 4 Call test2(a, b, c, d) Print a; b; c; d … Private Sub test2( b%, c%, d%, ByVal e%) e=b+c+d End Sub ‘
14
例题 (A)2 (B)5 (C)10 (D)出错 4 6 12 6 7 14 8 8 16 Sub subP(b() As Integer)
For i = 1 To 4 b(i) = 2 * i Next i End Sub Private Sub Command1_Click() Dim a(1 To 4) As Integer a(1) = 5 a(2) = 6 a(3) = 7 a(4) = 8 subP a() Print a(i) (A) (B)5 (C) (D)出错 a 1.要把整个数组作参数传递给过程,形参与实参都要使用数组名,但要省略数组的上下界,且保留括号; 2.整个数组作参数传递时,只能传地址; 3.单个数组元素作参数传递给过程时,实参要指明元素的下标 4. 使用LBound()和UBound()函数来确定数组的上下界。
15
嵌套和递归P131 组合数的计算 从前有座山,山里有座庙,庙里有个老和尚正在讲故事,讲的是什么呢?从前有座山…………….
16
思考 编写过程,对任意班级成绩进行降序排序。 你是如何给定这20名同学成绩的? 不足 你的统计结果以何种方式输出的? 通过随机函数产生
For i = 1 To 20 score(i) = Int(Rnd * 101) Next i 你的统计结果以何种方式输出的? 由键盘输入 For i = 1 To 20 score(i) = Int(InputBox("请输入成绩")) Next i 与同学实际成绩不相符 每次运行,需重新输入, 效率低 编程人员工作量大,程序 应用面窄 在窗体直接输出 Print Spc(8); "统计结果" Print "90~100"; Tab(10); "60~89"; Tab(20); "0~59" Print yx & "人"; Tab(10); hg & "人"; Tab(20); bjg & "人" 在程序中给定 score = Array(89, 56, 87, 90, 57, 66, 46, 88, 69, _ 85, 67, 80, 45, 56, 76, 80, 81, 73, 80, 74)
17
加分作业 编写过程,界面自行设计。单击命令按钮时,对任意数组进行升序排序。
18
加分作业 编写程序,打印 之间的所有素数 每行输出5个素数 利用Function过程判断每个数是否为素数,是返回1,不是返回0
Similar presentations