全面初识Pascal语言(共七章)

上传人:lis****211 文档编号:192793507 上传时间:2023-03-07 格式:DOCX 页数:21 大小:60.59KB
收藏 版权申诉 举报 下载
全面初识Pascal语言(共七章)_第1页
第1页 / 共21页
全面初识Pascal语言(共七章)_第2页
第2页 / 共21页
全面初识Pascal语言(共七章)_第3页
第3页 / 共21页
资源描述:

《全面初识Pascal语言(共七章)》由会员分享,可在线阅读,更多相关《全面初识Pascal语言(共七章)(21页珍藏版)》请在装配图网上搜索。

1、第一讲 初识Pascal语言一、Pascal语言概述Pascal语言是一种算法语言,它是瑞士苏黎世联邦工业大学的Niklaus Wirth教授于 1968年设计完成的,1971年正式发表。1975年对Pascal语言进行了修改,作为“标准PASCAL 语言”。Pascal语言是一种结构化的程序设计语言,可以用来编写应用程序。它又是一种系统 程序设计语言,可以用来编写顺序型的系统软件(如编译程序)。它的功能强、编译程序简 单。二、Pascal语言的特点Pascal语言有以下几个主要的特点:1. 它是结构化的语言。Pascal语言提供了直接实现三种基本结构的语句以及定义“过 程”和“函数”的功能。

2、可以方便地书写出结构化程序。在编写程序时可以完全不使用GOTO 语句和标号。这就易于保证程序的正确性和易读性。Pascal语言强调的是可靠性、易于验证 性、概念的清晰性和实现的简化。在结构化这一点上,比其它(如BASIC,FORTRAN77) 更好一些。2. 有丰富的数据类型。Pascal提供了整数、实型、字符型、布尔型、枚举型、子界型、数组类型、集合类型、记录类型、和文件类型和指针类型。3.能适用于数值运算和非数值运算领域。PASCAL的功能较强,能广泛应用于各种领域。PASCAL语言还可以用于辅 助设计,实现计算机绘图功能。4. PASCAL程序的书写格式比较自由。PASCAL允许一行写多

3、个语句,一个语句可以 分写在多行上,这样就可以使PASCAL程序写得格式优美,便于阅读。由于以上特点,许多学校选PASCAL作为程序设计语言,它能给学生严格而良好的程 序设计的基本训练。培养学生结构化程序设计的风格。三、Pascal语言程序的基本结构程序设计语言都有着一组自己的记号和规则。PASCAL语言必须采用其本身所规定的记 号和规则来编写程序。下面我们首先来了解Pascal语言的程序基本结构。Pascal语言的程序结构为:程序首部标号说明语句常量定义语句类型定义语句程序的说明部分变量说明语句函数和过程说明语句分程序程序体程序的执行部分先看- 一个简单的PASCAL程序:program e

4、xam1(input,output);var r,s,c:real;beginreadln(r);c:=3.14*2*r;s:=3.14*r*r;writeln(c,s)end.从这个简单的程序可以看到:1、一个PASCAL程序分为两个部分:程序首部和程序体(或称分程序)。2、程序首部是程序的开头部分,它包括:程序标志。用“program”来标识“这是一个PASCAL程序”。PASCAL规定任何一 个PASCAL程序的首部都必须以此字开头。在Turbo pascal语言中,首部也可省略。程序名称。由程序设计者自己定义,如例中的exam1。在写完程序首部之后,应有一个分号。3、程序体是程序的主体

5、。程序体包括说明部分(也可省略)和执行部分两个部分。说明部分用来描述程序中用到的变量、常量、类型、过程与函数等。本程序中第二 行是“变量说明”,用来定义变量的名称、类型。PASCAL规定,凡程序中用到所有变量、符号常量、数组、标号、过程与函数、记录、文件 等数据都必须在说明部分进行定义(或称“说明”)。也就是说,不允许使用未说明先使用。执行部分的作用是通知计算机执行指定的操作。如果一个程序中不写执行部分,在 程序运行时计算机什么工作也不做。因此,执行部分是一个PASCAL程序的核心部分。执行部分以“begin”开始,以nd”结束,其间有若干个语句,语句之间以分号隔开。 执行部分之后有一个句点,

