登录 用户中心() [退出] 后台管理 注册
   
您的位置: 首页 >> 程序员学前班[不再更新,只读] >> 主题: 二、   数据、表达式、赋值语句及输入输出     [回主站]     [分站链接]
标题
二、   数据、表达式、赋值语句及输入输出
clq
浏览(0) + 2004-11-06 09:51:38 发表 编辑

关键字:

二、   数据、表达式、赋值语句及输入输出
  在Delphi中,一个程序所用到的每个常数、变量和函数标识符都或隐或显地与一种数据类型(简称类型)相联系。每种数据是由一组值和能在这组值上进行运算的一组运算符组成的。例如在字长为2个字节的计算机中,预定义的integer(整型)是由-32767到32767的所有整数及能在这些值上进行运算的运算符+、-、*、DIV、MOD组成的。因此,类型既规定了与该类型相联系的常数、变量和函数标识符的取值范围,也规定了对它们能执行的运算。
  常数的类型是由该常数本身隐含的,如:5的类型是标准类型integer。3.14159的类型是标准 real。变量标识符和函数命名符的类型是在程序的说明部分显式地说明的。
  Delphi中类型可分为三大类:标量类型、结构类型及指针类型。具体划分如下图:

clq
2005-2-26 15:17:37 发表 编辑

[图片]
图2-1 数据类型的分类

clq
2005-2-26 15:20:25 发表 编辑

如图2-1所示,PASCAL语言的数据类型极为丰富,共有十一具体的类型.本章将介绍整型、实型、字符型和布尔型这四种预定义的标准类型。其它类型将在以后各章叙述。


2.      1数及常数说明

在程序中可出现一些在程序执行前就已知的常数值,如:78,-5.63,‘a’,true等。下面叙述4种标准类型的常数。

(一)      整型常数
整型常数是带或不带符号(+或-)的数字串。如
    6   -13   +7800 0
都是整数,而
  7.3   -0.0   15,000
都不是整数。前两个是实数,最后一个数中的逗号是非法的。

(二)      实型常数
实数有两种表示法。一种是习惯写法,如
  0.0   +0.965   -74.6   890
都是实数。实数的另一种写法是科学表示法(即指数形式),规则是在一个习惯写法的实数后面接字母E再后接一个整数。如
  6.25 E+08 (=6.25×108)
  -51 E-1   (=-51×10-1)
  0 E 0   (=0×100)
  0.6378 E 2(=0.6378×102)
都是合法的实数。
必须注意的是:在小数点前后必须都有数字;在一个实数中除了正负号、数字、小数点及字母E外不能有其它字符;在科学表示法中,字母E前必须有一个习惯写法的实数,E后必须有一个整数;一个整数也可看成是一个实数(如890)。下面是一些非法的实数例:
0.           小数点后面没有数字
.736     小数点前面没有数字
2,765.63   出现一个逗号
E6       字母E前面缺一个实数
5E 1.3     字母E后接一个非整数
.6E3       字母E前的实数出错


(三)字符型常数
一个字符型常数是括在两个单引号之间的PASCAL字符集中的一个字符。如‘a’表示字母a, ‘ ’表示空格字符,‘7’表示数字7,等等。不同的实现方案对PASCAL字符集有不同的定义,但一般都包括:26个大小写的英文字母,10个数字及一些标点符号、运算符号等专用符号。
除了字符型常数外,在程序中还可使用字符串常数。字符串常数是括在引号中的一串PASCAL字符。如:   ‘His name is Li Min’
字符串常数可由字符型数组来表示,用法见第六章。

