资源预览内容
第1页 / 共71页
第2页 / 共71页
第3页 / 共71页
第4页 / 共71页
第5页 / 共71页
第6页 / 共71页
第7页 / 共71页
第8页 / 共71页
第9页 / 共71页
第10页 / 共71页
亲,该文档总共71页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
PascalPascal语言程序设计语言程序设计寿光现代中学寿光现代中学王桐林王桐林【第一、二、三章第一、二、三章】本章要点本章要点nFree Pascal与与Turbo Pascal的区别的区别nPascal的程序结构的程序结构n基本符号、保留字、标识符基本符号、保留字、标识符n数据类型、常量、变量及说明方法数据类型、常量、变量及说明方法n函数与表达式函数与表达式n三种基本的程序结构三种基本的程序结构 顺序结构顺序结构 分支结构分支结构 循环结构循环结构第一章第一章 Free Pascal概述概述 一、 Pascal 简介 PASCAL语言是瑞士苏黎世联邦工业大学的N沃思(Niklaus Wirth)教授于1968年设计完成的,1971年正式发表,它的命名是为了纪念法国数学家Pascal。在Pascal问世以来的三十余年里,先后产生了适合于不同机型的各种版本,其中,影响最大的莫过于Turbo Pascal系列软件。 Turbo Pascal 是由美国Borland公司设计、研制的一种微机的Pascal语言应用开发集成环境。该产品由1983年推出的1.0版本发展到1992年推出的7.0版本,随着版本的不断更新,功能也更趋完善,Turbo Pascal是NOIP在2004年以前使用的主要软件之一。 从NOIP2004开始,中国计算机协会要求联赛使用freepascal,停止使用turbo pascal。 Freepascal分为Windows和linux两个版本,NOIP大多使用Windows版,它提供了Windows环境下兼容Turbo Pascal的Pascal编译器,同时也提供了类似Turbo Pascal的集成开发环境Freepascal IDE。 软件下载地址:软件下载地址:http:/162.105.81.201/noip/env.htmlFree Pascal与与Turbo Pascal的区别的区别1、从主办方的角度上说,TP有版权,FP没有版权限制,TP已经12年没有更新,而FP一直在更新,IOI、NOI使用的都是FP。2、Free Pascal理论上可以使用4GB的内存,因此实际上几乎可以使用系统中的所有剩余内存(除非赛题中有内存限制)。这是Free Pascal由于32位的编译器。但是对于Turbo Pascal来说,由于是16位的编译器,因此不能定义大小超过64KB的数据类型和变量,并且在DOS实模式下可以使用的内存总数只有640KB。3、Free Pascal是一个跨平台的编译器,而Turbo Pascal只在dos/windows上使用。4、FP函数和过程在使用时,参数的类型必须和定义时完全一致。原因是在Free Pascal中添加了函数重载功能。所以可以用相同的名字定义不同的函数,只要这些函数的参数不同,就是不同的函数 5、FP布尔表达式不一定要全部进行计算。只要最终结果已经能够确定,就不再计算其它还没有计算的部分了。比如布尔表达式exp1 AND exp2 AND exp3,如果已知exp1的结果是false,那么怎么表达式的结果肯定是false,exp2和exp3就不用进行计算了。6、在Free Pascal中,集合中的元素都是4个字节长的。7、FP表达式执行的顺序不确定。如表达式a:=g(2)+f(3); 不保证g(2)一定在f(3)之前执行。补充补充8、在FP中,如果用Rewrite打开文件,那么文件就只能被写入了。如果需要读取这个文件,要对文件执行Reset。9、FP在程序结束之前一定要关闭输出文件,否则输出文件可能不能被正确的写入。 10、Free Pascal在windows 95及其以上的windows版本上支持长文件名。对于文件名,由于windows系统对大小写不敏感,因此在程序中,文件名的大小写是无关的。但是对于其它大小写敏感的系统,比如linux,程序中用到的文件名必须和系统中的文件名完全一致。但是由于信息学竞赛的评测系统一般是linux,因此要求程序中的文件名和系统中的文件名一样。11、FreePascal和TP语法兼容,但是最不同的就是调试过程。FP中对于数据类型的范围有一定改动,而且语法要求更苛刻。FP的帮助系统比较不好,尤其是和TP比,基本上没法用。FP调试系统分编译调试和执行时调试两种。编译调试在Compiler框内显示,基本上会给出错误的行和列,但是其定位效率却没有TP好,有的时候仅仅是少了一个分号,可能会因此给你五六个错误提示,而其原因就是那个分号。执行时错误就更惨。TP会给你诸如“Stack overflow error等大家能看懂的,但是FP给的是“Exitcode。而且这个Exitcode现在还找不到一个完整的解释资料。我现在仅仅知道Exitcode2是找不到输入文件,其他的还看不懂呢。有一个好办法就是把程序弄回TP找错,再到FP中执行。 第二章第二章 Pascal程序设计语言基础程序设计语言基础 一、概述一、概述1.Pascal1.Pascal是结构化的语言是结构化的语言 Pascal语言全面清晰地体现结构化思想。不仅提供了直接实现“顺序结构”、“选择结构”和“循环结构”的语句,而且还可以定义子程序(“函数”和“过程”)。在编程时可以完全不使用转向语句“goto”,使程序的执行顺序与行文顺序保持一致,便于理解;2.Pascal2.Pascal的数据类型丰富的数据类型丰富 Pascal语言不仅提供了整型、实型、字符型、布尔型等标准数据类型,而且还允许用户按照语法规则自定义枚举型、子界型、数组型、集合型、记录型、指针类型和文件类型,便于数值计算和非数值信息处理;3.Pascal3.Pascal语言可以实现模块的独立化要求语言可以实现模块的独立化要求 Pascal语言允许在函数和过程内部定义局部变量,允许在主程序和子程序之间传递参数,使得每一个子程序模块都能反映一个相对独立的性质,模块之间的联系简单清晰,便于修改; 由于Pascal语言精确地表达了程序设计的基本概念,结构性好,表达能力强,因此成为学校程序设计课程的教学语言,计算机会考和奥林匹克信息学竞赛的规定语言。1、程序结构Pascal语言具有严谨的程序结构【例】已知圆的半径,求它的周长和面积。 从这个简单的程序可以看到: 一个一个PASCAL程序分为两个部分:程序分为两个部分:程序首部和程序体程序首部和程序体。 程序首部 程序首部是程序的开头部分,有保留字program后接程序名及程序参数表组成,由分号结束。程序名是用户自己定义的标识符,参数表一般是文件变量名,用于该程序与外界的数据交流。最常用的参数为input和output。在turbo pascal语言中,首部中的参数表可以省略,首部也可省略。 程序体 程序体是程序的主体部分,由说明部分和执行部分两部分组成。 说明部分: 用来描述程序中用到的变量、常量、类型、过程与函数等。本程序中第二行是变量说明,用来定义变量的名称、类型。PASCAL规定,凡程序中用到所有变量、符号常量、数组、标号、过程与函数、记录、文件等数据都必须在说明部分进行定义(或称说明)。也就是说,不允许未说明先使用。 执行部分: 以begin开始,以end结束,其间有若干个语句,语句之间以分号隔开。一条语句执行一定的功能,所有语句完成程序设计的任务。允许一行写多个语句,也允许一个语句写几行,最后一行的end后加一.号表示结束。 2、完整的、完整的pascal程序框架:程序框架:program 程序名(程序参数表);程序名(程序参数表); label 标号说明;标号说明; const 常量说明;常量说明; type 类型说明;类型说明; var 变量说明;变量说明; function 函数说明;函数说明; procedure 过程说明;过程说明;begin 程序语句程序语句1; ; 程序语句程序语句n;end.程序首部程序体说明部分执行部分二、基本符号、保留字、标识符:二、基本符号、保留字、标识符:1基本符号:是ASCII字符集,主要有: 26个英文字母(不分大小写,字符串中的字母例外。 十个数字符号。 特殊符号 + - * / = = ( ) := . , ; : .2保留字:保留字:保留字是指pascal语言中一些有特殊含义的英文单词,它们已被pascal语言自己使用,都有专门的用途。Pascal 语言中保留字有36个,可分为以下六种类型: 程序、函数、过程的符号:program,function,procedure 说明部分的专用定义符号:array,const,file,label,packed,var,record,set,type,of 语句专用符号:case,do,downto,else,for,goto,if,repeat,then,to,until,while,with,forward 运算符号:and,div,in,mod,not,or 分隔符号:begin,end 空指针常量:Nil7. PROTECTED, PUBLIC, PUBLISHED, TRY, FINALLY, EXCEPT, RAISE (fp新增保留字)3. 标识符:标识符: 标识符是以字母开头的字母数字序列(大小写等效,可跟下划线_),用来标识常量、变量、程序、函数等。Pascal中允许的标识符的有效长度为63。标识符分为两大类: 标准标识符: 标准常量:false,true,maxint(32767) 标准类型:integer,real,char,boolean,text 标准文件:input,output 标准函数:abs,arctan,chr,cos,eof,eoln,exp,ln,odd, ord,pred,round,sin,sqr,sqrt,succ,trunc 标准过程:get,new,pack,page,put,read,readln,reset,rewrite,unpack,write,writeln 自定义标识符 由用户自己在程序首部或说明部分进行定义,但要注意以下几点:不能与保留字同名;避免与标准标识符同名;最好有一定的含义,增加程序的可读性。例如:在程序中如用到数学中的,则在定义该常量时可用PI表示。 三、数据类型、常量、变量及说明方法三、数据类型、常量、变量及说明方法 数据类型确定了该类型数据项的表示、取值范围以及所能参与的运算。在pascal语言中,无论常量还是变量都必须属于一个确定的数据类型。Pascal 提供了丰富的数据类型,可以分为三大类: 简单类型:分为标准类型(整型、实型、字符型和布尔型)和自定义类型(枚举型和子界型) 构造类型:分为数组类型、集合类型、记录类型和文件类型 指针类型 这些数据类型中除了指针类型是动态数据类型外,其他的都是静态数据类型。另外,我们把整型、字符型、布尔型、枚举型和子界型称为顺序类型。 1标准数据类型:标准数据类型: 整数类型: 整数类型包括正整数、负整数和零。整数只能由正负号和数字组成,不允许出现其他字符,“+”号可以省略。名称名称类型数值范围类型数值范围占字节数占字节数字节型字节型Byte0.2551字型字型Word0.655352短整型短整型Shortint-128.1271整型整型Integer-32768.32767;2长整型长整型Longint-2147483648.2147483647(9位位)4长字型长字型Longword0.42949672954整数整数INT64Int64-9223372036854775808.92233720368547758078Q字型字型QWord0.184467440737095516158(整数部分整数部分19位)位) Turbo Pascal规定了两个预定义整型常量表识符maxint和maxlonint,他们各表示确定的常数值, maxint为32767, longint为2147483647, 他们的类型分别是integer 和longint。 整数的运算符有+、-、*、div、mod,后三种运算符的优先级高于前两种,整数运算的结果也为整数。当两个整数用/相除时,结果为实型,只能赋给实型变量。实数类型包括正实数、负实数和实数零。它的标识符是real。有两种表示实数的方法:十进制表示法;科学记数法:3.4E3表示3.4*103实数的绝对值在1E-38到1E38之间。 实数类型:实数类型:实数的运算有+、-、*、/、结果也为实型。整数参与实数运算,系统自动将整数转化为实数再运算,结果为实数。2)实数实数名称名称TypeRangeSignificantdigitsSize实实型型Realplatformdependant?4or8单精度型单精度型 Single1.5E-45.3.4E387-84双精度型双精度型 Double5.0E-324.1.7E30815-168扩展型扩展型 Extended1.9E-4951.1.1E493219-2010装配十进制型装配十进制型Comp-2E64+1.2E63-119-208 字符类型:字符类型:目前微机上广泛使用的ASCII码字符集满足PASCAL对字符集的要求。字符型用char作为标识符。字符型必须用单引号括起来,字母作为字符型时,大小写是不等价的,并且字符型只允许单引号中有一个字符,否则就是字符串string。 布尔类型:布尔类型:一个布尔型数据用来存放逻辑值(布尔值)。布尔型的值只有两个:false和true,并且false的序号是0,true的序号是1。false 和true都是预定义常数表识符,分别表示逻辑假和逻辑真。并且truefalse。boolean是布尔型的标识符。布尔类型的运算符有not(非)、and(与)、or(或)。参与布尔型运算的是布尔类型的数据,其结果也是布尔类型的数据。 2常量常量常量:在程序执行过程中其值不能被改变的量。pascal除了maxint,true,false三个标准常量外,用户还可以使用常量定义语句定义新的常量。它的语法格式是:const=;.=;常量表识符的类型由定义它的常量的类型决定。例如:const a=12 隐含说明a是整型;const r=3.21 隐含说明r是实型。常量的定义具有单一性和不可改变性。3变量变量变量:在程序执行过程中可以改变值的数据。它的语法格式是:var:;.:;其中,保留字var表示开始一个变量说明部分。变量标识符列表是一个用逗号隔开的标识符序列,冒号后面的类型是类型标识符。每个变量说明均以分号结束。例如:vara,b,c:integer;m,n:real;1标准函数:标准函数: 算术函数算术函数: 函数标识符函数标识符 自变量类型自变量类型 意义意义 结果类型结果类型nAbs 整型、实型整型、实型 绝对值绝对值 同自变量同自变量nArctan 整型、实型整型、实型 反正切反正切 实型实型nCos 整型、实型整型、实型 余弦余弦 实型实型nExp 整型、实型整型、实型 指数指数 实型实型nInt 整型、实型整型、实型 整数部分整数部分 实型实型nLn 整型、实型整型、实型 自然对数自然对数 实型实型nSin 整型、实型整型、实型 正弦正弦 实型实型nSqr 整型、实型整型、实型 平方平方 同自变量同自变量nSqrt 整型、实型整型、实型 平方根平方根 实型实型nPower(a,b)表示表示a的的b次方,也可以写成次方,也可以写成a*b,兼容所有数结构兼容所有数结构四、函数与表达式四、函数与表达式2运算符和表达式运算符和表达式 运算符和优先级 算术运算符: 表达式表达式n表达式表达式:是指由常量、变量、函数、括号、集合及运算符联结起来的式子。n表达式中各运算符的优先级: 表达式有以下几种a.算术表达式:例如:写出一个整数能被3整除所得余数的表达式b.关系表达式:例如:写出一个能表示正数的表达式c.逻辑表达式:例如:写出一个数既能被3整除又能被5整除的表达式 习习 题题 1.ax2+bx+c的PASCAL的表达式是_2.一元二次方程的根的PASCAL的表达式是_3.表达式2/4*5的值是_,表达式10*4 mod 5*22/4*5的值是_4.i是j的整数倍的布尔表达式是_,m是偶数的布尔表达式是_,y在-2至-1之间的布尔表达式是_,y是闰年的布尔表达式是_。5.有一编码规则如下: 原码:A B C X Y Z 密码:Z Y X C B A 已知原码变量x,则密码的表达式是 _。第三章第三章 程序设计初步程序设计初步 n前言:n什么是程序设计?n程序设计的步骤是什么?n结构化程序设计的特点是什么?一一.什么是顺序结构:什么是顺序结构:【例例1】:键盘输入两个变量的值,交换值后输出。:键盘输入两个变量的值,交换值后输出。方法:间接交换法方法:间接交换法算法分析:(算法分析:(“自顶向下,逐步求精自顶向下,逐步求精”的编程思想)的编程思想)s1:通过键盘给通过键盘给a,b两个变量赋值;两个变量赋值;s2:交换交换a,b的值;的值; s2-1:引入中间变量引入中间变量c; s2-2:在在c中存放的中存放的a值;值; s2-3:在在a中存放的中存放的b值;值; s2-4:在在b中存放的中存放的c值;值;s3:输出变量输出变量a,b的值。的值。程序代码:程序代码:program ex1(input,output); var a,b,c:integer; beginwrite(please input a,b:);read(a,b);writeln(a=,a,b=,b);c:=a;a:=b;b:=c;writeln(a=,a,b=,b) end.第第一一节节 顺顺序序结结构构程程序序设设计计Pascal 语言的语句分为简单语句(也称基本语句)和复合语句(也称构造语句) n二:几个简单语句:二:几个简单语句:n1赋值语句:赋值语句:n格式:变量标识符:格式:变量标识符:=表达式;表达式;n功能:计算和赋值双重功能:功能:计算和赋值双重功能:n【例2】写出程序执行后,变量的值。n程序代码:nprogram ex2(input,output);n varna,b:integer;nc:real;nch:char;nbool:boolean;nbeginn a:=3;n b:=a;n b:=a+1;n a:=a+1;n c:=a+b;n ch:=h;n bool:=true;n bool:=not bool;n end.n说明:1)“:=”赋值号不同于“=”号,具有方向性,具有计算功能。n 2)赋值号两边的类型应该相同,但有一个例外。n 3)一个赋值语句只能给一个变量赋值,可以多次给一个变量赋值。n 4)被赋值的变量可以作为因子参与运算。n2输入语句(输入语句(read,readln):n格式:格式:read(变量名表变量名表);n readlnn n read(a1,a2,a3); 等价于等价于 read(a1);read(a2);read(a3);n readln(a1,a2,a3); 等价于等价于 read(a1);read(a2);read(a3);readln;n功能:通过键盘,给指定的变量赋值。功能:通过键盘,给指定的变量赋值。n【例3】:写出程序运行后,变量的值。n程序代码:nprogram ex3(input,output);n var na,b,c:integer;ni,j,k:real;nch1,ch2,ch3:char;nbeginn read(a,b,c);n readln(i,j,k);nread(ch1,ch2,ch3);nwriteln(a=,a,b=,b,c=,c);nwriteln(i=,i, j=,j,k=,k);nwriteln(ch1=,ch1,ch2=,ch2,ch3=,ch3);nend.n程序运行后,输入数据:n1 2 3 4 5n6.1 7 8 9 0ndos说明:1)变量名表中的变量可以是一个变量,也可以是多个变量,多个变量之间用逗号隔开。2)程序运行后,执行到该语句时,系统处于等待状态,等待用户从键盘输入数据。输入数值型数据(整型和实型),数据间用空格分隔;输入字符型数据,数据间不须分隔。3)输入数据一定为常量,且与变量保持类型一致。4)输入数据个数不能少于变量个数,否则,系统继续等待输入。read语句与语句与readln语句区别语句区别(1)read语句是一个接一个地读数据,在执行完本语句是一个接一个地读数据,在执行完本Read语句语句(读完本语句中变量所需的数据读完本语句中变量所需的数据)后后,下一个下一个读语句接着从该数据输入行中继续读数据,也就是说,读语句接着从该数据输入行中继续读数据,也就是说,不换行。如:不换行。如: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);readln(d,e);readln;readln(f,g);其中其中,所有变量均为整型。再设输入的数据如下:所有变量均为整型。再设输入的数据如下:1234567891011(2)readln语句与语句与read语句的第二个区别是语句的第二个区别是:read后一定要有参数表后一定要有参数表,readln可以不带参数表可以不带参数表,即可以没有任何输入项即可以没有任何输入项,只是等只是等待读入一个换行符待读入一个换行符(回车回车)。经常用于暂停程序的运行,。经常用于暂停程序的运行,直到输入一个回车直到输入一个回车n3输出语句(输出语句(write,writeln):):n格式:格式:write(输出项);输出项);n writeln;n功能:按指定的格式将输出项的内容输出。功能:按指定的格式将输出项的内容输出。n【例例4】:写出程序运行后的结果。:写出程序运行后的结果。n程序代码:nprogram ex4(input,output);n constna=10;nb=20;nbeginn writeln(50);n writeln(a);n writeln(a+b);n writeln(a+b=,a+b)nend.n说明:1)输出项的内容可以是一项,也可以是若干项,各项之间用逗号分隔。n 2)当输出项为常量,直接输出常量的值;当输出项为变量时,输出该变量存储单元内的内容,变量允许属于任何一种标准数据类型;当输出项为表达式时,先计算后输出;当输出项为字符串时,原样输出单引号括起来的内容。 Write语句与语句与writeln语句格式上都相似,但它们在功能语句格式上都相似,但它们在功能上有所不同,两个语句的区别在于上有所不同,两个语句的区别在于:write语句将其后括号中的表达式一个接一个输出后,语句将其后括号中的表达式一个接一个输出后,没有换行。没有换行。而而writeln语句则在输出各个表达式的值后换行。语句则在输出各个表达式的值后换行。例如以下两个程序段的输出分别为:例如以下两个程序段的输出分别为:write(1,2,3,4);write(5,6);输出为:输出为:123456writeln(1,2,3,4);write(5,6);输出为:输出为:123456实数的输出格式实数的输出格式实数(实数(real)以浮点型格式输出。例如以浮点型格式输出。例如805.67对应的浮点对应的浮点数为数为8.056700000000E+02。这种实数表达方式很不这种实数表达方式很不方便。我们可以通过下述形式强迫实数以定点型格式方便。我们可以通过下述形式强迫实数以定点型格式输出:输出:实数表达式:域宽:小数位数实数表达式:域宽:小数位数例如,例如,t的值设为的值设为63.123。下面三条输出语句分别有它们。下面三条输出语句分别有它们右边所示的输出格式:右边所示的输出格式:write(t);6.312300000000E+01write(t:6:2);63.12write(t:10:5);63.12300write(twrite(t:0 0:2)2); 63.1263.12输出语句的输出格式: 什么是场宽(或域宽)? pascal中将输出项的数据显示占用的宽度称为场宽 场宽的分类:标准场宽和自定义场宽。 自定义场宽又分为单场宽和双场宽。 标准场宽:writeln(x),x直接输出,如x为实数,按科学计数法死的形式输出。 单场宽的形式: x:n;如:writeln(x:n) 可以输出的项目有整型、字符型、布尔型,不允许实型。 双场宽的形式: x:n1:n2;如:writeln(x:m:n) 控制实型数据的输出。 自定义场宽的注意事项 a. 优先级高于标准场宽。 b. 单场宽输出格式一律是左留空、右对齐。实型的双场宽输出时是向小数点看齐,多余的小数为数补零。 c. 突破场宽时,扩展到所需位数. d. n2小于实际位数,显示时舍去多余位数,但内存中该数的精度保持不变。 【例5】:写出程序的运行结果:program ex5(input,output); var a:integer; b:real; c:char; d:boolean;begin a:=1357; b:=1234.5678; c:=%; d:=true; writeln(a,a:5); writeln(b,b:12:5); writeln(c,c:5); writeln(d,d:5); writeln(end:5)end.定义:复合语句是由若干条语句组成的语句序列。形式:begin 语句1; 语句2; 语句nend;用保留字begin和end括起来,构成一条逻辑上的语句,语法上充当一条语句。三:复合语句:三:复合语句:四:综合应用:四:综合应用:【例6】:随机产生一个三位自然数,分离出它的百位、十位与个位上的数字。算法分析:s1:随机产生一个三位自然数;s2:分离出该自然数的百位、十位、个位上的数字;s3:输出百位、十位、个位上的数字。程序代码:program ex6(input,output); varx,ge,shi,bai:integer; beginrandomize;x:=trunc(random*900)+100;writeln(x=,x);bai:=x div 100;shi:=(x-bai*100)div 10;ge:=x mod 10;writeln(bai=,bai);writeln(shi=,shi);writeln(ge=,ge) end.上机练习题1.上机调试出例6。2. 试编一程序,输入一梯形的上底、下底、高, 求该梯形的面积。 3.某幼儿园里,有5个小朋友编号为1,2,3,4,5,他们按自己的编号顺序围坐在一张圆桌旁。他们身上都有若干个糖果,现在他们做一个分糖果游戏。从1号小朋友开始,将他的糖果均分三份(如果有多余的,则他将多余的糖果吃掉),自己留一份,其余两份分给他的相邻的两个小朋友。接着2号、3号、4号、5号小朋友也这如果做。问一轮后,每个小朋友手上分别有多少糖果。 第二节第二节 选择结构程序设计选择结构程序设计 一:什么是选择结构?选择结构的特点?一:什么是选择结构?选择结构的特点? 二:选择结构的几种语句:二:选择结构的几种语句:1 1if if 语句:语句:功能:执行过程功能:执行过程说明:说明:1 1)该语句为一个语句;)该语句为一个语句; 2 2)条件是一个布尔表达式或一个布尔变量,)条件是一个布尔表达式或一个布尔变量,then then 和和elseelse后的语句可以是单个语句,当需要多条语句时,用后的语句可以是单个语句,当需要多条语句时,用beginbegin和和endend括起来构成复合语句。括起来构成复合语句。 3 3)当布尔表达式的值为真,则执行当布尔表达式的值为真,则执行thenthen后面的语句,值为假时有后面的语句,值为假时有两种情况:要么什么也不做,要么执行两种情况:要么什么也不做,要么执行elseelse后面的语句。后面的语句。注意注意:else:else前面没有分号前面没有分号. .格式一:格式一:ifthen;格式二:格式二:ifthenelse;逻辑、算术、关系运算符的运算次序:1.括号2.函数、not3.*、/、div、mod、and4.+、-、or5.、=、=、=、补充补充【例1】:将输入的两个非负实数中较大的放在max里,小的放在min里,并输出。算法分析:s1:输入两个数放在max,min中;s2:判断max,min的值,将大数放在max里,小数放在min里;s3:输出max,min的值。程序代码:program ex1(input,output); varmax,min,t:real;begin writeln(input two num(0):); read(max,min); if max0与x0两种情况,然后对于情况x0,再区分x是小于0,还是等于0。程序代码:program ex; varx:real; y:integer; begin write(input x:);readln(x); if x0then y:=1else if x=0then y:=0else y:=-1;writeln(x=,x:6:2,y=,y); end.但是对于本题,下面的程序是否正确。y:=0; if x=0then if x0 then y:=1 else y:=-1;请同学们思考为什么?并在上机实践时验证?程序代码:program ex2(input,output): var a,b,c:integer; begin write(a,b,c(0):); readln(a,b,c); if (a+bc) and (a+cb) and (b+ca) then if (a*a+b*b=c*c) or (a*a+c*c=b*b) or (b*b+c*c=a*a) then writeln(a=,a,b=:5,b,c= :5,c, is rt triangle.) else writeln(a=,a,b=:5,b,c= :5,c, is not rt triangle.) else writeln(a=,a,b= :5,b,c= :5,c, is not triangle.) end.【例3】:输入三角形的三边,判断它是否是直角三角形。3case 语句:分情况语句(多分支语句)格式:case 表达式 of 常数表1:语句1; 常数表2:语句2; 常数表n:语句n; else 语句n+1 end;功能:执行过程说明:1)end 与case 对应 2)表达式的类型通常是整型、字符型 3)常量表是常量,其类型与表达式的类型要一致。常量表中的常量不能重复。n【例4】:输入两个数(均不为零)及一个算术运算符,输出其运算的结果n程序代码:nprogram ex3(input,output);n varnx,y,s:real;n ch:char;nbeginn writeln(input x & y & ch:);n readln(x,y);n readln(ch);n case ch ofn +:s:=x+y;n -:s:=x-y;n *:s:=x*y;n /:s:=x/yn end;n writeln(x,ch,y,=,s)nend. 上机练习题1.求一元二次方程ax2+bx+c=0的根。算法分析:方程的系数a,b,c决定了方程有无根,是几个根,是实数根还是复根。 2.打印某年某月有几天。算法分析:可分为以下3种情况:每年的1,3,5,7,8,10,12这七个月每月为31天;每年的4,6,9,11这四个月为30天;2月又分为两种情况:闰年为29天,否则为28天。判断闰年的条件:年数能被4整除,并且不能被100整除,或者年数能被400整除; (year mod 4=0)and (year mod 1000) or (year mod 400=0) 第三节第三节 循环结构程序设计循环结构程序设计一、什么是循环结构?其特点是什么?二、循环结构的三种形式:循环结构程序通常由三种的循环语句来实现。它们分别为循环结构程序通常由三种的循环语句来实现。它们分别为FOR循环、当循环循环、当循环while、直到直到repeat循环。循环。通常将一组重复执行的语句称为循环体,而控制重复执行或终通常将一组重复执行的语句称为循环体,而控制重复执行或终止执行由重复终止条件决定。止执行由重复终止条件决定。因此,重复语句是由因此,重复语句是由循环体循环体及及重复终止条件重复终止条件两部分组成。两部分组成。1for语句1 1forfor语句:(语句:(“计数循环计数循环”):就是将规定循环体重复执行的次数。):就是将规定循环体重复执行的次数。格式:格式:for for 控制变量:控制变量:= =初值初值 to to 终值终值 dodo 循环体语句;循环体语句; for for 控制变量:控制变量:= =初值初值 downtodownto 终值终值 dodo 循环体语句;循环体语句;2 2、ForFor语句执行过程语句执行过程 先将初值赋给左边的变量(称为循环控制变量);先将初值赋给左边的变量(称为循环控制变量); 判断循环控制变量的值是否已判断循环控制变量的值是否已“超过超过”终值,如已超过,则跳到步骤终值,如已超过,则跳到步骤; 如果末超过终值,则执行如果末超过终值,则执行dodo后面的那个语句(称为循环体);后面的那个语句(称为循环体); 循环变量递增(对循环变量递增(对toto)或递减(对或递减(对downtdownt o) o); 返回步骤返回步骤; 循环结束,执行循环下面的一个语句。循环结束,执行循环下面的一个语句。3 3、说明:、说明: 1) 1) 初值和终值可以是表达式,控制变量和初值、终值的类型相同,且必须是初值和终值可以是表达式,控制变量和初值、终值的类型相同,且必须是整型、布尔型和字符型等顺序类型,不能为实型。整型、布尔型和字符型等顺序类型,不能为实型。 2 2)递增按)递增按succsucc函数规律变化,递减按函数规律变化,递减按predpred函数规律变化,整型按数值大小变函数规律变化,整型按数值大小变化,如果为字符型量,按化,如果为字符型量,按ASCIIASCII码表的顺序计算。码表的顺序计算。 3 3)初值和终值在循环之前计算,重复过程中,其值不受影响;不得在循环语)初值和终值在循环之前计算,重复过程中,其值不受影响;不得在循环语句中对控制变量进行赋值。句中对控制变量进行赋值。 4 4)当初值超过终值,不执行循环,循环次数为零。)当初值超过终值,不执行循环,循环次数为零。n【例1】:计算1+2+3+4+100之和。n算法分析:n对于求和,我们使用的是累加的办法。n程序代码:nprogram ex1(input,output);n varn i,sum:integer;n beginn sum:=0;n for i:=1 to 100 don sum:=sum+I;n writeln(sum=,sum)n end.n补充说明:类似sum迭加变量这样的功能称为“累加器”;类似i这样的变量称为“计数器”;“计数器”和“累加器”是在程序中经常使用的基本操作语句。 【例2】:对程序稍加改动,算出以下算式:请同学们思考怎样改动程序可以实现? s=2+4+6+100 s=1+1/2+1/3+1/100 s=12+22+32+1002n【例3】:键入一个自然数,输出其所有约数,计算出这些约数之和并输出。n算法分析:解决这一问题的关键是找出约数,也就是判定一数能否被另一数整除。可以用x mod y=0,来找出所有约数。n程序代码:nprogram ex3(input,output);n varn i,x,y,sum:integer;n beginn write(x=);read(x);n sum:=0;i:=0;n for y:=1 to x don if x mod y=0 n then beginn write(y:8);n i:=i+1;n if i mod 5=0 then writeln;n sum:=sum+yn end;n writeln(sum=,sum)n end.If语句For语句If语句作为For语句的循环体n【例4】:编程找出四位整数abcd中满足下述关系的数。n (ab+cd)(ab+cd)=abcdn算法分析:这道题属于搜索问题,因为是四位整数,其范围从10009999,所求的数究竟在哪里,无法确定,只有在这个范围内从小到大一个一个进行搜索,对每一个数,看它的高两位数与低两位数和的平方是否为该数。n高两位数:abcd div 100=abn低两位数:abcd mod 100=cdn程序代码:nprogram ex4(input,output);n varn i,m,n,k:integer;n beginn for i:=1000 to 9999 don beginn m:=i div 100;n n:=i mod 100;n k:=(m+n)*(m+N);n If k=i then write(I:8)n endn end.n补充说明:n以上用的方法也叫以上用的方法也叫“枚举法枚举法”,又称,又称“穷举法穷举法”。它是用计算机解题的一种常用的。它是用计算机解题的一种常用的办法。它的基本思路是:一一枚举各种可能的情况,并判断哪一种可能是符合要求办法。它的基本思路是:一一枚举各种可能的情况,并判断哪一种可能是符合要求的解。方法虽然很笨,然而与计算机高速的处理能力相结合,也不失为一种较有用的解。方法虽然很笨,然而与计算机高速的处理能力相结合,也不失为一种较有用的方法的方法 2while语句:语句:对于对于for循环有时也称为计数循环。循环有时也称为计数循环。适合用于事先知道循环次数适合用于事先知道循环次数.当循环次数未知,只能根据某一条件来决定是否进行循环时,用当循环次数未知,只能根据某一条件来决定是否进行循环时,用while语句实现循环要更方便。语句实现循环要更方便。(“当型循环当型循环”):当条件满足时反复执行循环体。):当条件满足时反复执行循环体。格式:格式:while 布尔表达式布尔表达式 do 语句;语句;执行过程:执行过程:while语句的执行过程为:语句的执行过程为:判断布尔表达式的值判断布尔表达式的值,如果其值为真如果其值为真,执行步骤执行步骤2,否则执行步骤否则执行步骤4;执行循环体语句执行循环体语句(do后面的语句后面的语句);返回步骤返回步骤1;结束循环结束循环,执行执行while的下一个语句。的下一个语句。说明:说明: 1)为了是)为了是while循环能正常终止,布尔表达式中的变量必须在循环体中的某循环能正常终止,布尔表达式中的变量必须在循环体中的某语句中有所改变,即有可能是布尔表达式的值为假,使循环结束,否则将出语句中有所改变,即有可能是布尔表达式的值为假,使循环结束,否则将出现死循环。现死循环。 2)循环体中的语句一般是多条语句,用)循环体中的语句一般是多条语句,用begin和和end使其成为一条复合语句。使其成为一条复合语句。【例5】:输出1100之间的奇数。程序代码:program ex5(input,output);var x:integer;begin x:=1; while x100 do begin write(x:5); x:=x+2 endend.n【例6】:输入若干个字符,它的终止符是#,计算输入的字符中a(A)出现的次数。n算法分析:n设计数器i,置初值为0;n出入字符;n当字符不为#时循环:如果字符为a或A,则计数器加1;读入下一个字符;n输出计数器的值,程序结束。n程序代码:nprogram ex6(input,output);n varn ch:char;n i:integer;nbeginn i:=0;n read(ch);n while ch# don beginn if (ch=a) or (ch=A)n then i:=i+1;n read(ch)n end;n writeln(i=,i)nend. repeat语句:(“直到型循环”):反复执行循环体直到条件满足为止。格式:repeat 语句1; 语句2; 语句3; 语句n until 布尔表达式;功能:执行过程:先执行指定的语句序列,然后判别表达式。3 repeat语句:(“直到型循环”)说明:while语句和repeat语句都可以实现循环结构,但它们有四点不同:n【例7】:将例题6的程序用repeat语句改写。nprogram ex7(input,output);n varn ch:char;n i:integer;nbeginn i:=0;n repeatn read(ch);n if (ch=a) or (ch=A)n then i:=i+1;n until ch=#;n writeln(i=,i)nend.n【例例8】:从从n个数中挑出最大的数。个数中挑出最大的数。n算法分析:算法分析:n读入读入n值;值;n读入第读入第1个数,赋值给变量个数,赋值给变量max;n依次读入后依次读入后n-1个数,与个数,与max比较,若数值大于比较,若数值大于max,则将此数值赋给则将此数值赋给max;n输出最大数。输出最大数。n程序代码:程序代码:nprogram ex8(input,output);n varn n,m,max,x:integer;nbeginn writeln(input n:);n read(n);n writeln(input n nums:);n read(max);n m:=0;n repeatn read(x);n if xmax then max:=x;n m:=m+1n until m=n-1;n writeln(the max num is:,max)nend.n三、多重循环三、多重循环n【例9】:求100999中的水仙花数。(若三位数abc,abc=a3+b3+c3,则称为水仙花数。如:153,13+53+33=1+125+27=153)n算法设计:采用三重循环求解,用for循环。n程序代码:nprogram ex9(input,output);n varn a,b,c:integer;nbeginn for a:=1 to 9 don for b:=0 to 9 don for c:=0 to 9 don if a*a*a+b*b*b+c*c*c=a*100+b*10+cn then write(a*100+b*10+c:6);n writelnnend.n【例10】:试编写能打印如下输出图形的程序。nnn n n n n程序代码:nprogram ex10(input,output);n varn i,j,k:integer;nbeginn for i:=6 downto 1 don beginn for j:=1 to 6-i don write( );n for k:=2*i-1 downto 1 don write(#);n writelnn endnend.n【例11】:四个学生上地理课时,回答我国四大淡水湖的大小时这样说。甲说:“最大洞庭湖,最小洪泽湖,鄱阳湖第三”;乙说:“最大洪泽湖,最小洞庭湖,鄱阳湖第二,太湖第三”;丙说:“最小洪泽湖,洞庭湖第三”;丁说:“最大鄱阳湖,最小太湖,洪泽湖第二,洞庭湖第三”。其中每个学生仅答对一个,请编程确定湖的大小。n算法分析:这是一个逻辑判断题,每个湖的大小不一样,因此要把它们数字化,每个湖必取14里面的一个整数,这个整数就代表它们各自的大小,用一个四重循环,由于循环的次数已经确定,所以采用for循环。n程序代码:nprogram ex11(input,output);n varn dong,hong,bo,tai:integer;nbeginn for dong:=1 to 4 don for hong:=1 to 4 don if hongdong thenn for bo:=1 to 4 don if (bodong) and (bohong) thenn beginn tai:=10-dong-hong-bo;n if (ord(dong=1)+ord(hong=4)+ord(bo=3)=1) and (ord(hong=1)+ord(dong=4)+ord(bo=2)+ord(tai=3)=1) and (ord(hong=4)+ord(dong=3)=1) and (ord(bo=1)+ord(tai=4)+ord(hong=2)+ord(dong=3)=1) n then writeln(dong:,dong,hong:,hong,bo:,bo,tai:,tai)n endnend.上机练习题1.某班共有50名学生,已知他们期中考试的数学成绩,现需要统计100分、90分、80分、70分、60分与不及格各成绩档有多少人。 2.用5元钱买100只纽扣,其中金属纽扣每只5角,有机玻璃纽扣每只一角,小按扣1分钱3个,变成求出各种纽扣各买了多少只?3.用尼考曼彻斯特法求出两个自然数a和b的最大公约数。4.已知:faibonacci(费波那契)数列的前几个数分别为0,1,1,2,3,5,编程求出此数列的前n项。本讲结束本讲结束谢谢合作谢谢合作
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号