6、表示整个程序结束。4、PASCAL程序的书写方法比较灵活。应以程序结构清晰、易读为目的。在编写程 序时尽量模仿本书中例题程序格式。5、在程序中,一对大括号间的文字称为注释。注释的内容由人们根据需要可用英语书 写。注释可以放在任何空格可以出现的位置。执行程序时计算机对注释不予理睬。6、保留字后不加标点符号(END除外)。四、Turbo Pascal语言系统的使用下面我们就学习常用的Turbo Pascal 7.0系统的使用。1、系统的启动在运行系统目录下的启动程序TURBO.EXE,即可启动系统。屏幕上出现如图1所示的 集成环境。2、Turbo Pascal系统集成环境简介最顶上一行为主菜单。中

7、间蓝色框内为编辑窗口,可进行程序的编辑。最底下一行为提 示行,显示出系统中常用命令的快捷键。3、新建程序窗口按F10进行主菜单,选择File菜单,执行其中New命令。就可建立一个新的程序窗口(默 认文件名为 Noname00.pas 或 Noname01.pas 等)。4、程序的输入、编辑与运行在当前程序窗口中,一行一行的输入程序。事实上,程序窗口是一个全屏幕编辑器。所 以对程序的编辑与其它编辑器的编辑方法类似,这里不再重复。当程序输入完毕之后,一般要先按Alt+F9 (或执行compile菜单中compile命令)对程序进行编译。如果程序有语法错误,则会在程序窗口的第一行处显示第一个红色错误

8、信息。 若无语法错误,则窗口正中央会出现一个对话框,提示编译成功。接下来,我们可以运行程 序了。程序的运行可以通过按ALT+R打开RUN菜单中的RUN命令,或直接按快捷键CTRL+F9。 则可以在用户窗口中输出运行结果。通常在程序运行结束后系统回到Pascal系统的集成环 境,因此要查看运行结果,要按ALT+F5将屏幕切换到用户屏幕。5、程序的保存与打开当我们想把程序窗口中的程序存入磁盘时,可以通过按F2键(或执行File菜单中的save 命令)来保存程序。第一次保存文件时屏幕上会出现一个对话框要求输入文件名(默认扩展 名为.pas)。当我们要将磁盘上的程序文件中的PASCAL程序装入窗口时,

9、可按F3 (或执行File菜 单中的Open命令)来装入程序,此时系统也会弹出一个对话框要求输入要打开的文件名, 或直接在文件对话框列表中选择所要的文件,然后回到打开文件。第二讲数据类型、表达式、函数一、数据类型整数类型 integer-3276832767shortint longint type word-128127-214748364821474836470255065535短整型长整型字节型字型实数型real:包括正实数、负实数和实数零。实数的绝对值在1E-38到1E+38之间。形式有两种:十进制表示法人们日常使用的带小数点的表示方法。如0.0,-0.0,5.61,-8.0,等都是实

10、数形式。科学记数法科学记数法是采用指数形式的表示方法,如1.25x105可表示成1.25E+05。在科学记数 法中,字母壬”表示10这个“底数”,而E之前为一个十进制表示的小数,称为尾数,E之后 必须为一个整数,称为”指数”。如-1234.56E+26,0.268E-5 , 1E5是合法形式,而.34E12,2.E5 , E5 ,E,1.2E+0.5都不是合法形式的实数。和整数相比,实数能表示的范围大得多,但值得注意的是实数的运算整数的运算速度慢且 无法像整数那样精确表示,只能近似表示。如2.03.0比23的运算慢。字符型char括在两个单引号中的字符: a表示字符;a表示标识符,3,表示字符

11、;3表示整数值布尔型boolean布尔型有两个值,真和假,分别用标准常量名true和false表示,序号分别为1和0。二、常量在程序运行过程中,其值不能被改变的量称为常量。如12, 14.8, abc,true等。Pascal中有一个标准标识符Maxint,它代表所使用的计算机系统允许的最大整型数, 而最小的整型数即为一Maxint-1。Turbo Pascal还定义了长整数常量MaxLongInt,其值为 2147483647。字符常量:是由字符组成,所有字符来自ASCII字符集,共有256个字符。在程序中, 通常用一对单引号将单个字符括起来表示一个字符常量。如:a,A,0等。对于ASCII