(三)      布尔型常数
布尔常数只有两个:false 和true
由于PASCAL中除上述四种标准类型的常数外,还有其它类型的常数,如:子界型、枚举型等常数。这些类型的常数的定义将在以后各章中讲到相应的类型时介绍。
在PASCAL中,还可由用户对常数取名,即用一个标识符来代表一个常数。这种常数是在程序的常数说明中定义的。如:
CONST
Pi =3.141593;
Biggest=1000;
Smallest=-biggest;
Blank=’ ’;
Date=’Monday,January 16’;
此常数说明规定pi为实型常数3.141593; Biggest为整型常数1000;smallest为整型常数-biggest(即-1000);blank为字符型常数‘‘;date为字符串常数‘Monday,January 16’。有了这些常数说明后,在程序的后面部分需要出现这5个常数的地方可以用这些相应的常数标识符来代替。
由上例可知,常数说明的语法规则是:
CONST
  <常数标识符>=<常数>;
      .  
      .
  <常数标识符>=<常数>;
其中保留字CONST表示开始一个常数说明。每个常数标识符是程序员选择的标识符。等号后面是该标识符代表的常数值。常数说明之间用分号隔开。一个常数标识符不能与程序中其它任何标识符同名。等号后的常数可以是带符号的前面已说明过的常数标识符(如上例中的-biggest)。在程序执行中不能改变常数标识符的值。
由于字长的限制,对于一个特定的计算机,只能表示整数的有限子集,故PASCAL有一个不必说明的标准整型常数maxint,此常数标识符表示计算机所能接受的最大整数。以16位字长的机器为例,所能接受的最大整数为
  maxint = 216-1-1 =32767
即该计算机的整数取值范围为:
    -maxint ≤n≤maxint
有了常数说明使程序易于修改。我们可程序中将多次出现的同一个常数(如1000)在常数说明中定义为一个常数标识符(biggest),然后在用到此常数的地方用该常数标识符来代替。此后,若程序员要修改此常数时(如从1000改为500),只需修改常数说明中的那个常数就可以了(即改为biggest=500).

2.2 变量及其类型

程序中的每一项数据不是常数就是变量,上面讨论的是常数。变量的值在程序执行中是可改变的。变量是以标识符来取名的。每个变量都具有一个相应的类型,这样就规定了该变量的取值范围及它所能执行的运算操作。程序中所用到的变量必须首先在变量说明段中加以说明,然后才能使用。变量说明段的语法规则是:
VAR
  <变量标识符>:<类型>;
     .
     .
<变量标识符>:<类型>;
其中保留字VAR表示开始一个变量说明段。每个变量标识符表是一个或多个由逗号隔开的变量标识符组成的。冒号后面的类型是标识符或类型说明。每个变量说明之间用分号隔开。如:
VAR
  Age,index,count:integer;
  Y,value:real;
  Condition:bootlean;
  Ch1,ch2:char;
此说明段规定了age,index,count为整型变量;y,value 为实型变量;condition为布尔型变量;ch1,ch2为字符型变量。由图2-1知,PASCAL中除了这4种类型的变量外,还可以有其它类型的变量,如子界型、枚举型、记录型、数组型、集合型、文件型、指针型等。关于这些类型的变量将在以后章节中 讲到相应的类型时介绍。

(一)      整数类型
integer类型的变量的取值范围与整型相同,利用前述的变量说明,我们有
            -maxint ≤age≤maxint

整型量的运算符有:
+(加) ,—(减),*(乘),DIV(除),MOD(取余)
后3种运算符优先于前2种。其中+、-、*的运算法则与一般的算术运算加、减、乘相同,即两个整型量运算得到一个新的整型量。DIV的运算法则是两个整型量相除,略去余数得到整型量的结果,如:
6      DIV 4 =1
3      DIV 5 =0
MOD的运算法则是两个整型量相除取余数,如
6      DIV 4 =2
        3 DIV 5 =3
将整型量作为自变量的标准函数列表如下:其中X为整型量。
函数名   |   函   数   值     |       例
pred(x)   |     x – 1           |   pred(5)=1
succ(x)   |     x + 1           | succ(-3)=-2
abs(x)   |     |x|             | abs(-10)=10
sqx(x)   |     x2             | sqr(-6)=36
odd(x)   | x为奇数时得true         |odd(11)=true,
      |   偶     false       |odd(16)=false
