PASCAL语言的回顾与复习_第1页
PASCAL语言的回顾与复习_第2页
PASCAL语言的回顾与复习_第3页
PASCAL语言的回顾与复习_第4页
PASCAL语言的回顾与复习_第5页
已阅读5页,还剩40页未读 继续免费阅读

下载本文档

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

文档简介

1、一、基本知识 1、 Pascal程序基本组成 2、Pascal数据类型 3、标准函数 4、运算符和表达式 5、基本语句 二、程序的三种基本结构: 1、 顺序结构 2、选择结构(if 语句) 3、循环结构(for 语句、while语句),三、数组 1、一维数组 2、多维数组 3、字符数组与字符串,Pascal语言回顾,1、Pascal程序基本组成,例1:计算半径为R的圆面积Sprogram Area; 程序首部:可以省略不写 const pi=3.14159; 常量说明 说明部分 var s,r:real; 变量说明 begin readln(r); s:=pi*sqr(r); writeln(

2、s=,s); end.,保留字,程序名,执行部分,一、基本知识,2、Pascal数据类型,在这里主要回顾整型、实型、字符型和布尔型,1)整型,类型 数值范围 占字节数 Shortint -128 . 127 1 Byte 0 . 255 1 Integer -32768.32767; 2 Word 0.65535 2 Longint -2147483648 . 2147483647 (9位) 4 Longword 0.4294967295 4 Int64 -9223372036854775808 . 9223372036854775807 8QWord 0 . 1844674407370955

3、1615 8 (整数部分19位),2)实数 类型 数值范围 有意义的位数 占字节数 Real 依赖于平台 ? 4 or 8 Single 1.5E-45 . 3.4E38 7-8 4 Double 5.0E-324 . 1.7E308 15-16 8 Extended 1.9E-4951 . 1.1E4932 19-20 10 Comp -2E64+1 . 2E63-1 19-20 8,3)布尔型一个布尔型数据用来存放逻辑值(布尔值)。布尔型的值只有两个:false和truevar a,b:boolean; A:=43; b:=23;,4)字符型字符型用char作为标识符。字符型必须用单引号括

4、起来,字母作为字符型时,大小写是不等价的,并且字符型只允许单引号中有一个字符,否则就是字符串。 Var s:char; s:=B,算术函数函数标识符 自变量类型 意义结果类型abs(x) 整型、实型 绝对值同自变量int(x) 整型、实型整数部分 整型sqrt(x)整型、实型 平方根 实型如:abs(2-5)=3, int(4.99)=4, sqrt(9)=3.0,3、标准函数,4、运算符和表达式,1)运算符 a.算术运算符运算符 运算 运算对象结果类型+ 加 整型、实型只要有一个运算对象是实型,结果就- 减 整型、实型是实型,如果全部的运算对象都是整* 乘 整型、实型型并且运算不是除法,则结

5、果为整型/ 除 整型、实型 若运算是除法,则结果是实型。 div 整除 整型整型mod取余(模) 整型整型,15 Div 6 = 2 (-15) div 6 =-215 Div (-6) =-2(-15) div (-6) =2,15 mod 6 = 3(-15) mod 6 =-315 mod (-6) =3(-15) mod (-6) =-3,b.逻辑运算符运算符运算运算对象结果类型not逻辑非 布尔型布尔型and 逻辑与 布尔型布尔型or 逻辑或 布尔型布尔型,c.关系运算符运算符运算 运算对象 结果类型=等于 简单类型 布尔型 不等于 简单类型 布尔型大于 简单类型 布尔型= 大于等于