12、 字符集中,按每个字符在字符集中的位置,将每个字符编号为0-255,编号称为对应字符 的序号。符号常量:一个常量即可以直接表示(称为直接常量,如124,156.8),也可以用 一个标识符来代表一个常量,称为“符号常量”。但符号常量必须在程序中的说明部分先定 义,后使用。定义符号常量的一般格式:CONST常量标识符*常量说明:常量说明部分以关键字const开头,后面的标识符为常量标识符,其中二号后 的常量为整数、实数、字符、字符串。例如:constpi=3.14159;zero=0;var r,s,c:real;则在程序中pi和zero作为符号常量,分别代表实数3.14159和整数0。也就是说,

13、常量 说明部分既定义了常量名及其值,又隐含定义了常量的类型。Pi(function 函数)为 3.1415926535897932385三、变量变量代表了一个存储单元,其中的值是可变的,故称为变量。即在程序运行过程中,其 值可以改变的量,称为变量。变量有三个要素是:变量名、变量类型、变量值。一个程序中可能要使用到若干个变量,为了区别不同的变量,必须给每个变量(存贮单 元)取一个名(称为变量名),该变量(存贮单元)存放的值称为变量的值,变量中能够存 放值的类型为变量的类型。1、变量名用一个合法的标识符代表一个变量。如m,rot,total等都是合法变量名。在程序中 用到的变量必须在说明部分加以说

14、明。“自定义标识符”的命名规则为:自定义标识符必须以字母(包含下划线)开头, 后面的字符可以是字母或数字。标识符长度不超过63个字符。变量名应遵循自定义标识符的命名规则,并注意“见名知义”的原则,即用一些有意义 的单词作为变量名。2、变量的类型常量是有类型的数据,变量在某一固定时刻用来存放一个常量,因此也应有相应的类型。 如整型变量用来存放整数,实型变量用来存放实数。3、变量说明在程序中若要使用变量,变量的名称及类型在程序的变量说明部分加以定义,变量的值 则在程序的执行部分中才能赋给。变量说明的一般格式:VAR变量标识符 ,:;(中括号内部分表示可省)其中VAR是pascal保留字,表示开始一

15、个变量说明段,每个变量标识符或由逗号隔开的 多个变量标识,必须在它的冒号后面说明成同一类型。一个程序中,可以说明许多不同类型 的变量,每种类型变量之间用分号隔开,共用一个VAR符号。例如:var age,day: integer;average: real;其中,Integer(整型)、Real(实型)是标准标识符,它们是“类型标识符”,代表了确 定的类型,如age和day被定义为整型变量,average被定义为实型变量。一旦定义了变量,就确定了它的类型,也就是说,就确定了该变量的取值范围和对该变 量所能进行的运算。四、表达式表达式的定义pascal语言中的算术表达式是由符合pascal语法规

16、定的运算对象(包括常量、变量、 函数)、算术运算符、圆括号组成的有意义的式子。如:A+3.14159*5/8.4-Abs(-13)1、算术运算符常用的有以下6个算术运算符:+、一、大、/ (实数除)得到结果为实型.如5.0/2.0=2.5, 5/2= 2. 5,4/2=2.0 而不等于 2。div (整除)div它要求除数和被除数均为整型,结果也为整型。如10 div 3=3,5 div 10=0, -15 div 4= -3b div运算只取商的整数部分,参与div运算的两个对象不能为实 型。mod求余),也只能用于整数运算,结果为整数。例如:10 mod 4=2 , -17 mod 4=

17、-1 , 4 mod (-3)=1, - 4 mod 3= -1,即 a mod b=a-(a div b)*b。2、 关系运算符:、=、=、=、3、逻辑运算符:NOT、AND、OR4、运算优先顺序如果一个表达式里出现两个或两个以上的运算符 则必须规定它们的运算次序。PASCAL语言规定运算优先级如下: 表达式中相同优先级的运算符,按从左到右顺序计算 表达式中不同优先级的运算符,从高到低进行计算 括号优先级最高,从内到外逐层依次降低 not优先级为4 *、/、div、mod、and 优先级为 3 +、-、or优先级为2=、=、=、in 优先级为 1五、标准函数学习标准函数要注意:每个标准函数对

