writeln(' $$$'); writeln('$$$$$'); end.
第三节 表达式与标准函数
一、算术运算符与算术表达式 1.算术运算符
常用的有以下6个算术运算符:
+(加)、-(减)、*(乘)、/(实数除)、DIV(整除)、MOD(求余)
其中,/(实数除)得到结果为实型,如5.0/2.0=2.5, 4/2=2.0,DIV(求两个数相除后的整数部分),它要求除数和被除数均为整型,结果也为整型,如10 DIV 2=5,5 DIV 10=0,-15 DIV 4=-3,DIV运算只取商的整数部分,参与DIV运算的两个对象不能为实型。mod (求两个数相除后的余数部分)也只能用于整数运算,结果为整数,例如:10 mod 4=2,-17 mod -4=-1,4 mod (-13)=4。
2.算术表达式
在Pascal语言中,算术表达式的意义为:所有符合Pascal语法规则的数值型运算对象(数值型常量、变量、函数)、运算符、圆括号所组成的有意义的式子。
表达式的结果可按标准类型分成算术表达式(运算结果为整型/实型)及布尔表达式(运算结果为布尔型)。
3. 关系运算符和关系表达式
由一个关系运算符将两个类型相容且有序的表达式连结起来的式子,称之为关系表达式,其结果为布尔型(真true或假false)。这里用到的Pascal语言中的关系运算符有:
>(大于) =(等于) <(小于) >=(大于等于) <=(小于等于) <>(不等于)
共六个。
4. 布尔运算及布尔表达式 (1)布尔常量和变量 在Pascal语言中,布尔运算又称为逻辑运算,布尔值也称为逻辑值,它有“真”与“假”两个,分别用“TRUE”与“FALSE”这两个布尔常量来表示的。用来存放逻辑值的变量称为布尔变量,它的作用就是存放一个布尔常量。当然,布尔变量也必须先定义后使用。
例如:VAR T,F:BOOLEAN;
在这里,使用BOOLEAN这个标准类型标识符来定义T与F这两个布尔变量。 (2)布尔运算
布尔运算有三个运算符:Not(逻辑非)、And(逻辑与)、Or(逻辑或)
由一个布尔运算符将两个类型相容且有序的表达式连结起来的式子,称之为布尔表达式。
在一个既包括有布尔运算符,又有关系运算符的表达式中,它们的运算次序为: 1)括号 2)函数
3)NOT(逻辑非)
4)*、/、DIV、MOD、AND 5)+、-、OR
6)>、=、<、>=、<=、< > (3)布尔型数据的输入与输出
在Pascal的程序中,只能通过赋值语句给布尔型变量赋值,不能用READ语句输入一个布尔常量,但可以用write或writeln语句直接输出布尔变量和布尔常量的值。
例1-5 判断程序运算结果 program aa;
var a,b,s,d:integer; L,e,g,f,h,m:boolean;
6 / 53
begin
a:=3;b:=7;
s:=a+b; d:=a div b; L:=a
g:=a>b;f:=e or g;h:=e and g;m:=not h; write('s=',s:5); writeln('d=',d:5); writeln('L=',L);
writeln('e=',e,'g=',g); writeln(f,' ',h,' ',m); end. 【输出结果】
s= 10d= 0 L=TRUE
e=FALSEg=FALSE FALSE FALSE TRUE 二、标准函数
Pascal预先定义了很多种标准函数,其调用格式如下: 变量名:=函数名(自变量参数); 1.算术函数
算术函数可以直接参与算术运算,函数的自变量和函数的类型均为数值型。 函数名函数标识符 自变量类型 结果类型 说明 称 绝对值 abs(x) 整型、实型 同自变量 求X的绝对值 平方 sqr(x) 整型、实型 同自变量 求X的平方 平方根 sqrt(x) 非负整型、非负非负实数 求X的平方根 实型 x指数 exp(x) 整型、实型 实型 相当于EXP(X)=e(底数为e) 自然对ln(x) 整型、实型 实型 求X的自然对数(底数为e) 数 算术函数使用注意事项: (1)绝对值函数abs(X)与数学中的意义功能相同,如:abs(7.1)=7.1,abs(-16)=16
2
(2)平方值函数sqr(X)即求X值,如:sqr(5)=25
n
(3)在Pascal语言中,若要计算y=X,可以用y=exp(n*LN(x))来表示。
X意义功能相同,运算时要求自变量X>=0。如
果要计算3X的值,那只能借助其它方法了。如: 3X=exp(1/3*LN(x))。
(4)平方根函数sqrt(X)与数学中的
(5)指数函数exp(x)与对数函数LN(x)是一对逆函数。与数学中相应函数的区别在于它们都是以自然对数e(e?2.71828)为底。
2
例如:exp(2)即求e=2.71828*2.71828?7.3890461 反过来,LN(7.3890461)=2 附:对数的定义:
假定a是一个不等于1的正实数(即a?1且a>0),对于正实数b(即b>0),如果存在一个实数c,满足a?b 这样的关系式,那么我们说”c是以a为底,b的对数”。并以数学符号logab?c来表示此意义。(注:以a为底 , b的对数”,其中a叫作logablogab读作”的”底”, b叫作logab的”真数”)
c 2.转换函数
7 / 53
转换函数的功能是可以根据需要将数据类型进行转换。 函数名 函数标识符 自变量函数值类说明 类型 型 截尾 trunc(x) 实型 整型 取x的整数部分 舍入 round(x) 实型 整型 对x四舍五入后取它的整数部分 序号 ord(x) 整型、 整型 求x对应的序号 字符型、布尔型 字符 chr(x) 整型 字符型 求x对应的字符 转换函数使用注意事项:
(1)截尾函数trunc(x)可以将实数型自变量x的小数部分截去,函数值为整数。如:trunc(17.8)的值为17,trunc(-6.41)的值为-6。
(2)舍入函数round(x)是将实数型自变量x的小数部分四舍五入,取它的整数部分。如: round(17.8)的值为18,round(-6.1)的值为-6。
(3)当序号函数的自变量为字符时,函数值为该字符的 ASCⅡ码,当自变量为整型数据时,则ord(x)的值为自变量本身,当自变量为BOOLEAN 时,Pascal中规定:FALSE的序号为0,TRUE的序号为1。如:ord('A')=65,ord('a')=97,ord('0')=48,ord(68)=68,ord(FALSE)=0,ord(TRUE)=1。
序号函数ord(x)与字符函数chr(x)的功能相反,它们是一对逆函数。如:chr(ord('A'))= 'A',ord(chr(96))=96。
3.顺序函数 函数名称 函数标识符 自变量类型 函数值类说明 型 前趋 pred(x) 整型、 整型、 求x的前一个数据 字符型、 字符型、若x是第一项,则函数无意义 布尔型 布尔型 后继 succ(x) 整型、 整型、字求x的后一个数据 字符型、 符型、布若x是最后一项,则函数无意义 布尔型 尔型 顺序函数使用注意事项: (1)前趋函数pred(x)和后继函数succ(x)是一对逆函数。如:pred(succ(x))=x,succ(pred(x))=x。
(2)顺序函数的自变量x必须是一个有顺序的数据类型,如实数型的数虽然能比较大小但无法确定x前一项和后一项到底是什么数,所以实型数没有前驱和后继。
(3)当自变量x为数据第一项时,它没有前驱,如pred(FALSE)无意义;当自变量x为最后一项时,它没有后继。如succ(TRUE)无意义。
4.逻辑判断函数 函数名称 函数标识自变量类函数值类型 说明 符 型 奇函数 odd(x) 整型 布尔型 判断x的奇偶性 奇函数使用注意事项: 奇函数的值为BOOLEAN类型,即只存在“真”(TRUE)和“假”(FALSE)。如:odd(5)=true,odd(10)=false
8 / 53
第四节 赋值语句、输入与输出语句
一、赋值语句 1.格式:
变量:=表达式;
2.使用说明:
(1)该语句具有先计算后赋值的功能,即先计算出来表达式的值,然后将其值赋给左边的变量或函数标识符,注意:一个赋值语句只能给一个变量赋值。
(2)“:=”称为赋值号,要注意不能与关系运算符“=”混淆,只有在赋值语句中才能使用赋值号,赋值号具有方向性,是将赋值号右边表达式的值计算出来,赋予赋值号左边的变量,所以赋值号的左边只能是变量,并且赋值号两边的类型应该具有赋值相容性,如整型的值可以赋值给实型变量,反之则不行,字符型可以赋值给字符串型变量,反之也不行。
(3)被赋值的变量本身可以作为因子参与运算,如n:=n-1,i:=i+1,s:=s+x。 例1-6 写出执行下面的程序运行后,变量A、B、C的值。 program a16;
var a,b:integer; c:real; begin
a:=200;
b:=a div 10; c:=a;
writeln(a:7,b:7,c:7:2); end.
二、输入语句(读语句) 1.格式:
read(输入项); 或 readln<(输入项)> 2.使用说明:
(1)执行该语句时,从键盘上(或文件中)读入数据,将其值依次赋给输入项中的变量。注意输入的数据必须是常量,且输入的数据类型必须和变量一一对应。
(2)输入项中的括号内应是一组变量,这里一组的含义是可以为一个,也可以是多个,若是多个时,各变量之间必须用逗号分隔,最后一个没有符号,他们必须在程序说明部分预先说明,他们可以是整型、实型或字符型等数据类型,但不能是布尔型,因为布尔型不可以直接读入。
如:Read(a,b,c,d); 或 Readln(M,N,L);
(3)程序运行后,执行到Read或Readln语句时,系统处于等待状态,等待用户从键盘上输入数据,且当输入项中的变量为多个时,要求输入的相应数据个数不能少于其变量的个数,当输入的数据个数少于变量个数时,系统仍处于等待状态,接着输入的数据无论是换行输入还是不换行输入均有效。
注意:输入数值(整型或实型)数据时,数据间用空格或回车键分隔,最后一定要有一个回车,表示输入结束;输入字符型数据时,数据间不能用空格分隔,可以连续输入(不用空格)或用回车键一个一个字符分隔输入。
(4)READ与READLN的区别:
read语句是一个接一个地读数据,在执行完本Read语句(读完本语句中变量所需的数据)后,下一个读语句接着从该数据输入行中继续读数据,也就是说,不换行。Readln则不同,在读完本Readln语句中变量所需的数据后,自动换行,该数据行中剩余的数据多余无用,并且readln可以不带参数表,即可以没有任何输入项,只是等待读入一个换行符(回车),经常用于暂停程序的运行,直到输入一个回车。
例1-7 设I,J,K是整型变量,现需将30,20,10分别赋给这三个变量,要求写出对应于下列语句的所有可能的输入格式:read(i,j,k);
解:所有可能输入格式如下(注:其中用“□”来表示空格,每一行后均有一个回车,以下均同):
9 / 53
(1)30□20□10 (2)30□20 10 (3)30
20□10 (4)30 20 10
例1-8 设A,B,C是字符型变量,现需将'P','A','S'分别赋给这三个变量,要求写出对应于下列语句所有可能的输入格式:read(a,b,c);
(1)PAS (2)PA S (3)P AS (4)P A S
例1-9 设a,b,c,i,k,j,L,m,n为整型变量,则下面语句的赋值情况是:
Readln(a,b,c);
Readln(i,k,j,L); Readln(m,n); 输入数据: 1□2□3□4□5 6□7□8□9□0 10□20
读入结果为:
1□2□3(分别对应a,b,c,后面的4,5被忽略) 6□7□8□9(分别对应i,k,j,L,后面的0被忽略) 10□20(分别对应M,N) 三、输出语句(写语句) 1.格式:
write(输出项) 或 writeln<(输出项)> 2.使用说明:
(1)执行该语句时,按指定的格式将输出项的内容输出。
(2)输出项中括号内的项目内容可以是一组常量、变量、表达式或字符串,一组的含义是可以为一个,也可以是多个,若是多个时,各输出项之间必须用逗号分隔,最后一个没有符号。
如:WRITE('A+B=',A+B);或WRITELN(3,'*',N,'=',L); (3)输出项中的各个不同项目其输出的结果分别是:
当输出项为常量时,直接输出该常量的值;当输出项为变量时,输出该变量存储单元内的内容,变量允许属于任何一种标准数据类型;当输出项为表达式时,则首先对表达式进行计算,然后输出计算的结果;当输出项为字符串时,原样输出用单引号括起来的字符串中的内容。
(4)Write语句与writeln语句的区别:
write语句将其后括号中的表达式一个接一个输出后,没有换行。而writeln语句则在输出各个表达式的值后换行。
例如以下两个程序段的输出分别为: (1)write(1,2,3,4); write(5,6); 输出为:
10 / 53