chr(x)   | 序号为x为PASCAL字符   |chr(65)=’A’
一表中字母A所对应的序号为65(见字符类型),true和false 为布尔常数。

(二)实数类型
与整数类型一样,计算机由于受字长的限制,在表示实数时有范围和数度的限制。如对于一个字长为16位的计算机,能接受的实型量的绝对值在1E-38,1E+38之间。当绝对值超过1038时,发生溢出错误;当绝对值小于1038时,则机器认为是零或发生下溢错误。此计算机中的实型量约有7位十进制有效数字。
实型量的运算符有:
  +(加) ,—(减),*(乘),/(除)
运算法则与一般的运算相同。乘除优先于加减。若一个操作数是实数,另一个操作数是整数时,则在操作前自动地将整数转换成实数,如计算
      (6+4)*(1+0.1)
时,先计算左边括号中的表达式
      (6+4)=10(整数)
再计算右边括号中的表达式
      (1.0+0.1)=1.1(实数)
最后计算乘法
      10.0*1.1=11.0(实数)
除法的两个操作数可以是整数或实数,若为整数时与整除DIV不同,其运算结果仍为褛,如:
13      DIV 5 = 2
而 13 / 5 = 2.6
将实型量人作为自变量的标准函数列表如下,其中X为实型量。
    函数名   |   函   数   值     |       例
abs(x)         |     |x|             |   abs(-5)=5
sqr(x)         |     x2             | sqr(-3)=-9
sin(x)         |     sinx           | sin(1.570796)=0.999999
cos(x)         |     cosx           | cos(3.1415926)=-0.999999
arctan(x)       |     tg-1x             |   arctan(1.0)=0.785398
ln(x)         |     lnx           |   ln(2.1)=0.7419373
exp(x)         |     ex      | e0.7419373=2.1
sqrt(x)         |     √x           | sqrt(1.44)=1.2
trunc(x)       |   x有整数部分       | trunc(7.12)=7, trunc(-7.2)=-7
round(x)       |   最接近的X整型量     | round(7.48)=7, round(-7.61)=8
前八个函数的自变量也可是整型量。

  (三)布尔类型
boolean型量只能取两个值:true, false.
有三种布尔运算符,按它们操作的优先次序排列为:
    NOT,AND,OR

clq
2005-2-26 15:22:04 发表 编辑

[图片]
.......

clq
2005-2-26 15:24:23 发表 编辑

由于布尔类型是有序类型,故它的两个值false和true是有序的,false的序号为0,true的序号为1。因此,当X的值为true时只有前趋值而无后继值,即pred(x)=false,pred(false)是无意义的。当X的值为false 时只有后继值无前趋值,此时succ(x)=true,succ(true)是无意义的。
除了上述三个标准函数外,还有两个标准函数的值是布尔值,它们是eof(f)及eoln(f),自变量f是文件名,若输入文件是标准文件input时,则自变量可省写。标准文件input一般是指输入数据来自于终端键盘。这两个标准函数的值在用read 语句开始读文件时均为false,当读到一个行结束符时,eoln为treue,后继的read语句将读入文件下一行的数据,当读到该文件结束时,eof为true 。此后若要继续读文件中的内容,将出错。关于文件及这两个函数的具体应用将在第八章中讨论。



(四)字符类型
字符类型的变量与字符型常数一样,取值范围是PASCAL字符。字符类型是一种有序类型,字符集中的字符是有序排列的,即每一字符有一个相应的序号。如对于采用ASCII字符编码系统的PASCAL字符集,有如下对应关系:

     字 符          序  号
      .      .
     .      .
     .      .
     ‘0’            48
     ‘1’            49
     ‘2’            50
     .            .
     .      .
