Pascal程序结构
- 格式:doc
- 大小:79.00 KB
- 文档页数:15
PASCAL语言程序设计第一部分语言基础知识一、程序结构:例1.1计算半径为R的圆面积S{程序首部} program Area;{说明部分——数据描述}const pi=3.14159;{常量定义}var s,r:real;{变量定义}{执行部分——程序体}Beginreadln(r);{读入数据给r}s:=pi*sqr(r);{求圆的面积}writeln('s=',s);{在屏幕上输出面积}end.上述程序第一行称为程序首部。
其中用花括号(注释可以用{ }或(* *)来表示)括起来的内容是注释,注释除了给人看,增加程序的可读性外,对程序编译和运行不起作用。
一个程序可以包含多个出现在不同处注释,亦可无注释。
程序第二行是常量说明,程序第三行是变量说明。
程序从begin到end 都是执行(语句)部分(1)程序首部例1.1的第一行称为程序首部。
program是保留字,接着是程序名(由你依据“标示符”规则自行定义),最后以分号表示程序首部结束,下面是程序主体的开始。
程序首部在一个Turbo Pascal(仅在Turbo Pascal中有效)程序中并非必须出现,它是可选的。
写上它仅起了文档作用。
因此,在时间有限的情况下,如果用Turbo Pascal编程完全可以省略程序首部。
(2)程序体a.说明部分说明部分用于定义和说明程序中用到的数据,由单元说明、标号说明、常量说明、类型说明、变量说明、函数或过程说明组成,并且这些数据的说明次序必须按照以上次序。
但是一个简单的Turbo Pascal程序也可以不包含说明部分,也就是说说明部分是可选的。
b.执行部分执行部分描述了程序要执行的操作。
它必须以一个Turbo Pascal保留字begin开始,以保留字end后跟句点结束,其间是一些执行具体操作的语句,并且以分号作为语句之间的分隔符。
begin 和end必须成对出现,这是一个Turbo Pascal 程序所必须有的。
顺序结构与基本数据类型一、程序的三种基本结构1、顺序结构:按照语句的书写顺序,依次执行。
2、选择结构(分支结构):根据给定的条件,判断成立与否,成立做一件事,不成立做另外一件事。
两件事必须做一件且只能做一件。
3、循环结构(重复结构):重复做某件事。
3种:①计数循环:重复执行的次数确定;②当型循环:当条件成立时,反复做某件事;③直到型循环:反复做某件事,直到条件成立时为止。
二、PASCAL标准数据类型及函数:1、实型(real)表示方法:小数表示法和指数表示法(科学表示法)。
如:1.25(1.25e0),132.67(1.3267e+2),0.0025(2.5e-3),-1.56(-1.56e0),0.0(0e0) 实型量运算:+(加)、-(减)、*(乘)、/(除)实型量标准函数:abs(绝对值),sqr(平方),sqrt(开方),sin(正弦),cos(余弦),arctan(反正切),exp(以e为底的指数),ln(自然对数),trunc(取整),round(舍入取整),int(取整)注:所有函数的自变量必须写在括号中。
例如:Sin2x 应写成sin(2*x) (a+b)2应写成sqr(a+b)Sin,cos函数的自变量应为弧度。
若是度,应转换为弧度。
例如:Sin32o15’应写成sin(32.15*3.14159/180)Tanx 应写成sin(x)/cos(x)e2.5应写成exp(2.5)lnx应写成ln(x) lgx 应写成ln(x) /ln(10)x y 应写成exp(y*ln(x))int直接取整数部分(其结果为实型)、trunc去掉小数部分,取其整数。
Round是将小数部分四舍五入后变为整数。
例如:trunc(1.2)=1 round(1.2)=1trunc(1.7)=1 round(1.7)=2trunc(-3.7)=-3 round(-3.7)=-42、整型(integer)正、负数和0.整型量运算:+(加)、-(减)、*(乘)、div(整除)、mod(取余)整型量标准函数:abs(绝对值),sqr(平方),pred(前导),succ(后继),odd(奇函数),chr(取字符)例如:pred(前导),取自变量前一个值。
习题一1-1 Pascal语言的程序结构由哪几部分组成?试述各部分的构成形式和作用。
1-2 Pascal基本字符集有哪些成分构成?Pascal的保留字是什么?1-3 Pascal语言中标识符是怎样构成的?下列字符串哪些是正确的Pascal标识符?哪些是错误的?为什么?A5B,5H4,PEL,1,A31,x﹡y,AB,A + B,$500,G1(x),xyz,E-10,VAR1-4 下列数据哪些是整数?哪些是实数?哪些是非法的(假设计算机字长为32位)?256 2.54 25E+6 3.75E6 0.15E-61.2E70 1E-15 -673 E8 4,7345.7E-6.6 0 58989 -73451 E-31-5 下列哪些常量定义是正确的?CONSThvalue=200;lvalue=0 OR 1 OR 2;firstchar=’a’;t=true;b=true OR false;1-6 假定已作了下述说明:CONSTgap=’’;VARm,n:integer;a,b:real;p,q:boolean;c1,c2:char;指出下列每一语句是否有效,并说明理由:⑴m:=trunk(b)+a⑵p:=m+n⑶read(c1,c2,’’)⑷c1:=gap⑸p:=q AND (ord(c1)<>’a’)⑹m:=n MOD a⑺‘c1’ :=’c2’⑻c2:=chr(‘a’)⑼m:=m-ord(‘0’)⑽writeln(a,p,m,n,q,q,b)⑾ n:=a-trunc(a)⑿b:=2.99*109⒀a:=m/n⒁b:ord(c1)+ord (c2)1-7 已知变量有下面指定的值:a=7,b=-6,c=30,d=10.8600,e=1E3,f=’*’,g=true求下面表达式的值:a+b DIV trunc(d)+3①d-0.75/(e+140.0)*70.0②sqrt(abs(b-a)+succ(ord(f))③chr(10* a MOD sqr(b))④NOT ((a>=b) AND g)⑤(ord(b) OR (sqr(b)>e)) AND (g AND NOT(abs(b)<>6))1-8 已知有如下说明VARp,q,r,s:Boolean;k:integer;试写出下列每一表达式的类型,如能确定,请写出它们的值。
Pascal程序结构格式:Program 程序首部;单元引用;∥声明部分常量声明;类型定义;变量声明;过程和函数声明;Begin ∥程序体语句体;End语句与语句之间用分号隔开程序最后以(.)结束。
Program 表示一个程序的开始Var表示变量说明部分Integer 整数类型Real 实数类型Boolean 布尔类型Char 字符类型Const 常量标识字符=常量输入语句readln(length,width)输出语句writeln(‘Area is ‘,…..”)赋值运算符(:=)赋值语句中的“:=”应看作一个完整的符号,为赋值号。
如:S:=a+b; x:=15;类型定义:type如:Type colour=(while,red,blue);1. IF语句格式:if布尔表达式then语句 else 语句例:if x>=0then y:=xelse y:=-x2.case 语句格式:case情况表达式 of情况常量表:语句;-┄┄情况常量表:语句;End .例求某月的天数case month ofjan,mar,may,jul,aug,oct,dec;len:=31;apr,jun,sep,nov;len:=30;feb:if (year mod 4=0 ) and (year mod 100 <> 0 )then len:=29then len:=28end.例:求1~100的和Program sum100 for;var i,s:integer ;begins:=0;for i:=1 to 100 dos:=s+i;writeln(‘s=’,s);readln;end。
第1章 Pascal 基本语句与程序结构 第1节 简单Pascal 程序实例【问题描述】从键盘上输入圆的半径,从屏幕上输出圆的面积。
【程序设计】[程序清单]Program p1_1_1(input,output); (程序首部)const pi=3.14159;varr,s:real; begin write('r=?');readln(r); {读入圆的半径} s:=pi*r*r; {求圆的面积} write('s=',s:12:5); {输出圆的面积} end.【知识拓展】1.学习之前,我们先认识几个英文单词。
Program(程序)、const 是constant (常量)的缩写、var 是variable (变量)的缩写、begin (开始)、end (结束)。
2.从上面的例子中可以看到一个pascal 程序分为两个部分:程序首部和程序体。
程序首部包括:程序标志。
“program ”用来标识“这是一个pascal 程序”; 程序名称。
由程序设计者自己定义,但一般习惯是使程序名能反映出程序的含义。
程序体包括:说明部分。
用来描述程序中用到的数据属性。
它分为常量说明和变量说明两部分。
执行部分。
它的作用是通知计算机执行指定的操作,如果一个程序中不写执行部分,在程序运行时计算机什么工作也不做。
执行部分以“BEGIN ”开始,以“END.”结束(注意:“END.”后面有一个句点,表示整个程序结束)。
它们中间是一些执行具体操作的语句,以分号作为语句间的分隔符,Being 和end 应成对出现。
3.常量是指要程序运行过程中,其值不能被改变的量。
本程序中第二、三行是“常说明部分 执行部分程序体量说明区”,用来定义常量,也就是给常量取个名字并用该名字标识符来代表它,如本例中用到的圆周率就是一个不会改变的量,于是可以将pi定义为常数3.14159。
这样在程序中凡出现pi处,都看作和3.14159相同。
一个完全的Pascal程序结构program 程序名;uses 已知单元说明;label 标号说明;const 常量说明;type 类型说明;var 变量说明;function 函数说明;procedure 过程说明;begin语句;语句;……语句;end.PASCAL有两个语句可以改变变量的值。
赋值语句是其中之一(另一个是读语句)。
赋值,顾名思义,就是把一个值赋予某个量。
可以这理解:变量相当于装东西的容器,赋值的过程就是把东西放进容器的过程。
赋值语句格式如下:变量:=表达式;写赋值语句有以下几点要注意:1、赋值号“:=”赋值号由两个字符构成,是一个运算符。
如果把这两个字符拆开,那么这两个字符就是别的意思了:“:”是分隔符而“=”是关系运算符,判定两个对象是否相等。
刚刚写程序的同学要特别注意这一点。
例:a,b:integer;——是一个说明语句。
“:”是变量表和变量类型的分隔符a=b——是一个表达式。
它的值是一个布尔类型的量:TRUE或FALSEa:=3;——是一个语句。
把整型常量值3赋给整型变量a2、变量要先说明在赋值号左边出现的变量,要在程序头的说明部先加以说明,否则编译时出错。
3、表达式必须要有确定的值赋值号右边出现的表达式,必须是可以求值的。
也就是说,经过运算之后,能得出一个具体的、确定的值出来。
大家想一想,如果连表达式自己都不知道自己的值是多少,怎么还能把值“赋予”别人呢?4、赋值号两边的数据类型必须相同或相容我们知道,PASCAL中的量不管是变量还是常量都有一个属性称为“数据类型”。
数据类型相同的或相容的才可以相互赋值。
怎么来理解这句话呢?打个比方,我们沏功夫茶用的是小茶杯,装饭时用饭碗。
如果用饭碗来泡功夫茶,用小茶杯来装饭,那情形一定很滑稽而且是不可行的。
回到PASCAL中来,赋值号左边变量如果是整型,右边表达式的值的类型也要是整型;赋值号左边变量如果是字符型,右边表达式的值的类型也要是字符型……否则的话,也要出错了。
这是数据类型相同的情况。
对于数据类型相容的,我们也可以用一个例子来帮助理解。
我们都喝过功夫茶,也喝过大杯茶。
把功夫茶倒在大茶杯里,一般不会出什么问题;但如果把大杯里的茶倒在功夫茶杯里呢?可能小茶杯装不下大茶杯里的茶,茶“溢出”了。
在PASCAL中也会出现这种情况。
当一种数据类型的取值范围包含着另一种数据类型的取值范围时,就可能出现类型相容的情况。
如实型与整型,整型、字符型与它们各自的子界类型……如果把整型值赋给实型变量,把整型子界值赋给整型变量,不会出错;但如果反过来,就会出现“溢出”,出错了。
因些,我们在写赋值语句时,要注意两边的类型是否匹配。
例:有程序如下:var a,b:integer;c:real;d:0..100;begina:=100;b:=a;{-------------以上是相同数据类型进行赋值}d:=100;b:=d;c:=b;{-------------以上是相容数据类型进行赋值}d:=b;a:=c;{-------------以上两个赋值语句都出现溢出,编译时出错}end.3.2 读语句读语句(read语句)和赋值语句一样,能够改变变量的值。
与赋值语句不同,读语句从键盘或文件接收值赋予变量,而赋值语句则直接由程序语句获得。
读语句格式如下:read(变量名表);readln(变量名表);readln;读语句是编程中用得最多的语句之一。
在使用时有几点要注意:1、变量名表。
写在括号中的变量,都要在变量说明中先预以说明;变量与变量之间,以“,”分隔;例:var a,b:integer;read(a,b);2、从键盘接收数据时,要注意各种不同数据类型数据的分隔符不同。
所谓分隔符就是两个完整的数值之间的标记,也可以这样理解,当计算机从键盘读入数据时,一旦碰到分隔符,就认为当前的数据读入已完成,可以把它赋给相应的变量了。
各种数据类型的分隔符如下:数值型(包括整型、实型以及它们的子界类型)以空格或回车符作为分隔符;字符型不需分隔符(因为字符型数据的长度固定,只有一个);字符串以回车符作为分隔符。
3、注意read与readln的区别例:有两段程序有相同的变量说明如下,不同的读语句,我们可以通过比较它们执行结果的异同来理解read与readln的区别。
在程序段一执行时,“read(a);”语句接收了第一个数据1并将它赋给变量a;接着执行第二个语句“readln(b,c);”,接收了第一行数据中的2、3并把它们分别赋给变量b,c,同时,把本行其它数据全部屏蔽掉,也就是宣布它们全部作废。
程序段二的执行情况也是如此。
因此,我们可以得出结论:语句read只管接收数据,语句readln接收完数据后,还把同行的其它数据全部宣布作废。
4、“readln;”语句从键盘接收一个回车符。
这个语句通常用在需要暂停的地方。
如输出时用来等待程序员看清结果。
3.3 写语句写(write)语句是Pascal中唯一能将运算结果送出显示在显示器屏幕的语句。
格式如下:write(输出量表);{输出后不换行}writeln(输出量表);{输出后换行}writeln;{输出一个回车符}使用写语句时也有一些小问题需要注意。
1、输出量可以是:变量。
输出变量的值。
输出多个变量时,变量间用“,”分隔。
表达式。
输出的是表达式的值。
常量。
直接输出常量值。
2、场宽的限制在输出不同格式的数值时的作用:例1:输出多个空格。
write('':n);句子的意思是以n个字符宽度输出冒号前数据项,如果数据项长度不足n,则前面以空格补齐;如果数据项长度大于n,则以实际长度输出。
如上语句句输出n个空格。
例2:数据项间隔。
如输出最多四位的数据:write(x:5)。
则数据间至少分隔一个空格。
例3:实型数据小数位数的确定。
实型数据不带格式限制时,以科学计数法的形式输出,和我们的一般书写习惯不同。
如果加上场宽的限制,则可以有不同的效果:var a:real;begina:=15/8;writeln(a);{输出 1.8750000000E+00}wiiteln(a:0:2);{输出 1.88 整数部分按实际位数输出,小数部分保留两位小数,末位四舍五入.} writeln(a:0:0):{输出 2 只输出整数部分,小数部分四舍五入}end.3、“writeln;”语句通常用于输出多组数据时在屏幕上输出空行来分隔数据组。
4.1 IF语句条件语句用于响应一个条件的两个方面。
例如:今天如果下雨,我们就在家;否则(不下雨)我们就去旅游。
又如:如果已经搜索得到结果,就打印出答案;否则(还没得到结果)就继续搜索。
IF语句的一般格式是:IF 条件THEN 语句1{条件为真时的响应、处理}ELSE 语句2;{条件为假时的响应、处理}使用条件语句时要注意:1、条件语句是一个语句。
IF、THEN、ELSE都是语句的一个部分。
所以它只能有一个“;”作为分隔符,放在句子的结束,特别要注意不能放在ELSE 之前。
2、如果我们的程序只需对条件为真的情况作出处理,不需要处理条件为假的情况,则IF语句省略ELSE分句,格式变成:IF 条件THEN 语句1;{条件为真时的响应、处理}如:如果数a大于等于0则输出它的平方根。
if a>=0 then writeln(sqrt(a));对以上的例子,条件为假时不需处理,于是我们干脆省去ELSE分句。
3、if语句可以多层嵌套。
嵌套时为了避免误解,可以用begin ,end括起嵌套部分;else分句一般和最近的if分句配套:IF 条件THEN BEGINif 条件1 then …… else ……;ENDELSE BEGINif 条件2 then …… else ……;end;例1、输入两个数a,b,输出较大的数。
program tt;var a,b:integer;beginwrite('please input a,b:');readln(a,b);if a>b then writeln(a)else writeln(b);end.4.2 CASE语句分情况语句适用于对一个条件的多种情况的响应。
格式:case 表达式 of标号1:语句1;标号2:语句2;……标号n:语句n;else 语句n+1end;case语句在使用时有几点要注意:1. end与case对应;标号与语句之间用“:”分隔;else与语句之间不用分隔符。
2. 标号必须是一常量,其类型与表达式的类型一致例2:某全自动加油站a,b,c三种汽油的单价(元/kg)分别是1.50、1.35和1.18,也提供了“自己加”或“协助加”两个服务等级,这样用户可以得到5%或10%的优惠。
编一个程序,用户输入加油量、汽油品种和服务类型(f-自动,m-自己,e-协助),然后计算应付款。
program pcase1;varoil,help:char;kg,total:real;beginwrite('Enter the amount in kilograms(kg):'); readln(kg);write('Which type of the gasoline(a,b,c):'); readln(oil);wirte('Which type for service(f,m,e):'); readln(help);case oil of'a': total:=1.50*kg;'b': total:=1.35*kg;'c': total:=1.18*kg;else writeln('Input Error!')end;{——————处理汽油的类型}case help of'f':;'m': total:=total*(1-0.05);'e': total:=total*(1-0.10);else writeln('Input Error!')end;{——————处理服务类型}writeln;writeln('Total is ',total:10:2);3. 可以多个标号对应同一条语句4. 语句可以是多个语句,但必须用语句括号(begin……end)括起5. case语句也可以嵌套例3:从键盘上读入年和月,输出该月有多少天。
program pcase2;varyear,month,day:integer;runnian:boolean;beginwrite('Enter year and month:'); readln(year,month);case month of1,3,5,7,8,10,12: day:=31;4,6,9,11: day:=30;{————以上处理31天和30天的情况}2:beginrunnian:=(year mod 400=0) or ((year mod 4=0) and (year mod 100<>0));case runnian oftrue: day:=28;false: day:=29;end;end; {————以上处理2月的情况:闰年28天,平年29天}end;end.5.1 For语句1.递增型FOR循环。