背景:                 
[本书目录] [图书首页] [本书讨论区]  
链接地址:http://www.17xie.com/read-6146.html    注册17xie 一起来写书 实现您的出书梦想!

4.2  Quick BASIC中的数据和数据类型

与其他BASIC版本不同,Quick BASIC不但有系统定义的基本数据类型,而且用户还可以自己根据需要定义数据类型。我们首先介绍一下数据的概念,然后再介绍基本数据类型和如何自定义数据类型。

4.2.1  数据概念

数据的概念虽然有各种说法,但都大同小异。数据是信息的载体,是描述客观事物的数、字符,以及所有能输入到计算中,并能被计算机程序加工处理的符合集合。计算机中的数据,并不单单指数值,也包括字符串等。

4.2.2  数据类型

数据类型是简单数据的基本属性,数据类型是确定的一个值的集合。计算机中,只有相同或相容的类型的数据之间才能进行操作。

1.基本数据类型

基本数据类型可以分为字符串型数据和数值型数据。

1)字符串

变长字符串  变长字符串的长度为0~32767个字符。组成它的字符可以是代码为0~127的标准ASCII字符,也可以是代码为128~255的扩展ASCII字符。(参见附录C

定长字符串  定长字符串含有确定个数的字符,但最大长度不超过32767个字符。定长字符串中字符的代码范围也为0~255

2)数值

Quick BASIC的数值型数据可以分为整型数和浮点数两类。其中整型数分为常规整型数和长整型数,浮点数分为单精度浮点数和双精度浮点数。下面分别予以介绍:

整型数:整型数是不带小数点和指数符号的数。在计算机内部,它以二进制补码形式表示。例如,整数8-8分别以下在的形式存放:

0000000000001000

1111111111111000

整型数中,整型(常规整型)在计算机内部,以两个字节(16位)的二进制码表示和参加运算,它的取值范围从-32768+32767。在Quick BASIC中,增加了长整型数。长整型数以带符号的四字节(32位)二进制存储,它的取值范围从-2147473648+214743647

浮点数:Quick BASIC使用IEEEInstitute of Electrical and Electoronice Engineers,Inc)格式的浮点数,而不是像早期版本那样使用Microsoft二进制格式。IEEE格式给出的结果更精确,并能使用808780287数学协处理器。

浮点数由三部分组成:符号、指数和尾数,其指数分别用ED表示。其中的单精度浮点数占4个字节,符号占1位,指数占8位,其余的23位表示尾数,此外还有一个附加的隐含位。单精度数可以精确到7位十进制数,其负数的范围为-3.402823E+38-14.40129E-45,正数的范围为1.40129E-453.402823+38。双精度浮点数占8个字节,符号占1位,指数占11位,其余52位用来表示尾数,此外还有一个附加的隐含位。双精度数精确到1516位十进制数。其负数的范围为-1.797693134862316D+308。除去整型数和长整型数外,Quick BASIC中还使用十六进制和八制数,还要用到逻辑数据。逻辑型数据只取“真”和“假”两种值,通常情况下把逻辑型数据也看成数值型数据。

2.用户定义的数据类型

除了系统定义的基本数据类型外,用户还可以利用TYPE语句定义自己的数据类型,它的格式为:

TYPE定义的数据类型名

数据类型元素名AS类型名

数据类型元素名AS类型名

……

END TYPE

其中的“定义的数据类型名”的命名规则与变量的命名规则相同,有关变量内容我们将在4.3节中介绍。“数据类型元素名”也遵守同样的规则,注意,数据类型元素名不能为数组名。

“类型名”可以是除变长字符串以外任何数据类型,也可以是用户定义的类型。

[例3-2  定义日期(MyData)记录数据类型。

TYPE MyData

Year AS INTEGER

Month AS STRING*3

day AS INTEGER

END TYPE

DIM today AS mydate

today.year = 2001

today.month = "April"

today.day = 18

PRINT "today is";today.year;today.month;today.day

END

运行菜单选项"RUN",输出结果:

today is 2001 Apr 18

其中的MYDATE为用户自定义的类型。它包含三个元素:YearMonthDayYearDay为整型,Month为定长字符串,取3ASCII字符。

我们在使用TYPE语句时,应注意以下几点:

n          用户自定义类型中的字符串必须是定长字符串,它的长度用一个星号和一个常数指明。

n          在使用用户自定义的类型之前,必须用TYPE语句在模块代码中加以定义。而用户自定义类型的变量可以出现在模块的任意地方,包括在SUBFUNCTION过程中。

n          用户自定义的类型中不能含有数组。

4.3  Quick BASIC中的常量和变量

使用计算机能够实现的运算可以分为两类:数值运算和非数值运算。数值运算的运算对象主要是数值量,当然,得到的结果也为数值量,比如3*2+4属于数值运算。非数值运算的运算对象主要不是数值量,而是非数值量,比如把全班同学的姓名按姓氏的英文字母顺序排序;查询38出生的女士;打印全班前十名同学的姓名等,都属于非数值运算。程序处理的对象是数据,数据可以分为数值型数据和非数值型数据,参加运算的数据就是运算量或操作数。本节主要介绍常量和变量。

4.3.1  常量

常量是指程序运行过程中不能改变的数据量。如3.478-1等都是常量。在Quick BASIC中,常量可以分为数值常量和字符串常量。有时也把常量分为文字常量和符号常量。

1.数值常量

数值常量又可分为整型常量和实型常量两类。

1)整型常量(又称为整数)

