Download presentation
Presentation is loading. Please wait.
1
第四章 程序设计初步 顺序结构:赋值语句、输出语句
PG:27-37 第四章 程序设计初步 顺序结构:赋值语句、输出语句 变量既然代表一个存储单元,其值是可变的,那么其中的值是怎么提供的,又是怎么改变的呢?在pascal程序中可以通过赋值语句来进行。 赋值语句的格式为: <变量>:=<表达式> 赋值语句的作用是计算表达式的值,并将结果赋给变量。对于任何一个变量必须首先赋值,然后才能引用,否则,未赋初值的变量将以一个随机值参与运算。另外,赋值号两边的类型必须相同,但表达式值为整型时,它会自动转变为实型后赋值给该实型变量,即符合相容赋值。
2
赋值语句 例4-1 例4-2 29 1::=与=的区别 2:类型一致性 3:多次赋值 4:因子运算
3
赋值语句 关于赋值功能的例子 var a,b : integer; begin a := 3; b := 2; a := a+b; b := a-b; a := a-b; writeln(a); writeln(b); end. 程序中整型变量a,b分别赋初值3,2,接着a的值加b的值为5仍赋给a,a的值改变为5,再接下去的两条赋值语句同样使b的值改为3,a的值又改为2,最后输出的a,b的值分别为2,3。
4
赋值语句 例3-2 关于变量必须赋初值及相容赋值的例子 var c : real; begin writeln('c = ',c);
例3-2 关于变量必须赋初值及相容赋值的例子 var c : real; begin writeln('c = ',c); c := 5 div 2; end. 经编译运行的结果如下: C = E-18 C = E+00 可以看出:实型变量c在未赋值前的值为随机数,赋值语句中的表达式5 div 2的结果应是整数2,但左边为实型变量c,故结果2自动转变为实型数 E+00赋给c。 因此,我们必须养成给变量赋初值的习惯,并注意赋值相容的情况。
5
赋值语句 下面看几个应用实例的分析。 例 某仓库8月1日有粮食100吨,8月2日又调进20吨,8月3日卖出库存的三分之二,8月4日又调进库存的3倍粮食,问该仓库从8月1日到8月4日期间每天的粮食分别是多少吨?(输出每天的库存量) 分析:在这个问题中,主要要描述从8月1日到8月4日期间仓库的粮食库存量,且易知它是不断变化的。因此我们可以用一个变量A来描述仓库的粮食库存量。
6
赋值语句 程序可写如下: Var a : integer; Begin a := 100; writeln(‘8/1: ’,a);
a := a+20; writeln(‘8/2: ’,a); a := a div 3; writeln(‘8/3: ’,a); a := a*4; writeln(‘8/4: ’,a); readln; End. 注: 上程序各writeln中A前的‘8/1:’,‘8/2:’,‘8/3:’,‘8/4:’都表示一个字符串(即用一对单引号括起来的一串字符),对于字符串,只输出字符串的内容(即引号内的字符),而引号不会输出。
7
赋值语句 例3-4 有三个小朋友甲、乙、丙。甲有50粒糖果,乙有43粒糖果,丙有13粒糖果。现在他们做一个游戏。从甲开始,将自己的糖分三份,自己留一份,其余两份分别给乙与丙,多余的糖果自己吃掉,然后乙与丙也依次这样做。问最后甲、乙、丙三人各有多少粒糖果? 分析: 这个问题中我们关心的是在游戏过程中每个小朋友的糖果个数,且他们所拥有的的糖果数是在变化的。因此可用a、b、c三个变量分别存放甲、乙、丙三个小朋友在某一时刻所拥有的糖果数。对于每个人分糖后,他的糖果数一定为原来的糖果数 div 3(因为分糖过程中,糖果的数目不一定都刚好分完,用整除恰恰可以表示多余的糖自己吃掉)。而其他两人则增加与这个小朋友现在拥有的一样的糖果。
8
赋值语句 程序可写如下: var A,B,C : integer; begin
A := A div 3; B := B+A; C := C+A;{甲小朋友分糖果后,每个人拥有的糖果数变化情况} B := B div 3; A := A+B; C := C+B; {乙小朋友分糖果后,每个人拥有的糖果数变化情况} C := C div 3; A := A+C; B := B+C; {丙小朋友分糖果后,每个人拥有的糖果数变化情况} writeln(‘A =’,A,‘ B =’,B,‘ C =’,C); {输出结果} end. 以上程序的运行结果为: A = 51 B = 35 C = 16
9
输出语句 32 write(1.2,3.4,5); write(‘My name is Liping’);
输出语句或写语句是每个程序用于显示计算结果的语句,是必不可少的。 一、输出语句的两种格式 1、 write语句 格式Write(表达式1,表达式2,……); 如: write(1,2,3,4); write(1.2,3.4,5); write(‘My name is Liping’); 2、 writeln语句 格式:Writeln(表达式1,表达式2,……)或writeln
10
输出语句 二、输出语句的功能 计算机执行到某一输出语句时,先计算出输出语句中的每个表达式的值,并将每一个表达式的值一个接一个地输出到屏幕上。 Write语句与writeln语句格式上都相似,但它们在功能上有所不同,两个语句的区别在于,write语句将其后括号中的表达式一个接一个输出后,没有换行。而writeln语句则在输出各个表达式的值(最后值)后换行。 说明: PG-32
11
输出语句 例如以下两个程序段的输出分别为: write(1,2,3,4);write(5,6); 输出为: 123456
writeln(1,2,3,4);writeln(5,6); 1234 56
12
输出语句 三、输出语句的输出格式 在pascal语言中输出数据时是可以按照一定格式表示的,对整数隐含的输出形式为按十进制数形式。对实数的输出,隐含的形式是科学记数法形式(如果不想用科学记数法输出而用小数形式输出,要自己另行定义)。 事实上,输出语句中的每个输出项中的表达式之后可以加上格式说明,若输出项后没有加格式说明, 则数据按系统隐含的格式输出,还可加上一定格式符号按特定格式输出。 1、隐含的输出格式 pascal语言为整型量、实型量、布尔型量和字符串(用一对单引号括起来的字符序列)规定了每种数据所占的宽度(即一个数据占几列),一个数据所占的宽度称为“场宽”或“域宽”。系统给出的隐含场宽称为标准场宽。下表给pascal所规定的标准场宽。
13
输出语句 数据类型 标准场宽 integer 实际长度 real 17 boolean 4或5 char 1.1428571492E+00。
在Turbo Pascal系统中,对于整型字符串的输出都是按数据本身长度输出,对于布尔型数据(只有True和False两种值),TRUE为4列,FALSE为5列,一律采用大写输出。而real型数据的输出时,则按17列输出,其中第一列为符号位,正号不显示,后四位为“E±nn”,中间的12列为尾数部分。如:writeln(4/7); 则输出 E+00。 这种隐含的输出格式不容易看清楚,因此在程序中往往根据实际情况,需要自己定义场宽。
14
输出语句 二、输出语句的功能 计算机执行到某一输出语句时,先计算出输出语句中的每个表达式的值,并将每一个表达式的值一个接一个地输出到屏幕上。
Write语句与writeln语句格式上都相似,但它们在功能上有所不同,两个语句的区别在于,write语句将其后括号中的表达式一个接一个输出后,没有换行。而writeln语句则在输出各个表达式的值(最后值)后换行。
15
输出语句 例如以下两个程序段的输出分别为: write(1,2,3,4);write(5,6); 输出为: 123456
writeln(1,2,3,4);writeln(5,6); 1234 56
16
输出语句 2、指定场宽 在输出语句中输出项允许含有格式符号,其作用就是为了指定场宽。 ⑴指定单场宽
格式:write(表达式:N)或writeln(表达式:N),其中N为整数类型表达式,但多数情况下直接就用自然数表示,一旦指定单场宽后,所有数据不再按标准场宽输出,而按指定场宽输出。若数据实际长度小于指定场宽时,则一律“向右靠齐,左留空格”。 如write(1234:8);write(‘abcdef’:12) 输出结果: □□□□1234□□□□□□abcdef 对于标准实型数据指定单场宽时,如果场宽大于标准场宽时,右靠齐按标准场宽格式输出17位,左留空格。若场宽小于标准场宽时,第一位仍为符号位,最后四位仍为"E±nn",中间部分为尾数显示部分。如果指定的宽度小于8位,则数据按8位格式"*.*E±nn "输出。
17
输出语句 ⑵指定双场宽 当输出项是实数时,如果希望输出的实数不用科学记数法输出,而用小数形式输出,可以用指定双场宽的方法输出。
双场宽输出格式为:write(实型表达式:m:n),其中m和n都是整型表达式或自然数,m 用以指定整个数据所占的宽度,n指定输出实数的小数位数。 如 : write(8/7):9:4); 输出:□□□1.1429 如果双场宽不能满足输出数据的最低要求, 系统自动突破指定的场宽限制,按实际长度输出。 如:write(8/7:5:4); 要使小数点后有4位数字,而总场宽为5,是不可能的(因为还有一个小数点,小数点前面还有一个数字)。它最低限度要有6列,即输出为:1.1429
18
输出语句 例:写出下列程序在turbo pascal下的输出结果. Const s = ‘abcdefg’; var
I : integer; r : real; c : char; b : boolean; begin I := 1234; r := ; c := ‘#’; b := true; writeln(i,i:6,i:3); writeln(r,r:12:5,r:8:5); writeln(c,c:5); writeln(s,s:10,s:5); writeln(b,b:5,b:3); readln; end. PG-34
19
输出语句 运行结果如下: 1234□□ □ E+03□□ #□□□□# abcdefg□□□abcdefgabcdefg TRUE□TRUETRUE
20
输出语句 四、应用实例分析 例3-6 已知A=253,B=43,输出A*B的运算式子。即要求输出格式如下: 253*43=10879 253
759 +1012 10879 分析: 对于该问题,我们只要控制好输出时右靠齐即可。即前四行的总宽度一样(例如为12),第五行总宽度比前面少1。第六、七行总宽度与前四行一样。
21
参考程序 253*43=10879 253 * 43 --------- 759 +1012 10879 参考程序如下:
var a,b : integer; begin a := 253; b := 43; writeln(a:10,’*’,b,’=’,a*b); writeln(a:12); write(‘*’ :8);writeln(b:4); writeln(‘ ’ :12); writeln(a*3:12); write(‘+’:6);writeln(a*4:5); writeln(a*b:12); end. 253*43=10879 253 * 43 759 +1012 10879
22
思考题 1:编程实现---输入一个四位数,输出它的反向数,如2320---》》0232 2:习题书 PG-12 --》》1
48 1:编程实现---输入一个四位数,输出它的反向数,如 》》0232 2:习题书 PG 》》1 PG 》》1--11(6,10,11)
23
练 习 1、按下列输出格式输出,即1后面空1格,2后面空2格,… … ,5后面空5格,要求方法越多越好。 1 2 3 4 5
练 习 1、按下列输出格式输出,即1后面空1格,2后面空2格,… … ,5后面空5格,要求方法越多越好。 2、用输出语句输出下列字符图形: \\\|/// \\ // ( ) oOOo-(_)-oOOo | | | How do you do? | | My name is computer. | | Oooo | oooO---( ) ( ) ) / \ ( (_/ \_) 3、求出两数相加之和,要求用加法竖式表示。 4357 ───── 6481
Similar presentations