首页                    下一页 进制转换                     <<< 返回           1 2 3 4 5

第二章  顺序结构程序设计

 

计算机中进行的各种运算都是由语句来实现的,一个完善的PASCAL程序是由若干语句组成的,一个语句相当于若干条指令,因此正确使用语句的功能来达到预期的目的,是程序设计的关键。

§.2.1 PASCAL语言的语句

PASCAL语句分为两大类:基本语句和构造语句

语句

说明:

1.          基本语句是一个简单的语句,在这类语句中不包括另一个句 .

例:a=3;

Write(a);

2.          复合语句是功能较强的语句,在复合语句中还可以包含另一个语句或若干个语句。这一组语句用begin开头,end结束。

Begin

t:=a;

a:=b

b:=t

end.

3.          空语句不使计算机产生任何操作,语句中是空白的,不包括任何内容。

例:a:=10;

         ;

b:=20;

一般情况用不到空语句,在流程转移时往往会用到空语句,作为转向的终点,仅仅起一个过渡的作用。

  Begin

      *

goto 30;

*

   30:

   end.

4.          §2.2  赋值语句。

它是最简单而又最常用的基本语句,作用是对一个变量赋以确定的值。

2.2.1赋值语句的格式:

         格式:   变量:=表达式

   例:     s:=pi*sqr(r)

d:=0

2.2.2  赋值语句的特征.

1)          “:=”称为赋值号,它的作用是将赋值号右边表达式的值赋给赋值号左边的变量.不能与“=”等号混淆,且它只能在赋值语句中才能用赋值号。

[例]:const

          pi:=3.14159

                *

          begin

                 *

           s:=pi*sqr(r);

           all:=all+s;

           n:=n+1;

         if n=100 then write(all);

2)          赋值语句的执行是:“计算(表达式的值),后赋值”赋值语句具有计算和赋值的双重功能。

[例]:s:=pi*sqr(r)

3)          赋值的类型要求,即赋值的相容性。在赋值语句中,一般要求赋值号两边的数据类型相同。

[例]  书P19-20

4)          赋值语句只能将一个确定的值赋值给一个变量,而不将一个未知数赋给一个变量。

在数学上,由于:y=x   x=z  ∴y=z.

在写上面的式子时,x、y、z的值都可以是未知的,这此等式只反映两个变量间的某种关系,而PASCAL中的赋值语句的执行结果。是将一个确定的值

放到内存中该变量所村识的存储单元中去,显然,不能将另一个变量名放到一个数值变量中去,而只能将一个数值放到该变量所标识的存储单元中去。这是一些初学者都容易弄不清楚之处,不要把已赋值语句与代数运算混淆。

[例]:指出下面程序段的错误:

program smple(output);

var

  x,y,z:integer;

begin

  x:=0

  z:=x+y;

 write(z)

end.

§           2.3  输入语句

2.3.1格式

输入语句的作用是读一个数据并把它赋给一个变量。

有两种形式:

read(变量表);

readln(变量表 )

2.3.2     在设计数据输入时应考几个问题:

1)          数据来源。

即是从哪个外部设备输入

一般系统用input参数表示指定数据由键盘输入。

2)输入哪些数据,以及这些数据的类型。

[例]:*

          var a,b,c=red;

          begin

       *

              read (a,b,c);

3)据如何分隔。

在输入时,两个数据之间可以用一个或多个空格分隔,有的系统也可以用逗号分隔。

[例]  1.0  5.0  8.0

  也可以为1 5 8

4)每次输入以一个“数据行”为最小单位,一个数据行可以包含一个或多个数据,以打入一个“回车”

[例]:

   1.0   5.0   8若不回车,则数据并没有输入。

2.3.3     read语句和readln语句

有两种读语句:read和readln。

1.          read语句是一个接一个地读数据。

Readln语句是读完后换行,下一个语句从另一个数据行中取数据。

[例] read(a,b);         readln(a,b);

read(c,d);           readln(c,d);

read(e);              readln(e);

若输入数据如下:

1 2 3 4 5 6

7 8 9 10

11 12

产生结果分别为:

a=1,b=2            a=1 b=2

c=3 d=4             c=7  d=8

e=5                   e=11

2.          如果一个数据行中的数据不足以供应读语句中的变量读数,则接着从下一个数据行读数。

[例]  read(a,b,c);           readln(a,b,c);

read(d,e,f);             readln(d,e,f);

read(g);                 readln(g);

若输入数据如下:

1                                    2

3  4   5   6 

7                                    8  9

产生结果分别为:

a=1 b=2   c=3            a=1  b=2 c=3

d=4  e=5  f=6            d=7   e=8  f=9

g=7                        g=10

3.          read语句必须有输入项,而readln语句可以没有任何输入项。

 即read(变量表);√       read;×

   readln;√

redln的作用是执行一个换行动作.

[例].             readln(a,);

 readln;

       readln(g);

若输入数据如下:

1                                   2   3

  4   5   6 

7  8  9

产生结果分别为:

a=1 b=7  

§           2.4输出语句

2.4.1输出语句的格式:

write(输出项)或 writeln(输出项)

:①输出项可以有一个或若干个;

②输出项可以是常量、变量、表达式。

例:

     write(‘how do you do’)—字符串常量

write(2,3,4)—数值常量

write(x,y)—变量

write(i*j*sqr(t))—表达式

2.4.2.write语句writeln语句

这两个语句大体上相同,只在输出的格式上略有差别。