一般而言,在一个PASCAL字符集中,数字‘0’,‘1’,…‘9’总是由小到大连续排列的;字母‘a’,‘b’,…‘z’也是依次连续排列的。它们的序号之间具有如下关系:
‘0’<‘1’<…<‘9’
‘a’< ‘b’<…<‘z’
因此,对字符型的量可使用的运算符是关系运算符:
<(小于),<=(小于等于),=(等于),<>(不等于),>(大于),>=(大于等于)若这些运算符两边的字符型量满足该运算符所定义的关系,则运算结果是true,否则得false。如:
‘b’<‘h’   得 true
‘1’=’ ’     得 false
以字符型量为自变量的标准函数列表如下,其中X为字符型量。

———————————————————————————
函 数 名 |  函 数 值  |    例
———————————————————————————
 ord(x)     |   x的序号    |   ord(‘z’)=65
pred(x)   |   x的前趋值     |   pred(‘u’)=’t’
succ(x)   |   x的后趋值     |   succ(‘h’)=’i’
———————————————————————————
标准函数ord的自变量是字符型,函数值是该字符的序号,故是一个整型量,若ch1和ch2是两个字符型变量,且   ch1<ch2
则必有         ord(ch1)<ord(ch2)
必须注意,对于大多数计算机系统, ord(‘0’)≠0,所以我们不能把一个数字字符(如‘7‘)直接用ord函数转换成相应的数(如7)。正确的转换可用下列方法进行:
     ord(‘7’)-ord(‘0’)=7
在叙述整数类型时,我们曾提到过一个以整型量为自变量有标准函数chr,它是ord的逆函数,即它的函数值是以整型自变量的值为序号的那个字符。故显然有:
      chr(ord(‘g’))=’g’
关于pred和succ两个函数,需注意的是:对于字符集中的第一个字符。Pred函数无意义;对于字符集中的最后一个字符,succ函数无意义。
2.3   表达式及赋值语句

上一节我们叙述了四种标准类型的常数。变量以及标准函数的取值范围和在这些类型上所能执行的运算符。现在我们将在此基础上叙述表达式和如何用赋值语句来改变变量的值。
表达式是由常数、变量、函数、运算符及圆括号内的表达式组成的。一个常数,一个变量或一个函数都可看成是一个表达式。表达式代表一个值,根据此值的类型,可分为:算术表达式,字符表达式及布尔表达式。

(一)算术表达式
算术表达式是由整型或实型的常数、变量、函数、算术运算符及圆括号内的算术表达式组成的。它代表一个数值(整型或实型)。算术运算符按优先顺序列为:
    * ,/ , DIV , MOD
    + ,-
一个表达式的运算顺序是先算圆括号内的表达式。优先级相同的运算符,按自左至右的顺序进行计算。
若有如下说明
CONST
Pi=3.141593;
VAR
  a,b:integer;
  r,x,y:real;
则可有如下算术表达式:
     5.83.a,round(x+y),x*(-y)
      4/3*pi*sqr(r)*r,a+b/(5.8-r/(x+y))
由这些例子可知,在写算术表达式时,应注意如下问题:
(1)一个实型或整型的常数,变量及函数可以看成是一个表达式。
(2)函数的自变量可心是一个表达式,如round(x+y).
(3)要注意运算的优先顺序,如4/3*pi*sqr(r)*r,a+b/(5.8-r/(x+y))相应的算式是4/3πr3,而不是4/(3πr3)
(4)必要的地方必须加括号,且括号必须配对。如为了描述算式
a+ ___b_____     必须写成a+b/(5.8-r/(x+y))
  5.8 - __r__
     x+y

(5)运算符DIV两边的运算分量必须都为整型量。如:8 DIV x 是错误的,因为x被说明为实型量。
(6)不允许连续出现两个运算符,如x*y-y是非法的,必须写成x*(-y).

(二) 字符表达式

