第四章 TC语言的数据类型 4.1 概要 在第一章中,我们已经看到程序中使用的变量都应预先加以定义,即先定义,后使用。对变量的定义可以包括三个方面:
在本章中,我们只介绍数据类型的说明。其它说明在以后各章中陆续介绍。所谓数据类型是按被定义变量的性质,表示形式,占据存储空间的多少,构造特点来划分的。 在TC语言中,数据类型可分为:基本数据类型, 构造数据类型. 1. 基本数据类型:基本数据类型最主要的特点是,其值不可以再分解为其它类型。也就是说,基本数据类型是自我说明的。 TC的基本的数据类型有以下几种
- 整型-int
- 浮点型-double
- 字符型-string
- 逻辑型-bool
2.构造数据类型:构造数据类型是根据已定义的一个或多个数据类型用构造的方法来定义的。也就是说,一个构造类型的值可以分解成若干个“成员”或“元素”。每个“成员”都是一个基本数据类型或又是一个构造类型。在TC语言中,构造类型目前只支持数组,数组是一个可以一次存储多个相同类型数据的数据类型。
4.2 常量与变量 对于基本数据类型量,按其取值是否可改变又分为常量和变量两种。在程序执行过程中,其值不发生改变的量称为常量,其值可变的量称为变量。它们可与数据类型结合起来分类。例如,可分为整型常量、整型变量、浮点型常量、浮点型变量、字符型常量、字符型变量、逻辑型常量、逻辑型变量。在程序中,常量是可以不经说明而直接引用的,而变量则必须先定义后使用。 1. 常量 在程序执行过程中,其值不发生改变的量称为常量。 直接常量(字面常量): 整型常量:12、0、-3; 浮点型型常量:4.6、-1.23; 字符型常量:”abc”、”我是谁”。
【例】常量的使用。 - 功能 逻辑型 变量测试()
- 整型 号码 //这里的号码是一个整型变量
- 浮点型 身高 //这里的身高是一个浮点型变量
- 字符型 姓名 //这里的姓名是一个字符型变量
- 号码=10 //这里的10是一个整型常量
- 身高=1.75 //这里的1.75是一个浮点型常量
- 姓名="麦克" //这里的"麦克"是一个字符串型常量
- 返回 真
- 功能结束
复制代码
2. 变量 变量定义必须放在变量使用之前。一般放在功能块的开头部分。要区分变量名和变量值是两个不同的概念。 【例】 - 功能 逻辑型 变量测试()
- 字符型 姓名 //这里的姓名是一个字符型变量
- 姓名="麦克" //这里的"麦克"是一个字符串型常量,赋给了'姓名'这个变量
- 姓名="贝壳" //这里我们改变了'姓名'这个变量的值
- 返回 真
- 功能结束
复制代码
在上面的例子中,我们可以很清楚的看到, 一个变量名一旦被定义好后,在它的生命周期里面就是不可改变的,但它的值也就是变量值是可以随时可以改变的,可以用很多常量给一个变量赋值,这样一个变量就可以有很多的变量值,同一时间,他只能表示一个值.
3.变量命名 TC变量名的命名规则,功能名,空间名和插件接口名称都遵循这个规则,这个也是我们常见的文件命名规则,我们来看看这个的规则.
TC名称只能由中文,英文,下划线和数字组成,而且首字母只能是中文,英文,或者是下划线 TC名称规则是用来标识变量名、符号常量名、函数名、数组名、空间名,插件接口名的有效字符序列。
【例】
- 功能 逻辑型 测试()
- 整型 号码, abc123,_abc //号码, abc123,_ab这3个整型变量名都是正确的命名
- 整型 123abc,!abc //123abc,!abc这2个整型的变量命名都是错误的命名
- 返回 真
- 功能结束
复制代码
4.3 整型数据 4.3.1 整型常量的表示方法 整型常量就是整常数。在TC语言中,使用的整常数有十六进制和十进制两种。 1) 十进制整常数:十进制整常数没有前缀。其数码为0~9。 以下各数是合法的十进制整常数: 237、-568、65535、1627; 以下各数不是合法的十进制整常数: 023 (不能有前导0)、23D (含有非十进制数码)。 在程序中是根据前缀来区分各种进制数的。因此在书写常数时不要把前缀弄错造成结果不正确。 2) 十六进制整常数:十六进制整常数的前缀为#。其数码取值为0~9,A~F或a~f。 以下各数是合法的十六进制整常数: #2A(十进制为42)、#A0 (十进制为160)、#FFFF (十进制为65535); 以下各数不是合法的十六进制整常数: 5A (无前缀#)、#3H (含有非十六进制数码)。 4.3.2 整型变量 1. 整型变量定义 如果定义了一个整型变量i: 整型 i i=10 整型常量中,左面的第一位是表示符号的,没有符号就是默认为 正号,负数 -10¸第一个是负号,表示 -10. 2.整型变量的范围大小 int-整型:占4个字节数,可以是十进制数(0~9)和十六进制数(0~9 && A~F),十进制数取值范围是-2147483647 ~ 2147483647,十六进制数取值范围是#-7FFFFFFF ~#7FFFFFFF(TC整型支持十六进制数输入,与十进制数输入的区别是在前面加“#”,如#1A,#2BCD,#5EF代表这几个数是是以十六进制数方式录入),很多人容易犯一个错误,就是十进制怎么转成十六进制,这里要说的是,十进制和十六进制其实一样的,他们只是整型数据的两种表现形式, 16等于#F,一个整型变量可以用10进制 赋值,也可以用十六进制的数字赋值,他们在参与运算时,都会在内部转成十进制数字,在代码的计算或者表达式中,传参中,只要都是整型数据的处理,他们都是一样的。 【例】
- 功能 逻辑型 测试()
- 整型 a, b //定义了2个整型变量a和b
- a=16 //a等于了十进制的16
- b=#10 //b等于了十六进制的10
- 如果(16==#10)
- //我们可以看到这里是相等的
- 辅助.消息框("16等于#10")
- 如果结束
- 辅助.消息框(转换.整型转字符型(a -b)) //b的十六进制的#10值也是等于16的,所以a等于b,最后一个对话框会输出a-b的值是为0的。
- 返回 真
- 功能结束
复制代码
4.4 浮点型数据 4.4.1 浮点型常量的表示方法 浮点型常量也称为实数或者浮点数。在TC语言中,实数只采用十进制小数形式. 1)十进制数形式:由数码0~ 9和小数点组成。 例如: 0.0、25.0、5.789、0.13、5.0、300.、-267.8230 等均为合法的浮点型数据。注意,必须有小数点。 以下不是合法的实数: 345 (无小数点)
4.4.2 浮点型变量 1.浮点型数据在内存中的存放形式 double---浮点型,占8个字节数,只能是数字,用来表示小数点数据(如1.0002)和比int更大(如2147483649)的数据,取值范围是:-1.79E+308 ~ +1.79E+308 。1.79E+308的解说:1100 =+1.1E+3=1.1*10^3(表示是10的3次方),因为浮点型数据包含了整型数据的大小,所以整型数据可以赋值给浮点型标量,但是反之不行,浮点型不能赋值给整型变量,因为它可能超出整型的范围.
实型变量定义的格式和书写规则与整型相同。 例如: 浮点型x,y (x,y为浮点型数据变量)
4.4.3. 浮点型数据的舍入误差 由于浮点型变量是由有限的存储单元组成的,因此能提供的有效数字总是有限的,浮点型有效位为十六位。但TC 规定小数后最多保留六位,其余部分四舍五入。
4.5 字符型数据 4.5.1. 字符串常量 字符串常量是由一对双引号括起的字符序列.例如: "CHINA","C program","$12.5" 等都是合法的字符串常量。 例如: 字符串 "TC软件" 在内存中所占的字节为: TC软件\0 字符串常量"a"虽然都只有一个字母,但在内存中的情况是不同的,因为TC采用的是UNICODE编码,所以每个字母在内存中占2个字节,然后字符串在内存都都是以\0结尾,这样就有2个字符,这样,"a"在内存中占四个字节,可表示为:a\0 4.5.2 转义字符: 字符型取值就没什么限制,在引号""中可以填:数字、中文、字母 、特殊字符、以及他们的组合,字符型的值都要用双引号扩起来,比如 “我是字符型”,当然,有人会问,如果字符串要带 “ 号,怎么处理,难道是 “”” ,不是的,这样编译会语法报错,TC会把前面两个””看成一个字符串,后面那个 “,就语法报错,这个时候就需要转义字符了,下面我们介绍一下转义字符,一般应用部到它 假如我们要表示 “”” 这样是错的,应该这样写 “\””,这样就是表示了一个字符串,里面的值就只有一个 “, TC的转义字符,我们这里列几个比较常用的: 1、 \" 转义双引号 ("_\"ABC\"_\"EFG\"_",用辅助.消息框()输出_"ABC"_"EFG"_) 2、 \' 转义单引号 ("_\'ABC\'_\"EFG\'_",用辅助.消息框()输出_'ABC'_'EFG'_) 3、 \\ 转义斜杠 ("c:\\tc",用辅助.消息框()输出c:\tc,如果这里只用单斜杠就变成制表符\t了,就不是我们要的路径了) 4、 \n 换行符 ("123\n456",用辅助.消息框()输出123 456 ,这里自动换行了) 5、 \r 回车符 ("123\r456",用辅助.消息框()输出123 456,这里自动换行了) 6、 \t 转义制表符 ("123\t456",这里的字串就等于123 456,中间会把\t替换成4个空格)
4.5 逻辑型数据 逻辑型取值只有2种:真和假(true,false),真表示条件成立(true),假表示条件不成立(false),它们用来做各种判断,是或者不是,做或者不做,对或者不对等等。
【例】 - 空间 测试
- 功能 逻辑型 A(逻辑型 传入条件)
- 如果(传入条件)
- 辅助.消息框("真")
- 否则
- 辅助.消息框("假")
- 如果结束
- 返回 真
- 功能结束
- 功能 逻辑型 B()
- 测试.A(真)
- 测试.A(假)
- 返回 真
- 功能结束
- 空间结束
复制代码
以上例子中,A函数需要传入一个逻辑型的参数,如果传入的参数为真,会弹出一个"真"的对话框,如果传入的参数为假,会弹出一个"假"的对话框。B函数2次调用了A函数,依次传入了"真"和"假"2个参数,执行B函数的时候,就会依次弹出"真"和"假"的2次对话框。
4.6 变量赋初值 在程序中常常需要对变量赋初值,以便使用变量,本小节先介绍在作变量定义的同时给变量赋以初值的方法。这种方法称为初始化。在变量定义中赋初值的一般形式为: 类型说明符 变量1= 值1,变量2= 值2,…… 例如: int a=3 int b,c=5 double x=3.2,y=3f,z=0.75 应注意,在定义中不允许连续赋值,如a=b=c=5是不合法的。 最后注意,全局变量不能初始化。
在讨论函数的形参变量时曾经提到,形参变量只在被调用期间才分配内存单元,调用结束立即释放。这一点表明形参变量只有在函数内才是有效的,离开该函数就不能再使用了。这种变量有效性的范围称变量的作用域。不仅对于形参变量,TC语言中所有的量都有自己的作用域。变量说明的方式不同,其作用域也不同。TC语言中的变量,按作用域范围可分为两种,即局部变量和全局变量。
4.7 变量的作用域
4.7.1 局部变量 局部变量也称为内部变量。局部变量是在函数内作定义说明的。其作用域仅限于函数内,从定义开始到函数结尾. 例: 在函数A内定义了三个变量,a为形参,b,c为一般变量。在 B的范围内a,b,c有效,或者说a,b,c变量的作用域限于A函数内。同理,x,y,z的作用域限于B函数内。m,n的作用域限于C函数内。关于局部变量的作用域还要说明以下几点:
形参变量是属于被调函数的局部变量,实参变量是属于主调函数的局部变量,这个我们在后面会介绍 允许在不同的函数中使用相同的变量名,它们代表不同的对象,分配不同的单元,互不干扰,也不会发生混淆。如在前例中,形参和实参的变量名都为n,是完全允许的. 在流程语句中也可定义变量,其作用域只在流程语句范围内,比如 如果,循环,重复语句中.
4.7.2 全局变量
全局变量也称为外部变量,它是在函数外部定义的变量。它不属于哪一个函数,它属于一个空间里面的所有函数都有效的变量。其作用域是整个空间。
例:
- 空间 测试
- 整型 a,b; //全局变量
- 功能 逻辑型 A()
- a=1
- 返回 真
- 功能结束
- 功能 整型 B()
- b=1
- 返回 a+b
- 功能结束
- 空间结束
复制代码 从上例可以看出a、b 都是在函数外部定义的外部变量,都是全局变量。a,b定义在测试 空间名后面,而且没写在函数A和B里面,因此在函数A和函数B中也可使用。
对于TC里的专业名字有不熟悉的,请回顾
第三章 TC语法概要和专业名字 http://bbs.tyuyan.com/thread-12482-1-1.html
掌握了这节课的内容,那么继续深入,了解TC的运算符和运算表达式吧!
第五章 TC 算术运算符和算术表达式 http://bbs.tyuyan.com/thread-12786-1-1.html
在线视频观看地址:http://v.youku.com/v_show/id_XNDEyMTM4MTcy.html
http://player.youku.com/player.php/sid/XNDEyMTM4MTcy/v.swf
|