pascal第2章简单程序设计.ppt_第1页
pascal第2章简单程序设计.ppt_第2页
pascal第2章简单程序设计.ppt_第3页
pascal第2章简单程序设计.ppt_第4页
pascal第2章简单程序设计.ppt_第5页
已阅读5页,还剩53页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第二章 顺序结构,第一节 赋值语句 第二节 输入输出语句 第三节 常量和变量 第四节 标准数据类型 第五节 顺序结构程序设计,第一章的简单程序已体现出处理问题的步骤的顺序关系,每条语句按自上而下的顺序依次执行一次,这种自上而下依次执行的程序结构称为顺序结构程序。 在一个程序中,所有的操作都由执行部分来完成,而执行部分又都是由一条条语句组成的。因此,先要学习Pascal语言的基本语句,并且在学习过程中逐步学会程序设计的基本方法。我们还是先绕过那些繁琐的语法规则细节,先看一些例子,然后给出语法以供选手们参考。,第一节 赋值语句,赋值语句,变量代表的是一个存储单元,其值是可变的,那么其中的值是怎么提供的,又是怎么改变的呢?可以通过赋值语句来进行。 赋值语句的格式:变量名 := 表达式(或常量),其中“:=“称为赋值号,右边是一个表达式,表达式计算完毕后的结果赋给左边的变量。如: a := (9*8)-(2-1); /a的值等于71 a := b; /a的值等于b的 值,b的值没有被更改 a := a+1; /a的值增加1,例2.1 输入两个正整数A和B,试交换A、B的值(使A的值等于B,B的值等于A)? 【分析】 交换两个变量的值方法很多,一般我们采用引入第三个变量的算法,二个变量交换,可以想像成一瓶酱油和一瓶醋进行交换,这时容易想到拿一个空瓶子过来: 将酱油倒到空瓶中; 将醋倒到酱油瓶中; 将原空瓶中的酱油倒到醋瓶中。 程序如下: program ex2_1; var a,b,c : integer; /引入三个变量 begin readln(a,b); /输入A、B c := a; /A的值临时存储在C中 a := b; /B的值赋给A b := c; /C的值赋给B writeln(a,b); end.,例2.2某仓库5月1日有粮食100吨,5月2日又调进20吨,5月3日卖出库存的三分之二,5月4日又调进库存的3倍粮食,问该仓库从5月1日到5月4日期间每天的粮食分别是多少吨?(输出每天的库存量) 【分析】本例中,主要要描述从5月1日到5月4日每天仓库的粮食库存量,它是不断变化的,我们可以用一个变量A来存储仓库当前的库存量。 程序如下: Program ex2_2; Var a : integer; begin a := 100; writeln(5/1: , A); /输出5月1日的库存量 a := a+20; writeln(5/2: , A); a := a div 3; /div是整除,相当于对结果取整操作 writeln(5/3: , A); a := a *4; writeln(5/4: , A); readln; end. 本程序中语句的自上而下的顺序很关键,这类程序严格自上而上每条语句都被执行一次就称为顺序程序。,例2.3 数学中有个经典的“鸡兔同笼”问题,已知头共30个,脚共90只,问笼中的鸡和兔各有多少只? 【分析】 设鸡为j只,兔为t只,头为h,脚为f,那么有: j+t=30 2*j+4*t=90 解此题暂不必采用数学上直接解方程的办法,可采用“假设条件与逻辑推理”的办法,假设笼中30 个头全都是兔,那么都按每头只脚计算,总脚数为(4*h),与实际脚数 ( f )之差为(4*h-f),如果这个差=0,则笼中全是兔(即鸡为0只);如果这个差值 0,说明多计算了脚数,凡是鸡都多计算了两只脚,用它除以2就能得到鸡的只数,算法为: j=(4*h - f)/2 /先用脚数差值除以2算出鸡的只数 t=h - j /再用总头数减鸡数算出免的只数 注意这两步运算的先后顺序。 程序如下: program ex2_3; Const h=30; f=90; /常量定义 Var j,t : integer; /为整数类型的变量 begin j := (4*h-f) div 2; /div是整除运算 t := h-j; writeln (j=,j, ,t= ,t ); /引号中内容原样输出,两部分内容用空格隔开 end.,算术表达式,算术表达式的定义 Pascal语言中的算术表达式是由符合Pascal语法规定的运算对象(包括常量、变量、函数)、算术运算符、圆括号组成的有意义的式子。如a+30*5/8.4,算术运算符 常用的有以下6个算术运算符: + (加) - (减) * (乘) / (实数除)得到结果为实型。如5/2=2.5,4/2=2.0(结果不是2) div (整除) div它要求除数和被除数均为整型, 结果也为整型。 如10 div 2=5,10 div 3=3, 5 div 10=0,-15 div 4= -3。div运算只取 商的整数部分,参与div运算的两个对象都不能为实型。 mod (求余数),也只能用于整数运算,结果为整数。 如:10 mod 4=2 , -17 mod 4=-1 , 4 mod (-3)=1, - 4 mod 3= -1,即 a mod b=a-(a div b)*b。div的结果是相除后的商,mod的结果是相 除后的余数。因此有: 8 div 3=2 8 mod 3=2 7 div 3=2 7 mod 3=1 6 div 3=2 6 mod 3=0,运算优先顺序 如果一个表达式里出现两个或两个以上的运算符, 则必须规定它们的运算次序。Pascal规定的运算优先级别(与数学中规定的一样): 表达式中相同优先级的运算符,按从左到右顺序计算; 表达式中不同优先级的运算符,按从高到低顺序计算; 括号优先级最高,多层括号则从内到外逐层降低; 在算术运算中运算符的优先顺序与数学上的四则运算一致,即“先乘除后加减“(注:“mod“、“div“运算的优先级与“*“、“/“相同)。,下面是几个Pascal表达式的例子:,Pascal的常用数学函数 abs(取绝对值),sqr(平方),sqrt(开方),sin(正弦),cos(余弦),arctan(反正切),exp(以e为底的指数),Ln(自然对数),trunc(取整),round(四舍五入)。 Pascal规定,所有函数的自变量必须写在括号中。例如: sin2x 应写成 sin(2*x) (a+b)2 应写成 sqr(a+b) 或 (a+b)*(a+b) 应写成 sqrt(b*b-4*a*c) sin,cos函数的自变量应为弧度。若是度,需要转换成弧度。例如: sin32o15 应写成 sin(32.25*3.14159/180) Lgx (以10为底的对数) 由换底公式得,应写成 Ln(x)/Ln(10) x3可以写成 x*x*x (a+b)3可以写成sqr(a+b)*(a+b)或三个(a+b)连乘 xy可以写成 exp(y*Ln(x),根据换底公式有: 也可写成 power(x,y) (power 函数不要标准库中,需要调用数学库,数学库的调用参见附录三) trunc是去掉小数部分,取其整数部分。 Round是将小数部分四舍五入后变为整数(即得到最接近于它的整数)。因此 trunc(1.2)=1 round(1.2)=1 trunc(1.7)=1 round(1.7)=2 trunc(-3.7)=-3 round(-3.7)=-4,运算、标准函数表,运算表,标准函数表,表中的列表示函数参数的类型,行表示函数执行后返回的结果类型。如trunc函数的参数是实型,该函数的运算结果是整型,即对实数取整。,第二节 输入输出语句,输入语句,在程序中变量获得一个确定的值,可以用赋值语句,但是有些变量的值往往不能事先确定,需要在程序运行时输入,输入语句就是用于把外界要处理的数据传输给程序。输入语句是在程序运行时由用户给变量提供数据的一种很灵活的输入动作。 输入语句的格式:read( 变量1, 变量2, ) 功能:从标准输入文件(默认对应着键盘 )中输入数据,并依次赋给相应的变量。,说明: 执行到输入语句时,系统处于等待状态,等待从键盘上输入数据,并且根据变量的数据类型判断输入内容是否合法,如果内容不合法则提示106格式错误。如执行read(a),假设a是整型变量,那么输入的内容为数字是合法的,其它字符提示格式错误。 在输入数值型(整型或实型)数据时,数据间用空格或回车分隔开。 read语句是一个接一个地输入数据,在执行完本条read语句( 读完本语句中变量所需的数据)后,下一个输入语句接着从该行中的下一个数据继续读取数据,也就是说输入光标不换行,readln语句是read+line的缩写,意思是为括号中的变量赋完值后立即换行,如果有下一条输入语句,只能从下一行开始读取。 read 后一定要有参数表(变量名),而readln可以不带参数表,即可以没有任何输入项, 这时系统等待读入一个换行符(回车)。经常用于暂停程序的运行,直到输入一个回车。 为了避免可能出现的错误,建议在程序中按下列原则使用读语句: (a)如果没有特殊需要,在一个程序中尽量避免混合使用read语句和readln语句; (b)尽量用readln语句来输入数据, 一个数据行对应一个readln语句,如: read(a,b); read(c,d); read(e); 如果输入数据为:1 2 3 4 5 6,那么a,b,c,d,e的值分别为1,2,3,4,5,如果后面没有输入语句了那么数据6是多余的。 输入同样的数据,如果三条输入语句read都改成readln情况就不同,每个readln语句执行后都要换行,第一条readln语句读完二个数接后换行(第一行中其余数据全部被作废),第二条readln语句将从下一行开始读取二个数,再换行到第三行,第三条readln语句在第三行中读取一个数,也就是说5个数据不能放在一行上,至少要有三行的内容。,例2.4 设a、b、c为整型变量,将它们的值分别赋为10、20和30,写出对应下列语句的所有可能输入格式。 read(a,b,c); 【分析】 根据说明,可列出所有可能输入的格式: (a)10 20 30 (b)10 20 30 (c)10 20 30 (d)10 20 30 如果把输入语句改为:readln(a,b); read(c),那么只有(b)(d)二种输入格式有效。,例2.5 设有下列语句: read(a,b,c); readln(d,e); readln; readln(f,g); 其中,所有变量均为整型。再设输入的数据格式如下: 1 2 3 4 5 6 7 8 9 10 11 12 13 列表给出每个变量的值。 【分析】 可以假想有一个“数据位置指针“,每读一个数据后,指针后移到该数据之后,每执行一个readln语句后,指针移到下一行的开头。 各变量的值如下表所示。,输出语句,输出语句的作用是将程序处理的结果输出到标准输出文件(默认对应显示器屏幕),一个程序可以没有输入,但一个程序肯定要有输出,否则编写程序就失去任何意义。 (1) write语句 格式:write(输出项1,输出项2,)。 输出语句中的输出项可以是变量、常量、表达式和字符串。 如:write(The score of LiPing is:,56+32); /引号内的内容原样输出 (2) writeln语句 格式:writeln(输出项1,输出项2,)。 writeln是write+line的缩写,writeln语句相当于write语句+换行,即输出完毕后换到下一行。特殊地,writeln语句只是起到换行作用,不输出任何内容。,输出语句的功能,计算机执行到输出语句时,将括号中的输出项一个接一个地输出到屏幕上,如果输出项是表达式那么先计算出表达式的值再输出其结果。 write语句与writeln语句格式上都相似,但它们在功能上有所不同,两个语句的区别在于,write语句将其后括号中的表达式一个接一个输出后,没有换行。而writeln语句则在输出所有输出项后换行。 例如以下两个程序段的输出分别为: (1)write(1,2,3,4); write(5,6); 输出为:123456 (2)writeln(1,2,3,4); /输出完毕后换行 write(5,6); /另起一行输出 输出为: 1234 56,例2.6 输入一个三位数数,要求把这个数的百位数与个位数对调,输出对调后的数。 【分析】先求出自然数的个位、十位、百位,然后个位与百位对调。 程序如下: Program ex2_6; var a,b,c,m,n : integer; begin readln(m); a := m div 100; /百位数 b := (m div 10) mod 10; /十位数 c := m mod 10; /个位数 n := c*100+b*10+a; /重新组合对调后的数 writeln(n); end. 运行结果: 输入:234 输出:n=432,例2.7 已知某班有男同学x位,女同学y位,x位男生平均分是87分,y位女生的平均分是85,问全体同学平均分是多少分? 【分析】 男女生的人数需要用户输入,然后根据题意(x*87+y*85)/(x+y)求出全体同学的平均分。 程序如下: Program ex2_7; var x,y : integer; begin readln(x,y); writeln(x*87+y*85)/(x+y); /实数以默认的科学 记数法格式输出 end.,例2.8 歌手大奖赛上6名评委给一位参赛者打分,6个人打分的平均分为9.6分;如果去掉一个最高分,这名参赛者的平均分为9.4分;如果去掉一个最低分,这名参赛者的平均分为9.8分;如果去掉一个最高分和一个最低分,这名参赛者的平均是多少? 【分析】 首先求出6名评委的总分,然后根据去掉最高分的总分和最低分的总分,求出最高分的分值和最低分的分值,最后总分减去最高分和最低分除以4即是答案。 程序如下: Program ex2_8; Var high,low,score_all,score_high,score_low,ans : real; begin score_all := 6*9.6; /6名评委的总分 score_high := 5*9.4; /去掉最高分的总分 score_low := 5*9.8; /去掉最低分的总分 high := score_all score_high; /最高分 low := score_all score_low; /最低分 ans := (score_all high low)/4; writeln(ans); /实数以默认的科学记数法格式输出 end.,带格式的输出语句,在Pascal语言中输出数据时是可以按照设定的格式进行输出,对整数默认的输出形式为按十进制数形式。对实数的输出,默认的形式是科学记数法形式(如果不想用科学记数法输出而用平时熟悉的小数形式输出,要自己另外定义)。 事实上,输出语句中的每个输出项之后可以加上格式说明,对输出时的格式进行设置,若输出项后没有加格式说明, 则数据按系统默认的格式输出。,默认的输出格式,Pascal语言为整型数据、实型数据、布尔型数据和字符串规定了每种数据所占的宽度(即一个数据输出时占几列) ,一个数据所占的宽度称为“场宽“或“字段宽“。系统给出的默认场宽称为标准场宽。每一种Pascal版本给定的标准场宽不尽相同。下表给出标准Pascal和Free Pascal版所规定的标准场宽。,在Free Pascal系统中,对于整型、字符串的输出都是按数据本身长度输出,对于布尔型数据(只有TRUE和FALSE两种值),TRUE为4列,FALSE为5列,采用大写输出。而实型数据的输出时,则按25列输出,其中第一列为符号位,正号不显示,后6位为“Ennnn”, 中间的18列为尾数部分。如: writeln(sqrt(75); 则输出 8.6602540378443865E+0000; /第一位为空格表示是正数 writeln(sqrt(81); 则输出 9.0000000000000000E+0000。 有时,在程序中往往根据实际情况,需要自己定义场宽。,指定场宽,在输出语句中输出项含有格式符号时,就是为了指定输出项的场宽。, 指定单场宽 格式:write(表达式:n)或writeln(表达式:n),其中n为自然数,指定单场宽后,所有数据不再按默认的标准场宽输出,而按指定场宽输出。若数据实际长度小于指定场宽时,则一律“向右靠齐,左补空格“。 如:write(1234 :8,abcdef :12) 输出结果: 1234 abcdef /1234前有4个空格,abcdef前有6个空格 对于实型数据指定单场宽时,如果指定场宽大于标准场宽(25列)时,右靠齐按标准场宽格式输出25位,左边补空格。若场宽小于标准场宽时,第一位仍为符号位,最后六位仍为“Ennnn“,中间部分为尾数显示部分。如果指定的宽度小于10位,则设置场宽无效。, 指定双场宽 输出项是实数时,如果希望输出的实数不用科学记数法形式输出而用小数形式输出,可以用指定双场宽方法输出,双场宽只适用于实型数的输出。 双场宽输出格式为:write(实型数 :m :n),其中m和n都是自然数,m 用于指定整个数据所占的宽度,n指定输出小数的位数。 如: write(sqrt(75) :9 :4); 输出: 8.6602 /总的占9列,其中保留4位小数 如果双场宽指定中m小n+2,则m无效,按保留n位小数的最少位数输出。 如:write(sqrt(75) :5 :4); 要使小数点后有4位数字,而总场宽为5,是不可能的(因为有一个小数点, 小数点前面至少还有一个数字)。它最低限度要有6列,即输出为8.6602。有时对总宽度没要求只要求小数的保留位数,这时往往把m设成0。,例2.9 传说古代的叙拉古国王海伦二世发现的公式,利用三角形的三条边长来求取三角形面积。已知ABC中的三边长分别为a,b,c,求ABC的面积。(提示:海伦公式 ,其中p=(a+b+c)/2 ) 【分析】 公式中P是三角形周长的一半,求出P后直接代入海伦公式中求得面积。 程序如下: Program ex2_9; Var a,b,c,s,p : real; begin readln(a,b,c); /输入三角形的三边 p := (a+b+c) /2; /求出P s := sqrt(p*(p-a)*(p-b)*(p-c); /根据P求面面积,sqrt是开方函数 write(s :8 :3); /输出面积,保留3位小数 readln; end.,【上机练习2.2】,1.已知某梯形的上底A=13,下底B=18,高H=9,求它的面积S。 2.已知某圆的半径R=139,求该圆的周长C与面积S? 3.输入长方形的边长a,b,计算它的面积和周长,输出。 4.读入摄氏温度c,写程序将它转换成华氏温度f输出。已知f=9c/5+32 5.输入三个字符,输出每个字符的序号,然后反向输出这三个字符。(求序号用ORD函数) 6.输入一个三位自然数,把这个数的百位与个位数对调,输出对调后的自然数。 7.键盘输入两个实数,经过取整操作后,将其整数部分交换值后输出。,第三节 常量和变量,常量,常量是指在程序中使用的一些具体的数、字符、字符串和布尔值。在程序运行过程中,其值不能被更改。如123,145.88,my name is,TRUE等。 (1)整型数:如3、-5、0等。 (2)实型数:如3.1、-6.1E+2(科学记数法)。 (3)字符串:是用单引号括起来的一串字符,如 Book、96.5、-。用单引号括起来的单个字 符可以看成字符数量为1的字符串,如x、*、# 等。在字符串内有单引号时要用两个连续单引号 表示,如输出B,可表达成writeln(B); 以上列举的都可以作为常量在程序中使用。为了提高程序的可读性并使程序便于修改,在程序中往往用一些标识符来代表具体的常量,如a=3,b=-6.1E+2。,常量的定义,一个常量可以直接调用(如124,A),也可以给常量取个名字用一个标识符代表它,这就是常量定义,例如:st=60; name=Li Ping,代表常量的标识符又称为常量标识符。 常量定义要放在以const开头的常量说明部分。 常量说明部分的格式: const = ; /常量定义 = ; . = ; const是保留字,表示常量说明部分,其后可以有若干条常量定义语句,这些常量定义语句之间以分号“;“隔开。例如: const st = 60; a = -st + 30; p = 3.1415926; black = ; name = My name is LiPing!; 由上例可见常量可以是数、字符或字符串,也可以是表达式。,Free Pascal语言对常量定义有如下要求: (1)常量定义要放在程序说明部分; (2)必须遵守先定义后使用的原则,即只有已经定义的常量,才能在程序中使用; (3)常量一经定义,执行部分不得更改它的值,否则编译错误。 常量定义后,在书写程序语句时就可以引用它,即可以将程序中多次出现的常量不必直接写常量值,而用已定义的常量标识符代替,这样一方面避免写错,另一方面也便于修改程序。如要修改一常量,只需修改常量定义(如st = 60,改为st = 90)就将程序中所有这个常量都修改了。特别对较大的程序是很必要的。 Free Pascal中预定义了如下几个常量标识符,这些常量可以直接在程序中使用。 Pi = 3.1415926535897932 /的值 Maxint = 32767 /整型integer允许的最大值 Maxlongint = 2147483647 /长整型longint允许的最大值 FALSE = 布尔假,TRUE = 布尔真,例2.10 已知半径r,求圆的周长及面积。 Program ex2_10; const r = 3.6; /定义了一个其值为3.6的实型常量 var c,s : real; begin c := 2*pi*r; s := pi*r*r; writeln(c=,c:10:2); writeln(s=,s:10:2); end. 在程序中为了输出实型周长C和面积S时,按照小数形式输出,采用了指定双场宽格式。程序中pi作为常量由系统提供,代表实数3.14159。常量说明部分既定义了常量名及其值,又隐含定义了常量的类型。,变量说明,变量代表了一个存储单元,其中的值是可以改变的,因此称为变量。如游戏中玩家命的条数最初为3,当你死了一次,命减少一条,这里命的条数就是一个变量(或者说命的条数存储在一个存储单元中)。 变量有三个要素是:变量名、变量类型、变量值。 一个程序中可能要使用到若干个变量,为了区别不同的变量,必须给每个变量(存储单元)取一个名(称为变量名),该变量(存贮单元)存储的值称为变量的值,变量中能够存储值的类型为变量的类型。例如游戏中用于存储“命”的变量,在游戏程序中的存储命的变量名可取为life,它的类型为整型,游戏初始时这个变量的值为3。,变量名,用一个合法的标识符代表一个变量。如n,m,rot,total 等都是合法变量名。在程序中用到的变量必须在说明部分加以定义,变量名应遵循自定义标识符的命名规则,并建议使用“见名知义”的原则,即用一些有意义的单词作为变量名。 “自定义标识符”的命名规则为:自定义标识符必须以字母(包含下划线“_”)开头,后面的字符可以是字母或数字。标识符长度不超过63个字符。,变量的类型,常量是有类型的数据,变量在某一固定时刻用来存储一个常量,因此也应有相应的类型。如整型变量用来存储整数,实型变量用来存储实数。变量的类型,可以是标准数据类型integer、real、boolean和char,也可以是用户自定义的各种类型。,变量说明,在程序中若要使用变量,变量的名称及类型,在程序的变量说明部分加以定义,变量的值则在程序的执行部分中才能赋给。 变量说明形式是:一个变量标识符或由逗号隔开的多个变量标识符在它的冒号“:”后面说明其数据类型。 变量定义要写在变量说明部分中,以关键字var开头。 变量说明部分的一般形式: var ; ; . ; 其中var是保留字,表示一个变量说明部分开始。一个var可以含有多个不同的变量定义,每条变量定义之间用隔开,有时称被分号隔开的变量定义为变量说明项。 例如: var a,b : integer; x,y : real; ch : char; f : boolean; 一旦定义了变量,就确定了它的类型,也就是说,就确定了该变量的取值范围和对该变量所能进行的运算。并且不同类型的变量不能互相赋值,但是整数可以赋给实型变量。 还应指出,变量一经定义系统就在计算机内存中为其分配一个存储空间。在程序中使用到变量时,就在相应的内存中存入数据或取出数据,这种操作称为变量的访问。,第四节 标准数据类型,Free Pascal提供了丰富的数据类型,本节介绍几种基本的数据类型:整型、实型、布尔型和字符型。它们都是系统定义的简单数据类型,称为标准数据类型,其对应的名字称为标准标识符。,整型(integer),一个整型数据用来存储整数,整数可以正整数、负整数和零。 整型常量采用我们平常使用的十进制整数表示。如138,0,-512等都是整型常量,而18.6或18.0都不是整型常量。 Pascal中有一个标准标识符Maxint,它代表pascal系统中整型类数据的最大值,一个整型数用2个字节(1个字节由8位组成)存储,最大的整型数是215-1,即32767,最小的整型数为 (Maxint+1),即-32768。 Free Pascal支持五种整型,它们是byte(字节型)、word(字类型)、integer(整型)、longint(长整型)和int64(超长整型),每一种类型规定了相应的取值范围以及所使用的存储空间(字节数)。,整型数取值范围,在信息学竞赛中常用的有integer、longint、int64和qword。目前32位的CPU,提供的标准整型是32位,所以用longint的速度比integer快,同时建议Byte不要用,因为不能在监控窗口进行监控其值的变化,不能监控会给调试带来麻烦。 Free Pascal还提供了另一个整型常量表识符MaxLonint,它是长整型数据能表示的最大值, Maxlongint其值为2147483647(231-1)。Maxint和maxlongint的类型分别属于integer 和longint。,实型(real),一个实型数据用来存储实数,实型包括正实数、负实数和零。Free Pascal中表示实型常量的形式有两种。 十进制表示法 这是人们日常使用的带小数点的表示方法。 如3,0.0, +5.61,-8.0,-6.050等都是实型常量,而0.和.37都不是合法的实数。, 科学记数法 科学记数法是采用指数形式的表示方法,如1.25105可表示成1.25E+05。在科学记数法中,字母“E“表示10这个“底数“,而E之前为一个十进制表示的小数,称为尾数,E之后必须是一个整数,称为“指数“。 如-1234.56E+26 , +0.268E-50 , 1E5是合法形式,而.34E12 , 2.E5 , E5 ,E,1.2E+0.5都不是合法的实数。 Pascal系统中科学记数法输出共25列,其中第一列为符号位,正号不显示,后6位为指数部分“Ennnn“, 中间的18列为尾数部分,如:-6.2441973062996000E+0010。 无论实数是用十进制表示法还是科学记数法,它们在计算机内的表示形式是一样的,总是用浮点方式存储。和整数相比,实数能表示的范围大得多,但值得注意的是实数的运算比整数的运算速度慢且无法像整数那样精确表示一个数,只能近似表示。 Free Pascal支持五种实型,它们是real(实型)、 singLe(单精度实型)、doubLe(双精度实型)、extended(扩展实型)、comp(装配实型)。每一种类型规定了相应的实数取值范围、所使用的存储空间(字节数)以及能达到的精度(有效位数)。,实型数取值范围,信息学竞赛中根据试题要求的精度不同,常用real、double及extended类型。 当两个不同范围的类型的操作数进行运算时,得到的结果属于范围较大的类型。表中前四种类型给出的是其绝对值的取值范围。对于此类实型数据,若其绝对值大于上界,则产生上溢;绝对值小于下界,则产生下溢,下溢导致结果为0。comp类型的值是在取值范围内的整数(但类型还是实型),如变量a的类型是comp,其值等于3.7893543525,则a的值其实是等于4.0。 注意:实型数不能赋给整型变量,但整型数可以赋给实型变量。,字符型(char),在Pascal语言中,字符常量是由单个字符组成,所有字符采用ASCII编码,ASCII编码共有128个字符(如下表)。在程序中,通常用一对单引号将单个字符括起来表示一个字符常量。如:a,A,0等。特殊地,对于单引号字符,则要表示成4个单引号。在ASCII字符集中,按每个字符在字符集中的位置,将每个字符编号为0127,编号称为对应字符的序号(也称作ASCII码),如字符A的序号是65,字符a的序号是97, 字符0的序号的48。,ASCII编码表见下图:,Pascal提供的字符类操作函数有: (1)pred(前导),succ(后继) 字母b的前导是a,b的后继是c,即: pred(b)=a,succ(b)=c pred 与 succ 是互逆函数 pred(succ(b)=b succ(pred(b)=b (2)ord(取字符序号),chr(将序号转字符) 字母a的序号是97,序号97对应的字符是a,即: ord(a)=97,chr(97)=a ord 与 chr是互逆函数 chr(ord(a)=a ord(chr( 97 ) =97 (3)upcase(小写转大写),布尔型(boolean),一个布尔型数据用来存储逻辑值,或布尔值。 Boolean一词,是根据19世纪英国数学家George Boolean(18151864)的名字而得,George Boolean为现代布尔代数之父。布尔型常量仅有两个值:真和假,分别用标准常量名TRUE和FALSE表示。它们的序号分别为1和0。 用于布尔量的运算有布尔运算符(或称逻辑运算符),它们是: and(与)、or(或)、not(非),xor(异或,本书不介绍) 当几个布尔变量同时使用时,按下列优先规则进行:首先是not运算,然后是and运算,最后是or运算。当然,可以通过加括号,改变运算的先后次序。,真值表,true,false,true,因此,当A为FALSE,B为TRUE时,式子:B or B and not A 将按下列次序计算:首先算not,然后算and,最后算or,其结果为true,如下图所示:,B or B and not A,与布尔量有关的还有关系运算(或称比较运算)。关系运算有以下6种: (大于),=(大于等于),(不等于) 关系运算用于整型、实型、字符型、布尔型,结果均为布尔型值。通常要求关系运算两端的量为同一类型,但是整型和实型可以混合使用。例如 a=b 结果为 FALSE /字符的比较是用相应的序号来比较 sqrt(2.5)=1 结果为 TRUE 8 =0) and (y=0) 当该式成立(结果为TRUE)时,坐标(x,y)就在第一象限,否则不在第一象限。式中的括号不能少,若写成: x=0 and y=0 根据优先规则,应先算逻辑运算,即运算0 and y,导致整个表达式发生混乱而提示出错。,第五节 顺序结构程序设计,我们已经学习了输入、输出语句和赋值语句以及基本的数据类型。下面举一些实例,通过阅读和模仿这些程序,让选手逐步熟悉程序的编写和巩固知识点,为以后各章的学习打好基础。,例2.11 某幼儿园里,有5个小朋友编号为1,2,3,4,5,他们按自己的编号顺序围坐在一张圆桌旁。他们身上都有若干个糖果(键盘输入),现在他们做一个分糖果游戏。从1号小朋友开始,将自己的糖果均分三份(如果有多余的糖果,则立即吃掉),自己留一份,其余两份分给他的相邻的两个小朋友。接着2号、3号、4号、5号小朋友同样这么做。问一轮后,每个小朋友手上分别有多少糖果。 【分析】题目中有5位小朋友,他们初始时糖果的数目不确定,用a,b,c,d,e分别存储5个小朋友的糖果数,初始值由键盘输入。 程序如下: Program ex2_11; Var a,b,c,d,e : integer; begin readln(a,b,c,d,e); a := a div 3; b := b+a; e := e+a; /1号小朋友分糖 b := b div 3; c := c+b; a := a+b; /2号小朋友分糖 c := c div 3; b := b+c; d := d+c; /3号小朋友分糖 d := d div 3; c := c+d; e := e+d; /4号小朋友分糖 e := e div 3; d := d+e; a := a+e; /5号小朋友分糖 writeln(a, ,b, ,c, ,d, ,e); /每个值之间空格隔开 end.,例2.12 分钱游戏。甲、乙、丙三人共有24元钱,先由甲分钱给乙、丙两人,所分给的数与各人已有数相同;接着由乙分给甲、丙,分法同前;再由丙分钱给甲、乙,分法亦同前。经上述三次分钱之后,每个人的钱数恰好一样多。 求原先各人的钱数分别是多少? 【分析】 设甲、乙、丙三人的钱数分别为A,B,C。用倒推(逆序)算法, 从最后结果入手,按反相顺序,分步骤推算出每次各人当时的钱数 : (在每个步骤中,各人钱数分别存在A、B、C中) 步骤 : A=8,B=8,C=8 /这是最后结果的钱数,三人都一样多 步骤 : A=A/2 (=4),B=B/2 (=4),C=A

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论