18、自变量的数据类型都有一定的要求,函数经过运算后得到的函数值 的类型也是一定的。函数值的类型关系到该函数能够参加的运算。函数也可做自变量。1、算术运算函数函数绝对值函数 abs(x) abs(-10)=10平方值函数sqr(x) sqr(4)=16平方根值函数sqrt(x) sqrt(4)=22、逻辑判断函数奇数函数 odd (x)integer Booleanodd(-11)=true,odd(10)=false3、转换函数截尾函数 trunc(x) real integertrunc(3.7)=3, trunc(-7.9)=-7舍入函数 round(x) real integerround(

19、12.7)=13,round(12.4)=12round(-5.7)=-6序数函数ord(x)函数值为字符在ASCII中的序号ord(a)=97,ord(0)=48, ord(true)=1字符函数chr(x) x表示ASCII中的序号函数值为该序号代表的字符值。chr(48)=0 , chr(32)= 4、顺序函数前驱函数 pred(x) pred(5)=4, pred(b)=a,pred(true)=false后继函数 succ(x) succ(5)=6, succ(A,)=,B,第三讲赋值语句一、赋值语句变量既然代表一个存储单元,其值是可变的,那么怎么赋值的,又是怎么改变的呢?可 以通过

20、赋值语句来进行。1、赋值语句的格式变量名:=表达式;其中“:=”称为赋值号。2、执行过程计算机先计算赋值号右边表达式的值,然后将表达式的值赋给变量。如:A:=9*8-2; A:=A+1 注意:1、赋值号与比较关系符是不同的两个符号,2、赋值号两边的数据类型必须相容3、变量在程序中如没有赋值,数值变量的值为0。例1:下列赋值语句那些是错的?错在哪里?(var : x,y,z,a: integer;) x:=x+y x=y+z x+y:=z例2:写出下列程序的运行结果 var a,b,c:integer; begina:=5; b:=8;c:=a; a:=b; b:=c;writeln(a=,a,

21、 ,b=,b) end.思考题:如果不引入第三个中间变量,能否交换两个变量的值?编程序试一试。学习两个过程: inc(x,n) 等价于 x:=x+n dec(x,n) 等价于 x:=x-ninc(x) 等价于 x:=x+1dec(x) 等价于 x:=x-1第四讲输出语句输出语句输出语句的作用是先计算表达式的值,并按指定的格式输出到屏幕。1、输出语句的两种格式 write语句格式:Write(表达式1,表达式2,);如:write(1,2,3,4); write(My name is Liping); writeln语句格式:Writeln (表达式1,表达式2,) 或 writeln2、输出语

22、句的功能计算机执行到某一输出语句时,先计算出输出语句中的每个表达式的值,并将每一个表 达式的值一个接一个地输出到屏幕上。Write语句与writeln语句功能基本相同,但有两点不同: write语句将其后括号中的表达式一个接一个输出后,没有换行。而writeln语句则 在输出各个表达式的值后换行。 write语句至少必须输出一项内容,而writeln语句允许不输出任何内容,只是换行。write(x,y); 等价于 write(x); write(y);writeln(x,y); 不等价于writeln(x); writeln(y);等价于 write(x); writeln(y);例1、以下两

23、个程序段的输出分别为: write(1,2,3,4);write(5,6); writeln(1,2,3,4);write(5,6);输出为:输出为:123456123456例2:有三个小朋友甲乙丙。甲有50粒糖果,乙有43粒糖果,两有13粒糖果。现在他们 做一个游戏。从甲开始,将自己的糖分三份,自己留一份,其余两份分别给乙与丙,多余的 糖果自己吃掉,然后乙与丙也依次这样做。问最后甲、乙、丙三人各有多少粒糖果?分析:在游戏中每个小朋友拥有的的糖果数是在变化的,用a,b,c三个变量分别存放甲 乙丙在某一时刻所拥有的糖果数。对于每人,分糖后,他的糖果数一定为原来的糖果数div 3 (用整除恰可以表

24、示多余的糖自己吃掉)。而其他两人则增加与这个小朋友现在拥有的糖果 数。程序如下:var A,B,C:integer;beginA:=50; B:=43; C:=13;初始糖果数A:=Adiv3;B:=B+A;C:=C+A;甲分糖果后,每个人拥有的糖果数变化情况B:=Bdiv3;A:=A+B;C:=C+B;乙分糖果后,每个人拥有的糖果数变化情况C:=Cdiv3;A:=A+C;B:=B+C;丙分糖果后,每个人拥有的糖果数变化情况writeln(,A=,A, B=,B, C二,,C);end.3、输出格式:数据的输出格式很重要,输出的数据所占的列数为场宽。 输出项中无指定格式符号,则按标准场宽输出,

