网站系统
升级通知

关于网站系统升级的通知

  感谢您长期关注郑州市第一0一中学,为了更好地提升网站使用功能和服务质量,本网站将于近期进行后台系统升级,升级期间网站系统将会出现运行缓慢或无法打开界面等情况。

  大家可以通过备用网站(http://zz101.echead.com/)和微信公众号平台(微信号:zz101zx)进行访问。


官方微信

  给您带来的不便,敬请谅解!感谢您的理解与支持!

郑州市第101中学
2020年2月19日

logo

Pascal语言和程序设计基础

作者:教师发展中心 发布时间:2016-05-04 10:35:00 点击量:190
Pascal语言和程序设计基础
 
授课教师:李鸿、文冬晖
 
【摘要】本课程主要介绍PASCAL语言的基本概念、语句和语法规范,并根据结构化程序设计原则讨论用PASCAL语言进行程序设计的方法。
【关键词】Pascal程序设计NOI信息技术
 
第 1 章 Pascal 基本语句与程序结构
第1节 简单Pascal程序实例
 
【问题描述】
从键盘上输入圆的半径,从屏幕上输出圆的面积。
【程序设计】
[程序清单]
\

【知识拓展】
1.学习之前,我们先认识几个英文单词。Program(程序)、const是constant(常量)的缩写、var是variable(变量)的缩写、begin(开始)、end(结束)。
2.从上面的例子中可以看到一个pascal程序分为两个部分:程序首部和程序体。程序首部包括:
程序标志。“program”用来标识“这是一个pascal程序”;程序名称。由程序设计者自己定义,但一般习惯是使程序名能反映出程序的含义。
程序体包括:
说明部分。用来描述程序中用到的数据属性。它分为常量说明和变量说明两部分。执行部分。它的作用是通知计算机执行指定的操作,如果一个程序中不写执行部分,在程序运行时计算机什么工作也不做。执行部分以“BEGIN”开始,以“END.”结束(注意:“END.”后面有一个句点,表示整个程序结束)。它们中间是一些执行具体操作的语句,以分号作为语句间的分隔符,Being和end应成对出现。
3.常量是指要程序运行过程中,其值不能被改变的量。本程序中第二、三行是“常量说明区”,用来定义常量,也就是给常量取个名字并用该名字标识符来代表它,如本例中用到的圆周率就是一个不会改变的量,于是可以将pi定义为常数3.14159。这样在程序中凡出现pi处,都看作和3.14159相同。
4.变量代表了一个存储单元,该单元中存放的数值是可变的,故称为变量。如游戏“魂斗罗”中玩者命的个数最初为3,当你死了一次命的个数减少一个,这里命的个数就是一个变量(或者说命的个数存储在一个存储单元中)。可以看出在程序运行过程中,其值可以改变的量,称为变量。
5.程序的书写格式一般不影响程序的功能,但为了使程序的结构清晰,易于阅读,注意要采取紧缩对齐格式书写。程序中{……}内的内容是对语句的注释,不影响程序的实际运行。
6.系统的启动:在运行系统目录下的启动程序fp.exe,即可启动系统。屏幕上出现如图1所示的集成环境。
最顶上一行为主菜单。中间蓝色框内为编辑窗口,在它个编辑窗口内可以进行程序的编辑。最底下一行为提示行。
\
 
 
 
 
7.新建程序窗口
按F10进行主菜单,选择FILE菜单,执行其中New命令。就可建立一个新的程序窗口(默认文件名为Noname01.pas或Noname02.pas等)。
8.程序的输入、编辑与运行在当前程序窗口中,一行一行的输入程序。事实上,程序窗口是一个全屏幕编辑器。
所以对程序的编辑与其它编辑器的编辑方法类似,这里不再重复。当程序输入完毕之后,一般要先按Alt+F9(或执行compile菜单中compile命令)对程序进行编译。如果程序有语法错误,则会弹出compilemessag窗口显示错误信息。若无语法错误,则窗口正中央会出现一个对话框,提示编译成功。接下来,我们可以运行程序了。
程序的运行可以通过按ALT+R打开RUN菜单中的RUN命令,或直接按快捷键CTRL+F9。则可以在用户窗口中输出运行结果。通常在程序运行结束后系统回到Pascal系统的集成环境,因此要查看运行结果,要按ALT+F5将屏幕切换到用户屏幕。
9.程序的保存与打开:当程序第一次运行时,系统就要求用户保存,并在屏幕上会出现一个对话框要求输入文件名(默认扩展名为.pas)。。当我们把程序修改后想再次保存,就可以通过按F2键(或执行File菜单中的save命令)来保存程序。
当我们要将磁盘上的程序文件中的PASCAL程序装入窗口时,可按F3(或执行File菜单中的Open命令)来装入程序,此时系统也会弹出一个对话框要求输入要打开的文件名,或直接在文件对话框列表中选择所要的文件,然后回到打开文件。
【同步练习】
1.阅读下列程序,分析程序的结构,指出其中变量的个数,并上机运行。
[程序清单]
program  p1_1_2(input,output);
var
a,b,h,s:real;
begin
write(´inputa,b,h:´);
readln(a,b,h);
s:=(a+b)*h/2;
writeln(´s=´,s:12:6);
end.
[运行示例]
inputa,b,h:3↙4↙5↙(下划线上的内容需要从键盘输入,其中“↙”表示回车键)
S=16.000000
 
第2节顺序结构的程序实例
 
【问题描述】
输入任意两个数,将顺序交换后输出,例如输入两数为45、32,输出则为32、45。
【问题分析】
 
开始
输入 x,y
S <——x
X<——y
Y<——s
输出 x,y
结束                    3
 
由于涉及到的两个数是任意的,不能固定大小,所以在这里设置两个变量来存放着两个数值。
在做题之前,我们联想一下生活中的实例,如果有满满的两杯水,我们要将两个杯中的水交换,常要借助于第三个杯子,第一步将第一杯水倒入第三个杯子中,第二步将第二杯水倒入第一个杯子中,第三步将第三杯水倒入第二个杯子中。通过以上三步后,两个杯中的水就被交换了。
在本题中我们将两个数设置为两个变量X,Y,再引入一个中间变量S,在前面我们提到变量代表了一个存储单元,该单元中存放的数值是可变的,那么我们可以将变量理解为一种容器,只不过这里放置的不是水这样的物品,而是数值。两个变量值交换,我们可以采取顺序结构流程图。
【程序设计】
[程序清单]
program p1_2_1(input,output);
var
x,y,s:integer;
begin
writeln(‘请输入两个数:’);
readln(x,y);
s:=x;
x:=y;
y:=s;
writeln(‘输出两个数:’,x,’’,y);
end.
[运行示例]
请输入两个数:45↙32↙
输出两个数:3245
【知识拓展】
1.程序是由若干条语句组成的。一条语句完成一个动作或者实现一个功能,若干条语句组合在一起就完成了整个程序的任务。像本例这样按照程序的语句顺序逐句执行的程序,我们称之为顺序结构的程序。
2.本例顺序结构的程序流程图和结构化流程图如下:
\

图1.1 顺序结构的程序流程图和结构化流程图
3.一个程序中可能要使用到若干个变量,如本程序中使用了3个变量,为了区别不同的变量,必须给每个变量(存贮单元)取一个名(称为变量名),该变量(存贮单元)存放的值称为变量的值,变量中能够存放的值的类型就是变量的类型,如本程序中就是设置为整型。
变量说明的一般格式:
VAR
<变量标识符>[,<变量标识符>]:<类型>;
(中括号内部分表示可省,下同)
其中VAR是pascal保留字,表示开始一个变量说明段,每个变量标识符或由逗号隔开的多个变量标识,必须在它的冒号后面说明成同一类型。一个程序中,可以说明许多不同类型的变量,每种类型变量之间用分号隔开,共用一个VAR符号。
例如:
var
age,day:integer;
amount,average:real;
其中,Integer(整型)、Real(实型)是标准标识符,它们是“类型标识符”,代表了确定的类型,如age和day被定义为整型变量,amount和average被定义为实型变量。
4.变量既然代表一个存储单元,其值是可变的,那么其中的值是怎么提供的,又是怎么改变的呢?可以通过赋值语句来进行。
赋值语句的格式:变量名:=表达式;其中":="称为赋值号。
执行过程:计算机先计算赋值号右边表达式的值,然后将表达式的值赋给变量名代表的变量。
如:A:=24;A:=A+1
5.输出语句的作用是将程序运算的结果输出到屏幕或打印机等输出设备。这里通常是指输出到屏幕。
输出语句的两种格式
① write语句
格式:Write(表达式1,表达式2,……);
如: write(1.2,3.4,5);
write('MynameisLiping');
② writeln语句格式:
Write(表达式1,表达式2,……)或writeln
6.输出语句的功能:计算机执行到某一输出语句时,先计算出输出语句中的每个表达式的值,并将每一个表达式的值一个接一个地输出到屏幕上。
Write语句与writeln语句格式上都相似,但它们在功能上有所不同,两个语句的区别在于,write语句将其后括号中的表达式一个接一个输出后,没有换行。而writeln语句则在输出值后换行。
7.FreePascal向程序设计者提供了丰富的数据类型,其中最基本的几种数据类型是:整型、实型、布尔型和字符型。
8.一个整型数据用来存放整数,整型数据可以是正整数、负整数和整数零。FreePascal支持五种预定义整型,它们是短整型(Shorint)、整型(integer)、长整型(Longint)、字节型(Byte)和字类型(Word),每一种类型规定了相应的整数取值范围以及所占内存字节数(一个字节为8个二进制位)。integer类型的取值范围是-32768..32767,Longint类型的取值范围是-2147483648..2147483647。
【问题描述】
试编一程序,输入一梯形的上底、下底、高,求该梯形的面积。
【问题分析】
整个程序分为三段:输入数据、计算面积、输出结果。程序中用a,b,h三个变量分别存放梯形的上、下底与高,S存放面积。要使用这些变量都要先说明,程序的执行部分中先输入上、下底与高,接着求面积S,最后输出结果S。在这里根据情况要将变量定义为实型。
【程序设计】
[程序清单]
program  p1_2_2;
var
a,b,h,s:real;
begin
write('Inputa,b,h:');
readln(a,b,h);
s:=(a+b)*h/2;
write('s=',s:10:3);
end.
【知识拓展】
1.在程序中变量获得一个确定的值,固然可以用赋值语句,但是如果需要赋值的变量较多,或变量的值经常变化,则使用本节介绍的输入语句──读语句,将更为方便。读语句是在程序运行时由用户给变量提供数据的一种很灵活的输入动作,它有两种格式:
read(<变量名表>);
readln[(<变量名表>)];
其中变量名表是用逗号隔开的若干个变量名组成的。功能:从标准输入文件(一般对应着键盘)中读入数据,并依次赋给相应的变量。说明:
Ⅰ.执行到read或readln语句时,系统处于等待状态,等待用户从键盘上输入数据,系统根据变量的数据类型的语法要求判断输入的字符是否合法。
Ⅱ.在输入数值型(整型或实型)数据时,数据间要用空格或回车分隔开各个数据,输入足够个数的数据,否则仍要继续等待输入,但最后一定要有回车,表示该输入行结束,直到数据足够,该读语句执行结束,程序继续运行。
Ⅲ.read语句与readln语句的第一个区别是:
read语句是一个接一个地读数据,在执行完本Read语句(读完本语句中变量所需的数据)后,下一个读语句接着从该数据输入行中继续读数据,也就是说,不换行。
2.一个实型数据用来存放实数。实型数据可以是正实数、负实数和实数零。实型数据一般用小数或指数形式(亦称科学表示法)表示。例如:
+1993.33
3.5E+8(=3.5*108)
-0.5E-3(=-0.5*10−3)
-20.0
-418E3(=-418*103)
0.0等
都是全法实数型数。Real的取值范围是2.9*10-39—1.7*1038。
3.Freepascal语言中的算术表达式是由符合其语法规定的运算对象(包括常量、变量、函数)、算术运算符、圆括号组成的有意义的式子。
如:A+3.14159*5/8.4-Abs(-1123)。
4.常用的有以下6个算术运算符:
①  +(加)
②  -(减)
③  *(乘)
④  /(实数除):得到结果为实型.如5.0/2.0=2.5,5/2=2.5,4/2=2.0而不等于2
⑤  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。
5.如果一个表达式里出现两个或两个以上的运算符,则必须规定它们的运算次序。
pascal规定:
①表达式中相同优先级的运算符,按从左到右顺序计算;
②表达式中不同优先级的运算符,按从高到低顺序计算;
③括号优先级最高,从内到外逐层降低;在算术运算中运算符的优先顺序与数学上的四则运算一致,即“先乘除后加减”(注:“MOD”、“DIV”运算的优先级与“*”、“/”相同)。
【同步练习】
1、有三个小朋友甲乙丙。甲有50粒糖果,乙有43粒糖果,丙有13粒糖果。现在他们做一个游戏。从甲开始,将自己的糖分三份,自己留一份,其余两份分别给乙与丙,多余的糖果自己吃掉,然后乙与丙也依次这样做。问最后甲、乙、丙三人各有多少粒糖果?
问题分析:这个问题中我们关心的是在游戏过程中每个小朋友的糖果个数,且他们所拥有的的糖果数是在变化的。因此可用a,b,c三个变量分别存放甲乙丙三个小朋友在某一时刻所拥有的糖果数。对于每人,分糖后,他的糖果数一定为原来的糖果数div3(因为分糖过程糖果的数目不一定都刚好分完,用整除恰恰可以表示多余的糖自己吃掉)。而其他两人则增加与这个小朋友现在拥有的一样的糖果。
[程序清单]
program  ex2;
var
A,B,C:integer;
begin
A:=50; B:=43; C:=13; 
{初始时每个小朋友所拥有的糖果数}
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);               {输出结果}
readln;
end.
[运行示例]
A=51       B=35       C=16
【课外练习】
1.使用PASCAL语言在屏幕上输出自己的班级和姓名。
2.已知一个学生的语文成绩为89,数学成绩为96,外语成绩为99,编程求他的
总分和平均成绩。
3.输入一个三位自然数,把这个数的百位数与个位数对调,输出对调后的数。