字符表达式是一个字符型常数或一个字符型变量或字符型函数。
若有如下说明
CONST
blank=’ ’;
VAR
  ch:chr;
  number:integer;
则以下都是字符表达式:
‘a’,blank,ch,chr(number+1)

(三) 布尔表达式
在叙述布尔表达式之前,先介绍关系式。在节2。1中叙述字符类型时,我们曾给出过关系运算符。所谓关系式是:一个关系运算符联接两个算术表达式或两个字符表达式。关系式代表一个布尔值,若关系式成立则为true,关系式不成立,则为false。
若有以下变量说明:
VAR
i,j,k:integer;
x,y:real;
b:Boolean;
ch1,ch2:char;
则可有如下关系式: 
         I+j<x ,   x/y*y=x,   ch1<>ch2 ,b > false
由这些例子可知,在写关系式时应注意如下问题:
(1)关系运算符两边的表达式的值可以是任何标量类型。上例中四个关系式两边的表达式的值分别是我们已学过的4种标准类型。除了整、实型可在关系运算符两边混合出现外,在一个关系运算符的两边不能出现不同的标准类型。关于另两种标量类型(子界型及枚举型)组成的关系式,将在叙述此两种类型时再介绍。
(2)在判别两个实型量是否相等时应特别注意。如上例中x/y*y=x可能永远不能得true值。
(3)尽管不常用,但可心判别两个布尔量的大小。因为布尔类型是有序类型,false的序号为0,true的序号为1,故仅当b的值为true时,关系式b>false的值才为true.
布尔表达式是由布尔常数、布尔型变量、布尔型函数、关系式、布尔运算符及圆括号内的布尔表达式组成的。它代表一人布尔值。因此,若利用前面的变量说明,下面所使列出的都是布尔表达式:
false , b , eof , truec(x)<k , (x<0)OR((I<>0)AND b)
布尔运算符的优先顺序是NOT,AND,或OR,在一个布尔表达式中可能同时出现算术运算符、关系运算符及布尔运算符,此时各种运算符的优先次序为:
NOT
* ,/ ,DIV ,MOD ,AND
+ ,- , OR
< ,<= , = ,<> , > ,>=
同级的运算符按自左至右的顺序运算,括号内的表达式先算。由于关系运算符的优先级最低,因此一般而言,在一个布尔表达式中将关系式用括号括起来是必要的。如要判别坐标点(x,y)是否落在如图2-2所示的正方形之内单位圆之外的阴影部分。

clq
2005-2-26 15:26:06 发表 编辑

[图片]
图2-2 阴影部分

clq
2005-2-26 15:27:24 发表 编辑

可用如下布尔表达式来判别:
(-2<x=)AND(x<2)AND(-2<y)AND(y<2)AND(sqr(x)+sqr(y)>=1)
若此布尔表达式的值为true,表示点(x,y)落在图2-2的阴影部分;若为false,则点(x,y)落在阴影部分之外。
下面再举一例来说明布尔表达式的运算次序。
设I=1,j=0,x=2,y=2,考察下列布尔表达式的运算次序及最后所得到的值。(圆圈中的数字表示运算次序)。

clq
2005-2-26 15:28:59 发表 编辑

[图片]
...

clq
2005-2-26 15:29:54 发表 编辑

  上面我们叙述了表达式,将一个表达式的值赋给一个变量可改变该变量的值。赋值语句的一般形式为:
<变量>:=<表达式>
若有说明
CONST
blank=’ ’;
VAR
a,b:real;
ch:chr;
c:boolean;
i,j:integer;
则可有以下一些赋值语句;
a:=3.5*b+ord(ch);     将表达式3.5*b+ord(ch)的值赋给变量a
j:=j+1;           变量j的值加1作为j的新值
b:=I;           整型变量I的值自动转换成实型后赋给实型变量b
ch:=blank;         将字符常数’ ’赋给变量ch
c:a>b;           若a>b则c取true,否则c取false
写赋值语句时一个必须注意的问题是:赋值号两边的类型必须赋值相容。关于赋值相容的概念将在第六章中叙述。就已经学过的四种标准类型而言。一般赋值号两边的类型应相同,但有一例外是:若表达式的值为整型时,它可自动转化成实型后赋给一个实型变量,如上面第3个语句。一个实型的值不能赋给整型变量。
最后,作为一个例子,请读者自行考察执行下列三个赋值语句后,变量a,b的值有变化:
a:=a+b;
b:=a-b;
a:=a-b;

2.4 关于输入输出

本节将讨论如何将数据从标准输入文件input输入到变量中,以及如何将变量中的数据输出到标准输出文件output中去。关于变量与一般的PASCAL文件之间数据的输入输出问题将在第八章讨论文件中叙述。
在1.3节中,我们曾介绍过在PASCAL程序的首部有参数input和output,即这里input和output是两个预定义的标准文件,表明该程序的输入数据是从标准文件(一般指终端键盘或卡片上)读入,计算结果将输出到标准文件output(一般指显示终端或打印机)上。
有两种形式输入语句:
read (<输入元表>)
readln (<输入元表>)
其中输入元表是一串由逗号隔开的变量标识符。
Read语句执行时将从read中依次读入一串数据到相应的变量中去。如;
Read(x,y,z);
表示从终端键盘或卡片读入三个数,并把它们依次存放到变量x,y,z中去。
Readln语句的作用与read语句不同之处是:在读input文件时,将当前行中的一串数读到相应的变量中去,然后自动跳过行结束符,以后再执行输入语句时,将从下一行的第一个数据开始读入。如在input文件中有如下两行数据:
第一行:15, -0.83 ,36
第二行: a
则执行语句
readln (x,y);
read (ch)
将15读入x,-0.83读入y,然后跳到下一行,将字符型常数’a’,读入字符型变量ch。此时,第一行中数据36被跳过了。
又如,程序中有下列输入语句
readln(x,y,z);
readln(m,n,p);
read(r,s);
若输入数据是这样安排的:
第一行:234 746 932 836
第二行:65 76
第三行:801 402
第四行:142 329
则在执行了上述输入语句后,数据的分配如下:
    x      234   y      746  z   932
    m   65     n      76   p      801
    r      142      s            329
可见,执行第一个readin(x,y,x)语句后,第一行的前三个数据分别赋给x,y,z三个变量。执行第二输入语句时,是从第二行开始读入数据的。但因第二行只有两个数据,所以,第三行的801赋给变量p。在执行第三个输入语句时,则从第四行读入两个数据。其中,第一行的836和第三行的402都被跳过了。
相应于输入语句,PASCAL中也有两种不同形式的输出语句
write<输出元表>
wirteln<输出元表>
其中,输入元表是一串由逗号分隔的表达式。数值常数、字符串常数、有确定值的变量、算术及布尔表达式等都可作为输出元。
Write语句的功能是将各输出元依次输出到标准文件output中(显示终端或打印机上)。Writeln语句的作用除将各输出元输出外,还在最后一个输出元之后自动送一个行结束符到output文件上(即自动换行),以后再遇到输出语句时,将输出到下一行去。
读者和用户所关心的问题是如何控制输出打印的格式,以便得到一张清晰的符合要求的输出报告。PASCAL语言中有两种格式控制,一种是系统规定好的标准格式,各个编译系统在地规定好了各种不同类型的输出元所占据的输出位置。例如,某编译系统规定整型值占据的打印宽度(也称域宽)为10;实型值占据的打印宽度为14。若有I,j为整型变量;a,b为实型变量。且I=173, j=-3,a=-0.7169,b=1538.93,则语句
write(b);
write(i)
的输出形式为(其中’└┘’代表一个空格)
└┘└┘0.153893E+04   └┘└┘└┘└┘└┘└┘└┘173

    14个 格位       10个格位