6、 简单类型 布尔型,(23)and(43)、(23)or(43)、not(23),2)表达式:是通过运算符把常量、变量、函数调用结合起来组成的。 PASCAL表达式有以下计算优先顺序规则: 1.括号内的表达式首先计算; 2.运算符的优先级有四级,按其优先顺序从高到低排列为: not; *,/,div,mod,and,shl,shr; +,-,or; =,=,IN; 不同优先级的两运算符之间的操作数先与具有较高优先级的运算符进行运算; 3.同级的运算从左到右进行; 另外,有一点需要指出的是,因为关系运算符的优先级最低,当用关系式构造复杂的布尔表达式时,这些关系式作为初等条件必须放在括号里。 如:

7、 (xy) and (z=y) or (x=0) 若不加括号,就是一个错误的表达式。,5、基本语句 1)赋值语句 赋值语句是最简单的语句. (1)赋值语句的格式 变量名:=表达式; 其中“:=”称为赋值号。 (2)执行过程 先计算赋值号右边表达式的值,然后将表达式的值赋给变量名代表的变量。 如:A:=(9*8)-(2-1); ( A(9*8)-(2-1); ) A:=A+1 ( AA+1 ),)输入语句read和readln 功能: 从键盘或文件读入数据项,并把它存到变量中去,使该数据能在以后的计算中使用。 输入语句的一般形式为: read(v1,v2,vn); readln(v1,v2,vn

8、); 从键盘依次读入数据,分别赋给变量v1,v2,vn,一次输入多个数据值时,要求数据之间用空格分隔,如果是字符类型的数据,则不需要分隔。readln语句要求输入数据后必须回车,使得后继操作从下一行的头上开始。,read语句与readln语句区别是: (1) readln语句与read语句的第一个区别是: read 后一定要有参数表,readln可以不带参数表,即可以没有任何输入项, 只是等待读入一个换行符(回车)。经常用于暂停程序的运行,直到输入一个回车。 (2)readln语句与read语句的第二个区别是: read语句是一个接一个地读数据,在执行完本read语句( 读完本语句中变量所需的

9、数据)后,下一个读语句接着从该数据输入行中继续读数据,也就是说,不换行。 如:Read(a,b); Read(c,d); Read(e); 如果输入数据行如下: 123456 则a,b,c,d,e的值分别为1,2,3,4,5,如果后面无读语句则数据6是多余的,这是允许的。,Readln则不同,在读完本Readln语句中变量所需的数据后, 该数据行中剩余的数据多余无用,或者说,在读完本Readln语句中变量所需数据后,一定要读到一个回车,否则多余的数据无用。 设有下列语句: read(a,b,c); read(d,e); readln; readln(f,g); 其中,所有变量均为整型。再设输入

10、的数据如下: 12 345678 910 11,)输出语句write和writeln 功能: 把程序计算的结果,按适当的形式输出到屏幕或文件。 (1)write语句 格式: write(表达式1,表达式2,); 如: write(x,5,a+b); write(My name is Liping); (2)writeln语句 格式: writeln(表达式1,表达式2,); 或 writeln;,write语句与writeln语句格式上都相似,但它们在功能上有所不同,两个语句的区别在于: write语句将其后括号中的表达式一个接一个输出后,没有换行。 而writeln语句则在输出各个表达式的值

11、后换行。 例如以下两个程序段的输出分别为: write(1,2,3,4); write(5,6); 输出为: 123456 writeln(1,2,3,4); write(5,6); 输出为: 1234 56,)实数的输出格式 实数(real)以浮点型格式输出。例如805.67对应的浮点数为 8.0567000000E+02。这种实数表达方式很不方便。我们可以通过下述形式强迫实数以定点型格式输出: 实数表达式:域宽:小数位数 例如,t的值设为63.123。下面三条输出语句分别有它们右边所示的输出格式: write(t); 6.31230000000E+01 write(t:6:2); 63.1

