马上加入TC
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
第十一章 TC 功能定义 11.1 TC功能概述: 功能是TC源程序的基本模块,通过对功能模块的调用实现特定的功能.TC语言中的功能相当于其它高级语言的子程序,在其他高级语言中,比如C,C++中,称为函数.允许用户建立自己定义的功能。用户可把自己的算法编成一个个相对du立的功能模块,然后用调用的方法来使用功能。可以说TC程序的全部工作都是由各式各样的功能完成的,所以也把TC语言称为功能式语言。 由于采用了功能模块式的结构,TC语言易于实现结构化程序设计。使程序的层次结构清晰,便于程序的编写、阅读、调试。 在TC语言中可从不同的角度对功能分类。 一.从功能定义的角度看,功能可分为TC库功能(API)和用户定义功能两种。 1) TC库功能(API):由TC系统提供,用户无须定义,也不必在程序中作类型说明,只需在程序中直接调用即可。 2) 用户定义功能:由用户按需要写的功能。对于用户自定义功能,不仅要在程序中定义功能本身,而且在主调功能模块中还必须对该被调功能进行类型说明,然后才能使用。
二.TC语言的功能兼有其它语言中的功能和过程两种功能,所有TC功能都是有返回值的功能:此类功能被调用执行完后将向调用者返回一个执行结果,称为功能返回值。如数学功能即属于此类功能。由用户定义的这种要返回功能值的功能,必须在功能定义和功能说明中明确返回值的类型。
三.从主调功能和被调功能之间数据传送的角度看又可分为无参功能和有参功能两种。 1) 无参功能:功能定义、功能说明及功能调用中均不带参数。主调功能和被调功能之间不进行参数传送。 2) 有参功能:也称为带参功能。在功能定义及功能说明时都有参数,称为形式参数(简称为形参)。在功能调用时也必须给出参数,称为实际参数(简称为实参)。进行功能调用时,主调功能将把实参的值传送给形参,供被调功能使用。
四.TC语言提供了极为丰富的(API)库功能,这些库功能又可从功能角度分类。具体可以在TC程序中或者帮助文档中看到相应的功能功能和使用说明。 功能定义的一般形式 (注:关键字中英文对应关系,功能 - function,功能结束 - endfunction,返回 - return) 1.无参功能定义的一般形式 - 功能 功能类型 功能名()
- //声明部分 .....语句
- //执行的操作
- 返回 功能类型
- 功能结束
复制代码
其中功能类型和功能名称为功能头。返回类型指明了本功能的类型,功能的类型实际上是功能返回值的类型.该返回类型与前面介绍的TC的各种类型相同。功能名是由用户定义的标识符,功能名后有一个空括号,其中无参数,但括号不可少。功能到功能结束中的内容称为功能体。功能体是执行具体操作的功能调用的集合,它完成了功能的实现操作. - 功能 逻辑型 Hello()
- //这里添加你要执行的代码
- 辅助.消息框("Hello,world ")
- 返回 真
- 功能结束
复制代码
这里,Hello作为功能名的功能,Hello功能是一个无参功能,当被其它功能调用时,弹出Hello world对话框。
2.有参功能定义的一般形式 - 功能 功能类型 功能名(形式参数表列)
- //声明部分 .....语句
- 返回 功能类型
- 功能结束
复制代码
有参功能比无参功能多了一个内容,即形式参数表列。在形参表中给出的参数称为形式参数,它们可以是各种类型的变量,各参数之间用逗号间隔。在进行功能调用时,主调功能将赋予这些形式参数实际的值。形参既然是变量,必须在形参表中给出形参的类型说明。例如,定义一个功能,用于求两个数中的大数,可写为:
- 功能 整型 max( 整型 a, 整型 b)
- 如果 (a>b)
- 返回 a
- 否则
- 返回 b
- 如果结束
- 功能结束
复制代码
第一行说明max功能是一个整型功能,其返回的功能值是一个整数。形参为a,b,均为整型量。a,b的具体值是由主调功能在调用时传送过来的。在function 和endfunction 中的功能体内,除形参外没有使用其它变量,因此只有语句而没有声明部分。在max功能体中的return语句是把a(或b)的值作为功能的值返回给主调功能。有返回值功能中至少应有一个return语句。
11.2 功能的参数和功能的值 1.形式参数和实际参数 前面已经介绍过,功能的参数分为形参和实参两种。在本小节中,进一步介绍形参、实参的特点和两者的关系。形参出现在功能定义中,在整个功能体内都可以使用,离开该功能则不能使用。实参出现在主调功能中,进入被调功能后,实参变量也不能使用。形参和实参的功能是作数据传送。发生功能调用时,主调功能把实参的值传送给被调功能的形参从而实现主调功能向被调功能的数据传送。 功能的形参和实参具有以下特点:
形参变量只有在被调用时才分配内存单元,在调用结束时,即刻释放所分配的内存单元。因此,形参只有在功能内部有效。功能调用结束返回主调功能后则不能再使用该形参变量。
实参可以是常量、变量、表达式、功能等,无论实参是何种类型的量,在进行功能调用时,它们都必须具有确定的值,以便把这些值传送给形参。因此应预先用赋值,输入等办法使实参获得确定值。 实参和形参在数量上,类型上,顺序上应严格一致,否则会发生类型不匹配”的错误。 功能调用中发生的数据传送是单向的。即只能把实参的值传送给形参,而不能把形参的值反向地传送给实参。 因此在功能调用过程中,形参的值发生改变,而实参中的值不会变化
例: - 空间 测试
- 功能 逻辑型 A()
- 整型 n=100
- 测试.B(n)
- 返回 真
- 功能结束
- 功能 整型 B( 整型 n)
- 整型 i=n-1
- 循环(i>=1)
- n=n+i
- i=i-1
- 循环结束
- 返回 n
- 功能结束
- 空间结束
复制代码
在A功能中输入n值等于100,并作为实参,在调用时传送给s 功能的形参量n( 注意,本例的形参变量和实参变量的标识符都为n,但这是两个不同的量,各自的作用域不同)。n值为100。即实参n的值为100。把此值传给功能s时,形参n的初值也为100,在执行功能过程中,形参n的值变为5050。返回主功能之后,输出实参n的值仍为100。可见实参的值不随形参的变化而变化。
2.默认参数和引用传值参数
1).默认参数:
前面已经介绍过,功能的参数分为形参和实参两种。功能通过定义形参的数据类型,调用该功能者则需要传入一个和形参相同的数据类型的参数来调用。通常情况下,功能定义了多少个参数个数,调用该功能者必须传递相应数据类型的参数个数,如果用户在功能定义参数的时候予以了初始值,调用该功能者,可以根据需要如果不需要这个参数的时候,可以不用对该参数进行赋值调用.或者修改其默认值进行调用都可以,这种功能参数的定义方式就是默认参数定义。
例:
空间 我的程序
功能 整型 默认参数(整型 参数A,整型 参数B=0) .....//语句 返回 0 功能结束
功能 整型 A(整型 参数A) 我的程序.默认参数(参数A)//第二个默认参数可以选择不传值 我的程序.默认参数(参数A,10)//第二个默认参数可以传入其他整型值 返回 0 功能结束
空间结束
以上例子,我们可以看到,功能:默认参数中,有2个参数,第一个是整型参数,第二个也是整型参数,但在定义的时候赋初始值等于0了,也就是默认参数。所以功能A在调用功能默认参数的时候,除了第一参数必须传入一个整型参数外,第二个默认参数可以选择性的选择传入另外一个整型值或者不传任何值。
2).引用传值参数:
前面已经介绍过,功能的参数分为形参和实参两种。功能调用中发生的数据传送是单向的。即只能把实参的值传送给形参,而不能把形参的值反向地传送给实参。 因此在功能调用过程中,形参的值发生改变,而实参中的值不会变化。但通过我们的引用传值参数方式可以改变这种数据是单向的传递方式,我们在做一个功能定义参数的时候,在参数前面加一个"&"符号,就说明了这个参数属于引用传值。调用该功能者,在给该功能的引用传值传入参数变量的时候,如果调用者对该引用传值传入参数变量进行重新赋值的时候,在该功能调用结束的时候,该引用传值传入参数变量的值会等于调用者中重新赋予的新值, 这种功能参数的定义,以 "&"符号 出现的时候,就属于引用传值参数 。
例:
空间 我的程序
功能 整型 引用传值(整型 &A, 整型 &B) A=A*2 B=B*4 返回 0 功能结束
功能 整型 普通传值(整型 A,整型 B) A=1, B=2 我的程序.引用传值(A,B) 返回 0 功能结束 以上例子中,功能:引用传值,定义了2个引用传值的参数A和B,功能:普通传值, 在调用功能引用传值的时候, 传入了变量A,和变量B, 变量A的值赋值等于1, 变量B的值赋值等于2, 而引用传值功能会将传入的变量A的值乘于2, 将变量B的值乘于4, 所以在功能:引用传值执行到返回的时候, 传入的变量A的值由原来的1等于1*2改变等于2, 而变量B的值由原来的2等于2*4改变等于8。
3.功能的返回值 功能的值是指功能被调用之后,执行功能体中的程序段所取得的并返回给主调功能的值。对功能的值(或称功能返回值)有以下一些说明: 1) 功能的值只能通过return语句返回主调功能。 返回语句的一般形式为: 返回 表达式 或者为: 返回 (表达式) 该语句的功能是计算表达式的值,并返回给主调功能。在功能中允许有多个返回语句,但每次调用只能有一个返回语句被执行,因此只能返回一个功能值。 2) 功能值的类型和功能定义中功能的类型应保持一致。 例:
- 空间 测试
- 功能 整型 A(整型 a, 整型 b)
- 返回 a+b
- 功能结束
- 功能 整型 B( 整型 a, 整型 b)
- 如果 (a>b)
- 返回 a
- 否则
- 返回 测试.A(a,b)
- 如果结束
- 功能结束
- 空间结束
复制代码
功能A中,
返回了2个参数中和的表达式,功能B者通过比较参数的大小来返回,
如果参数a大于参数b返回参数a,
否则传参数a和b给功能A做返回值进行返回。
在线观看地址:http://v.youku.com/v_show/id_XNDEzMjU3MDE2.html
http://player.youku.com/player.php/sid/XNDEzMjU3MDE2/v.swf
对于运算符以及运算表达式不熟悉的,可以回顾以下内容:
第五章,TC的算术运算符和算术表达式 http://bbs.tyuyan.com/thread-12786-1-1.html
第六章,TC的关系运算符和表达式 http://bbs.tyuyan.com/thread-12813-1-1.html
对流程语句不熟悉了的同学,可以回顾前面的内容:
第八章,TC的如果(if)语句 http://bbs.tyuyan.com/thread-12815-1-1.html
第九章,TC的选择(select)语句 http://bbs.tyuyan.com/thread-12816-1-1.html
第十章,TC的循环(while,repeat)语句 http://bbs.tyuyan.com/thread-12818-1-1.html
理解了本课的同学,那么继续学习功能的调用内容吧!
|