应当指出,不同的编译对标准域宽有不同的规定,读者应查阅有关手册。对于字符型输出元以及字符串常数,则都按标准PASCAL的规定:每个字符占据一个输出位置,字符,串常数,包括在单撇号内的字符全部按原样打印输出。例如,变量ch为字符型,且ch=’p’,则语句
write(‘└┘The character is └┘’ch)
输出如下内容:
The charater is p
另一种是带域宽控制的输出语句,其形式为:
      write(e:m)
其中,e为输出元,冒号后面的m是整型表达式,表示输出元e所占据的输出域宽。例如,上述例中的各输出元若用下列语句
write(b:16);
write(I:8,ch:4)
由输出结果为
└┘└┘└┘└┘0.153893 E+04 └┘└┘└┘└┘└┘178└┘└┘└┘?

16个格位       8个格位   4个格们
又如,语句
write(‘The results are as follows:’);
writeln;
writeln(‘I=’,I:1,’:5,’j=’,j:1);
writeln(‘I+j=’,I+j)
输出如下3行结果:
The results are as follows;
I:=173└┘└┘└┘└┘└┘j=-3
I+j=└┘└┘└┘└┘└┘└┘└┘170
对于实型输出元,上述例中皆以指数形式输出。若希望用带小数点的十进制形式 ,并控制小数点后的数位,可用下述形式的输出语句
write(eral:m:n)
其中 ereal为实型输出元,m为该输出元占据的总域宽,n为小数点后面数的位数。例如,实型量a=-0.7169,则语句
write(a:12:5)
输出结果为└┘└┘└┘└┘-0.71690
由这些例子可知:
(1)输出数据是根据域宽向右靠齐的。
(2)输出整数时,若域宽小于该整数所需的位数时,则域宽自动改为所需的格位数。
(3)若需输出一个空行,可用不带输出元表的writeln语句。
(4)若需输出n个空格,可用输出元‘ ’:n.
最后给出几个完整的PASCAL 程序例子作为本章的结束。
例2-1根据输入的半径计算圆的周长和面积
PROGRAM circle(input,output);
CONST
Pi=3.141593;
Width=10;
Prec=4;
VAR
R,area,circuit:real;
BEGIN
Write(‘Please enter the radius:’);
Readln(r);
Circuit:=2*pi*r;
Area:=pi*sqr(r);
Writeln(‘circuit=’,circuit:width:prec);
Writeln(‘area=’,area:width:prec);
  END
  由于程序运行时操作员无法知道程序何时输入数据,故一般在输入语句前放一个输出语句,输出一些操作员打入数据的信息。如本程序中的第一个输出语句(为节省篇幅,在本书以后的程序例中,一般不插入这类输出)。当操作员在终端显示上见到提示信息 Please enter the radius:时,即可在键盘上打入半径的数据,后接一个行结束符(一般是回车键,表示该输入行已结束),后面的输入语句将些数据送入变量r。接着程序将计算周长和面积,并在显示屏幕上输出二行结果:
circuit=└┘└┘XXX.XXXX
area=└┘XXXX.XXXX
  若程序员要改变输出域宽及小数点后的位数时,只需修改常数说明中width和prec的定义。