12、2 write(t:10:5); 63.12300 write(t:0:2); 63.12 write(t:0:0); 63,二、程序的三种基本结构,一)顺序结构 程序按照语句的书写先后顺序逐句执行,直到程序的结束。Pascal程序中,顺序结构是一种最简单的基本结构。如果不去局部的考虑程序中的选择结构和循环结构,把它们看作是一个复合语句的话,那么程序本身就可以看作是一个顺序的结构;反过来更细地去看选择结构或循环结构的成分,那么它们的主要运行部分(被选择的语句或循环体),实际上又是一个属于顺序结构的复合语句。 二) 选择结构,、if语句IF语句是由一个布尔表达式和两个供选择的操作序列组成。运行时

13、根据布尔表达式的求值结果,选取其中之一的操作序列执行。有两种形式的IF语句:,例1:输入一个整数,判断是否为偶数。 (是输出“”否则输出“”)。 var a:integer; begin readln(a); if (a mod 2 =0) then writeln(yes) else writeln(no); end.,格式二: if then else ;,格式一: if then ;,注意:else前面没有分号.,IF语句的嵌套 在if语句中,如果then子句或else子句仍是一个if语句, 则称为if语句的嵌套。 例2计算下列函数 分析:根据输入的x值,先分成x0与x0两种情况,然后对

14、于情况x0,再区分x是小于0,还是等于0。,var x:real;y:integer; begin readln(x); if x0then y:=1x0时,y的值为1 else x0时 if x=0then y:=0 else y:=-1; writeln(x=,x:6:2,y=,y); end.,1, x0 Y= 0, x=0 -1, x0,2 、case语句 case语句是由一个表达式和众多可选择的操作序列组成。运行时,根据表达式的求值结果,在众多的分支中选取一个分支执行。 其形式为:case表达式of常量1:语句1;常量2:语句2;常量n:语句n;else语句n+1 可选项end;,例

15、:根据学生的成绩给予相应的等级,对应关系如下:90100 A8089 B6079 C60以下 D,var s:real; ch:char;begin readln(s); case trunc(s / 10) of 10,9:ch:=A; 8:ch:=B; 7,6:ch:=C; else ch:=D; end; writeln(ch);end.,Var s:real; ch:char; begin readln(s); if (s=90)and(s=80)and(s=60)and(s=79) then ch:=C; if s60 then ch:=D; writeln(ch); end.,三)

16、循环结构,循环结构程序通常由三种的循环语句来实现。它们分别为for循环、当循环while、直到repeat循环。在编写程序时,若循环次数已知,通常采用for语句;若循环次数未知,则应选用while或repeat语句。在进行循环程序设计时,一定要搞清楚在循环前要做什么事(通常在循环前要做一些准备工作,如累加器、计数器清零,变量赋初始值等),在循环中需要做什么事,解决什么问题,在循环后又要做什么问题。通常将一组重复执行的语句称为循环体,而控制重复执行或终止执行由重复终止条件决定。因此,重复语句是由循环体及重复终止条件两部分组成。,例1、键入一个自然数N(=10000),求这个自然数的所有约数(不包

17、括1和本身)之和S。,var n,i,s:integer; begin read(n); s:=0; for i:=2 to n-1 do if n mod i=0 then s:=s+i; writeln(s=,s); end.,for语句 1、for语句的一般格式 for := to do ; for := downto do ; 其中for、to、downto和do是Pascal保留字。表达式1 与表达式2的值也称为初值和终值。,例2、从键盘上输入n个数,求出他们的最大数,最小数,平均数。,var n,i,max,min,x:longint; sum:real; begin read(n

18、); read(x); max:=x; min:=x; sum:=x;,for i:=1 to n-1 do begin read(x); sum:=sum+x; if xmax then max:=x; if xmin then min:=x; end; writeln(max:,max); writeln(min:,min); writeln(aver:,sum/n:0:2); end.,例3、求100以内的素数(质数):除了1和本身不再有别的约数。每行输出一个素数。,var n,i,f:integer; F:标志,1:是素数,0:不是素数 begin for n:=2 to 100 do