25、integer实际长度,real 17列,char 串长。 单场宽(输出整数时自定义)格式:e:n1n1是正整数,表示e输出时所占的列数。 双场宽(输出实数时自定义)格式:e:n1:n2n1,n2是正整数,且n1n2, n1输出总列数含符号位、整数部分、小数点、小数部分,n2小数部分的列数。 数据不突破场宽限制时,单场宽一律向右看齐,双场宽实数向小数点看齐,多余的小 数位补0。 数据实际位数超过场宽时,以保证数据的正确输出为原则。单场宽时自动将n1扩展 到所需位数,双场宽时自动将n1扩展到所需位数,n2小于实际的小数位数时,则舍去多 余的位数,内存中仍保留该数的精确值。例3、写出下列程序的运行

26、结果:const s=,abcd,;var i:integer; r:real; c:char; b:Boolean;begini:=1234; r:=123.456; c:= *; b:=true;writeln(i,i:5,i:3);writeln(r,r:8:4,i:8:2);writeln(c,c:4);writeln(s,s:8,s:3);writeln(b,b:5,b:3)end.运行结果1234 123412341.2345600000E+02123.4560 123.46*abcdabcdabcdTRUE TRUETRUE第五讲输入语句读语句格式:read(变量名表);read

27、ln(变量名表);语义:从键盘输入数据,依次赋值给相应变量。 变量名表为一串用逗号分隔的变量标识符。 数值型数据之间用空格或回车键分隔,最后一定要回车,表示输入完毕。例4、设a,b,c为整型变量;如需将a,b,c的值分别赋以10,20,30,写出对应read(a,b,c); 语句的所有可能输入格式。键盘输入10 20 30 110 20 110 110 130 120 30 120 130 1如将read(a,b,c)改为readln(a,b); readln(c);而达到本例同样的输入目的,上面哪些输 入格式是有效的。 read语句是一个接一个地读数据,在执行完本Read语句(读完本语句中变

28、量所需的 数据)后,下一个读语句接着从该数据输入行中继续读数据,也就是说,不换行。read(a,b);read(c,d);read(e);如果输入数据行如下:1O2O3O4O5O6OI I表示回车键 Read后一定要有变量名表,readln可以没有输入项,只是读一个回车换行符。例5、设有下列语句(所有变量为整型)read(a,b,c);readln(d,e); readln;readln(f,g);设输入文件input中的数据如下:1O2I3O4O5O6O7O8I9010!11I12013!分析:可以假设有一个数据指针,每读一个数据后,指针指向后一个数据,每执行一个 readln语句后,指针移

29、到下一个数据行的开头。变量值为:abcdef g1234511 12 read(a,b); readln; read(c); 相当于 readln(a,b); read(c)read(a); readln(b,c); 相当于 readln(a,b,c);read(a); read(b); 相当于 read(a,b);但是:readln(a); readln(b);不等价于 readln(a,b);为了避免可能出现的错误,建议在程序中按下列原则使用读语句: 如果没有特殊需要,在一个程序中尽量避免混合使用read语句和readln语句; 尽量用readln语句来输入数据,一个数据行对应一个read

30、ln语句; 由于执行read或readln语句时,系统不会提供任何提示信息,因此,编程时最好在readln语句之前加以适当提示,例如: write(Input a,b,c:);readln(a,b,c);在执行时,屏幕上显示:Input a,b,c:B 其中,光标。执行readln语句后,系统处于待输入状态,只有输入所需数据后才继续往下 执行。第六讲分支结构、PASCAL中的布尔(逻辑)类型布尔类型变量不能通过读语句输入给它们提供值,可以通过间接方式对布尔变量进行值 的输入。var a: boolean;begin readln(a); 错误语句 writeln(a); end.二、布尔表达式

31、逻辑运算符:or、and、not。它们分别相当于数学上的“或”、“与”和“非”。三个运算符的运算对象为布尔值,其中and与or有两个或两个以上运算对象,not为单目运 算,只有一个运算对象。用布尔运算符把一个关系表达式或多个关系表达式连接起来的式子就称为布尔尔表达式。布 尔表达式的值也为布尔值。它们的布尔运算真值表如下:aba and bfalsefalsetruetruefalsetruefalsetruea or b false false false truenot afalseturetruetrueturefalse对于复杂的命题,我们可以用逻辑表达式来表示。例如,“判断一个数是否大