例2-2 编一个程序能查询任一PASCAL字符所对应的十进制序号
PROGRAM inquiring(input,output);
VAR
Ch:char;
BEGIN
Write(‘What is the character you want to inquire?’)
Readln(ch);
Writeln(‘The number of ‘,ch,’is’,ord(ch));
END.
运行此程序时,操作员只要在提示信息的问号后面打入所需查询的字符和一个回车键,程序将结果输出到终端显示上。如:
The number of a is 97
例2-3 将形式为0.XXXXXXX的输入数据分隔成3个整数:小数点后的第1、2、3位组成一个整数送变量I;第4、5、6位组成一个整数送变量j;最后一位送变量K。输出这三个整数。
PROGRAM separate(input,output);
CONST
Ten=10;
VAR
I,j,k:integer;
Number,temp:real;
BEAIN
Read(number);
Temp:=sqr(ten)*ten,
Number:=number*temp;
I:=trunc(number);
Number:=(number-I)*temp:
J:=trunc(number);
K:=round((number-j)*ten+0.1);
Write(‘I=’,I:3,’ ’:5,’j=’,j:3,’ ’:5,’k=’,k:1);
END.
由于实型量在计算机中不能被精确地表示,因此变量number中最后一位数字存在误差,如实数0.2145783输入后可能被表示成0.214578299… 或0.21457831。故程序中最后一个赋值语句是为了保证K值的正确性而这样处理的。此时,对于输入数据0.2145783将输出如下结果:
I:=214   j=578   k=3

clq
2005-2-26 15:32:12 发表 编辑

习题二

1.Delphi语言中有哪些数据类型?怎么分类?
2.下列数据哪些是整数?哪些是实数?哪些是非法的?(若计算机字长为16位)
256   2.500   1E+06   2.2E5   0.367E-5
-678   0.0   E-3   32768   2.0E65
0.01E-40
3.确定下列各常数、表达式的类型和值。
  'A' '3' 3   6/12   6 DIV 2   105 MOD 10   round(17/3)
  trunc(17/3)   sqrt(ord('2')-ord('0'))   sqr(ord('2')-ord('0'))
4.将下列公式表示为Delphi表达式。
(1)-(a3+b3)*y4
(2)sin2(x+0.5)+3cos(2x+4)
(3 ) u0(1-e-0.58)
(4 ) 5+B
  A+6 -C*d
  B+5
(5 ) p*i(1+i)2
  (1+i)2-1
5.下列常量、变量定义中哪些是合法的?哪些是非法的?
CONST
  alfa=0.5005;   c='ABC';   D:=2;
  p=5+0.035;     pi=3.14159
VAR
  1A, B2, 3C:char;
  3m,n,I:integer;
  b1,c3:Boolean;
6.指出下列程序中的错误,并改正之。
PROGRAM(input,output);
VAR
  X,y:real;
CONST
  X:=3.5;
  A:2.2+3.5;
BEGIN y:=x+z;
    Write(A,x,y)
END.
7.已知摄氏度与华氏温度的换算关系式
    C=5/9(f-32)
编写一程序求华氏度为 30,70,100,150 度时的摄氏温度。
8.已知地球半径为6371.0km,编写一程序计算地球表面积的近似值,并打印输出地球半径,Л的近似取值、地球表面积等项。
9. 编写一程序打印下列图案

     *   *      *
                 *   *      * *
     ******               *   *
        *   *               *     *
     *   *               * * * * *
10.已知三角形三条边a,b,c 求三角形面积的公式为
F=√s(s-a)(s-b)(s-c)   其中s=(a+b+c)/2
编写一程序读入a,b,c 的值,计算出三角形的面积F,并打印输出三条边长及面积的积。

clq
2005-2-26 15:42:52 发表 编辑

[clq注释:这些习题来自pascal,其中有一些已经与Delphi距离太远了,以后我再修改]

总数:11 页次:1/2 首页 下一页  >>  尾页  
总数:11 页次:1/2 首页 下一页  >>  尾页  


所在合集/目录



发表评论:
文本/html模式切换 插入图片 文本/html模式切换


附件:



NEWBT官方QQ群1: 276678893
可求档连环画,漫画;询问文本处理大师等软件使用技巧;求档softhub软件下载及使用技巧.
但不可"开车",严禁国家敏感话题,不可求档涉及版权的文档软件.
验证问题说明申请入群原因即可.

Copyright © 2005-2020 clq, All Rights Reserved
版权所有
桂ICP备15002303号-1