开域语句 在程序中对记录进行处理时,经常要引用同一记录中不同的域,每次都按6.4.1节所述的格式引用,非常乏味。为此Pascal提供了一个with语句,可以提供引用域的简单形式。 开域语句一般形式: with <记录变量名表> do <语句> 功能:在do后的语句中使用with后的记录的域时, 只要直接写出域名即可,即可以省略图10.2.2中的记录变量名和"."。 说明:①一般在with后只使用一个记录变量名。如: write("Inputyear:"); readln(x.year); write("Inputmonth:"); readln(x.month); write("Inputday:"); readln(x.day); 可以改写成: withx do begin write("Inputyear:");readln(year); write("Inputmonth:");readln(month); write("Inputday:");readln(day); end; ②设x,y是相同类型的记录变量,下列语句是非法的: withx,y do...; ③with后接若干个记录名时,应是嵌套的关系。如有记录说明: varx:record i:integer; y:record j:0..5; k:real; end; m:real end; 可以使用: withx do begin read(i); with y do read(j,k); readln(m); end; 或简写为: with x,y do readln(i,j,k,m); 9、字符、字符串类型的使用 (一)字符类型 字符类型为由一个字符组成的字符常量或字符变量,字符常量定义: const 字符常量="字符"; 字符变量定义: Var 字符变量:char; 字符类型是一个有序类型, 字符的大小顺序按其ASCⅡ代码的大小而定,函数succ、pred、ord适用于字符类型,例如: 后继函数:succ("a")="b" 前继函数:pred("B")="A" 序号函数:ord("A")=65 【例1】按字母表顺序和逆序每隔一个字母打印,即打印出: ac e g I k m o q s u w y zx r v t p n l j h f d b 程序如下: programex8_1; varletter:char; begin forletter:="a" to "z" do if(ord(letter)-ord("a"))mod 2=0 then write(letter:3); writeln; forletter:="z" downto "a" do if(ord(letter)-ord("z"))mod 2 =0 then write(letter:3); writeln; end. 分析:程序中,我们利用了字符类型是顺序类型这一特性,直接将字符类型变量作为循环变量,使程序处理起来比较直观。 (二)字符串类型 字符串是由字符组成的有穷序列,字符串类型定义: type <字符串类型标识符>=string[n]; var 字符串变量:字符串类型标识符; 其中:n是定义的字符串长度,必须是0~255之间的自然整数,第0号单元中存放串的实际长度,程序运行时由系统自动提供,第1~n号单元中存放串的字符,若将string[n]写成string,则默认n值为255。 例如:type man=string[8]; line=string; var name:man; screenline:line; 另一种字符类型的定义方式为把类型说明的变量定义合并在一起。 例如:VAR name:STRING[8]; screenline:STRING; TurboPascal中,一个字符串中的字符可以通过其对应的下标灵活使用。 例如:var name:string; begin readln(nsme); fori:=1 to ord(name[0]) do writeln(name); end. 语句writeln(name)输出name串中第i个字符。 【例2】求输入英文句子单词的平均长度 程序如下: programex8_2; var ch:string; s,count,j:integer; begin write("Thesentence is :"); readln(ch); s:=0; count:=0; j:=0; repeat inc(j); ifnot (ch[j] in[":",",",";","""","!","?",".",""]) then inc(s); ifch[j] in[" ",".","!","?"] theninc(count); until(j=ord(ch[0]))or (ch[j] in [".","!","?"]); ifch[j]<>"." then writeln("It is not a sentence.") elsewriteln("Average length is ",s/count:10:4); end. 分析:程序中,变量s用于存句子中英文字母的总数,变量count用于存放句子中单词的个数,ch[j]表示ch串中的第j个位置上的字符,ord(ch[0])为ch串的串长度。程序充分利用TurboPascal允许直接通过字符串下标得到串中的字符这一特点,使程序比较简捷。
|