19、 begin f:=1; for i:=2 to trunc(sqrt(n) do if n mod i=0 then begin f:=0; break; n不是素数,退出本层循环 end; if f=1 then writeln(n); end; end.,while循环(repeat循环) 当循环次数未知,只能根据某一条件来决定是否进行循环时,用while 语句(repeat语句)实现循环要更方便。 格式: while do ; 其意义为:当布尔表达式的值为true时,执行do后面的语句。 格式: repeat ; ; ; until ; 其意义为:先执行循环语句,再判断条件,当布尔表达

20、式的值为false时,继续执行循环,否则退出循环。,分析:“恰好使s的值大于10”意思是当表达式s的前n-1项的和小于或等于10,而加上了第n项后s的值大于10。 从第一项开始,当s的值小于或等于10时,就继续将下一项值累加起来。当s的值超过10时,最后一项的项数即为要求的n。,程序如下: var s: real; n : integer; begin s:=0;n:=0; while s=10 do begin n:=n+1; s:=s+1/n; end; writlen(n); end.,例1 、求恰好使s=1+1/2+1/3+1/n的值大于10时n的值。,var s: real; n :

21、 integer; begin s:=0;n:=0; repeat n:=n+1; s:=s+1/n; until s10; writlen(n); end.,例2、编一个程序,从键盘输入一个真分数的分子和分母,输出它的小数形式,精确到小数点后1000位。,var n,m,r,q,i:integer; begin read(n,m); r:=n; write(0.); i:=1; while i=1000 do begin q:=10*r div m; r:=10*r mod m; write(q); i:=i+1; end; end.,三、数组与字符串,一)数组 1.数组的定义数组是程序中最

22、常用的结构数据类型,用来描述由固定数目的同一类型的元素组成的数据结构。 一维数组类型的定义 一维数组类型的一般格式: array下标1.下标2 of ;,一般在定义数组类型标识符后定义相应的数组变量,如: type arraytype=array1.100 of integer; var a,b:arraytype; 或:var a,b: array1.100 of integer;,1、从键盘上顺序输入n的数,按顺序和逆序输出。,var n,i:integer; a:array1.100 of integer; begin read(n); for i:=1 to n do read(ai)

23、; for i:=1 to n do write(ai, ); for i:=n downto 1 do write(ai, ); end.,var k,n,i:integer; a:array1.20 of byte; begin readln(k); i:=0; while k0 do begin i:=i+1; ai:=k mod 2; 取余 k:=k div 2; 取整数 end; for n:=i downto 1 do 反序输出数组 write(an); end.,2、编程将一个十进制整数k转化为二进制数(k10000)。,3、编程将一个十进制整数k转化为N进制数(k10000,2

24、=N=10,n=16)。,var k,n,i:integer; a:array1.20 of byte; begin readln(k,n); i:=0; while k0 do begin i:=i+1; ai:=k mod n; 取余数 k:=k div n; 取整 end; for n:=i downto 1 do 反序输出数组 if an=9 then write(an) else write(chr(an+55); 输出10到15对应的A到F end.,二)字符串类型,var:a:string; 或 var:a:stringn; 其中正整数n(1=n=255)表示构成字符串的字符最多

25、个数,即通常所说的字符串最大长度。而字符串的实际长度决定程序运行时的实际字符个数,可以由函数length返回。若字符串说明中没有指定长度,缺省值为255。 常用的重要的字符串函数:length(x):返回字符串x的长度。如:s=abcd;length(s)=4 pos(x,s):返回子串在串s中的位置,pos(book,mybooked)=3 copy(s,I,j):返回串s中从第i个字符开始的j个字符的子串。 S1=copy(mybooked,3,4) 则s1=book,4、输入一个正整数n(10250),求它的各位数字之和S。,var n:string; s,k,i:integer; be