整型常量有若干个数字组成的序列,它可以带有数值符。整型常量又可分为常规整型数和长整型数两类。

常规整型数:常规整型数的取值范围从-32768+32767。它不包含小数点,常规整型数按两个字节存储。Quick BASIC中用“%”作为常规型数的符号,比如7676%指的是同一个整型数。但要注意,如果我们所取的数超过了规定的范围,如果仍然在数值后加“%”,则Quick BASIC会出错。如32768%不合法。

长整型数:长整型数是指超过-32768+32767范围而不超过-2147483648+214783647范围内不带小数点的整数。在Quick BASIC中,长整型数可以数的末尾加一个“&”表明是长整型,比如3277732777&指同一个数。所有被认为或被定义为长整型的整数,不管大小均按4个字节存储。比如8&,虽然数值很少,因为被定义为长整型数,Quick BASIC仍然会按4个字节存储。

2)实型常量(又称实数)

实型常量可以分为单精度实数和双精度实数,在Quick BASIC中,有两种计数方法可计实数,它们是日常计数法和科学计数法。

日常计数法:日常计数法是指日常生活中所使用的十进制小数形式计数。它们由若干个数字序列组成,可以包括小数点和数值符号。比如-3.40.7860.0+9.485等。因为这些实数的小数点的位置是固定不变的,所以又被称为“定点实数”。比如743.45中的小数点的位置在3后面,我们不能随便移动它的位置,因为移动它将会改变它实际表示的数值。

科学计数法:科学计数法就是用指数的形式来表示实数。在数学中,我们常用幂(幂的底数为10)的形式表示,如743.45可表示为743.45×1007.4345×10274.345×101等数值常量。因在为在输入这些数据时,无法输入上角标和下角标,所以Quick BASIC规定用字母“E”或“e”来表示以10为底的幂数。比如上例可表示为743.45E07.4345E274.345E1

Quick BASIC中,一个指数形式的常量是有数字部分和幂(指数)部分组成时,一个实数可以表示为多种指数形式,如上例的743.45E0,还可以表示成7.4345E274.345E1等形式。因为用指数形式表示一个实数时,其实数中的数字部分内的小数点的位置可以随着指数的变化而变化,故又称“浮点型实数”。

Quick BASIC中,为了区别单精度实数和双精度实数,又增加了有关单精度和双精度实数的特殊表示方法:单精度数用末尾带有“!”的十进制定点数表示,也可以用“E”代替指数的底。比如43.21可以表示为43.21!或4.321E1,二者等价。因为我们经常在程序中使用单精度数,为了简化起见,实数中的“!”可以省略不写,上例的43.21!和43.21是等价的;双精度实数用末尾带“#”的十进制定点数来表示,也可用“D”代表指数的底,比如双精度数876.098098098可以表示为876.098098098#8.76098098098D2。其中的“D”和科学计数法中的“E”等价,只是为了区别起见才这样写。

注意:当我们用指数形式表示一个实数时,指数部分由字母“E”、指数符号(正数可以默认)和不超过3位的整数组成。比如1234.567E-35879.55E3787.23E2都是合法的,而1234.567E-3.25879.55E-4321787.23E22.3均不合法。

计算机中,不同类型的数的存储方式不同,前面我们提到了不同类型的数所占的字节数不一样,经如2020.0020.00#数值虽然相同,但20为整型数,而20.00为实型数,20.00#为双精度数。故在存储时所占的存储空间就不一样。20在存储时占用2个字节(整型数存储占2个字节16位),而20.00在存储时计算机会当作单精度实型数处理,存储占4个字节,20.00#在存储时计算机会当作双精度数,存储占8个字节。

程序中若没有特殊说明某实型数是单精度还是双精度数时,可以参照以下原则加以区别:

不超过7位并且带小数点的数,或末尾加“!”的不超过7位数字的十进制小数,或用“E”(或“e”)表示指数部分的浮点实数,在计算机中均以4个字节按单精度实型数存储。

多于7位并且包含小数点的数,或末尾加“#”的实数,或用“D”(或“d”)表示指数部分的浮点实数,在计算机中均以8个字节按双精度实型数存储。

2.字符串常量

字符串常量是指用一对双引号括起来,包括所有可以打印的ASCII字符和国标码字符的字符串。如"OK""Quick BASIC""Welcome"等都是合法的字符串常量。应当注意的是:双引号只是字符串的“定界符”,只起“定界”的作用,不算做常量本身的内容。

3.符号常量

符号常量是一种用来代替某数值常量或字符串常量的标识符。此常量在使用之前必须用CONST语句加以说明。在Quick BASIC中,可以定义符号常量,用来代替数值或字符串。定义的一般格式为:

CONST常量名=表达式[,常量名=表达式]…

其中的“常量名”为一个名字,按变量名的规则定义,可以加类型说明符;“表达式”由文字常数、算术运算符(除乘方指数运算符^外)、逻辑运算符组成,也可以使用诸如“File already exist”之类的字符串,但是不能使用字符串连接、变量和用户定义的函数或内部函数。例如:

CONST Maxchars%=254,Maxbue%=Maxchars+1

DIM Buffer%(Maxbue%)

其实,符号常量完全可以通过对变量赋值来实现,但使用符号常量有一定优点:

n          在整个程序模块中经常用到的常量只需定义一次。

n          常量不会因疏忽而改变。

n          在独立的程序中,使用常量比使用变量能产生更为有效的代码。

n          使用常量使程序更容易修改。

同时在使用符号常量时应当注意:

1)如果使用了类型说明符,那么在该常量被引用时可以省略。例如:

CONST Maxdim%=20

……

DIM AccountName$(Maxdim)

在省略了类型说明符后,常量的类型将取决于CONST语句中表达式的类型。字符串表达式总是产生字符串常数,对于数值型表达式来讲,会将该表达式求值并按照最简单的类型来表示此常数。经如,当表达式的结果为整数时,该常数就会确定为最简单的整型常数。

2)符号常量的类型由类型说明符或表达式的类型决定,并不受DEF type语句的影响。

3)在过程之外说明的常量可以在本模块中使用,可以在任何使用表达式的地方使用符号常量。

4)因类型说明符不是符号常量的一部分,故在定义符号常量后,有些变量名在使用时要小心。例如:

CONST A5.678

那么此时A!、N#N%N&就不能再用作变量名。

4.3.2  变量

变量是指程序运行过程,其值可重新赋值的量,亦即在程序执行过程可以发生变化的量。下面将介绍变量的命名规则和变量的类型。

1.变量的命名规则

变量名是指表示变量值的名称,主要用于代表一个存储单元。在Quick BASIC中,变量的命名由字母、数字和小数点组成。它命名的规则如下:

1)变量名由字母、数字和小数点组成,必须以字母开头。如:A1ConNT.addB等都是合法的。

2)变量名由140个字符组成,在变量名中只能出现字母、数字、小数点和用于表明变量类型的符号。

3)表示变量类型的符号(!、#%$、&)必须是变量名的最后一个字符。

4)不能使用Quick BASIC中的保留字作为变量名。例如变量DATADATA$非法,但变量DATA合法。

5)变量名中不能出现空格符号。

6)变量名不能与过程名或符号常量同名。

7)在变量名中出现的字母大小写是等效的(要区别于C语言等)。

2.变量类型的说明

变量是用来存储数据的,因为数据可以分为不同的类型,所以存放数据的变量也应当有相应的类型,用来存放整型数、长整型数、单精度实数、双精度实数和字符串的变量,依次被称为整型变量、长整型变量、单精度变量、双精度变量和字符串变量。变量在内存中所占的存储空间由相应的数据类型所占空间决定,整型变量占2个字节、长整型变量占4个字节、单精度变量占4个字节、双精度变量占8个字节,字符串变量

字数:6368    最后更新:1年以前 [08-16 18:57]我爱钱 修改
本页编辑者:我爱钱  
[前一页]:第四章 Quick Basic的…  [后一页]:第四章
[在本页中加入书签] [收藏本书] [推荐本书]
  17xie论坛 > 本书讨论区 > 本页评论   (共0条)
发表评论

用户名称 匿名发表
评论内容
验证码

关于我们 | 版权声明 | 免责声明 | 诚聘英才 | 联系我们 | 合作伙伴 | 友情链接 | 广告合作 | 提交意见
Copyright © 2007 17xie.com 互联网协同写书平台 京ICP备08002671号