1.                                                        write语句将输出项一项一项地输出,在执行完本语句后,输出并不换行,

     write(a)     

write(b)   2  4  6

write(c)     

writeln语句将输出项一项一项地输出,在执行完本语句后,输出换一行,即自动换行到下一行的开头。

            writeln(a)      2

writeln(b)   4

writeln(c)      6

2.                                                        write语句必须有输入项,而writeln语句可以缺省。

     write(t,u,v);

writeln; ---表示输出一个空行。  

write(a);      2

                writeln;     

writeln(b)   4

writeln(c)      6 

2.4.3输出格式 :

1                                    .标准场宽输出

场宽—输出一个数据所占的列数,即数据所占字符的个数。

标准场宽即是系统会将输出的数据按隐含的预先规定好的格式输出,每一种PASCAL版本给出的标准场宽不尽相同。

TURBO PASCALR的标准场宽如下:

例:write(‘square root of’,a,’ is’sqrt(a))

        若a为整型75。

  输出为:square root of 75 is 8.6602540379e+00

2.指定场宽

(1).单场宽。

  格式:writeln,write(输出项:场宽);

用户可以根据需要指定输出项的场宽。

例:write(‘square root of’:17,a:3’is’,5,sqrt(a))

输出为:   square root of 75  is 8.660E+00

一般说来若指定实数的单元宽,则科学计数法中数字部分的位数由下式决定:

数字长度=指定场宽-4-指数位数

例:如上例中。

Write(sqrt(a):10)

输出应为:10-4-2=4个数字位

∴为: 8.660E+00

注:①在输出时,若输出项的数据位数小于指定的场宽,则数据向右对齐,前补空格。

②若输出项的数据位数大于指定的场宽,则系统自动将场宽调整到与实际位数相同,以保证数据能正确、有效地输出。

例:write(sqrt(a):6)

l输出为: 8.6E+00

(2).双

 

场宽。

        格式:writeln,write(输出项:场宽1:场宽2);

注:①输出项必须是实型的数据,且小数形式表示.

②场宽1表示指定整个数据所占的总宽度,场宽2表示指定输出

实数的小数位数.

:write(sqrt(75):10:4)

输出为:       8.6602.

 

 

第三章                                                        

     program function Y(input, output);

    var

y,x,a:real;

 begin

writeln(‘input a and x:’);

readln(a,x);

if (x<=-a)

  then y:=0;

if (x>-a)and(x<=-a/2)

  Then y:=sqrt(a*a-x*x);

If (x>a/2)

              then y:=x;

     Writeln (‘a=’a,’x=’,x,’y=’,y)

   end.

例四:输入三个整数,放在a,b,c三个变量中,然后把这三个数按由小到大的顺序放在a,b,c中

program order3(input, output);

var

a,b,c,t:integer;

 begin

writeln(‘input a ,b,c:’)

readln(a,b,c);

Writeln (‘a=’a:5,’b=’,b:5,’c=’,c:5)

if a>b

  then begin t:=a,a:=b;b:=t end;

if a>c

  Then begin t:=b,a:=c;c:=t end;

If b>c

 then begin t:=b,b:=c;c:=t end;

Writeln (a:4,b:4,c:4)

end

§                              3.2  IF语句的嵌套

IF语句的语法图中,出现在THEN之后的语句,同样可以是TF语句,这种情况称为IF语句的嵌套.

3.2.1嵌套中ELSE的配对规则.

 

     

   

           

 

可写出以下程序:

         Program signofx(input, output);

 Var

  y,x:read;

 Begin

  Writeln (‘input x:’);

  Readln (x);

  If x>0

Then

    Y:=1

  Else

   If x=0

  Then y: =0

     Else y: =-1;

 writeln(‘x=’,x,’y:=’,y)

End.

虚线框中是内嵌的IF 语句,请注意,最后一个分号既标致9内层IF语句的结束又标志着整个外层IF语句的结束,这个内嵌IF语句是嵌套在外层的ELSE子句中的。其流程见下图,也可以改写为:

If  x>=0

  Then

IF x>0

  Then y:=1

Else y:=0

ELSE

 Y:=-1;

内嵌的IF语句是嵌套在外层的THEN子句中,其流程见下图(B)。

   

能否将它改写为:

y:=0;

IF x>=0

 THEN 

IF x>0

 THEN y:=1

ELSE

    Y:=-1;

编写人企图用它来实现图(C)流程;然后实际上去为图(D)流程。       

问题出在THEN和ELSE的配套关系上。PASCAL规定:ELSE与它上面的距离最近的THEN配对。它与书上写程序时采用的缩进方式无关。

因此在使用嵌套的IF语句时要十分小心,防止出现逻辑上的错误。上例中若要实现原意,则可在内层的IF语句的ELSE的分支中加入空语句来实现。

根据IF语句嵌入的真假分支的不同,可分为以下两类

3.2.2 IF语句嵌套在THEN子句中。

 IF 布尔表达式1

  THEN

IF 布尔表达式2

 THEN

     IF 布尔表达式3

          THEN 语句31

            ELSE 语句32

 ELSE

    语句22

 ELSE

      语句12;

即在外层的THEN子句内嵌入内层IF语句。

注:若内层的IF语句缺少ELSE分支时,为了避免语音逻辑上的混乱,常用以下两种解决方法:

①.                                将内层的IF语句用BEGIN……ELSE括起来:

THEN

BEGIN

     IF(布尔表达式2),THEN (语句21)