26、gin readln(n); k:=length(n); 字符串长度k s:=0; for i:=1 to k do s:=s+ord(ni)-48; writeln(s); end.,5、编程验证一个数是不是是回文数(10250)(一个数的第一位和倒数第一位相同,第二位和倒数第二位相同。如:13531,3443)。,var a:string; i,j,k:integer; begin readln(a); k:=length(a); i:=1; j:=k; while (ai=aj)and(i=j then writeln(yes) else writeln(no); end.,6、任何一个

27、n3一定可以表示成n个连续的奇数和。输入n(n100),输出n3对应的表达式。 样例: 输入:3 输出:7+9+11,题解: 设表达式中的最小奇数为x。 则:x+(x+2)+(x+4)+(x+2(n-1)=n3 即:nx+2(1+2+3+n-1)= n3 nx+n(n-1)= n3 得: x=n*n-n+1=n*(n-1)+1,var n,x,i:integer; begin readln(n); 读入n x:=n*(n-1)+1; 求出第一个奇数 for i:=1 to n-1 do 输出前n-1个奇数 begin write(x,+); x:=x+2; 下一个奇数 end; writeln

28、(x); 输出第n个奇数 end.,7、统计输入的字符串中的字母频率 从键盘上输入一字符串,该字符串全部由英文字母组成,以#作为输入结束标志。要求程序完成: 统计输入字符串中每个字母出现的次数(不分大小写)。 如:输入字符串为:adAabcdacdfg# 输出结果应为: a 4 b 1 c 2 d 3 f 1 g 1,var ch:char; n,i:integer; a:array1.26 of integer; 统计字母出现的次数 begin fillchar(a,sizeof(a),0); 初始化 read(ch); while ch# do 读如字符 begin if(ch=A)and

29、(ch=a)and(ch0 then writeln(chr(i+64), ,ai); end.,8、删数问题 键盘输入一个正整数,去掉其中任意个数字后剩下的数字按原左右次序将组成一个新的正整数。编程对给定的和,寻找一种方案使得剩下的数字组成的新数最小。(不超过位) 输入:两行,第一行:正整数n,第二行:正整数S。 输出:n去掉的s个数字后组成的新的正整数m。 样例: 输入:123006 2 输出:1006,428760005 4,672397104 5,40002876 2,12145789 4,分析:所删除的每一个数字是一个从首位开始的最长连续不下降序列的最末位数字。 var n:stri

30、ng; s,i:integer; begin readln(n); 输入数字 read(s); 输入删除的数字个数 while s0 do begin i:=1; while (i1)and(n1=0) do delete(n,1,1);删除处理后开头的0,并保证n不为空 writeln(n); end.,9、灯的开关状态 有N个灯放在一排,从1到N依次顺序编号。有N个人也从1到N依次编号。开始时,全部的灯是开的。1号将灯全部关闭,2将凡是2的倍数的灯打开;3号将凡是3的倍数的灯作相反处理(该灯如为打开的, 则将它关闭;如关闭的,则将它打开)。以后的人都和3号一样,将凡是自己编号倍数的灯作相反

31、处理。 编程实现:第N个人操作后,按顺序输出灯的状态。(1-表示灯打开,0-表示灯关闭) 输入:n(n=100),灯的个数, 输出:灯的状态,01序列,中间无空格。 样例: 输入:2 输出:01,var k,n,i,j:integer; a:array1.100 of 0.1; 记录灯的状态,0:关闭,1:打开 begin readln(n); 读入灯的个数 for i:=1 to n do ai:=1; 初始状态:打开 for i:=1 to n do begin j:=i; 从第i号队员出发进行第i次操作 while j=n do begin aj:=1-aj; 将凡是i的倍数的灯作取反处理 j:=j+i; end; end; for i:=1 to n do write(ai); end.,三)多维数组及应用。,当一维数组元素的类型也是一维数组时,便构成了二维数组。 二维数组定义的一般格式: array下界1.上界1,下界2.上界2 of 元素类型; 如:

温馨提示

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

评论

0/150

提交评论