数组类型和字符串类型数据辅导讲稿.doc_第1页
数组类型和字符串类型数据辅导讲稿.doc_第2页
数组类型和字符串类型数据辅导讲稿.doc_第3页
数组类型和字符串类型数据辅导讲稿.doc_第4页
数组类型和字符串类型数据辅导讲稿.doc_第5页
已阅读5页,还剩22页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

认识数组我们先做下面两个题:第一个:输入n(ns then writeln(a); if bs then writeln(b); if cs then writeln(c );end.运行程序,输入3、8、7,输出结果为8、7现在,我们改变一下题目要求:输入100个整数,将其中大于平均值的数显示出来。如果仍然采用上述程序的思路,就需要定义100个变量,写100个readln语句、100个if语句和100个writeln语句。这是很繁琐的。也是不现实的。在计算机的实际应用中,数据量往往远大于100个,例如:一个图书馆的藏书就可能有几十万册。因此,仅通过增加变量个数和语句条数是无法解决问题的。而且,即使能够写出程序,也一定是冗长笨拙的程序。 通过分析程序中各个变量的用途可知,a、b、c用于存储待处理的数,可以归为一组,而s用于存储平均值,不属于这一组。并且,a、b、c数据类型是相同的。在现实问题,还有许多数据像a、b、c这样具有同等意义和相同的数据类型,例如班级名单上的50个姓名,课程表上的30节课,一座楼房里的60个门牌号。在编程,如果能将每组同类型数据用整体的、统一的方式来存储和处理,而不是孤立地、分别地存储和处理,则可以大大简化程序。在计算机编程中,我们可以用数组(array)来表示象这样具有同等意义和相同数据类型的一组数据。因此:数组是同类型的一组数据按一定关系排列成的表。数组中的每一个数据叫做一个数组元素,简称元素。每个数组都有确定的元素数目和下标范围。Integer、real、char、都是pascal语言表示标准数据类型的,可以直接用来定义变量、形参和函数返回值。数组类型是一种自定义数据类型,需要在程序预先进行定义,规定数组的元素类型和下标范围,然后才可以使用。一维数组一维数组是最简单的一类数组。在一维数组中,元素只沿一个方向排列。1、 一维数组的定义格式:type 数组类型名=array常量1常量2of 基类型;var数组变量名:数组类型名;说明:(1) 数组类型名是我们为这个自定义类型所起的名字,它应是一个合法的标识符;(2) 下标必须是有序数据类型,例如整形、字符型、布尔型、枚举型。(3) 常量1叫做数组的下标下界,用于规定下标的最小值;常量2叫做数组的下标上界,用于规定数组下标的最大值。下界必须小于或等于上界。(4) 基类型就是数组中每个元素的数据类型,它可以是任何数据类型。(5) var部分定义该类型的数组,数组变量名是我们为这个数组起的名字,它应是一个合法的标识符。注:数组中的每个元素都相当于一个相应类型的普通变量。但是,数组元素没有单独的变量名,必须通过数组变量名和该元素的下标来确定。因此,数组元素也称为下标变量。数组元素的引用格式为:数组变量名下标请看例子:type t1=array1.10 of integervar x: t1 ; 下标的表示法:(讲解)定义数组的另一种方式为:不定义数组类型标识符,直接定义数组变量,其格式如下: var变量名:array下标下界下标上界of 基类型;例如: var x: array1.10 of integer ;这段程序直接定义了一个名为x的数组,它包含10个元素,元素的下标范围是1到10,每个元素的数据类型都是整形。需要指出:数组的下标可以是任何一种有序类型,例如整形、字符型、布尔型、枚举型,并且可以从这相类型中的任意一个值开始编排,而不一定从1开始;数组的基类型可以是pascal语言中的任何数据类型,包括自定义数据类型。下面的数组定义都是正确的:count : array1.31 of real ;leou : arraya.z of integer ;r: array1991.2000 of Boolean ;(讲解以上每个数组中有多少个元素及表示法及类型)以下是一些错误的数组定义:vara : array16.12 of integer ; 下界不能大于上界b : array1.1.1.5 of char ; 下标必须是有序类型c : array1.n of real ; 定义时下标的下界和上界必须是常量使用数组时,通常就是把数组元素当作相应类型的变量来使用。数组元素的使用方法与普通变量基本相同。下面的程序用整形变量做对照,演示了整型数组元素的使用方法。Program lt1;Type T1=array1.10 of integer ;Var a,b,c : integerx : T1;begin a : =3 ; x1 : =3 ; 赋值操作 b : =a+5 ; x2:=x1+5 ;参加运算 readln(c) ; readln(x3) ; 用输入语句赋值 writeln(c); writeln(x3) ;输出end.使用数组元素时,下标可以是常量,也可以是变量或表达式。例如:program lt2 ;var a : array1.10 of integer ; I : integer ;Begin I : =1 ;aI :=3 ;aI+1 :=5 ;aI+2 :=7 ;writeln(a1=,a1) ;writeln(a2=,aI+1) ;writeln(a3=,aI+2 );end.程序运行结果为:a1=3a2=5a3=7数组元素的下标可以是变量或表达式。通过改变变量或表达式的值,我们可以引用数组中不同元素。借助这一特点,我们可以用循环语句对数组中的元素进行成批操作,例如: for I : =1 to 10 do read(aI) ;运行程序所执行的操作就相当于:(略)这正是数组类型的优越之处。现在,我们可以很容易地实现开始时100个数的处理了。程序如下:program lx1;var n:array1.100 of integer ; 定义数组s:real ; I:integer ; V:integer;Begin For I:=1 to 100 do Readln(nI) ; 依次读100个整数,存到n中S:=0 For I :=1 to 100 doS:=s+nI; V:=s/100;求100个数的平均值For I:=1 to 100 do If nIv then Writeln(nI) ; 依次比较,若大于平均值v则输出End.运行程序后,从键盘上输入100个整数,程序将其累加起来,求出平均数,然后依次判断每个数,将大于平均值的数显示出来。由此可见:使用数组类型和循环结构,可以对一组数据进行成批操作。这样写出的程序更简洁、更合理,而且很容易根据需求的变动进行修改。例如,需处理的数据变为60个,则只需将下标上界和循环终值改为60,而不需改动程序结构,也不需要增删语句。在计算机的内存中,数组元素是依次存放的。一维数组的各个元素按其下标顺序依次排列。假如有这样一段程序:program lx2;var a: array3.8 of integer ;begin a3 : =8 ; a4 : =0 ; a5 : =0 ; a6 : =6 ; a7 : =0 ; a8 : =6 ;end.则数组a在内存中具有这样的结构:800606每个整型变量占用2个字节的存储空间,因此整个数组共占有12个字节的存储空间。一维数组的应用实例例1:借助一维数组,生成菲波那契数列的前20项。1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181 6765分析:设菲波那契数列的元素为a1、a2、a3、a4an,则有(1) a1=1; (2)a2=1 ; (3) a3=an-1+an-2 (当n=3时)可分两步实现,先为数组的第一个元素和第二个元素填写1,然后依次计算后续元素。程序如下:program lt1;var a : array 1.20 of integer ; I : integer ;Begin a1 : =1; a2 : =1; for I: =3 to 20 doaI : =aI - 1+aI-2 ;for I : =1 to 20 do write( aI, ) ; end.例2:数组元素的使用。Program lt2 ;Var Da: arraya.z of integer Ch: char ; I: integer ;Begin I : =1 ; For ch: =a to z do BeginDach :=I ;Writeln(dach) ;I : =I+1 ; End;End.以上程序定义了一个整型数组data,程序中说明了数组变量da。其中26个元素分别为:aa、abay和az,在程序的语句段中通过循环语句为这26个元素进行赋值操作。例3、从100个数中找最大数program lx3;type date=array1.100 of integer ;var a: data ;n: integer ;temp,I : integer ;begin readln(n) ; for I: =1 to n do read(aI); temp : =a1 ; for I:=2 to n do if temprI+1 then Begin rI和rI+1数据交换 Tem:=rI ; RI:=rI+1 ; RI+1:=tem; End ;End;End;For I:=1 to n do write(rI : 5: 3, ) ;End.当输入为:2.0 3.1 4.5 3.4 2.3 9.0 8.7 5.6 5.7 10.3程序运行输出:2.000 2.300 3.100 3.400 4.500 5.600 5.700 8.700 9.000 10.300例5:从键盘输入10个整数,按升序(由小到大)进行排序,并显示结果。(用指向排序法)分析:首先找出n个数中最小的数,与第1个位置上的数交换;再找出剩下n-1个数中最小的数,与第2个位置上的数交换;再找出剩下n-2个数中最小的数,与第3个位置上的数交换;直到剩下2个数时,将这2个数中较小的数与第n-1位置(即倒数第二的位置)上的数交换。当然,若某次比较时发现第x个数已经在第x个位置上,就不用交换了。剩下的最后一个数一定是最大的数,此时即完成升序排序。在编写数组程序时,为了能够用循环结构对不同元素依次进行操作,我们一般都是用变量来做数组的下标。保存下标值的这个变量,实际上起到了选择和指示数组元素的作用。在此,我们引入“指向”这个概念。用变量k指示数组a的元素时,如果k的值是元素ax的下标,即k=x,则称为“k指向ax”;如果k又被赋值为y,则可以说“k改为指向ay”。program lx1;var a : array1.10 of integer ; I ,j , k : integer ; I,j用于循环,k用于指向当前的最小元素 t: integer ;begin writeln;for I:=1 to 10 do read(aI) ;for I:=1 to 9 do 从第1个数起,到第n-1个数止begin k: =I ;首先假设剩余数中第一个数是最小的,用k指向它 for j:=I+1 to 10 do 从剩余数的第二个数比起,到最后一个数止if ajak then 若第j个数比第k个数还要小 k:=j ; 则k改为指向第j个数if Ik then若剩余数中第一个数不是剩余数中最小的数begin t:=aI ;用临时变量t先将aI的值保存起来 aI:=ak ;aI 获得ak的值 ak:=t ; ak获得aI的值end ; end ;for I:=1 to 10 do write(aI, ) ;end.二维数组在现实生活中,有许多数据是按二维关系组织的,例如课程表中的课程:节次星期一星期二星期三星期四星期五1数学语文英语英语语文2英语数学化学体育英语3物理体育美术语文音乐4化学英语语文化学化学5音乐物理语文自习生物6哲学英语英语语文体育数组中的元素沿“行”和“列”两个方向排列的数组,就是二维数组。要在二维数组中确定一个元素,必须同时指出它所在行和所在的列,因此二维数组需要使用两个下标,即“行下标”和“列下标”。二维数组的元素也叫做双下标变量,与此对应,一维数组的元素叫做单下标变量。定义格式:type 数组类型名=array行下标下界行下标上界,列下标下界列下标上界of 基类型;例如:type t1=array1.3, 1.4 of real ; var a: t1 ;这样定义的变量a就是一个二维数组。它包含3行4列,共12个元素,如下表:a1,1a1,2a1,3a1,4a2,1a2,2a2,3a2,4a3,1a3,2a3,3a3,4也可以直接定义二维数组变量: var 数组变量名:array行下标下界行下标上界,列下标下界列下标上界 of 基类型;二维数组的引用格式:数组变量名行下标,列下标例如:a1,1:3.5;a2,4:a2,31;操作二维数组时,常使用二重循环。例如,可以这样为数组a中的每个元素读入数据: for I:=1 to 3 do for j:1to 4 doreadln( a I, j );定义一维数组时,如果基类型仍是一维数组类型,则得到的这个数组实际上就是一个二维数组。例如: type t1: array1.5 of integer ; t2: array1.3 of t1 ; var a : t2 ; 这样定义的变量a实际上就是一个3行5列的二维数组,它的第3行第2列的元素可以写作a3 , 2,也可以写作a32。例1:将某水泥厂2001年到2003年之间每年的季度产量存入二维数组,然后将每年的最高季度产量和所在季度显示出来。产量为整数,单位为“万吨”。分析:定义一个整型二维数组,行下标表示年,列下标表示季度。用循环结构从每年的数据中找出最大值并显示。Program lt1 ;Var a: array2001.2003, 1.4 of integer ; I , j , k : integer ;Begin For I: =2001 to 2003 doFor j: =1 to 4 doBegin Write ( 请输入I,年第,j , 季度的产量:) ; Readln (a I , j );End;For I: =2001 to 2003 doBegin K: =1 ; For j:=1 to 4 do If aI , jaI ,k then K: =j ; Writeln( I, 年的最高季度产量是,a I , k ,万吨,在第, k , 季度 ) ;End;End.程序运行:略例2:二维数组的输入和输出示例program lx 2;type shz=array1.3 , a.c of real ;var r: shz ; ch:char ; I: integer ;Begin For I:=1 to 3 do循环读入数组各个分量 Begin For ch:=a to c do Read(r I, ch ) ;End;End;For I:=1 to 3 do 循环输出数组各个分量 Begin For ch: =a to c do Write(rI, ch :5:3, ) ; Writeln ; End ;End.例3:借助二维数组,显示下图所示的七阶(七行)“杨辉三角形”111 1 1 1121 1 2 11331 1 3 3 114641 1 4 6 4 1 1 5 10 10 5 1 1 5 10 10 5 1观察上面左图不容易找到规律,但是如果将它转化为右边的图形,不难发现杨辉三角形其实就是一个二维表的下三角部分,假设通过二维数组yh存储,每行首尾元素为1,且其中任意一个非首尾元素yhI, j的值其实就是yhI-1, j-1 与yhI-1,j 的和,另外,每一行的元素个数刚好等于行数。有了数组元素的值,要打印杨辉三角形,只需控制一下输出起始位置就行了。法一:程序如下:program lx5(input, output ) ;var yh: array1.10, 1.10 of integer ;需要打印前10行I , j : integer ;Begin Yh 1,1:=1 ; 设定第一行的值For I:=2 to 10 do 设定第210行的值Begin YhI,1 :=1 ; yhI , I =1 ; 设定首尾值For j: =2 to I-1 do YhI,j:=yhI-1 , j-1 +yhI-1, j ;设定非首尾值End;Writeln( yang hui: ) ;For I: =1 to 10 do Begin Write ( :40-3*I ) For j:=1 to I do write(yhI,j:6);Writeln;End;End.法二:见课本113-114页(暂略)使用数组时需要注意的问题1、 数组类型的变量可以当作一个整体来赋值,但要求赋值号两边的数组必须是“类型一致”的。例如:program lx1;type t1=array1.26 of char ; t2=t1 ;用等号定义的新类型与原类型是一致的var a : t1 ; b : t1 ; c : t2 ; d, e : array1.26 of char ;begin a: =b ;同一个类型标识符定义的变量是类型一致的a: =c ;同类型一致的两个类型标识符定义的变量是类型一致的d: =e ;用同一个变量定义语句定义的变量是类型一致的end.如果不是类型一致的,那么,即使描述相同也不能进行赋值。例如:program lx2;type t1=array1.26 of char ; t2=array1.26 of char ;var a : t1 ; b : t2 ; c : array1.26 of char ;begin a :=b ; a与b不是类型一致的a :=c ;a与c不是类型一致的这个程序中的两条赋值语句都是错误的,它们都无法通过编译时的语法检查。2、 数组可以用作函数和过程的参数,但要求形参和实参必须是类型一致的。因此,只能使用预先定义好的数组类型标识符来定义参数,而不能在函数的形参表中直接描述类型。下面的程序演示了正确定义方法:program lx3 ;type tchar=array1.10 of char ;var charray : tchar ;procedure readchar( var a : tchar ) ;用类型标识符定义一个变参var I : integer ;Begin For I:=1 to 10 do readln(aI) ;End ;Procedure writechar( a : tchar ) ; 用类型标识符定义一个值参Var I: integer ;Begin For I:=1 to 10 do write(aI) ;End;Begin Readchar(charray) ;从键盘接收10个字符,存入数组Writechar(charray) ; 将数组中的10个字符显示出来End.下面的定义方法是错误的:procedure writechar( a:array1.10 of integer );这行代码试图在函数的形参表中直接描述数组类型,它无法通过编译检查。3、 函数和过程的参数是数组时,实参与形参必须类型一致。下面的程序是错误的:program lx3;type tchar=array 1.10 of char ;var arr : array1.10 of char ;procedure readchar(a: tchar ) ;begin for I:=1 to 10 do readln(aI) ;end ;begin readchar(arr) ;end.因为实参arr与开参a不是类型一致的。4、 使用数组时,最常出现的错误就是下标越界,即实际指定的下标超出出预先定义的下标范围。例如:program pp7;var a : array 1.5 of char ;begin a 0 : =a ; a 8 : =b ;数组a的元素是a1到a5,现在要引用a0和a8,显然是没有意义的,因为并不存在这两个元素。正如一座楼高10层,现在要找第15层或地下室6层,都是没有意义的。 上述程序中的越界错误比较明显,通过只是由笔误引起的。由于下标写成了常量,在编译时即会提示错误。但是在许多情况下,数组的下标是变量或表达式,只有在运行时才能确定其数值。如果变量或表达式的值在运行时发生错误,就可能导致难以察觉的数组下标越界。例如:program lx1;var c: char ; a: arraya.z of integer ;begin read(c) ; while ord(c )13 do beginac:=ac+1 ;read(c) ; end ; writeln ; for c: =a to z dowriteln(,c ,j= , ac ; end.分析: 这是一个字符计数程序。用户输入一串英文字符,程序统计出26个字母在这串字符中出现的次数。例如当用户输入字符b时,程序执行ak: =ak+1 ; 用户输入回车时,程序退出while循环,结束输入,显示统计结果。该程序的思路是正确的,当用户输入完全合法的数据时(一串英文字母,并以回车结束),程序能够正常运行并得出正确结果;但是,如果用户输入了非法的字符,例如“%”,程序就会发生下标越界错误。因为程序试图引用a%这个元素,而数组a的下标范围是从a到z,并a%这个元素。下面这个程序,先从键盘读入一组数据,然后根据用户输入的指令来作相应处理,若输入的是合法下标,则显示相应的数据,输入非法下标值则给出提示,输入“-1”时结束程序。由于使用了符号常量和范围检查,该程序能够较好地避免出现下标越界的错误。Program lx2 ;Const Indexmin=1 ;定义下标下界 Indexmax=100定义下标上界Var a: arrayindexminindexmax of integer ; I: integer ;Begin For I:=indexmin to indexmax do 读入一组数据Readln(aI) ;Readln(I ) ;从键盘接收用户指令While I-1 do 若非-1则继续Begin If (I=indexmin ) and (I=indexmax) then Writeln(aI) 下标没有越界,则显示相应元素 Else Writeln ( illegal index!) ; 下标越界,则给出提示 Readln( I ) ; 继续从键盘接收用户指令End ;End.该程序有两点好处:第一, 若用户输入的下标是非法的,则程序不会试图按照非法下标去引用数组元素;第二, 若需调整数组大小,只需修改const部分的常量定义,而不用逐一修改程序中的其他代码,避免了各处修改不一致或某处忘记修改造成错误。Turbo pascal提供了“范围检查”(range check)的功能,这个功能可以帮助我们在调试程序时发现数组越界错误。此功能默认是关闭的,开启的方法有两种:在程序的开头(保留字program之前)写上“$R+”;在option菜单的compiler子菜单中选中“Rangechecking”选项。如果开启了此功能,系统会在程序运行时自动检查数组下标是否越界,如果出现越界则停止运行,并给出错误提示。通常建议在调试程序时开启此功能,以便能够发现越界错误;在程序调试完毕后关闭此功能,以提高程序的运行速度。字符与字符串一、字符、字符串类型的使用(一)字符类型字符类型为由一个字符组成的字符常量或字符变量 。字符常量定义:const字符常量=字符字符变量定义:Var字符变量:char;字符类型是一个有序类型, 字符的大小顺序按其ASC代码的大小而定。函数succ、pred、ord适用于字符类型。例如:后继函数:succ(a)=b前继函数:pred(B)=A序号函数:ord(A)=65例1 按字母表顺序和逆序每隔一个字母打印。即打印出:a c e g I k m o q s u w yz x r v t p n l j h f d b程序如下:program ex8_1;var letter:char;begin for letter:=a to z do if (ord(letter)-ord(a)mod 2=0 then write(letter:3); writeln; for letter:=z downto a do if (ord(letter)-ord(z)mod 2 =0 then write(letter:3); writeln;end.分析:程序中,我们利用了字符类型是顺序类型这一特性,直接将字符类型变量作为循环变量,使程序处理起来比较直观。(二)字符串类型在现实问题中,经常需要处理文本类型的数据,实现文本的存储、插入、删除、替换、查找、显示、输出等操作。为简便起见,我们首先不考虑中文文本,因为中文文本的存储方法和操作方法都比较复杂。通常意义上的文本是由大小写字母、数字、标点、空格等字符组成的,按一定顺序排成一串。例如“I am a student . ”这句文本就包含了11个字母,3个空格,1个标点,共15个字符。 这种由字符按一定顺序排列所组成的数据对象叫做字符串(string),有时也简称为字串或串。 与其他数据类型一样,字符串也可以是常量形式或变量形式。如我们很熟悉这种输出语句: write( input a number ; ) ; 实际上就是在用write语句输出字符串常量,字符串所包含的字符个数叫做字符串的计划调节(length )。不含任何字符串叫做空字符串(empty string ),简称空串,空串的长度是0。空串与空格字符串是不同的,因为空串不含字符,而空格串含有一个或多个空格字符。在pascal语言中表示字符串的方法很简单:将字符串用单引号引起来。字符串AB,长度为2字符串A B,包含A、空格、B共3个字符,长度为3字符串This is a pen.,长度为14字符串是空串,长度为0。字符串 含有2个空格,长度为2 字符串中任意长度的连续的字符组成的字符串叫做子串,与子串相对应的原字符串叫做主串。显然,任何字符串都是它自身的子串,空串是任何字符串的子串。例如:A、AB、BCD、DE、E、ABCDE,都是ABCDE的子串;His、a pen、.都是This is a pen.的子串。is是This is a pen.的子串,并出现了2次。AA是AAAAA的子串,并在其中出现了4次。字符串是由字符组成的有穷序列。 通常编程序对字符串进行下列操作:(1) 求长度:给定一个字符串,求它的长度,结果是一个正整数;(2) 连接:即字符串相加,例如:ABC与DEFG连接得到ABCDEFG;(3) 求子串:例如求ABDE中从第3字符开始的长度为2的子串中得到DE;(4) 查找子串:在一个字符串中查找指定的子串,求子串中出现的位置。例如在ABCDEFG中查找CDE,得到的结果是3此外,还有一些字符串操作,如删除子串、替换子串、求左子串、求右子串等等,一般都可通过基本操作的组合和变化来实现。字符串还可以参加关系运算,构成关系表达式。 设有两个字符串,比较的规则如下: 从他们各自的第一个字符开始,依次比较两个字符串对应位置上的字符,直到出现不相等的字符,此时认为ASCII码值较大的字符所在的串较大;若比较到其中一个串结束时两个串的对应字符都相等,则认为较长的串较大;若两串长度相等,且对应字符都相等,则认为两串相等。例如:BA因为B的ASCII码值大于A的ASCII码值ABCAB因为两串对应字符均相等,且左串比右串长AB AB原因同上A BAB因为空格的ASCII码值小于B的ASCII码值ABCD=ABCD因为两串长度相等,且对应字符都相等字符的ASCII码值可以通过查阅ASCII码表或调用ord函数来获取。 字符串是由一组同类数据(字符)按一定顺序排列而成的数据结构。因此,可以用数组来存储。存储字符串的最基本的方法就是使用字符数组。例1、 用字符数组存储字符串从键盘接收一个字符串,以星号“*”为结束标志,存储到数组中(不包括星号),然后将该字符串显示出来。假设字符串的长度不超过100个字符。分析: 可定义一个字符型数组,用while循环来控制流程,用read语句来接收字符,依次存储到数组的元素中,遇到星号时结束,然后用for 循环依次输出数组中的字符。字符串的长度是未知的,因此需要再定义一个变量,记录实际录入的字符个数,以便确定字符串长度,在使用字符串时确定到何处结束。程序如下:program lx1;var a:array1.100 of char ;len, I : integer ;len 用于指示字符串的当前长度ch : char ;begin len: =0 ;在录入之前字符串的长度是0 read(ch ); while (ch*) and (len100) do begin len:=len+1 ; 每添加一个字符,字符串的长度都要增1 alen :=ch ;将新录入的字符添加到原字符串的未尾 read(ch); end ;for I: =1 to len do 依次显示字符数组中的字符 write(aI) ;end.Turbo pascal的字符串类型 字符串数据是很常用的数据,但使用自定义的字符数组来处理字符串比较麻烦(如上例)。为此,pascal提供了专门的字符串类型,其类型标识符是string 。string类型的默认最大长度是255个字符,直接用标识符string定义的字符串变量的最大长度就是255。用户也可以在string类型的基础上定义新的字符串类型,指定不同的最大长度,用户可定义的最大长度范围是1到255。定义字符串类型的格式:type 字符串类型名=string最大长度;如果不指定最大长度,则最大长度就是string类型的默认最大长度255。例如:typetstr1=string100 ; 最大长度为100的字符串类型tstr2=string20最大长度为20的字符串类型tstr3=string ; 与string默认类型一致的字符串类型,最大长度是255 vars1:tstr1;用类型tstr1定义一个最大长度为100的字符串变量s2:tstr2;用类型tstr2定义一个最大长度为20的字符串变量s3:tstr3;用类型tstr3定义一个最大长度为255的字符串变量也可以直接定义字符串变量,其格式为:var 变量名:string ; 变量名:string最大长度 ;例如:var s3:string ; 直接定义了一个string类型的字符串变量 s4:string30 ;直接定义了一个最大长度为30的字符串变量字符串可以像其他数据类型一样进行赋值操作,例如:(1) s1:=ABCDE;(2) S2:=;(3) S3:=S2;赋值时,如果字符串超出了字符串变量的最大长度,则超出部分将被截掉。例如:var a:string5 ;begin a: =ABCDEFG ;变量a实际得到的值是ABCDE,超出5个字符之后的FG被截掉了。字符串类型可以用作函数、过程的参数和返回值,例如:function isEmpty( a: string ) :boolean ;function getsubstr(a:string;m,n:integer):string;字符串类型的数据可以参与关系运算,构成关系表达式,例如:(1) 表达式ABCDEF为假;(3) 表达式FG=FG为真;(4) 表达式HIJK=HI JK为假;(5) 表达式LM为真。字符串可以通过加法来实现连接操作,表达式中的操作数不但可以是字符串类型的常量、变量、表达式,也可以是字符型的常量、变量或表达式。例如:program lx ;var a ,b : string ; ch : char ;begin a: =AB ; ch: =C ; b: =a+ch+D+char(69) ; Writeln(b) ;End.这里,a是字符串变量,ch是字符变量,char(69)是字符型表达式。程序输出的结果为“ABCDE”。 在许多情况下,我们需要引用字符串中指定位置的字符。Pascal提供了一种类似于数组的引用

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论