版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
教师(PASCAL串讲)培训讲习教师(PASCAL串讲)培训讲习1序言:信息学奥赛的发展1989年5月首次举办国际信息学奥林匹克竞赛,简称IOI,成为继数学、物理、化学之后的又一门国际(中学生)奥林匹克竞赛。1991年起全国青少年计算机竞赛更名为全国青少年信息学(计算机)奥林匹克竞赛,简称NOI。由中国科学技术协会主管,中国计算机学会主办。全国青少年信息学奥林匹克联赛,简称为NOIP,参加联赛是参加NOI的必要条件。序言:信息学奥赛的发展1989年5月首次举办国际信息学奥林匹2信息学奥林匹克竞赛内容程序设计知识。熟练使用一门程序设计语言编写程序;熟悉常用的基本算法:如穷举法、排序(冒泡)法、搜索法、回溯法、递归算法,排列组合等。数据结构知识。简单变量、数组、队列、栈、串、记录、指针、链表、树、图和文件。调试程序技能。信息学奥林匹克竞赛内容程序设计知识。熟练使用一门程序设计语言3第1课认识PASCAL语言Pascal是一种计算机通用的、编译型的高级程序设计语言。它由瑞士NiklausWirth教授于六十年代末设计并创立。是一种按结构化程序设计原则描述的高级语言。
主要特点有:严格的结构化形式;丰富完备的数据类型;运行效率高;查错能力强。
NOI(全国奥林匹克信息学竞赛)把Pascal语言定为唯一提倡的程序设计语言
第1课认识PASCAL语言Pascal是一种计算机通用的4第1课认识PASCAL语言让我们先来看一个PASCAL程序,通过这个程序了解PASCAL的规则。例L1_1已知半径,求圆周长和面积的程序。第1课认识PASCAL语言让我们先来看一个PASCAL程5程序说明: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.结束*)程序说明:PROGRAMcircle(input,outp6完整的PASCAL程序框架Program程序名(程序参数表);Label标号说明;Const常量说明;Type类型说明;Var变量说明;Function函数说明;procedure过程说明;begin程序语句;……end.在FreePascal中可省程序参数表。在程序执行部分使用的标号、常量、类型、变量、记录、文件、过程和函数,都必须在说明部分进行说明。但并不是每个程序都必需的,根据需要而设。程序执行部分是指Begin开始到最后一条End.结束语句的部分,是程序的核心。它由一系列语句组成,语句之间用“;”隔开,允许一行写多个语句,也允许一个语句写成几行。一般情况下一行只写一个语句。完整的PASCAL程序框架Program在FreePas71、PROGRAM写在最左边顶格;2、注释的大括号{、和CONST、VAR、BEGIN、END等语句上下对齐,且它们比PROGRAM向右移两个字符;3、各个语句和程序语句也是上下对齐,它们比第2点中的各语句又向右移两个字符;4、语句间多余空格与空行,编译时会忽略。程序的书写格式:程序的书写格式:8数制的转换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、常用进制对照表数制的转换1、常用的进位计数制有:十进制、二进制、八进制、十93、十进制与二进制的相互转换例1:将十进制数20.6875转换成二进制数。(1)整数部分的转换:“除以2倒序取余法”。220021002512202110(2)小数部分的转换:“乘2取整法”。0.68750.37500.750.5×2×2×2×2
1.37500.751.51.0
1011
正序取整倒序取余合在一起得:(20.6875)10=(10100.1011)23、十进制与二进制的相互转换例1:将十进制数20.6875转10例2:将(11001.0101)2转换成十进制数。(11001.1101)2=1×24+1×23+0×22+0×21+1×20+1×2-1+1×2-2
+0×2-3+1×2-4=16+8+1+0.5+0.25+0.0625=(25.8125)10
十进制数和二进制数的转换可以推广到十进制与八进制、十进制与十六进制数的转换。如十进制数转换在八进制数的方法是:“除以8倒取余法”;十进制小数转换成八进制小数的方法是:“乘8取整法”。课堂作业:(1)(1101101.101)2=()10(2)(45.625)10=()2例2:将(11001.0101)2转换成十进制数。课堂作业:11第2课PASCAL的数据类型、标识符、表达式、语句
数据对于一门程序语言是非常重要的,数据的一个非常重要的特征就是它的类型。PASCAL规定:程序中出现的变量必须先说明才能使用。二个值,即第2课PASCAL的数据类型、标识符、表达式、语句12整数类型包括正整数(+号可略)、负整数和零。1,204在会计统计中是允许的,但在pascal中是非法的。整数类型的标识符为integer,取值范围为:-32768≤n≤32767。在freepascal中,允许整数采用十六进制(前加$)或二进制(前加%)表示。如x:=%101,相当于x:=5,y:=$10,相当于y:=16整数的类型:名称类型标识符数据范围短整型Shortint-128~127长整型Longint-2147483648~2147483647字节型Byte0~255字型Word0~65535整数类型Int64-9223372036854775808~9223372036854775807无符号整数Qwordint640~18446744073709551615注意:int64不是有序类型。直接给一个int64类型的变量赋值一个超过longint范围的整数是非法的,这是因为freepascal在表达式的计算中默认最大类型为longint。整数类型包括正整数(+号可略)、负整数和零。名称类型标识符数13信息学奥林匹克竞赛培训PASCAL语言课件14标识符标识符是以字母开头的字母、数字组合,用来表示常量、变量、类型、文件、函数、过程或程序的名字。x,y,max,min,sum,a15,a3b7都是合法的标识符。而5x,x-y,α,π,ε,ex10.5都是非法的标识符。标识符的长度一般不要超过8个字符。标识符的选取最好有一定意义,这样便于记忆,也增加了程序的可读性。标识符标识符是以字母开头的字母、数字组合,用来表示常量、变量15表达式和运算符算术运算符:+,-,*,/,div(整除),mod(取余)关系运算符:=,>,<,<=,>=,<>,逻辑运算符:AND,OR,NOT表达式就是将数据和运算符结合使用,组成一组有意义的运算式。在PASCAL语言中规定,表达式按下列运算优先规则计算:1、所有括起来的子表达式必须先计算,且子表达式必须从里到外计算;2、在同一子表达式中的运算符按下列次序计算:①函数;②NOT;③AND,*,/,DIV,MOD;④OR,+,-;⑤<,<=,=,>,>=,<>3、在同一个子表达式中,同一优先级的运算按从左到右的次序进行。4、MOD运算结果的符号总是和被除数相同,而与模无关。-15mod6=-3-15mod(-6)=-315mod(-6)=3表达式和运算符算术运算符:+,-,*,/,16PASCAL程序中的运算优先规则
PASCAL程序中的运算优先规则17常量与变量常量定义格式:const<常量标识符>=<常量>;要求如下:1、要放在程序说明部分。2、必须遵循先定义后使用的原则。3、不允许重复定义,或一次定义多个常量。例如:consta=1;a,b=10;c=1or2;d:=3;变量定义格式:var<变量名表>:类型标识符;例如:vara,b:integer;x,y:real;ch:char;t:boolran;但下列说明是非法的:例如:vara,b=integer;ch:char;ch:boolean;a,b后面不能用=,ch不能重复定义。变量一经说明,系统就为其分配内存。程序中使用该变量时,就要在相应的内存单元读写数据,称为对变量的访问。常量与变量常量定义格式:变量定义格式:18常用函数与表达式常用函数与表达式19顺序结构程序设计1、赋值语句赋值语句的格式:变量标识符:=表达式;功能:赋值语句是先执行计算表达式的值,然后赋值给变量标识符。说明:(1)”:=“称为赋值号,不要与”=“混淆。赋值有方向性,左边只能是变量,不能是表达式,如–x:=1是非法的。(2)赋值号两边的类型必须相同,但是整型表达式可以赋值给实型,反之不成立。(3)一个赋值语句只能给一个变量赋值,变量可以赋值多次,但只保留最后一次的值。(4)被赋值的变量可以作为表达式因子参与运算,如:i:=i+1;是合法的。(5)对变量的赋值是对变量的存入访问。如d:=a;语句执行后,d的变量内容就已经是a变量的内容,但是a变量的值并没有消失与改变。在实际编程中,我们经常使用a:=a+1;作为计数器,用s:=s+x;作为累加器,用t:=t*n;作为累乘器。顺序结构程序设计1、赋值语句202、输入(read、readln)语句输入语句格式:格式1:read<变量名表>;格式2:readln(<变量名表>);功能:执行该语句时,程序进入等待状态,等待用户从键盘输入数据,输入的数据将依次赋给变量表中的变量,而后程序继续执行其他语句。说明:(1)变量表中变量超过一个时,中间用逗号隔开。从键盘输入数据时,数据的个数不能少于变量个数,否则电脑一直处于等待状态。当数据多于变量个数时,对于readln语句将其忽略,对于read语句时,会补下一句read语句读入,如果没有输入语句,也将其忽略。(2)输入数值型数据时,必须用空格或回车键分隔,最后一定要用回车键。输入字符型数据时,不能有空格与回车键,必须连续输入,因为空格与回车键也会当作字符。(3)输入的数据必须是常量,且必须与对应的变量类型相一致。(4)readln();可以没有变量名表,此时该语句等待从键盘输入回车键。Readln(x);等价于执行了二条语句:read(x);readln();2、输入(read、readln)语句输入语句格式:213、输出(write、writeln)语句输出语句的格式:格式1write<输出项表>;格式2writeln(<输出项表>);功能:按指定的格式将输出项的内容输出到屏幕上。说明:(1)输出项如果是多项时,各项间用逗号分隔。(2)输出项可以是常量、变量、函数、表达式。常量直接输出,变量时输出变量的存储单元内容,遇到函数与表达式时,先计算、再输出。(3)write语句输完最后一项时,不换行,等待下一条write语句继续输出。Writeln语句输完最后一项时换行,该语句允许没有输出项,起到换行作用。writeln(x);等价于执行了write(x);writeln();3、输出(write、writeln)语句输出语句的格式:22例:X:=2;y:=3;writeln(‘x=’,x,’y=’,y);writeln(x+y=’,x+y,’x*y=’,x*y)输出结果为:x=2y=3x+y=5x*y=6write语句可以输出实型、整型、字符型、布尔型值,也可以输出字符串。若在write语句中不加场宽说明,则按标准场宽输出。在这里,场宽是指输出值的位数。例:X:=2;y:=3;write语句可以输出实型、整型、23自定义场宽(1)单场宽。用来控制整型、字符型、布尔型数据的输出格式,不能用于实数型。格式:<输出项>:n说明:n(正整数)表示输出时所占的列数。单场宽一律右对齐,前用空格。(2)双场宽。用来控制实数的输出格式。格式:<输出项>:n1:n2说明:
①n1表示输出总占列数,包括符号位、整数部分、小数点和小数部分;n2表示小数部分的列数。
②当数据突破场宽时,首先保证整数部分的有效性,小数部分按n2场宽进行四舍五入显示,但内存中仍是原来的精确度。③单场宽右对齐,双场宽向小数点看齐,多余的小数位数补零。自定义场宽(1)单场宽。用来控制整型、字符型、布尔型数据的输24例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_1:交换两个变量的值。(1)利用中间变量c,实现交换25例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_2:鸡兔同笼问题。已知鸡和兔的总头数是H,总腿数为F26例T2_3:随机产生一个三位自然数,求其百位、十位、个位上的数字。分析:要产生随机数,必然用到随机函数。Random是随机函数能产生[0,1]之间的随机实数。随机产生三位数的表达式为:trunc(random*900)+100假设三位数X,百位数分另别为A,B,C,则存在如下关系:A=XDIV100B=(X-A*100)DIV10C=XMOD10程序为:ProgramT2_3;VARx,a,b,c:integer;beginrandomize;{它的作用是每次运行程序时,random函数产生不同的随机数。起到埋种子作用。}x:=trunc(random*900)+100;writeln(‘x=‘,x);a:=xdiv100;b:=(x-a*100)div10;c:=xmod10;writeln(a:5,b:5,c:5);End.
例T2_3:随机产生一个三位自然数,求其百位、十位、个位上27例T2_4已知三角形的两边及夹角,求第三边及面积。数学建模:设三角形的两边及夹角分别为a,b,α,第三边为c,面积为s。则,若α以角度值输入,在计算sin和cos时应转换为弧度。角度转弧度的公式为:弧度=角度×程序:ProgramT2_4;constpi=3.14159;vara,b,alfa,c,s:real;beginread(a,b,alfa);alfa:=alfa*pi/180;c:=sqrt(a*a+b*b-2*a*b*cos(alfa));s:=1/2*a*b*sin(alfa);write(‘alfa=‘,alfa,’c=‘:8,c,’s=‘:8,s);end.例T2_4已知三角形的两边及夹角,求第三边及面积。数学建28例T2_5:输入一个字符,求其序号、前导(即前一字符)、后继(即后一字符)。ProgramT2_5;varch,pch,sch:char;num:integer;beginwriteln;write(‘pleaseinputacharacter:’);readln(ch);write(‘pch:’,pred(ch),’sch:’,succ(ch),’num:’,ord(ch));readln();end.测试删除倒数第二条语句readln();后,执行情况有何不同?例T2_5:输入一个字符,求其序号、前导(即前一字符29例T2_6:输入x,y。若在圆环内,输出true,若在圆环外;输出false。圆环如图所示。讨论:如图所示,若下式1≤x2+y2≤4成立则在圆环内,否则在圆环外。设布尔变量bool,当x,y在圆环内时,让它取值为true,否则取值为false。“(x,y)若在圆环内”的表达式:(x2+y2≥12)且(x2+y2≤22)程序:programT2_6;varx,y:real;bool:boolean;beginwriteln;write(‘x=?’);readln(x);write(‘y=?’);readln(y);bool:=(x*x+y*y>=1)and(x*x+y*y<=4);write(bool);readln;end.例T2_6:输入x,y。若在圆环内,输出true,若在30作业:XT1_1写一程序读入三角形的三个边a,b,c,计算并打印三角形的面积S。可利用下列公式计算。其中:XT1_2输入一个三位整数,将它们反向输出。例如输入127,输出应为721。
XT1_3由键盘输入两组x,y值,由程序根据它们是否在示意图中的斜线区域内,输出不同的值。若在斜线区域内,输出true,否则输出false。作业:XT1_1写一程序读入三角形的三个边a,b,31第3课选择结构程序设计
PASCAL中有两个语句可实现选择结构:IF语句(条件语句)和CASE语句(情况语句)
3.2.1IF语句的两种形式IF语句又称如果语句(或称条件语句)。它的一般形式是IF(条件)THEN(语句1)ELSE(语句2)其中“条件”实际上是一个布尔表达式,它的值可以是真(true)或假(false)。在条件为真时,执行语句1,否则(条件为假)执行语句2。可以利用流程图来描述选择结构。在流程图中用菱形框表示要执行的判定,其余步骤用矩形框表示,箭头表示执行的顺序。第3课选择结构程序设计PASCAL中有两个语32例L3_1火车托运行李,要根据行李的重量按不同标准收费。例如不超过50kg,按每公斤0.35元收费。若超过50kg,则其中50kg按每公斤0.35元收费,其余超过部分按每公斤0.50元收费。现输入托运行李重量,要求计算并输出托运费。数学建模:设托运行李重量为weight,该问题要求根据weight是否超过50kg,按不同公式计算出托运费。设托运费为pay。weight和pay均为实型。下面给出算法。一级算法1、读入weight的值。2、根据weight的大小选择不同的公式计算pay。3、输出pay。其中第2步需求精。根据题意,可以写出计算pay的公式如下:weight≤50weight>50例L3_1火车托运行李,要根据行李的重量按不同标准收33除了上面给出的IF语句形式外,PASCAL中还有另外一种IF语句形式。即IF(条件)THEN(语句)在条件为真时,执行THEN后的语句。在条件为假时,不执行THEN后的语句,在两种情况下的后继语句都是IF语句的下一个语句。除了上面给出的IF语句形式外,PASCAL中还有另外一种IF34例L3_2读入三个数,找出并打印其中的最大数。解:PROGRAML3_2;VARa,b,c:real;BEGINwrite('a=?');read(a);write('b=?');read(b);write('c=?');read(c);IFa<bTHENa:=b;IFa<cTHENa:=c;writeln('ZuiDaShu:',a)END.例L3_2读入三个数,找出并打印其中的最大数。353.2.2复合语句在IF语句中,跟在THEN或ELSE后的语句可能不止一个,这时要用到复合语句的概念。复合语句是一个以BEGIN开始,以END结束的语句。在BEGIN与END之间可以包括若干个语句,每个语句之间以分号分开。一般形式为:BEGIN(语句1);(语句2);…(语句n)END一个复合语句从外部看来,相当于一个语句。3.2.2复合语句363.2.3IF语句的嵌套在IF语句中,THEN或ELSE后的语句本身也可能是IF语句。此时称为IF语句的嵌套(或称为复合IF语句)。例如语句IF(条件1)THEN(语句1)ELSEIF(条件2)THEN(语句2)ELSE(语句3)就是一个复合IF语句,在它的ELSE后又是一个IF语句。3.2.3IF语句的嵌套在IF语句中,THEN或ELSE37有时IF语句可能会有两种不同的理解。注意:在进行IF语句的嵌套时应注意IF与ELSE的配对关系,ELSE是不能省略的,否则将造成逻辑错误。解决的办法是写一个空语句或者采用复合语句,即增加语句括号(begin…end)。从内层开始,ELSE总是与它上面最近的(示曾配对的)IF配对。有时IF语句可能会有两种不同的理解。注意:在进行IF语句的38例L3_3:有一个函数表达式为:
编写程序,输入x,输出y的值。
ProgramL3-3;varx:real;y:integer;beginwrite(‘pleaseinputx=‘);readln(x);Ifx<0theny:=-1elseifx>0theny:=1elsey:=0;Writeln(‘y=‘,y);End.例L3_3:有一个函数表达式为:
编写程序,输入x,输出393.3CASE语句CASE语句是实现选择结构程序设计的另一种语句。它的使用有时比IF语句来得简单、直观。CASE语句(或称情况语句)的一般形式是CASE(表达式)OF(值表1):(语句1);(值表2):(语句2); …… (值表n):(语句n);ELSE语句n+1;END; 在CASE语句头上的表达式必须是有序类型(整型、字符型、布尔型以及后面要介绍的枚举型、子界型)。值表是一些由逗号分开的常数。表达式所有可能的值必须在值表中出现,且每个值只能出现一次。 如果当前表达式的值在某个值表i中出现,则该程序只执行对应值表i的语句i,然后执行整个CASE语句后的下一语句。else可以省略,此时若无表达式的值与之相匹配的常数表时程序将向下运行并跳出case语句。
3.3CASE语句CASE语句是实现选择结构程40例L3_5输入年、月,输出该月有几天。讨论:每年的1、3、5、7、8、10、12月,每月有31天;4、6、9、11月,每月有30天;2月闰年有29天,平年有28天。年号能被4整除,但不能被100整除,或者年号能被400整除的年均是闰年。用year、month、days分别表示年、月、每月天数。它们均为整数。闰年的条件可以写成如下的布尔表达式:(yearMOD4=0)AND(yearMOD100<>0)OR(yearMOD400=0)ProgramL3_5;varyear,month,days:integer;beginread(year,month);casemonthof1,3,5,7,8,10,12:days:=31;4,6,9,11:days:=30;2:if(yearmod4=0)and(yearmod100<>0)or(yearmod400=0)thendays:=29elsedays:=28;end;writeln(year,’year’,month,’month:’,’days:’,days);End.例L3_5输入年、月,输出该月有几天。讨论:每年的1、341例L3_6编制程序,根据输入的x值,计算y与z并输出。PROGRAML3_6;CONSTPI=3.14159;VARx,y,z:real;BEGINwrite('x=?');read(x);IFx<=2.5THENy:=x*x+1ELSEy:=x*x-1;IFx<0THENz:=-PI/2*x+3ELSEIFx=0THENz:=0ELSEz:=PI/2*x-5;writeln('x=',x:6:2,',y=',y:6:2,',z=',z:6:2)END.例L3_6编制程序,根据输入的x值,计算y与z并输出。PR42作业:XT3_1对一批货物征收税金,价格在1万元以上的货物征税5%,在5000元以上,1万元以下的货物征税3%,在1000元以上,5000元以下的货物征税2%,1000元以下的货物免税。编写一程序,读入货物价格,计算并输出税金。XT3_2输入某学生成绩,若成绩在85分以上,输出verygood,若成绩在60分到85分之间,输出good,若成绩低于60分,输出nogood。XT3_3输入班号,输入该班学生人数。应用CASE语句编程序。班级201202203204205班额4547424648作业:XT3_1对一批货物征收税金,价格在1万元以上的货43第4课循环结构循环结构(或称重复结构)是程序中的一个基本结构,在解许多问题中是很有用的。我们知道,在许多复杂的问题中,常常需要做大量类同的计算处理。尽管计算机的运算速度很快,然而要把这些大量类同的计算处理的每一步都写成语句,并输入计算机中,其工作量是相当大的。有时是难以完成的。循环结构程序设计可以帮助我们有效地解决这一难题。利用循环结构程序设计,使得我们有可能只编写少量的语句,让计算机重复执行它许多次,从而完成大量类同的计算要求。在PASCAL中,实现循环程序设计的主要语句有FOR语句、WHILE语句和REPEAT语句。第4课循环结构循环结构(或称重复结构)是程序中的一个基44一、FOR语句
格式1:(递增型)FORx:=<初值>TO<终值>DO<循环体>
格式1:(递减型)
FORx:=<初值>downTO<终值>DO<循环体>
FORX:=1TO10DOFORX:=‘A’TO‘Z’DO
控制变量初值控制变量≤终值falsetrue执行语句控制变量succ(控制变量)
控制变量初值控制变量≥终值falsetrue执行语句控制变量pred(控制变量)FORX:=10DOWNTO1DOFORX:=’Z’DOWNTO‘A’DO一、FOR语句
格式1:(递增型)FORx:=<初值>45T4_001计算1+2+3+…+10PROGRAMT4_001;VARs,n:integer;BEGINs:=0;FORn:=1TO10DOs:=s+n;writeln(‘s=’,s)END.s=0当n=1s=s+n=0+1=1;当n=2s=s+n=1+2=3当n=3s=s+n=3+3=6当n=4s=s+n=6+4=10当n=5s=s+n=10+5=15当n=6s=s+n=15+6=21当n=7s=s+n=21+7=28当n=8s=s+n=28+8=36当n=9s=s+n=36+9=45当n=10s=s+n=45+10=55T4_001计算1+2+3+…+10s=046例T4_002:输入10个任意整数,求它们的和.
PROGRAMT4_002;VARs,n,a:integer;BEGINs:=0;FORn:=1TO10DOBEGINread(a);s:=s+a;END;writeln(‘s=’,s)END.例T4_003:计算n!(n!=1×2×3×…×n)PROGRAMT4_003;VARn,i,sum:integer;BEGINread(n);sum:=1;FORi:=1TOnDOsum:=sum*i;writeln('n!=',sum);END.注意N<8,否则会溢出。例T4_002:输入10个任意整数,求它们的和.PRO47例T4_004:任何一个n3一定可以表示成n个连续的奇数和。输入n(n≤100),输出n3对应的表达式。数学题解:设表达式中的最小奇数为x;当N=1时,最小奇数X=1,1个奇数;当N=2时,最小奇数X=3,2个奇数;当N=3时,最小奇数X=7,3个奇数;NN311223=8=3+5333=27=7+9+11443=64=13+15+17+19……当N=K时,最小奇数X前己有1+2+3+…+(K-1)个奇数,则第K个奇数K*(K-1)X=*2+1=K*(K-1)+1=N*(N-1)+12例T4_004:任何一个n3一定可以表示成n个连续的奇数和48ProgramT4_004;vari,n,a:longint{循环变量,连续的奇数个数,当前项,类型为长整型}beginreadln(n);a:=n*(n-1)+1;fori:=1ton-1dobeginwrite(a,’+’);a:=a+2;end;writrln(a);readln;end思考题:用数学方法证明上述定理。ProgramT4_004;思考题:用数学方法证明上述定理49作业:T4_005输入10个任意整数,求它们的平均值。T4_006按正序和反序分别输出26个英文字母。T4_007输入20个整数,输出其中最大数。T4_008输入20个整数,统计其中正、负和零的个数。思考题:求值:作业:T4_005输入10个任意整数,求它们的平均值。思50作业答案:PROGRAMT4_005;VARave:real;i,n,sum:integer;BEGINsum:=0;FORi:=1TO10DOBEGINread(n);sum:=sum+n;END;ave:=sum/10;writeln('ave=',ave:6:2)END.PROGRAMT4_006;VARi:integer;BEGINwriteln();FORi:=1TO26DOwrite(chr(96+i));writeln();FORi:=122DOWNTO97DOwrite(chr(i))END.PROGRAMT4_006_1;VARi:char;BEGINwriteln();FORi:=‘A’TO‘Z’DOwrite(i);writeln();FORi:=‘Z’DOWNTO‘A’DOwrite(i)END.作业答案:PROGRAMT4_005;PROGRAMT451作业答案:PROGRAMT4_007;VARmax,i,n:integer;BEGINread(max);FORi:=1TO19DOBEGINread(n);IFmax<nTHENmax:=n;END;writeln('max=',max)END.PROGRAMT4_008;VARi,n,Zheng,Fu,Ling:integer;BEGINZheng:=0;Fu:=0;Ling:=0;FORi:=1TO20DOBEGINread(n);IFn>0THENZheng:=Zheng+1ELSEIFn=0THENLing:=Ling+1ELSEFu:=Fu+1;END;{FOR}writeln('ZhengShuYou:',Zheng,';FuShuYou:',Fu,';LingYou:',Ling)END.作业答案:PROGRAMT4_007;PROGRAMT452二、while语句(当型循环)当循环次数未知,例如它依赖于某个布尔表达式的值,而此值在循环执行过程中会改变。这种循环不可能由FOR语句实现,PASCAL为此提供了WHILE语句和REPEAT语句。WHILE语句的一般形式:WHILE<布尔表达式>DO<循环体>flase布尔表达式true
语句二、while语句(当型循环)当循环53例T4_009:
求S=2+6+10+…+98的值。分析:S为求和累加器,X为当前项,赋初值为2,每次循环后增加4,取X≤98为布尔表达式。ProgramT4_009;Vars,x:longint;beginx:=2;s:=0;whilex<=98do{当满足条件时执行后面语句}begins:=s+x;x:=x+4;end;writeln(‘s=‘,s);end.课堂作业:计算S=1+2+4+8+…+128+256的值。例T4_009:
求S=2+6+10+…+98的值。分析:S54例T4_010:求两个自然数的最小公倍数。分析:先从数学角度来分析一下,所谓最小公倍数就是指能被M和N同时整除的最小自然数。先设一个变量i,让它从1开始按自然数增长,将i与M相乘的结果存到变量S中,这样S就是M的公倍数,由于i是从最小开始的,然后再用每一个S除以因子N,若能整除,则S为M和N两个因子的最小公倍数。ProgramT4_010;varn,m,I,s:longint;beginwrite(‘请输入两个自然数‘);readln(m,n);i:=1;s:=m*I;whilesmodn<>0dobegini:=i+1;s:=m*I;end;writrln(‘s=’,s);end.例T4_010:求两个自然数的最小公倍数。分析:先从数学角度55三、repeat语句(直到型循环)REPEAT语句也用于循环次数未知的循环,它的用法与WHILE语句稍有不同。REPEAT语句的一般形式如下:REPEAT<循环体>UNTIL<布尔表达式>例T4_011计算(泰勒展开式)直到最后一项的绝对值小于10-7时停止计算,x由键盘输入。三、repeat语句(直到型循环)REPEAT语句也用于循环56题解:设S为累加器,t为当前项,i为X的幂次
即S=t1+t2+t3…+tk,其中(1)确定重复条件为abs(t)<1e-7(2)确定重复体由(3)设初值
由此得出程序:ProgramT4_011;varI:integer;t,s,x:real;beginreadln(x);x:=x*3.14159/180;i:=1;t:=X;s:=0;repeats:=s+t;t:=-t*x/(i+1)*x/(i+2);i:=i+2;untilabs(t)<1e-7;writeln(‘sin(‘,x,’)=’,s:0:4)readln;End.题解:设S为累加器,t为当前项,i为X的幂次由此得出程57作业:T4_012:计算当最后一项的绝对值小于10-6时结束,打印输出结果。T4_013:求满足条件N!≤100000的最大值N。作业:T4_012:计算58三种循环语句的相同点与不同点FORWHILEREPEAT语句格式FOR<循环变量>:=<初值>TO<终值>DO<语句>WHILE<布尔表达式>DO<循环体>REPEAT<循环体>UNTIL<布尔表达式>循环变量赋值布尔表达式无循环变量循环次数确定,由初值和终值决定不确定,由循环体前的布尔表达式决定,当值为“假”时,结束循环。可能一次循环也没有不确定,由循环体后的布尔表达式决定,当值为“真”时结束循环。至少有一次循环循环体多语句时,需用BEGIN和END多语句时,需用BEGIN和END多语句时,不需用BEGIN和END三种循环语句的相同点与不同点FORWHILEREPEAT语句59用计算机解题的基本方法
在对问题有了清楚的分析后,可以仔细地构造求解步骤——算法。算法可以自顶向下、由粗到细,逐步求精。描述问题由粗到细的过程,一般可以分为三步:一级算法二级求精写出程序
用计算机解题的基本方法在对问题有了清楚的60第5课多重循环如果一个循环结构的内部(循环体)又包括一个循环结构,就称为多重循环结构。实现多重循环结构仍可以用前面讲的三种循环语句。因为任一循环语句的循环体部分都可以包含另一个循环语句,这种循环语句的嵌套为实现多重循环提供了方便。多重循环的嵌套次数可以是任意的。可以按照嵌套层次数,分别叫做二重循环、三重循环等。处于内部的循环叫作内循环,处于外部的循环叫作外循环。在设计多重循环时,要特别注意内、外循环之间的关系,以及各语句安放的位置,不要搞错。第5课多重循环如果一个循环结构的内部(循环体)又包括一个61T5_001求1~100之间的素数(质数),每行输出5个素数.素数是大于1,且除了1和它本身外,不能被其它任何整数所整除的整数。讨论:根据素数的定义可知为了判断某数i是否为素数,一个最简单的办法是用2、3、4、5、……、i-1这些数逐个去除i,看能否除尽。若被其中一个数除尽了,则i不是素数,否则(全都除不尽)i是素数。(此算法次数较多)用2、3、4、……去除,如果都除不尽,则i是素数。(此算法次数较少)T5_001求1~100之间的素数(质数),每行输出5个62一级算法:FORi:=2TO100DOBEGIN1、用2到去除i,看看能否除尽2、IF除不尽THEN输出素数iEND算法需进一步求精。用变量yn来表示是否除尽。一开始让yn=1,当有一个数能除尽时,让yn=0表示能除尽,这时i不是素数;若循环结束时,yn仍等于1,表示都除不尽,这时i是素数。二级求精1、用2到去除i,看看能否除尽1-1yn:=11-2WHILEn<sqrt(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;whilen<sqrt(i)dobeginn:=n+1;ifImodn=0thenyn:=0;end;ifyn=1thenbegincounter:=counter+1;ifcountermod5=0thenwriteln(i)elsewrite(I,’,’);end;{if}end;{for}End.{main}一级算法:ProgramT5_001;63T5_002验证哥德巴赫猜想(任何充分大的偶数都可由两个素数之和表示)。将4~2*s(s≤1000)中的所有偶数分别用两个素数之和表示。
哥德巴赫猜想是:对任一充分大的偶数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、读入一个数even;2、判断even是否为偶数,如果是偶数,则继续,否则结束程序;3、FORp:=2TOtrunc(even/2)3-1q:=even-p3-2判断p是否为素数(pyn:=1表示p为素数,pyn:=0表示p不是素数)3-3判断q是否为素数(qyn:=1表示q为素数,qyn:=0表示q不是素数)3-4IFpyn=1ANDqyn=1THENwriteln(even,’=’,p,’+’,q)T5_002验证哥德巴赫猜想(任何充分大的偶数都可由两个素64二级求精:1、read(even)2、IFevenMOD2=0THEN第3步3-2、n:=2WHILEn<sqrt(p)DOBEGINn:=n+1;IFpMODn=0THENpyn:=0;END;3-3、n:=2WHILEn<sqrt(q)DOBEGINn:=n+1;IFqMODn=0THENqyn:=0;END;二级求精:65作业:程序找错误(一)错误一:第2行少“VAR”;错误二:第5行少分号;错误三:第4、6、8行,字符串应用单引号,题中用了双引号;错误四:第8行字符串与变量之间少逗号。作业:程序找错误(一)错误一:第2行少“VAR”;66作业:程序找错误(二)PROGRAMT5_004;VARn,integer;BEGINwrite('Pleaseinputanumberfrom0to6forweekday:')read(n);CASEn0:writeln('Sunday');1:writeln('Monday');2:writeln('Tuesday');3:writeln('Wednesday');4:writeln('Thursday');5:writeln('Friday');6:writeln('Saturday');END.错误一:第2行变量与数据类型之间应用冒号,这里用了逗号;错误二:第5行少分号;错误三:第7行,CASE语句少了OF;错误四:CASE语句没有END与之配对。作业:程序找错误(二)PROGRAMT5_004;错误一:67作业:程序找错误(三)PROGRAMT5_005;VARch:char;ZiMu,ShuZi,FuHao:integer;BEGINZiMu:=0;ShuZi:=0;FuHao:=0;WHILEch<>'?'BEGINread(ch);IF(ch>A)AND(ch<Z)OR(ch>a)AND(ch<z)THENZiMu=ZiMu+1ELSEIFord(ch)>=48ANDord(ch)<=57THENShuZi:=ShuZi+1ELSEFuHao:=FuHao+1;END;writeln('ZiMuGeShu:',ZiMu);writeln('ShuZiGeShu:',ShuZi);writeln('QiTaFuHaoGeShu:',FuHao)END.错误一:第9行WHILE语句少DO;错误二:第12行IF语句中,字符没有加单引号;错误三:第13行,赋值语句不对,应为:=错误四:第14行,IF语句中,AND两边的逻辑判断应各自加括号,即(ord(ch)>=48)AND(ord(ch)<=57)。作业:程序找错误(三)PROGRAMT5_005;错误一:68T5_003“百钱买百鸡”是我国古代的著名数学问题,内容是3文钱可以买1只公鸡,2文钱可以买1只母鸡,1文钱可以买3只小鸡。用了100文钱买了100只鸡,问有多少只公鸡、母鸡、小鸡?分析:用X,Y,Z分别代表购买公鸡、母鸡、小鸡的数量,则存在以下关系:同时满足:1≤x≤33,1≤y≤50,1≤z≤100。然后在各变量范围内进行检验,能满足上面两个关系式的变量值。ProgramT5_003Varx,y,z:integer;beginforx:=1to33dobeginfory:=1to50doz:=100-x-yif3*x+2*y+z/3=100thenwriteln(‘gongqi:’,x,’muqi’:8,y,‘xiaoqi’:8,z);end;end;End.T5_003“百钱买百鸡”是我国古代的著名数学问题,内容69第6课PASCAL语言数据类型数据类型简单类型标准类型用户自定义类型整型实型字符型布尔型枚举类型子界类型构造类型集合类型数组类型字符串类型记录类型指针类型文件类型第6课PASCAL语言数据类型数据类型简单类型标准类型用706.1.1整型的运算项目内容算术运算符+、-、*、/,div(取商)、mod(取模)关系运算符=、<>、>、<、<=、>=标准函数Pred(前趋)、succ(后继)、ord(序号)、abs(绝对值)、sqr(平方)、sqrt(平方根)、odd(判奇)[奇数为true,偶数false]…6.1.1整型的运算项目内容算术+、-、*、/,div(取商71例T6_000:如果变量A既能被7整除又能被11整除,写成PASCAL表达式:(Amod7=0)and(Amod11=0)例T6_001:求水仙花数。所谓水仙花数,如ABC,如果满足A3+B3+C3=ABC,则ABC称为水仙花数。例:153=13+53+33,所以153就是水仙花数。分析:此题关键是分解出A、B、Ca=Idiv100b=Idiv10–10*aC=Imod10ProgramT6_001;VarI,a,b,c:longint;beginforI:=100to999dobegina:=Idiv100b:=Idiv10-a*10c:=Imod10ifi=a*a*a+b*b*b+c*c*cthenwriteln(‘is’,i)end;end.例T6_000:如果变量A既能被7整除又能被11整除,726.2:实型名称类型名数据范围位数字节单精度实型Single1.5E-45~3.4E+384实型Real2.9E-39~1.7E+386双精度实型Double5.0E-324~1.7E+3088扩展实型Extended1.9E-4932~1.1E+493210装配实型Comp-263+1~263-1之间的整数8
这几种实数类型的使用方法与Real的使用方法类似,必须在程序开始打开编译开关{$N+},这些类别才能被系统识别。6.2:实型名称类型名数据范围位数字节单精度实型Singl73例T6_2:求1/1+1/2+2/3+3/5+5/8+…前n项(n≤50)的和。分析:设e=t1+t2+t3+…+ti+..+tn,其中ti=,(1≤i≤n)。由数列的特征可以看出,ai=bi-1,bi=ai-1+bi-1。由于N≤50,因此ai,bi,e的数值超过了标准的整数型和实数型的范围。不得不通过{$N+}启动浮点运算,并将ai,bi,e的数据类型设为extended,使得精度保持在19位。ProgramT6_2;{$N+}varI,n:integer;a,b,c,e:extended;beginreadln(n);a:=0;b:=1;e:=0;fori:=1tondobeginc:=b;b=a+b;a:=c;e:=e+a/b;end;{for}writeln(e:20:2)end.{main}例T6_2:求1/1+1/2+2/3+3/5+5/8+…746.3:字符型(ASCII码)(1)类型名:Char(2)范围:ASCII码(美国标准信息交换代码)(3)表示方法:‘一个字符’(4)字符是有序类型,每个字符都对应一个序号,其中字符‘A’的序号是64,字符’a’的序号是97。(5)字符类型占内存一个字节。6.3:字符型(ASCII码)(1)类型名:Char756.4:布尔型(1)类型名:boolean(2)范围:只有两个值false和true(3)是有序数据:false序号是0,true的序号是1。即ord(false)=0,ord(true)=1.约定:false<true。(4)布尔型占内存一个字节。(5)逻辑运算符:and、or、not运算结果为布尔型。6.4:布尔型(1)类型名:boolean76例T6_3:填写数字:求出中的数字,并找印算式。8091设位数较少的除数为x(被除数的位数4,除数的位数2),由x得出y:y=809x+1根据以下条件,判断x和y是否同时成立:(1)y为四位数(y>999)and(y<10000)(2)8乘以X为二位数((8x<100)and(8x>9)(3)9乘以X为三位数((9x<1000)and(9x>99)例T6_3:填写数字:求出中的数字,并找印算式。877程序:ProgramT6_3;varx,y:integer;beginforx:=10to99dobeginy:=809*x+1if(y>999)and(y<10000)and(8*x<100)and(8*x>9)and(9*x>99)and(9*x<1000)thenbeginwriteln(‘809’:19);writeln(‘’:20);writeln(x:6,’)’:3,y:10);writeln(8*x:17);writeln(‘’:20);writeln(y-800*x:19);writeln(9*x:19);writeln(‘’,20);writeln(‘1’:19);end;{then}end;{for}end.{main}程序:ProgramT6_3;786.5:枚举型(1)格式:type枚举类型标识符=(标识符1,标识符2,…标识符n);(2)特点:枚举元素只能是标识符,不能是数值常量或字符常量同一枚举元素不能出现在两个及以上枚举型定义中枚举类型有顺序,序列号从0开始ord(Monday)=0,succ(Friday)=Saturday,pred(Friday)=Thursday枚举类型只能进行赋值和关系运算枚举变量不允许用read或readln语句进行赋值,也不能被write或writeln输出。
6.5:枚举型(1)格式:79例T6_4:有红、橙、黄、绿、蓝5种顔色的小旗,每次取出3种不同顔色表示不同的信号,输出所有信号的方案及方案总数。分析:枚举值的输入,一般先输入序号,通过CASE语句将枚举值相应地赋值给枚举变量;输出时,通过CASE语句判断枚举类型变量的值,输出相应的字符串。ProgramT6_4;Typecolor=(red,orange,yellow,green,blue);varm,m1,m2,m3:color;s,p:integer;begins:=0;form1:=redtobluedoform2:=redtobluedoifm1<>m2thenform3:=redtobluedoif
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年广东公务员考试申论试题(县镇卷)
- 彩色皱纹纸产业运行及前景预测报告
- 农业机械用条播机产业规划专项研究报告
- 冷冻设备和机器产业深度调研及未来发展现状趋势
- 助产器械产业深度调研及未来发展现状趋势
- 企业内部反欺凌工作方案
- 铝合金门窗施工现场管理方案
- 刨干鲣鱼片用非电动刨鱼片刨市场需求与消费特点分析
- 室内除臭喷雾剂产业运行及前景预测报告
- 建筑法规专题培训
- 《区块链原理详解》课件
- 利用质量管理工具改进医院感染控制标准的执行与管理研究
- 掌握动物园营销技巧
- 第4课+中古时期的亚洲【中职专用】《世界历史》(高教版2023基础模块)
- 五年级上册英语期中试卷-闽教版
- 特种设备的安全使用与维护培训教材
- 2022电网工程限额设计控制指标2021年水平
- 初一学生自我介绍
- 港口散装液体危险化学品港口经营人的装卸管理人员从业资格考试
- 华为经营管理-华为经营管理华为的IPD(6版)
- 供应商年度评价内容及评分表
评论
0/150
提交评论