32、于0小于10”可表示为(x0) and (x10)。“判断一个数是否小于等于0或大于等于10”则表示为(y=10)。“数学、英语成绩都大于等于90分或数学、英语两科成绩总分大于185分”表示为(math=90) and (English=90) or (math+English185)。例4_1、在你前面有一个长长的阶梯,如果你每步跨2阶,那么最后剩1阶;如果你每步 跨3阶,那么最后剩2阶;如果你每步跨5阶,那么最后剩4阶;如果你每步跨6阶,那 么最后剩5阶;如果你每步跨7阶,那么正好走完,一阶不剩,问你这条阶梯最少有多少 阶?三、IF语句1、格式 IF布尔表达式THEN 语句1;执行IF语句

33、时,先计算布尔表达式值,若为TRUE则执行语句,否则不执行任何操作; IF布尔表达式THEN语句1 ELSE语句2;执行IF语句时,先计算布尔表达式值,若为TRUE则执行语句1,否则执行语句22、注意 if、then、else为一条完整的语句,在else之前不能有分号; 语句1、语句2若实际功能非一条语句所能描述,要写成复合语句。例4_2:输入一个整数a,判断是否为奇数,是输出“ yes”否则输出” no”。var a:integer;beginwrite(a=); readln(a);if a mod 2 =1 then writeln(yes) else writeln(no);readl

34、n;end.例4_3:华联超市里卖电池,每个电池一元钱,若数量超过10个,则可打85折。var num:integer; price,total:real;beginwrite(num=); readln(num); price=1;if num10 then price:=price*0.85;total:=num*price;writeln(Total=,total:3:2)end.第六讲IF语句嵌套和CASE语句四、IF语句的嵌套在if语句中,如果then子句或else子句仍是一个if语句,则称为if语句的嵌套。 例4_4、求三个给定的整数a,b,c中的最大数。 if ab then i

