问题1 认识用Pascal语言编写的程序.rtf
第 1 章 Pascal 基本语句与程序结构第 1 节 简单 Pascal 程序实例【问题描述】从键盘上输入圆的半径,从屏幕上输出圆的面积。【程序设计】程序清单Program p1_1_1(input,output);(程序首部)const pi=3.14159;var r,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 相同。4变量代表了一个存储单元,该单元中存放的数值是可变的,故称为变量。如游戏魂斗罗中玩者命的个数最初为 3,当你死了一次命的个数减少一个,这里命的个数就是一个变量(或者说命的个数存储在一个存储单元中)。可以看出在程序运行过程中,其值可以改变的量,称为变量。5程序的书写格式一般不影响程序的功能,但为了使程序的结构清晰,易于阅读,注意要采取紧缩对齐格式书写。程序中.内的内容是对语句的注释,不影响程序的实际运行。6系统的启动:在运行系统目录下的启动程序 fp.exe,即可启动系统。屏幕上出现如图 1 所示的集成环境。最顶上一行为主菜单。中间蓝色框内为编辑窗口,在它个编辑窗口内可以进行程序的编辑。最底下一行为提示行。7 新建程序窗口按 F10 进行主菜单,选择 FILE 菜单,执行其中 New 命令。就可建立一个新的程序窗口(默认文件名为 Noname01.pas 或 Noname02.pas 等)。8 程序的输入、编辑与运行在当前程序窗口中,一行一行的输入程序。事实上,程序窗口是一个全屏幕编辑器。所以对程序的编辑与其它编辑器的编辑方法类似,这里不再重复。当程序输入完毕之后,一般要先按 Alt+F9(或执行 compile 菜单中 compile 命令)对程序进行编译。如果程序有语法错误,则会弹出 compile messag 窗口显示错误信息。若无语法错误,则窗口正中央会出现一个对话框,提示编译成功。接下来,我们可以运行程序了。程序的运行可以通过按 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(input a,b,h:);readln(a,b,h);s:=(a+b)*h/2;writeln(s=,s:12:6);end.运行示例input a,b,h:345(下划线上的内容需要从键盘输入,其中表示回车键)S=16.000000第 2 节 顺序结构的程序实例【问题描述】输入任意两个数,将顺序交换后输出,例如输入两数为 45、32,输出则为 32、45。【问题分析】开始输入 x,yS-xX-yY-s 输出 x,y 结束由于涉及到的两个数是任意的,不能固定大小,所以在这里设置两个变量来存放着两个数值。在做题之前,我们联想一下生活中的实例,如果有满满的两杯水,我们要将两个杯中的水交换,常要借助于第三个杯子,第一步将第一杯水倒入第三个杯子中,第二步将第二杯水倒入第一个杯子中,第三步将第三杯水倒入第二个杯子中。通过以上三步后,两个杯中的水就被交换了。在本题中我们将两个数设置为两个变量 X,Y,再引入一个中间变量 S,在前面我们提到变量代表了一个存储单元,该单元中存放的数值是可变的,那么我们可以将变量理解为一种容器,只不过这里放置的不是水这样的物品,而是数值。两个变量值交换,我们可以采取顺序结构流程图。【程序设计】程序清单Program p1_2_1(input,output);varx,y,s:integer;beginwriteln(请输入两个数:);readln(x,y);s:=x;x:=y;y:=s;writeln(输出两个数:,x,y);end.运行示例请输入两个数:45 32输出两个数:32 45【知识拓展】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+15.输出语句的作用是将程序运算的结果输出到屏幕或打印机等输出设备。这里通常是指输出到屏幕。输出语句的两种格式 write 语句格式 Write(表达式 1,表达式 2,.);如:write(1.2,3.4,5);write(My name is Liping);writeln 语句格式:Write(表达式 1,表达式 2,.)或 writeln6.输出语句的功能:计算机执行到某一输出语句时,先计算出输出语句中的每个表达式的值,并将每一个表达式的值一个接一个地输出到屏幕上。Write 语句与 writeln 语句格式上都相似,但它们在功能上有所不同,两个语句的区别在于,write 语句将其后括号中的表达式一个接一个输出后,没有换行。而 writeln 语句则在输出值后换行。7.Free Pascal 向程序设计者提供了丰富的数据类型,其中最基本的几种数据类型是:整型、实型、布尔型和字符型。8.一个整型数据用来存放整数,整型数据可以是正整数、负整数和整数零。Free Pascal支持五种预定义整型,它们是短整型(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(Input a,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*10),-0.5E-3(=-0.5*10),-20.0,-418E3(=-418*10),0.0 等都是全法实数型数。Real 的取值范围是 2.9*10-39-1.7*1038。3.Free pascal 语言中的算术表达式是由符合其语法规定的运算对象(包括常量、变量、函数)、算术运算符、圆括号组成的有意义的式子。如:A+3.14159*5/8.4-Abs(-1123)。4.常用的有以下 6 个算术运算符:(加)(减)(乘)(实数除):得到结果为实型.如 5.0/2.0=2.5,5/2=2.5,4/2=2.0 而不等于 2DIV(整除):只能用于整数运算,即除数和被除数均为整型,结果也为整型。如 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 三个变量分别存放甲乙丙三个小朋友在某一时刻所拥有的糖果数。对于每人,分糖后,他的糖果数一定为原来的糖果数 div 3(因为分糖过程糖果的数目不一定都刚好分完,用整除恰恰可以表示多余的糖自己吃掉)。而其他两人则增加与这个小朋友现在拥有的一样的糖果。程序清单program ex2;var A,B,C:integer;beginA:=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 输入一个三位自然数,把这个数的百位数与个位数对调,输出对调后的数。第 3 节 两种可能的选择结构程序实例【问题描述】输入一个整数,判断是否为偶数。(是输出否则输出)。【问题分析】这是一个需要从键盘上输入数据 a,然后输出其是否为偶数。问题的关键是偶数的判断,我们知道如果一个数能被 2 整除,余数为 0,那么它就是偶数。根据前面学到的知识当 a mod 2=0 时 a 为偶数。【算法设计】*自然语言输入数 a;判断 a 是否为偶数;如果是偶数,那么输出yes;如果不是偶数,那么输出no;*结构化流程(N-S)图 图 1.2 结构化流程(N-S)图【程序设计】程序清单Program p1_3_1;Var a:integer;Begin Write(a=);readln(a);If (a mod 2=0)then writeln(yes)Else writeln(no);Readln;End.运行示例a=16yes【知识拓展】1.在日常生活中,我们经常遇到根据具体情况的不同而去做具体的事,比如:若星期天下雨,我就在家看书,否则我就去踢足球。我们可以画出这个语句的流程图(N-S 图)(见图 1):图 1 图 22if 格式 第一种:IF 布尔表达式THEN 语句;第二种:IF 布尔表达式THEN 语句 ELSE 语句;3.功能.执行 IF 语句时,先计算布尔表达式的值,若为 TRUE 则执行语句,否则不执行任何操作。.执行 IF 语句时,先计算布尔表达式的值,若为 TRUE 则执行语句,否则执行语句;4条件语句的规范书写:条件语句(尤其是格式二形式)是完整的一条语句,中间不应该有分号,以免出错。最好书写成如下的锯齿形式,以使程序结构清晰,并便于阅读。if 条件 then 语句 1else 语句 2;5在前面,我们学习了整型(integer)与实型(real)。它们都是数值型的(即值都为数)。布尔型(Boolean)也是一种基本的数据类型。这种类型只有两种值,即真与假,真用 ture 表示,假用 False 表示,所以布尔类型只有 TRUE 与 FALSE 两个常量。6.如果我们将某些变量说明成布尔型,那么这些变量就是布尔变量,它们只能用于存放布尔值(ture 或 false)。例如,VAR A,B:BOOLEAN;7.用小括号、=、=、=、将两个算术表达式连接起来的式子就称为关系表达式(比较式),关系表达式的值为布尔值,如 35 的值为 FALSE。【同步练习】1输入两个整数,输出其中最大的数。问题分析:我们用 a,b 表示输入的两个数,引入 max 表示其中最大的数,将 a,b 比较后较大的数送给 max。程序清单Program p1_3_2;Var a,b,max:integer;Begin Writeln(input a,b=);Readln(a,b);If a=b then max:=a else max:=b;Writeln(max=;max);End.运行示例input a,b=4 15max=15【课外练习】1 从键盘上任意输入一个正数 n,判断它是奇数还是偶数.2 根据输入的学生成绩判断是否及格,及格输出(pass!),否则输出(fail).3 输入一个年号,判断它是否为闰年。第 4 节 循环结构程序实例【问题描述】输出 1100 之间的所有偶数。【问题分析】从 1 开始直至 100,对每个数进行判断,如果是偶数就输出。判断方法就是将该数除 2取余数,如余数为 0 则为偶数,反之就不是,共判断 100 次。这是有规律的重复运算,应该用循环来解决。用变量 I 来表示要判断的数,I 初值为 1,每判断 1 次 I 值加 1,直至 100。【程序设计】program p1_4_1;var i:integer;beginfor i:=1 to 100 do if i mod 2=0 then write(i:5);end.【知识拓展】1在实际应用中,会经常遇到许多有规律性的重复运算,这就需要掌握循环结构程序设计。在 Pascal 语言中,循环结构程序通常由三种循环语句来实现。它们分别为 FOR 循环、当循环和直到循环。通常将一组重复执行的语句称为循环体,而控制重复执行或终止执行由重复终止条件决定。因此,重复语句是由循环体及重复终止条件两部分组成。2for 语句的一般格式for:=to do;for:=downto do;其中 for、to、downto 和 do 是 Pascal 保留字。表达式 1 与表达式 2 的值也称为初值和终值。3For 循环是计数型循环,当 for 语句确定之后,则循环次数也就确定,如上例是循环次数是(100-1)+1=100,一般用公式表示为:(终值-初值)+14 先将初值赋给左边的变量(称为循环控制变量);判断循环控制变量的值是否已超过终值,如已超过,则跳到步骤;如果未超过终值,则执行 do 后面的那个语句(称为循环体);循环变量递增(对 to)或递减(对 downto);返回步骤;循环结束,执行 for 循环下面的一个语句。【问题描述】计算从到某数 a 之间所有奇数的和。(a1)【问题分析】本题中由于 a 值不定,所以不能确知最大的奇数是几,只知道它是不大于 a 且最接近它的奇数,但最小的奇数是 1,所以对从 1 开始的奇数,依次进行求和并将其与 a 比较大小.【程序设计】program p1_4_2;var odds,limit,sum:integer;beginreadln(limit);sum:=0;odds:=1;while odds=limit dobeginsum:=sum+odds;odds:=odds+2end;writeln(sum:1)end.【知识拓展】1 for 循环有时也称为计数循环,当循环次数未知,只能根据某一条件来决定是否进行循环时,用 while 语句或 repeat 语句实现循环要更方便。2 while 语句的形式为:while do;其意义为:当布尔表达式的值为 true 时,执行 do 后面的语句。3.while 语句的执行过程为:判断布尔表达式的值,如果其值为真,执行步骤 2,否则执行步骤 4;执行循环体语句(do 后面的语句);返回步骤 1;结束循环,执行 while 的下一个语句。3 直到循环语句的一般形式:Repeat;:;until;【课外练习】1 求 s=1+2+3+.+100 的值。2 编程求 5!(5!=1*2*3*4*5)3 输入一组整数,统计出其中正数、负数的个数并打印出来,当输入 0 时,程序结束。Pascal 编程入门第 1 章 Pascal 基本语句与程序结构61