第四课  顺序结构程序设计
4.1 赋值语句
4.2 读语句
4.3 写语句
4.4 文件操作
4.5练习与作业
4.1 赋值语句
 PASCAL有两个语句可以改变变量的值。赋值语句是其中之一(另一个是读语句)。
赋值,顾名思义,就是把一个值赋予某个量。可以这理解:变量相当于装东西的容器,赋值的过程就是把东西放进容器的过程。
赋值语句语法格式如下
                    变量:=表达式;

语法说明:
1、 赋值号=
    赋值号由两个字符构成,是一个运算符。如果把这两个字符拆开,那么这两个字符就是别的意思了:是分隔符而=”是关系运算符,判定两个对象是否相等。刚刚写程序的同学要特别注意这一点。
    例:abinteger——是一个说明语句。是变量表和变量类型的分隔符
            a=b——是一个表达式。它的值是一个布尔类型的量:TRUEFALSE
            a=3——是一个语句。把整型常量值3赋给整型变量a
    2、变量要先说明
      在赋值号左边出现的变量,要在程序头的说明部分先加以说明(即先向内存申请相应的存储单元),否则编译时出错。
3、 表达式必须要有确定的值
赋值号右边出现的表达式,可以是一个常量、常量标识符、一个变量、一个函数或一个带运算符的运算式。
当是一个变量时必须是已经赋过值的变量。
当是一个运算式时必须是可以求值的运算式。也就是说,经过运算之后,能得出一个具体的、确定的值出来。大家想一想,如果连表达式自己都不知道自己的值是多少,怎么还能把值赋予别人呢?
4、 一个赋值语句只能给一个变量赋值。有多少个变量需要赋值,就要写多少个赋值语句。以下书写形式是错误的:
a:=b:=1;
a,b,c:=2;
2:=a;
但是 a:=b 是否正确要看你的程序目的,当是把b的值转赋给a时,是正确的,当你是要把a
值转赋给b时,就是错误的。
5、 一个变量可以在程序的不同地方(程序运行的不同时刻)对同一个变量赋不同的值(即变量可以反复、重复赋值),但一个时刻只能保存一个值。因此,当需要对一个变量重新赋值时,必须保证该变量中原来保存的值已经不需要了,否则,一定要另使用其它变量或者将该变量中原来的值进行转存。
6、 累加器、累乘器、计数器变量需要先赋初值。
7、 赋值号两边的数据类型必须相同或相容
我们知道,PASCAL中的量不管是变量还是常量都有一个属性称为数据类型字符串长度不足补空格。数据类型相同的或相容的才可以相互赋值。
先理解数据类型相同:打个比方,我们沏茶用的是茶杯,装饭时用饭碗。如果用饭碗来泡功夫茶,用小茶杯来装饭,那是不可行的。回到PASCAL中来,赋值号左边变量如果是整型,右边表达式的值的类型也要是整型;赋值号左边变量如果是字符型,右边表达式的值的类型也要是字符型……否则的话,也要出错了。这是数据类型相同的情况。
    对于数据类型相容的,我们也可以用一个例子来帮助理解。我们都喝过茶,也喝过大杯茶。把小茶杯茶倒在大茶杯里,一般不会出什么问题;但如果把大杯里的茶倒在小茶杯里呢?可能小茶杯装不下大茶杯里的茶,茶溢出了。在PASCAL中也会出现这种情况。当一种数据类型的取值范围包含着另一种数据类型的取值范围时,就可能出现类型相容的情况。
如:整型与长整型、短整型和整型、字符型和字符串型等,后者可以包容前者。即把前者的值赋给后者的变量是可以的,但是,如果把后者的值赋给前者的变量就会溢出。
另注意:整型的值赋给实型的变量是相容的,反之把实型的值赋给整型的变量就不相容,编译时会通不过而报错。
因些,我们在写赋值语句时,要注意两边的类型是否匹配。这一点初学者经常会犯错误。
    例:有程序如下:
var abinteger
creal
d: longint;
begin
      a=100
      b=a          {-------------以上是相同数据类型进行赋值}
      d=100
      d=b
c: =d;
      c=b          {-------------以上是相容数据类型进行赋值}
      b=d
      a=c
d: =c;         {----------以上两个赋值语句都出现溢出,编译时出错}
end. 
    练习:1、编写一个程序,将a,b两个变量中保存的值相互交换。
4.2读语句
读语句(read语句)和赋值语句一样,能够改变变量的值。
与赋值语句不同,读语句从键盘或文件接收值赋予变量,而赋值语句则直接由程序语句获得。读语句是编程中用得最多的语句之一。
读语句语法格式如下
        read(变量名表)                  I
        readln(变量名表)                II
        readln                          III
    语法说明:
1read是关键字,是读语句语句定义符,和赋值语句没有语句定义符不同。
2、和赋值语句不同,一条read语句中,可以多个变量一起获得值。
3、读语句一般处于程序的开始部分,用于获得程序运行需要的原始数据。
4、变量名表:(a,b,c,……)
(1)写在括号中的变量,都要在变量说明中先预以说明。
(2)变量与变量之间,以,分隔。
(3)变量表只能出现已说明的各类型变量的变量名,不能出现表达式、常量等其它形式的东西。
例:
var a,b:integer;
begin
read(a,b);
……
                      end.
                      var a,b:integer;
                            c,d:real;
                          t:boolean;
                          s:char;
                      begin
                          readln(a,b,t,s,c,d);
                            ……;
                      end.
                    以上形式的读语句使用都是合法的。
                出以下读语句中的错误:
(1) read(a;b;c);
(2) read(a,a+b,c);
(3) read(a,b,2);
(4) read(a,a>b,c);
5、读语句执行过程:
        1)当程序执行到一条读语句时,程序暂停。
2)自动打开数据输入设备。(默认为键盘,也可以通过配合其它语句和命令指向磁盘文件)
3)从数据输入设备中按顺序读入各个常量,再按顺序转赋给变量表中的各个变量。
(注意:1、如果输入设备读入的常量类型顺序与变量表中变量类型顺序不相同或相容,程序将拒绝运行并报错。
2、 如果输入设备读入的常量个数少于变量表中变量个数,程序将继续处于暂停状态,等待数据的继续输入)
4)当键盘作为输入设备时,每一行数据(一行可以一个,也可以多个)输好后必须按回车键才能将数据送入程序。
5)当程序接收到足够的常量并转赋给相应变量后,程序继续运行。
    6、从键盘输入数据时,因为一行可以输入多个常量,要注意各种不同数据类型常量的分隔符不同。所谓分隔符就是两个完整的数值之间的标记,也可以这样理解,当计算机从键盘读入数据时,一旦碰到分隔符,就认为当前的数据读入已完成,接下来读入的将是下一个常量。各种数据类型的分隔符如下:
    数值型(包括整型、实型):以空格或回车符作为分隔符;
    字符型:不需分隔符(因为字符型数据的长度固定,只有一个);
    字符串:以回车符作为分隔符。
    7、键盘或文件输入值时,只能是各种类型的常量,绝不能是表达式。
        如:read(a);    输入时的值是:1+21/2b等都是非法的。
    8readreadln的区别
当程序从输入设备读入数据时,会自动建立一个读入数据指针。程序一开始时,读入数据指针默认初始位置为第一行的行首,读语句将读入指针所指向的数据,并随着数据的读入操作,数据读入指针移动。
读入数据指针默认的移动方式:读入指针当前指向的数据,然后指针自动向后移动一个位置,指向下一个数据。如果当前数据所在行后面已经没有数据,则指针移动到下一行行首,指向下一行的第一个数据。
Read语句:除了变量表中的数据读入后指针按默认方式移动,读完变量表中最后一个变量的数据后,仍然按默认方式移动指针,即最后一个数据读完后,指针仍移动到指向下一个数据,程序中如果再遇到read语句,将自动从下一个开始读入。
Readln语句:在读入变量表所需的数据时,指针按默认方式移动,但是最后一个所需数据读入后,不论本行后面有没有其它数据,指针都移动到下一行行首。
    例:有两段程序有相同的变量说明如下,不同的读语句,我们可以通过比较它们执行结果的异同来理解readreadln的区别。
变量说明
var a,b,c,d:integer
执行结果
a
b
c
d
程序段一
read(a);
readln(b,c);
read(d);
1
2
3
6
程序段二
readln(a);
read(b,c);
read(d)
1
6
7
8
输入数据
1 2 3 4 5
6 7 8
4.3写语句
写(write)语句是Pascal中唯一能将运算结果送出到数据输出设备上(默认是显示器屏幕,和read语句相同,也可以向磁盘文件中写入数据)的语句
语法格式
write(输出列表)                {输出后不换行}
writeln(输出列表)              {输出后换行}
writeln                        {输出一个回车符}
语法说明:
1、输出列表由一个或若干个输出项组成,如果是多个输出项,每个输出项之间用“,”隔开。例如:(‘a+b=’,a+b,c,c+10)
  输出时,如果输出项是常量,则直接输出常量本身。
          如果输出项是变量,则输出变量的值(不是变量标识符本身)。
          如果输出项是表达式,则先计算表达式的值,再输出其值。
          如果输出项是字符型常量或变量,则输出字符本身或字符型变量的值。
          如果输出项是用一对单引号括起来的字符串,则输出字符串本身(不含单引号)。
3、 输出项由一个表达式或一个表达式加上格式符号组成:
表达式:可以是一个常量,也可以是一个变量,也可以是由常量、变量、运算符、括号组成。
格式符号:控制输出内容的宽度(即所占字符位置数),又称为场宽。
场宽分为标准场宽和自定义场宽,如果输出项中没有格式符号,则按照标准场宽输出,如果有格式符号,按格式符号规定的自定义场宽输出。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。