35、f ac then max:=a( 使用 if 语句嵌套 else max:=celse if bc then max:=belse max:=c; if ab then max:=a else max:=b; (更简单方法,不必嵌套if max0 then if b0的否定,还是b0 then begin if b0 then y:=1 endelse y:=0;五、case语句当多分支选择的各个条件由同一个表达式的不同结果值决定时,可以用case语句来实 现。它的选择过程,很象一个多路开关,即由case语句的选择表达式的值,决定切换至哪 一语句去工作。在实现多分支控制时,用case对某些问

36、题的处理和设计,比用if语句写程 序更简洁、更清晰。 情况语句的一般形式:case 表达式of:语句1;:语句2;else:语句nend;case语句使用else形式,else前一语句后应有分号,这不同于if-then-else。表达式的值必须是顺序类型,它可以是整型、布尔型及以后学习的字符型、枚举型和子界型。 情况标号表是一串用逗号隔开的与表达式类型一致的常量序列。语句可以是任何语句,包括 复合语句和空语句。 case语句的执行过程先计算表达式(称为情况表达式)的值,如果它的值等于某一个常量(称为情况常量或 情况标号),则执行该情况常量后面的语句,在执行完语句后,跳到case语句的末尾end

37、处。 说明情况常量是情况表达式可能具有的值,因而应与情况表达式具有相同的类型;情况常量出现的次序可以是任意的;同一情况常量不能在同一个case语句中出现两次或两次以上;每个分语句前可以有一个或若干个用逗号隔开的情况常量;每个常量后面只能是一个语句或一个复合语句。例4_5、输入两个实数,再输入+、-、*或/号,根据运算符输出这两个数的和、差、积或 商。var a,b,s:real; operator:char;beginwriteln(input a,b:); readln(a,b);writeln(input operator:5); readln(operator);case operato

38、r of+ : s:=a+b;-:s:=a-b;*: s:=a*b;/: s:=a/b;end;writeln(a,operator,b, ,=,s:5:4)end.例4_6、输入某年某月份,输出其天数。分析:程序中要判断输入的年份是否是闰年。判断闰年的算法是:如果此年份能被400整除, 或者它能被4整除而不能被100整除,则它是闰年。否则,它是平年。var year,month,days:integer;beginwrite(Input year,month:); readln(year,month);case month of1,3,5,7,8,10,12: days:=31;4,6,9,

39、11 :days:=30;2: if (year mod 400=0) or (year mod 1000) and (year mod 4=0)then days:=29else days:=28;else days:=0;end;if days0 then writeln( year, - ,month, has ,days)else writeln(Input error)end.第七讲循环一、FOR语句格式for控制变量:=初值to终值do语句;for控制变量:=初值downto终值do语句;For语句执行过程:1、先将初值赋给左边的变量(称为循环控制变量);2、判断循环控制变量的值是

40、否已“超过”终值,如已超过,则跳到步骤5;3、果末超过终值,则执行do后面的那个语句(称为循环体);4、控制变量返回步骤2;5、循环结束,执行for循环后语句。说明:循环控制变量必须是顺序类型。例如,可以是整型、字符型等,但不能为实型。循环控制变量的值选用to则为递增;选用downto则递减。循环控制变量的值“超过”终值,对递增型循环,“超过”指大于,对递减型循环,“超 过”指小于。循环控制变量的初值和终值一经确定,循环次数就确定了。但是在循环体内对循环变量 的值进行修改,常常会使得循环提前结束或进入死环。建议不要在循环体中随意修改控制变 量的值。for语句中的初值、终值都可以是顺序类型的常量

41、、变量、表达式。例 5_1、求 S = 1+2+3+ 100var n,i : integer;i 为循环变量S : longint;s 为累加器beginwrite(input n=); readln(n); s:=0;for i:=2 to n do s:=s+i; 从 2 至U n 累加到U s 中writeln(1+2+3+ 100=,s);end.例5_2、输出斐波那契数列的前20项。规律:F1=0(n=1)F2=1(n=2)Fn=Fn-1+Fn-2 (n=3) 即 0,1,1,2,3,5,8,13,21,分析:由公式Fn=Fn-1+Fn-2,采用递推算法求解。方法一var a,b,

42、i: longint;begina:=0; b:=1; write(a, , ,b);for i=2 to 10 dobegin a:=a+b; b:=a+b; write( , a, , ,b); end;end.方法二var a,b,c,i:integer;begina:=0; b:=1; write(a, , ,b);for i=3 to 20 dobegin c:=a+b; a:= b; b:=c; write(, ,c); end;end.二、WHILE当型循环语句对于for循环有时也称为计数循环,当循环次数未知,只能根据某一条件来决定是否进行循环时,用while语句或repeat语

43、句实现循环更方便。格式:while布尔表达式do ;循环体while语句的执行过程为:1、判断布尔表达式的值,布尔表达式的值为true时,执行do后面的语句(步骤2), 否则执行步骤4;2、执行循环体语句;3、返回步骤1;4、结束循环,执行while的下一个语句。说明:while语句的特点是先判断,后执行。当布尔表达式成立时,重复执行do后面 循环体的语句。例4_3、斐波那契数列的第n项的值恰好大于10000,求n。var a,b,c,n: integer;begina:=0; b:=1; n:=2;while c=10000 dobeginc:=a+b; a:=b; b:=c; n:=n+1

44、;end;writlen(n=,n);end.例4_4、求两个正整数m和n的最大公约数。分析:采用辗转相除法求解,分别用m、n、r表示被除数、除数、余数。1、求m/n的余数r;2、若r=0,则n为最大公约数,若r尹0,执行第3步;3、将n的值赋于m,将r的值赋于n;4、返回重新执行第1步。var m,n,r:integer;beginwriteln(Input m,n:); readln(m,n);r:=m mod n;while r0 dobeginm:=n; n:=r; r:=m mod nend;writeln(The greatest common divide is: ,n);end

45、.二、REPEAT-UNTIL直到型循环语句repeat-until语句的含义是“重复执行循环,直到指定的条件为真时为止”。直到循环语句的一般形式:Repeat语句1;语句n;until布尔表达式;repeat与until之间的所有语句称为循环体。说明:1、repeat语句的特点是:先执行循环,后判断结束条件,因而至少要执行一次循环体。2、repeat-until是一个整体,它是一个(构造型)语句,不要误认为repeat是一个语句, until是另一个语句。3、repeat循环体可以是若干个语句,不需用begin和end。while循环和repeat循环是可以相互转化的。例5_5、两个正整数的

46、最大公约数,可用repeat-until循环实现:本例输出语句中有m、n的原值,所以在程序中增加了两个中间变量a、b。var m,n,r,a,b : integer;beginwrite(Input m,n=); readln(m,n);a:=m; b:=n;repeatr:=a mod b; a:=b; b:=r;until r=0;writeln(The greatest common divide of ,m, and ,n, is ,a);end.一般说来,用for循环比较简明,只要能用for循环,就尽量作用for循环。只在无法 使用for循环时才用while循环和repeat-unt

47、il循环,for循环在大多数场合也能用whiel和 repeat-until循环来代替。一般for循环用于有确定次数的循环,而while和repeat-until循环 用于未确定循环次数的循环。第七讲循环嵌套循环嵌套用于一个循环的循环体中又包含循环结构程序时。例 5_6、1!+2!+10!的值。分析:这个问题是求1到10自然数的阶乘之和。var s,t: longint;i,j:integer;begins:=0;for i:=1 to 10 dobegint:=1;for j:=1 to i do t:=t*j;求 N!的值 t s:=s+t;累加N!的值t end;writeln(s=,s

48、);end.以上的程序是一个二重for循环嵌套。这是比较容易想到的方法,但实际上对于求n!, 可以求出的(n-1)!再乘上n即可得到,而无需重新从1再累乘到n。程序可改为:var s,t:longint;i:integer;beginS:=0; t:=1;for i:=1 to 10 dobegin t:=t*i; s:=s+t end;writeln(s=,s);end.显然程序二的效率要比程序一高得多。程序一要进行1+2+10=55次循环,而程序二 进行10次循环。例5_7、上街采购,用500元钱买了 90只鸡,其中母鸡一只15元,公鸡一只10元,小鸡 一只5元,正好把钱买完。问母鸡、公鸡

49、、小鸡各买多少只?var i,j,k:integer;beginfor i:=1 to 33 dofor j:=1 to 50 dobegink:=90-i-j;if 15*i+10*j+5*k=500 then writeln(i:5,j:5,k:5);end;end.例5_8、求100-200之间的所有素数。分析:我们可对100-200之间的每一整数进行判断,判断它是否为素数,是则输出。 而对于任意整数i,根据素数定义,我们从2开始到找到i的第一个约数。若找到第一个约 数,则i必然不是素数。否则i为素数。var i,x : integer;beginfor i:=101 to 200 do

50、beginx:=2;while (x=trunc(sqrt(i) and (i mod x0) dobeginx:=x+1;if xtrunc(sqrt(i) then write(i:6)end;end; writelnend.将for循环改为while循环可以减少循环次数。例5_9、输出下面的数字图形:1222333334444444555555555var row,column,n,d:integer;beginwriteln(n= ); readln(n);d:=20;for row:=1 to n dobeginwrite( :d-row);for column:=1 to 2*ro

51、w-1 do write(row);writeln;end end.例5_10、三人对ABCD的比赛名次预测如下:A B C D甲 1 3乙1 4丙 32比赛结果,三人都只说对了一个,问A、B、C、D的实际名次。var a,b,c,d:shortint;beginfor a:=1 to 4 dofor b:=1 to 4 doif ab thenfor c:=1 to 4 doif (ac) and (bc) thenbegind:=10-a-b-c;if (ord(a=1)+ord(b=3)=1) and (ord(c=1)+ord(d=4)=1)and (ord(a=3)+ord(d=2)

52、=1)then writeln(A=,a,,B=,b,,C=,c,,D=,d) end;end.五、用GOTO语句实现循环例5_11、两个正整数的最大公约数,可用GOTO实现循环 label a;var m,n,r : integer;beginwrite(,Input m,n=,); readln(m,n);write(The greatest common divide of ,m, and ,n, is )a: r:=m mod n; m:=n; n:=r;if r0 then goto a;writeln(m);end.GOTO语句是无条件转向语句,GOTO语句的使用可能会使程序出现乱线团式的结 构,应限制使用。Pascal语言的发明者沃思说过:如果一个程序员在Pascal程序中使用goto 语句,往往说明他还没有学会用Pascal语言来思考。”

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

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!