教师(PASCAL语言)培训讲习

上传人:ra****d 文档编号:241399968 上传时间:2024-06-23 格式:PPT 页数:158 大小:1.05MB
返回 下载 相关 举报
教师(PASCAL语言)培训讲习_第1页
第1页 / 共158页
教师(PASCAL语言)培训讲习_第2页
第2页 / 共158页
教师(PASCAL语言)培训讲习_第3页
第3页 / 共158页
点击查看更多>>
资源描述
教师(PASCAL语言)培训讲习江东区教研室 贾 为办班的目的:1、提高与扎实信息学科教师的专业素养。今后会在各类信息学科教师考核中有所侧重。2、形成一个学习与研究PASCAL语言的气氛,建立一支培训团队,促进我区的青少年信息学竞赛工作起步与开展。3、抛砖引玉。互帮互学,建立学习共同体。4、本期培训班以讲习?PASCAL语言?中根本语句为主,面向全体信息学科专业教师,进行由简单到复杂的编程思维训练,通过本期培训学会安装、调试PASCAL程序,能够读懂程序,并掌握独立编制简单程序的能力。建议参考书:1.?PASCAL语言中学版/小学版第2版?张文双,吴树娟主编北京理工大学出版2.?数据结构与算法设计?张文双、王学红主编北京理工大学出版3.?奥赛经典信息学奥林匹克教程?根底篇、语言篇、提高篇4.湖南师范大学出版社出版5.宁波新江厦四楼书店有售。序言:信息学奥赛的开展序言:信息学奥赛的开展v1989年5月首次举办国际信息学奥林匹克竞赛,简称IOI,成为继数学、物理、化学之后的又一门国际中学生奥林匹克竞赛。v1991年起全国青少年计算机竞赛更名为全国青少年信息学计算机奥林匹克竞赛,简称NOI。由中国科学技术协会主管,中国计算机学会主办。v 全国青少年信息学奥林匹克联赛,简称为NOIP,参加联赛是参加NOI的必要条件。信息学奥林匹克竞赛内容信息学奥林匹克竞赛内容1.1.程序设计知识。熟练使用一门程序设计语言程序设计知识。熟练使用一门程序设计语言编写程序;熟悉常用的根本算法:如穷举法、编写程序;熟悉常用的根本算法:如穷举法、排序冒泡法、搜索法、回溯法、递归算排序冒泡法、搜索法、回溯法、递归算法,排列组合等。法,排列组合等。2.2.数据结构知识。简单变量、数组、队列、栈、数据结构知识。简单变量、数组、队列、栈、串、记录、指针、链表、树、图和文件。串、记录、指针、链表、树、图和文件。3.3.调试程序技能。调试程序技能。FreePascal安装、启动与退出安装、启动与退出v从江东信息网,用户名xinxi,密码xinxi2007,下载Free Pascal 2.04(大小为42M。v点击install.exe自动安装程序在指定的路径目录中。(15分钟v在路径:目标盘符ppbingo32v2找到fp.exe文件,右键创立快捷方式后,复制到桌面上。v单击桌面快捷图标即可启动Free Pascal 2.04。v点击菜单栏:file下拉exit项即可退出pascal环境。v按 alt+enter,进行全屏切换。Pascal 程序的输入与调试例T0_1:用数字打印三角形。Program T0_1;var j,h:integer;Begin for j:=1 to 5 do begin write(:16-j);for h:=1 to 2*j-1 do write(h);writeln;end;End.用主菜单的Compile中的菜单项Compile,或Alt+F9组合键,即可对程序进行编译。假设文件没取名,那么先建立文件名。如果编译有错误,会显示相关出错信息。注意free Pascal安装时,有时会碰到与杀毒软件冲突的事情,编译也会不成功,需先将杀毒软件屏蔽。运行程序:选择主菜单Run中的菜单项Run,或按ctrl+F9键。查看结果。选择主菜单Debug中的菜单项Output可以查看结果。保存文件。用主菜单file中的save或按F2键保存文件。第1课 认识PASCAL语言Pascal是一种计算机通用的、编译型的高级程序设计语言。它由瑞士Niklaus Wirth教授于六十年代末设计并创立。是一种按结构化程序设计原那么描述的高级语言。主要特点有:严格的结构化形式;丰富完备的数据类型;运行效率高;查错能力强。NOI(全国奥林匹克信息学竞赛)把Pascal语言定为唯一提倡的程序设计语言 第1课 认识PASCAL语言让我们先来看一个PASCAL程序,通过这个程序了解PASCAL的规那么。例L1_1 半径,求圆周长和面积的程序。程序说明:程序说明:PROGRAMcircle(input,output);(*第第1行:程序首部行:程序首部*)CONST(*第第2行:常量说明行:常量说明*)PI=3.14159;VAR(*第第4行:变量说明行:变量说明*)r,l,s:real;BEGIN(*第第6行:语句局部行:语句局部*)read(r);(*第第7行:输入语句行:输入语句*)l:=2*PI*r;(*第第8行:赋值语句行:赋值语句*,计算周长,计算周长)s:=PI*r*r;(*第第9行:赋值语句行:赋值语句*,计算面积,计算面积)write(r,l,s);(*第第10行:输出语句行:输出语句*)END.(*第第11行:语句局部以行:语句局部以END.结束结束*)完整的PASCAL程序框架Program 程序名程序参数表;Label 标号说明;Const 常量说明;Type 类型说明;Var 变量说明;Function 函数说明;procedure 过程说明;begin 程序语句;end.在在Free Pascal Free Pascal 中可省程序参数表。中可省程序参数表。在程序执行局部使用的标号、常在程序执行局部使用的标号、常量、类型、变量、记录、文件、过量、类型、变量、记录、文件、过程和函数,都必须在说明局部进行程和函数,都必须在说明局部进行说明。但并不是每个程序都必需的,说明。但并不是每个程序都必需的,根据需要而设。根据需要而设。程序执行局部是指程序执行局部是指BeginBegin开始到开始到最后一条最后一条End.End.结束语句的局部,是结束语句的局部,是程序的核心。它由一系列语句组成,程序的核心。它由一系列语句组成,语句之间用语句之间用“;隔开,允许一行;隔开,允许一行写多个语句,也允许一个语句写成写多个语句,也允许一个语句写成几行。一般情况下一行只写一个语几行。一般情况下一行只写一个语句。句。1、PROGRAM写在最左边顶格;2、注释的大括号、和CONST、VAR、BEGIN、END等语句上下对齐,且它们比PROGRAM向右移两个字符;3、各个语句和程序语句也是上下对齐,它们比第2点中的各语句又向右移两个字符;4、语句间多余空格与空行,编译时会忽略。程序的书写格式:程序的书写格式:数制的转换1、常用的进位计数制有:十进制、二进制、八进制、十六进制。名称基数标志符十进制0,1,2,3,4,5,6,7,8,9,D二进制0,1B八进制0,1,2,3,4,5,6,7Q十六进制0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,FH十进制D二进制B八进制Q十六进制H00000001000111200102230011334010044501015560110667011177810001089100111910101012A11101113B12110014C13110115D14111016E15111117F161000020102 2、常用进制对照表、常用进制对照表3、十进制与二进制的相互转换例1:将十进制数20.6875转换成二进制数。1整数局部的转换:“除以2倒序取余法。2 20 0 2 10 0 2 5 1 2 2 0 2 1 1 02小数局部的转换:“乘2取整法。0.6875 0.3750 0.75 0.5 2 2 2 2 1.3750 0.75 1.5 1.0 1 0 1 1 正序取整倒序取余合在一起得:20.687510=10100.10112例2:将11001.01012转换成十进制数。11001.11012=124+123+022+021+120+12-1+12-2 +02-3+12-4 =16+8+1+0.5+0.25+0.0625 =25.812510 十进制数和二进制数的转换可以推广 到十进制与八进制、十进制与十六进制数的转换。如十进制数转换在八进制数的方法是:“除以8倒取余法;十进制小数转换成八进制小数的方法是:“乘8取整法。课堂作业:11101101.1012 =10 2 45.62510 =2第2课 PASCAL的数据类型、标识符、表达式、语句 数据对于一门程序语言是非常重要的,数据的一个非常重要的特征就是它的类型。PASCAL规定:程序中出现的变量必须先说明才能使用。二个值,即整数类型v包括正整数+号可略、负整数和零。v1,204在会计统计中是允许的,但在pascal中是非法的。v整数类型的标识符为integer,取值范围为:-32768n 32767。v在free pascal中,允许整数采用十六进制前加$)或二进制(前加%表示。v 如 x:=%101,相当于 x:=5 ,y:=$10,相当于y:=16 v整数的类型:名称类型标识符数据范围短整型Shortint-128127长整型Longint-21474836482147483647字节型Byte0255字型Word065535整数类型Int64-92233720368547758089223372036854775807无符号整数Qword int64018446744073709551615注意:int64int64不是有序类型。直接给一个不是有序类型。直接给一个 int64 int64类型的变量赋值一个超过类型的变量赋值一个超过longintlongint范围的范围的整数是非法的,这是因为整数是非法的,这是因为free pascalfree pascal在表达式的计算中默认最大类型为在表达式的计算中默认最大类型为longintlongint。标识符v标识符是以字母开头的字母、数字组合,用来表示常量、变量、类型、文件、函数、过程或程序的名字。vx,y,max,min,sum,a15,a3b7都是合法的标识符。而v5x,x-y,ex10.5都是非法的标识符。v标识符的长度一般不要超过8个字符。v标识符的选取最好有一定意义,这样便于记忆,也增加了程序的可读性。表达式和运算符 v算术运算符:+,-,*,/,div整除,mod取余v关系运算符:=,=,v逻辑运算符:AND,OR,NOTv表达式就是将数据和运算符结合使用,组成一组有意义的运算式。v在PASCAL语言中规定,表达式按以下运算优先规那么计算:v1、所有括起来的子表达式必须先计算,且子表达式必须从里到外计算;v2、在同一子表达式中的运算符按以下次序计算:v 函数;NOT;AND,*,/,DIV,MOD;v OR,+,-;,=,v3、在同一个子表达式中,同一优先级的运算按从左到右的次序进行。v4、MOD运算结果的符号总是和被除数相同,而与模无关。v -15 mod 6=-3 -15 mod(-6)=-3 15 mod(-6)=3 PASCAL程序中的运算优先规那么 常量与变量v常量定义格式:v constv =;v要求如下:v1、要放在程序说明局部。v2、必须遵循先定义后使用的原那么。v3、不允许重复定义,或一次定义多个常量。v例如:const a=1;v a,b=10;v c=1 or 2;v d:=3;v变量定义格式:v varv :类型标识符;v例如:varv a,b:integer;v x,y:real;v ch:char;v t:boolran;v但以下说明是非法的:v例如:varv a,b=integer;v ch:char;v ch :boolean;v a,b后面不能用=,ch不能重复定义。v变量一经说明,系统就为其分配内存。程序中使用该变量时,就要在相应的内存单元读写数据,称为对变量的访问。常用函数常用函数与表达式与表达式顺序结构程序设计1 1、赋值语句、赋值语句 赋值语句的格式:赋值语句的格式:变量标识符变量标识符:=:=表达式;表达式;功能:功能:赋值语句是先执行计算表达式的值,然后赋值赋值语句是先执行计算表达式的值,然后赋值给变量标识符。给变量标识符。说明:说明:1 1:=“:=“称为赋值号,不要与称为赋值号,不要与 =“=“混淆。赋混淆。赋值有方向性,左边只能是变量,不能是表达式,如值有方向性,左边只能是变量,不能是表达式,如 x x:=1:=1是非法的。是非法的。2 2赋值号两边的类型必须相同,但是整型表达式可以赋值号两边的类型必须相同,但是整型表达式可以赋值给实型,反之不成立。赋值给实型,反之不成立。3 3一个赋值语句只能给一个变量赋值,变量可以赋值一个赋值语句只能给一个变量赋值,变量可以赋值屡次,但只保存最后一次的值。屡次,但只保存最后一次的值。4 4被赋值的变量可以作为表达式因子参与运算,如:被赋值的变量可以作为表达式因子参与运算,如:i:=i+1;i:=i+1;是合法的。是合法的。5 5对变量的赋值是对变量的存入访问。如对变量的赋值是对变量的存入访问。如d:=ad:=a;语句;语句执行后,执行后,d d的变量内容就已经是的变量内容就已经是a a变量的内容,但是变量的内容,但是a a变变量的值并没有消失与改变。量的值并没有消失与改变。在实际编程中,我们经常使用在实际编程中,我们经常使用a:=a+1;a:=a+1;作作为计数器,用为计数器,用s:=s+x;s:=s+x;作为累加器,用作为累加器,用t:=t*n;t:=t*n;作为累乘作为累乘器。器。2、输入read、readln)语句输入语句格式:格式1:read ;格式2:readln ();功能:执行该语句时,程序进入等待状态,等待用户从键盘输入数据,输入的数据将依次赋给变量表中的变量,而后程序继续执行其他语句。说明:1变量表中变量超过一个时,中间用逗号隔开。从键盘输入数据时,数据的个数不能少于变量个数,否那么电脑一直处于等待状态。当数据多于变量个数时,对于readln语句将其忽略,对于read语句时,会补下一句read语句读入,如果没有输入语句,也将其忽略。2输入数值型数据时,必须用空格或回车键分隔,最后一定要用回车键。输入字符型数据时,不能有空格与回车键,必须连续输入,因为空格与回车键也会当作字符。3输入的数据必须是常量,且必须与对应的变量类型相一致。4readln();可以没有变量名表,此时该语句等待从键盘输入回车键。Readln(x);等价于执行了二条语句:read(x);readln();3、输出write、writeln)语句输出语句的格式:格式1 write;格式2 writeln;功能:按指定的格式将输出项的内容输出到屏幕上。说明:1输出项如果是多项时,各项间用逗号分隔。2输出项可以是常量、变量、函数、表达式。常量直接输出,变量时输出变量的存储单元内容,遇到函数与表达式时,先计算、再输出。3write 语句输完最后一项时,不换行,等待下一条 write语句继续输出。Writeln语句输完最后一项时换行,该语句允许没有输出项,起到换行作用。writeln(x);等价于执行了write(x);writeln();例:X:=2;y:=3;writeln(x=,x,y=,y);writeln(x+y=,x+y,x*y=,x*y)输出结果为:x=2 y=3x+y=5 x*y=6writewrite语句可以输出实型、语句可以输出实型、整型、字符型、布尔型值,整型、字符型、布尔型值,也可以输出字符串。假设也可以输出字符串。假设在在writewrite语句中不加场宽说语句中不加场宽说明,那么按标准场宽输出。明,那么按标准场宽输出。在这里,场宽是指输出值在这里,场宽是指输出值的位数。的位数。自定义场宽1单场宽。用来控制整型、字符型、布尔型数据的输出格式,不能用于实数型。格式:n 说明:n正整数 表示输出时所占的列数。单场宽一律右对齐,前用空格。2双场宽。用来控制实数的输出格式。格式:n1:n2 说明:n1表示输出总占列数,包括符号位、整数局部、小数点和小数局部;n2表示小数局部的列数。当数据突破场宽时,首先保证整数局部的有效性,小数局部按n2场宽进行四舍五入显示,但内存中仍是原来的精确度。单场宽右对齐,双场宽向小数点看齐,多余的小数位数补零。例T2_1:交换两个变量的值。1利用中间变量利用中间变量c,实现交换。,实现交换。ProgramT2_1_1;Vara,b,c:integer;Beginwrite(pleaseinputa,b=?);read(a,b);write(before:,a=,a,b=,b);c:=a;a:=b;b:=c;writeln(after:,a=,a:8,b=,b:8);End.2不用中间变量,也可实现交换。不用中间变量,也可实现交换。ProgramT2_1_2;Vara,b:integer;Beginwrite(pleaseinputa,b=?);read(a,b);write(before:,a=,a,b=,b);a:=a+b;b:=a-b;a:=a-b;writeln(after:,a=,a:8,b=,b:8);End.例例T2_2:鸡兔同笼问题。鸡和兔的总头数是鸡兔同笼问题。鸡和兔的总头数是H,总腿数为总腿数为F,求鸡和兔各多少只?,求鸡和兔各多少只?分析:设鸡为分析:设鸡为C只,兔为只,兔为R只,那么只,那么C+R=H2*C+4*R=F解得:解得:C=4*H-F/2,R=H-C。程序为:程序为:ProgremT2_2;varh,f,c,r:real;beginreadln(h,f);c:=(4*h-f)/2;r:=h-c;writeln(click:,c);writeln(rabbit:,r);end.例T2_3:随机产生一个三位自然数,求其百位、十位、个位上的数字。分析:要产生随机数,必然用到随机函数。Random是随机函数能产生0,1之间的随机实数。随机产生三位数的表达式为:trunc(random*900)+100假设三位数X,百位数分另别为A,B,C,那么存在如下关系:A=X DIV 100B=(X-A*100)DIV 10C=X MOD 10程序为:Program T2_3;VAR x,a,b,c:integer;begin randomize;它的作用是每次运行程序时,random函数产生不同的随机数。起到埋种子作用。x:=trunc(random*900)+100;writeln(x=,x);a:=x div 100;b:=(x-a*100)div 10;c:=x mod 10;writeln(a:5,b:5,c:5);End.例T2_4 三角形的两边及夹角,求第三边及面积。数学建模:设三角形的两边及夹角分别为a,b,第三边为c,面积为s。那么 ,假设以角度值输入,在计算sin和cos时应转换为弧度。角度转弧度的公式为:弧度=角度程序:程序:Program T2_4;Program T2_4;const const pi=3.14159;pi=3.14159;var var a,b,alfa,c,s:real;a,b,alfa,c,s:real;begin begin read(a,b,alfa);read(a,b,alfa);alfa:=alfa*pi/180;alfa:=alfa*pi/180;c:=sqrt(a*a+b*b-2*a*b*cos(alfa);c:=sqrt(a*a+b*b-2*a*b*cos(alfa);s:=1/2*a*b*sin(alfa);s:=1/2*a*b*sin(alfa);write(alfa=,alfa,c=:8,c,s=:8,s);write(alfa=,alfa,c=:8,c,s=:8,s);end.end.例T2_5:输入一个字符,求其序号、前导即前一字符、后继即后一字符。ProgramT2_5;ProgramT2_5;varvarch,pch,sch:char;ch,pch,sch:char;num:integer;num:integer;beginbeginwriteln;writeln;write(pleaseinputacharacter:);write(pleaseinputacharacter:);readln(ch);readln(ch);write(pch:,pred(ch),sch:,succ(ch),num:,ord(ch);write(pch:,pred(ch),sch:,succ(ch),num:,ord(ch);readln();readln();end.end.测试删除倒数第二条语句测试删除倒数第二条语句测试删除倒数第二条语句测试删除倒数第二条语句readln();readln();后,执行情况有何不同?后,执行情况有何不同?后,执行情况有何不同?后,执行情况有何不同?例T2_6:输入x,y。假设在圆环内,输出true,假设在圆环外;输出false。圆环如下图。讨论:如下图,假设下式1x2+y24成立那么在圆环内,否那么在圆环外。设布尔变量bool,当x,y在圆环内时,让它取值为true,否那么取值为false。“x x,y y假设在圆环内的表达假设在圆环内的表达式:式:(x2+y212)(x2+y212)且且(x2+y222)(x2+y222)程序:程序:program T2_6;program T2_6;var var x,y:real;x,y:real;bool:boolean;bool:boolean;begin begin writeln;writeln;write(x=?);write(x=?);readln(x);readln(x);write(y=?);write(y=?);readln(y);readln(y);bool:=(x*x+y*y=1)and(x*x+y*y=1)and(x*x+y*y50除了上面给出的IF语句形式外,PASCAL中还有另外一种IF语句形式。即IF 条件 THEN 语句在条件为真时,执行THEN后的语句。在条件为假时,不执行THEN后的语句,在两种情况下的后继语句都是IF语句的下一个语句。例例L3_2 读入三个数,找出并打印其中的最大数。解:PROGRAM L3_2;VAR a,b,c:real;BEGIN write(a=?);read(a);write(b=?);read(b);write(c=?);read(c);IF ab THEN a:=b;IF ac THEN a:=c;writeln(ZuiDaShu:,a)END.3.2.2 3.2.2 复合语句复合语句v在IF语句中,跟在THEN或ELSE后的语句可能不止一个,这时要用到复合语句的概念。v复合语句是一个以BEGIN开始,以END结束的语句。在BEGIN与END之间可以包括假设干个语句,每个语句之间以分号分开。一般形式为:vBEGINv 语句1;v 语句2;v v 语句nvENDv一个复合语句从外部看来,相当于一个语句。3.2.3 IF语句的嵌套v在IF语句中,THEN或ELSE后的语句本身也可能是IF语句。此时称为IF语句的嵌套或称为复合IF语句。v例如语句v IF条件1v THEN语句1v ELSE IF条件2v THEN语句2v ELSE语句3v 就是一个复合IF语句,在它的ELSE后又是一个IF语句。有时IF语句可能会有两种不同的理解。注意:在进行注意:在进行IFIF语句的嵌套时应注意语句的嵌套时应注意IF IF 与与 ELSE ELSE的配对关系,的配对关系,ELSEELSE是不能是不能省略的,否那么将造成逻辑错误。解决的方法是写一个空语句或者采用复省略的,否那么将造成逻辑错误。解决的方法是写一个空语句或者采用复合语句,即增加语句括号合语句,即增加语句括号beginend)beginend)。从内层开始,。从内层开始,ELSEELSE总是与它上总是与它上面最近的示曾配对的面最近的示曾配对的IFIF配对。配对。例L3_3:有一个函数表达式为:编写程序,输入x,输出y的值。Program L3-3;var x:real;y:integer;begin write(please input x=);readln(x);If x0 then y:=1 else y:=0;Writeln(y=,y);End.3.3 CASE语句 CASE语句是实现选择结构程序设计的另一种语句。它的使用有时比IF语句来得简单、直观。CASE语句或称情况语句的一般形式是 CASE 表达式 OF 值表1:语句1;值表2:语句2;值表n:语句n;ELSE 语句n+1;END;在CASE语句头上的表达式必须是有序类型整型、字符型、布尔型以及后面要介绍的枚举型、子界型。值表是一些由逗号分开的常数。表达式所有可能的值必须在值表中出现,且每个值只能出现一次。如果当前表达式的值在某个值表i中出现,那么该程序只执行对应值表i的语句i,然后执行整个CASE语句后的下一语句。else 可以省略,此时假设无表达式的值与之相匹配的常数表时程序将向下运行并跳出case语句。例L3_5 输入年、月,输出该月有几天。v讨论:每年的讨论:每年的1、3、5、7、8、10、12月,每月月,每月有有31天;天;4、6、9、11月,每月有月,每月有30天;天;2月月闰年有闰年有29天,平年有天,平年有28天。天。v年号能被年号能被4整除,但不整除,但不能被能被100整除,或者年整除,或者年号能被号能被400整除的年均整除的年均是闰年。是闰年。v用用year、month、days分别表示年、月、每月分别表示年、月、每月天数。它们均为整数。天数。它们均为整数。v闰年的条件可以写成如闰年的条件可以写成如下的布尔表达式:下的布尔表达式:v(yearMOD4=0)AND(yearMOD1000)OR(yearMOD400=0)Program L3_5;var year,month,days:integer;begin read(year,month);case month of 1,3,5,7,8,10,12:days:=31;4,6,9,11 :days:=30;2:if (year mod 4=0)and(year mod 1000)or(year mod 400=0)then days:=29 else days:=28;end;writeln(year,year,month,month:,days:,days);End.例L3_6 编制程序,根据输入的x值,计算y与z并输出。PROGRAM L3_6;PROGRAM L3_6;CONST CONST PI=3.14159;PI=3.14159;VAR VAR x,y,z:real;x,y,z:real;BEGIN BEGIN write(x=?);write(x=?);read(x);read(x);IF x=2.5 IF x=2.5 THEN y:=x*x+1 THEN y:=x*x+1 ELSE y:=x*x-1;ELSE y:=x*x-1;IF x0 IF x0 THEN z:=-PI/2*x+3 THEN z:=-PI/2*x+3 ELSE IF x=0 ELSE IF x=0 THEN z:=0 THEN z:=0 ELSE z:=PI/2*x-5;ELSE z:=PI/2*x-5;writeln(x=,x:6:2,y=,y:6:2,z=,z:6:2)writeln(x=,x:6:2,y=,y:6:2,z=,z:6:2)END.END.作业:vXT3_1对一批货物征收税金,价格在对一批货物征收税金,价格在1万元以上的货物万元以上的货物征税征税5%,在,在5000元以上,元以上,1万元以下的货物征税万元以下的货物征税3%,在在1000元以上,元以上,5000元以下的货物征税元以下的货物征税2%,1000元元以下的货物免税。编写一程序,读入货物价格,计算并以下的货物免税。编写一程序,读入货物价格,计算并输出税金。输出税金。vXT3_2输入某学生成绩,假设成绩在输入某学生成绩,假设成绩在85分以上,输出分以上,输出verygood,假设成绩在,假设成绩在60分到分到85分之间,输出分之间,输出good,假设成绩低于,假设成绩低于60分,输出分,输出nogood。vXT3_3输入班号,输入该班学生人数。应用输入班号,输入该班学生人数。应用CASE语语句编程序。句编程序。班级201202203204205班额4547424648第4课 循环结构v循环结构或称重复结构是程序中的一个根本结构,在循环结构或称重复结构是程序中的一个根本结构,在解许多问题中是很有用的。我们知道,在许多复杂的问题解许多问题中是很有用的。我们知道,在许多复杂的问题中,常常需要做大量类同的计算处理。尽管计算机的运算中,常常需要做大量类同的计算处理。尽管计算机的运算速度很快,然而要把这些大量类同的计算处理的每一步都速度很快,然而要把这些大量类同的计算处理的每一步都写成语句,并输入计算机中,其工作量是相当大的。有时写成语句,并输入计算机中,其工作量是相当大的。有时是难以完成的。是难以完成的。v循环结构程序设计可以帮助我们有效地解决这一难题。利循环结构程序设计可以帮助我们有效地解决这一难题。利用循环结构程序设计,使得我们有可能只编写少量的语句,用循环结构程序设计,使得我们有可能只编写少量的语句,让计算机重复执行它许屡次,从而完成大量类同的计算要让计算机重复执行它许屡次,从而完成大量类同的计算要求。求。v在在PASCAL中,实现循环程序设计的主要语句有中,实现循环程序设计的主要语句有FOR语句、语句、WHILE语句和语句和REPEAT语句。语句。一、FOR语句格式1:(递增型)FOR x:=TO DO 格式1:(递减型)FOR x:=downTO DO FOR X:=1 TO 10 DOFOR X:=A TO Z DO 控制变量 初值 控制变量终值 false true 执行语句 控制变量 succ(控制变量 控制变量 初值 控制变量终值 false true 执行语句 控制变量 pred(控制变量FOR X:=10 DOWNTO 1 DOFOR X:=10 DOWNTO 1 DOFOR X:=Z DOWNTO A DOFOR X:=Z DOWNTO A DOT4_001 计算1+2+3+10PROGRAM T4_001;VAR s,n:integer;BEGIN s:=0;FOR n:=1 TO 10 DO s:=s+n;writeln(s=,s)END.s=0当n=1 s=s+n=0+1=1;当n=2 s=s+n=1+2=3当n=3 s=s+n=3+3=6当n=4 s=s+n=6+4=10当n=5 s=s+n=10+5=15当n=6 s=s+n=15+6=21当n=7 s=s+n=21+7=28当n=8 s=s+n=28+8=36当n=9 s=s+n=36+9=45当n=10 s=s+n=45+10=55例T4_002:输入10个任意整数,求它们的和.PROGRAM T4_002;VAR s,n,a:integer;BEGIN s:=0;FOR n:=1 TO 10 DO BEGIN read(a);s:=s+a;END;writeln(s=,s)END.例例例例T4_003T4_003:计算计算计算计算n!n!n!=123nn!=123nPROGRAM T4_003;VAR n,i,sum:integer;BEGIN read(n);sum:=1;FOR i:=1 TO n DO sum:=sum*i;writeln(n!=,sum);END.注意N8,否那么会溢出。例T4_004:任何一个 n3一定可以表示成n个连续的奇数和。输入n(n100),输出n3对应的表达式。数学题解:设表达式中的最小奇数为x;当N=1时,最小奇数X=1,1个奇数;当N=2时,最小奇数X=3,2 个奇数;当N=3时,最小奇数X=7,3 个奇数;N N3 1 1 2 23=8=3+5 3 33=27=7+9+11 4 43=64=13+15+17+19 当 N=K 时,最小奇数 X 前己有 1+2+3+(K-1)个奇数,那么第K个奇数 K*K-1X=*2+1=K*K-1+1=N*N-1+1 2ProgramT4_004;vari,n,a:longint循环变量,连续的奇数个数,当前项,类型循环变量,连续的奇数个数,当前项,类型为长整型为长整型beginreadln(n);a:=n*(n-1)+1;fori:=1ton-1dobeginwrite(a,+);a:=a+2;end;writrln(a);readln;end思考题:用数学方法证明上述定理。作业:T4_005 输入10个任意整数,求它们的平均值。T4_006 按正序和反序分别输出26个英文字母。T4_007 输入20个整数,输出其中最大数。T4_008 输入20个整数,统计其中正、负和零的个数。思考题:求值:作业答案:PROGRAM T4_005;VAR ave:real;i,n,sum:integer;BEGIN sum:=0;FOR i:=1 TO 10 DO BEGIN read(n);sum:=sum+n;END;ave:=sum/10;writeln(ave=,ave:6:2)END.PROGRAM T4_006;VAR i:integer;BEGIN writeln();FOR i:=1 TO 26 DO write(chr(96+i);writeln();FOR i:=122 DOWNTO 97 DO write(chr(i)END.PROGRAM T4_006_1;VAR i:char;BEGIN writeln();FOR i:=ATO Z DO write(i);writeln();FOR i:=ZDOWNTO A DO write(i)END.作业答案:PROGRAM T4_007;VAR max,i,n:integer;BEGIN read(max);FOR i:=1 TO 19 DO BEGIN read(n);IF max0 THEN Zheng:=Zheng+1 ELSE IF n=0 THEN Ling:=Ling+1 ELSE Fu:=Fu+1;END;FOR writeln(Zheng Shu You:,Zheng,;Fu Shu You:,Fu,;Ling You:,Ling)END.二、while 语句(当型循环 当循环次数未知,例如它依赖于某个布尔表达式的值,而此值在循环执行过程中会改变。这种循环不可能由FOR语句实现,PASCAL为此提供了WHILE语句和REPEAT语句。WHILE语句的一般形式:WHILE DO flaseflase布尔表达式布尔表达式布尔表达式布尔表达式truetrue语句语句语句语句例例T4_009:求求S=2+6+10+98的值。的值。分析:S为求和累加器,X为当前项,赋初值为2,每次循环后增加4,取X98为布尔表达式。ProgramT4_009;ProgramT4_009;VarVars,x:longint;s,x:longint;beginbeginx:=2;s:=0;x:=2;s:=0;whilex=98dowhilex=98do当满足条件时执行后面语句当满足条件时执行后面语句当满足条件时执行后面语句当满足条件时执行后面语句beginbegins:=s+x;s:=s+x;x:=x+4;x:=x+4;end;end;writeln(s=,s);writeln(s=,s);end.end.课堂作业:计算 S=1+2+4+8+128+256的值。例T4_010:求两个自然数的最小公倍数。分析:先从数学角度来分析一下,所谓最小公倍数就是指能被M和N同时整除的最小自然数。先设一个变量i,让它从1开始按自然数增长,将i与M相乘的结果存到变量S中,这样S就是M的公倍数,由于i是从最小开始的,然后再用每一个S除以因子N,假设能整除,那么S为M和N两个因子的最小公倍数。Program T4_010;var n,m,I,s:longint;begin write(请输入两个自然数);readln(m,n);i:=1;s:=m*I;while s mod n 0 do begin i:=i+1;s:=m*I;end;writrln(s=,s);end.三、repeat语句直到型循环REPEAT语句也用于循环次数未知的循环,它的用法与WHILE语句稍有不同。REPEAT语句的一般形式如下:REPEATUNTIL 例 T4_011 计算 泰勒展开式 直到最后一项的绝对值小于10-7时停止计算,x由键盘输入。题解:题解:题解:题解:设设设设SS为累加器,为累加器,为累加器,为累加器,t t为当前项,为当前项,为当前项,为当前项,i i为为为为X X的幂次的幂次的幂次的幂次 即即即即S=t1+t2+t3+tk,S=t1+t2+t3+tk,其中其中其中其中1 1确定重复条件为确定重复条件为确定重复条件为确定重复条件为abs(t)1e-7abs(t)1e-7(2)(2)确定重复体确定重复体确定重复体确定重复体由由由由(3)(3)设初值设初值设初值设初值由此得出程序:由此得出程序:由此得出程序:由此得出程序:ProgramT4_011;ProgramT4_011;varvarI:integer;I:integer;t,s,x:real;t,s,x:real;beginbeginreadln(x);readln(x);x:=x*3.14159/180;x:=x*3.14159/180;i:=1;t:=X;s:=0;i:=1;t:=X;s:=0;repeatrepeats:=s+t;s:=s+t;t:=-t*x/(i+1)*x/(i+2);t:=-t*x/(i+1)*x/(i+2);i:=i+2;i:=i+2;untilabs(t)1e-7;untilabs(t)1e-7;writeln(sin(,x,)=,s:0:4)writeln(sin(,x,)=,s:0:4)readln;readln;End.End.作业:T4_012:计算 当最后一项的绝对值小于10-6时结束,打印输出结果。T4_013:求满足条件 N!100000 的最大值N。三种循环语句的相同点与不同点FORWHILEREPEAT语句格式句格式FOR:=TO DO WHILE DOREPEATUNTIL 循循环变量量赋值布布尔尔表达式表达式无循无循环变量量循循环次数次数确定,由初确定,由初值和和终值决决定定不确定,由循不确定,由循环体前的布体前的布尔尔表达式决定,当表达式决定,当值为“假假”时,结束循束循环。可能一次循可能一次循环也没有也没有不确定,由循不确定,由循环体后的体后的布布尔尔表达式决定,表达式决定,当当值为“真真”时结束束循循环。至少有一次循至少有一次循环循循环体体多多语句句时,需用,需用BEGIN和和END多多语句句时,需用,需用BEGIN和和END多多语句句时,不需用,不需用BEGIN和和END用计算机解题的根本方法 在对问题有了清楚的分析后,可以仔细在对问题有了清楚的分析后,可以仔细地构造求解步骤地构造求解步骤算法。算法可以自顶向算法。算法可以自顶向下、由粗到细,逐步求精。下、由粗到细,逐步求精。描述问题由粗到细的过程,一般可以分描述问题由粗到细的过程,一般可以分为三步:为三步:一级算法一级算法一级算法一级算法二级求精二级求精二级求精二级求精写出程序写出程序写出程序写出程序 第5课 多重循环v如果一个循环结构的内部循环体又包括一个循环结构,就称为多重循环结构。实现多重循环结构仍可以用前面讲的三种循环语句。因为任一循环语句的循环体局部都可以包含另一个循环语句,这种循环语句的嵌套为实现多重循环提供了方便。v多重循环的嵌套次数可以是任意的。可以按照嵌套层次数,分别叫做二重循环、三重循环等。处于内部的循环叫作内循环,处于外部的循环叫作外循环。v在设计多重循环时,要特别注意内、外循环之间的关系,以及各语句安放的位置,不要搞错。T5_001 求1100之间的素数(质数),每行输出5个素数.素数是大于素数是大于素数是大于素数是大于1 1,且除了,且除了,且除了,且除了1 1和它本身外,不能被其它任和它本身外,不能被其它任和它本身外,不能被其它任和它本身外,不能被其它任何整数所整除的整数。何整数所整除的整数。何整数所整除的整数。何整数所整除的整数。讨论:根据素数的定义可知讨论:根据素数的定义可知讨论:根据素数的定义可知讨论:根据素数的定义可知为了判断某数为了判断某数为了判断某数为了判断某数i i是否为素数,一个最简单的方法是用是否为素数,一个最简单的方法是用是否为素数,一个最简单的方法是用是否为素数,一个最简单的方法是用2 2、3 3、4 4、5 5、i-1i-1这些数逐个去除这些数逐个去除这些数逐个去除这些数逐个去除i i,看能否除,看能否除,看能否除,看能否除尽。假设被其中一个数除尽了,那么尽。假设被其中一个数除尽了,那么尽。假设被其中一个数除尽了,那么尽。假设被其中一个数除尽了,那么i i不是素数,不是素数,不是素数,不是素数,否那么全都除不尽否那么全都除不尽否那么全都除不尽否那么全都除不尽i i是素数。此算法次数较是素数。此算法次数较是素数。此算法次数较是素数。此算法次数较多多多多用用用用2 2、3 3、4 4、去除,如果都除不尽,那么去除,如果都除不尽,那么去除,如果都除不尽,那么去除,如果都除不尽,那么i i是是是是素数。此算法次数较少素数。此算法次数较少素数。此算法次数较少素数。此算法次数较少一级算法:一级算法:FORi:=2TO100DOBEGIN1、用、用2到去除到去除i,看看能否除尽,看看能否除尽2、IF除不尽除不尽THEN输出素数输出素数iEND算法需进一步求精。用变量算法需进一步求精。用变量yn来表示是否除来表示是否除尽。尽。一开始让一开始让yn=1,当有一个数能除尽时,让,当有一个数能除尽时,让yn=0表示能除尽,这时表示能除尽,这时i不是素数;假设不是素数;假设循环结束时,循环结束时,yn仍等于仍等于1,表示都除不尽,表示都除不尽,这时这时i是素数。是素数。二级求精二级求精1、用、用2到去除到去除i,看看能否除尽,看看能否除尽1-1yn:=11-2WHILEnsqrt(i)DOBEGINn:=n+1IFiMODn=0THENyn:=0END为了每行输出为了每行输出5个数,还需增加一个变量个数,还需增加一个变量counter来计数。来计数。ProgramT5_001;varI,n,yn,counter:integer;beginwriteln();counter:=1;Write(2,);fori:=3to100dobeginn:=1;yn:=1;whilensqrt(i)dobeginn:=n+1;ifImodn=0thenyn:=0;end;ifyn=1thenbegincounter:=counter+1;ifcountermod5=0thenwriteln(i)elsewrite(I,);end;ifend;forEnd.mainT5_002 验证哥德巴赫猜测任何充分大的偶数都可由两个素数之和表示。将42*ss1000中的所有偶数分别用两个素数之和表示。哥德巴赫猜测是:对任一充分哥德巴赫猜测是:对任一充分大的偶数大的偶数even,可以找到两,可以找到两个素数个素数p、q。使得。使得even=p+q即即1+1问题。问题。此问题还未得到最后的证明。此问题还未得到最后的证明。我们这里只是对有限范围内的我们这里只是对有限范围内的数,用计算机加以验证,不数,用计算机加以验证,不算严格证明。算严格证明。读入偶数读入偶数even,将它分成,将它分成p和和q,使,使even=p+q。p从从2开始每次加开始每次加1,q=even-p。如果。如果p、q均为均为素数,那么输出结果,否那素数,那么输出结果,否那么将么将p加加1再试。再试。一级算法:一级算法:一级算法:一级算法:1 1、读入一个数、读入一个数、读入一个数、读入一个数eveneven;2 2、判断、判断、判断、判断eveneven是否为偶数,如果是偶数,是否为偶数,如果是偶数,是否为偶数,如果是偶数,是否为偶数,如果是偶数,那么继续,否那么结束程序;那么继续,否那么结束程序;那么继续,否那么结束程序;那么继续,否那么结束程序;3 3、FORp:=2TOtrunc(even/2)FORp:=2TOtrunc(even/2)3-1q:=even-p3-1q:=even-p3-23-2判断判断判断判断p p是否为素数是否为素数是否为素数是否为素数pyn:=1pyn:=1表示表示表示表示p p为为为为素数,素数,素数,素数,pyn:=0pyn:=0表示表示表示表示p p不是素数不是素数不是素数不是素数3-33-3判断判断判断判断q q是否为素数是否为素数是否为素数是否为素数qyn:=1qyn:=1表示表示表示表示q q为为为为素数,素数,素数,素数,qyn:=0qyn:=0表示表示表示表示q q不是素数不是素数不是素数不是素数3-4IFpyn=1ANDqyn=13-4IFpyn=1ANDqyn=1THENwriteln(even,=,p,+,q)THENwriteln(even,=,p,+,q)二级求精:二级求精:二级求精:二级求精:1 1、read(even)read(even)2 2、IFevenMOD2=0IFevenMOD2=0THENTHEN第第第第3 3步步步步3-23-2、n:=2n:=2WHILEnsqrt(p)DOWHILEnsqrt(p)DOBEGINBEGINn:=n+1;n:=n+1;IFpMODn=0IFpMODn=0THENpyn:=0;THENpyn:=0;END;END;3-33-3、n:=2n:=2WHILEnsqrt(q)DOWHILEnsqrt(q)DOBEGINBEGINn:=n+1;n:=n+1;IFqMODn=0IFqMODn=0THENqyn:=0;THENqyn:=0;END;END;作业:程序找错误一错误一:第错误一:第错误一:第错误一:第2 2行少行少行少行少“VAR“VAR;错误二:第错误二:第错误二:第错误二:第5 5行少分号;行少分号;行少分号;行少分号;错误三:第错误三:第错误三:第错误三:第4 4、6 6、8 8行,行,行,行,字符串应用单引号,题字符串应用单引号,题字符串应用单引号,题字符串应用单引号,题中用了双引号;中用了双引号;中用了双引号;中用了双引号;错误四:第错误四:第错误四:第错误四:第8 8行字符串与行字符串与行字符串与行字符串与变量之间少逗号。变量之间少逗号。变量之间少逗号。变量之间少逗号。作业:程序找错误二PROGRAMT5_004;PROGRAMT5_004;VARVARn,integer;n,integer;BEGINBEGINwrite(Pleaseinputanumberfrom0to6forwrite(Pleaseinputanumberfrom0to6forweekday:)weekday:)read(n);read(n);CASEnCASEn0:writeln(Sunday);0:writeln(Sunday);1:writeln(Monday);1:writeln(Monday);2:writeln(Tuesday);2:writeln(Tuesday);3:writeln(Wednesday);3:writeln(Wednesday);4:writeln(Thursday);4:writeln(Thursday);5:writeln(Friday);5:writeln(Friday);6:writeln(Saturday);6:writeln(Saturday);END.END.错误一:第错误一:第错误一:第错误一:第2 2行变量与数据类型行变量与数据类型行变量与数据类型行变量与数据类型之间应用冒号,这里用了逗号;之间应用冒号,这里用了逗号;之间应用冒号,这里用了逗号;之间应用冒号,这里用了逗号;错误二:第错误二:第错误二:第错误二:第5 5行
展开阅读全文
相关资源
相关搜索

最新文档


当前位置:首页 > 商业管理 > 商业计划


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

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


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