NOIP(全国青少年信息学奥林匹克联赛)复习Pascal市公开课特等奖市赛课微课一等奖课件_第1页
NOIP(全国青少年信息学奥林匹克联赛)复习Pascal市公开课特等奖市赛课微课一等奖课件_第2页
NOIP(全国青少年信息学奥林匹克联赛)复习Pascal市公开课特等奖市赛课微课一等奖课件_第3页
NOIP(全国青少年信息学奥林匹克联赛)复习Pascal市公开课特等奖市赛课微课一等奖课件_第4页
NOIP(全国青少年信息学奥林匹克联赛)复习Pascal市公开课特等奖市赛课微课一等奖课件_第5页
已阅读5页,还剩24页未读 继续免费阅读

下载本文档

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

文档简介

一、复习回顾基本结构次序结构选择结构循环结构过程和函数标准类型整型integer0-23678实型real两种表示:小数表示法、科学表示法字符型char如:‘a’、‘A’、‘’布尔型boolean如:真true假false文件类型file第1页常量:指在程序执行过程中值不能改变量。

变量:指在程序执行过程中值能够改变量。

表示式和函数:常量说明:如:圆周率πConstpi=3.14;注意:变量必须先说明再使用!变量说明:

VAR

x:integer;算术运算符:div(整除)34div5=6

mod(取余)34mod5=4第2页惯用函数:函数名功效举例Abs(x)求变量绝对值Abs(-5.4)=5.4Sqr(x)求变量x平方Sqr(2)=4Sqrt(x)求变量x平方根Sqrt(4)=2Chr(x)取ASCII码值Chr(48)=0Ord(x)取字符ASCII值ord(‘A’)=65Trunc(x)截尾函数Trunc(1.99)=1Round(x)舍入取整Round(-3.9)=-4round(-3.1)=-3Round(3.9)=4round(3.1)=3pred前导函数Pred(2)=1pred(‘b’)=‘a’succ后继函数Succ(1)=2Succ(‘a’)=‘b’第3页表示式1、写出一个整数被3整除所得余数表示式。xmod32、写出计算圆周长表示式。2*pi*r3、将任一大写字母转换成小写字母。Chr(ord(x)+ord(‘a’)–ord(‘A’))4、写出表示年纪大于50岁表示式。N>505、写出一个数既能被3整除又能被5整除表示式。(xmod3=0)and(xmod5=0)第4页基本语句:一、赋值语句

变量:=表示式;功效:先计算后赋值二、输入语句read/readlnread(变量1,变量2,。。。)readln(变量1,变量2,。。。)功效:依次从键盘上读入数据。三、输出语句write/writelnwrite(变量1,变量2,。。。)writeln(变量1,变量2,。。。)第5页例:从键盘输入两个数,交换后输出。Programex_1(input,output);vara,b,c:integer;beginwriteln(‘请输入两个数:’);read(a,b);c:=a;a:=b;b:=c;writeln(‘交换后值是:’,a:5,b:5)End.程序首部说明部分语句部分运行:请输入两个数:

34交换后值是:43第6页例:从键盘输入一个三位数,分离出百位、十位和个位并输出。Programex_2(input,output);varx,ge,shi,bai:integer;beginwriteln(‘请输入一个三位数:’);read(x);ge:=xmod10;bai:=xdiv100;shi:=(x-bai*100)div10;writeln(‘bai=’,bai,’shi=‘:10,shi,’ge=‘:10,ge)End.程序首部说明部分语句部分运行结果:请输入一个三位数:836bai=8shi=3ge=6第7页四、选择结构程序设计格式一:If条件then语句1;格式二:If条件then语句1else语句2;格式一功效:假如条件成立则执行then后语句1,不然执行该条件语句下一条语句。格式二功效:假如条件成立则执行then后语句1,不然执行else后语句2。第8页例:输入一个数X,要求不使用ABS函数,输出其绝对值。分析:首先输入一个数给X,然后判断X是否小于0,假如是则(-X)为X绝对值,不然输出X。Programex_3(input,output);varx:real;beginreadln(x);ifx<0thenwriteln(-x)elsewriteln(x)End.第9页例4、将输入两个非负实数中较大放在max里,小放在min里,并输出。算法:(1)输入两个数max,min(2)判断max是否小于min,假如小于min,则交换max和min值,(3)输出max,min值Programex_4(input,output);varmax,min,t:real;beginread(max,min);ifmax<minthenbegint:=max;max:=min;min:=tend;writeln(max,min)End.第10页If语句嵌套在格式一或格式二中,当语句1或语句2本身也是一个条件语句时,称该语句为条件语句嵌套。注意:1、else语句总是和与它最近那个还没有其它else配正确if/then配对。假如内层else子句要省,则写一个空语句或采取复合语句,即增加语句括号。2、在书写程序时采取缩进式,以增强程序可读性。Case语句Case表示式of常数表1:语句1;常数表2:语句2;。。。常数表n:语句n;Else语句n+1End;表示式为有序类型整型、布尔型、字符型第11页例5:输入两个数(不为0)及一个算术运算符,输出其运算结果。Programex_5(input,output);varx,y,s:real;ch:char;beginwriteln(‘请输入x、y以及运算符:’);readln(x,y);readln(ch);casechof‘+’:s:=x+y;‘-’:s=x-y;‘*’:s=x*y;‘/’:s=x/yend;Writeln(x,ch,y,’=‘,s)end.第12页例6、打印某年某月有几天。分析:某年某月天数分为这几个情况:(1)每年1,3,5,7,8,10,12这七个月每个月为31天。(2)每年4,6,9,11这四个月为30天;(3)2月又分为两种情况:闰年为29天,不然为28天。判断闰年条件:年数能被4整除,而且不能被100整除,但能够被400整除年份为闰年。(yearmod4=0)and(yearmod100<>0)or(yearmod400=0)Programex_6(input,output);varyear,month,len:integer;beginwriteln(‘inputyearandmonth’);readln(year,month);Casemonthof1,3.5,7,8,10,12:len:=31;4,6,9,11:len:=30;2:beginif(yearmod4=0)and(yearmod100<>0)or(yearmod400=0)thenlen:=29elselen:=28endEnd;Writeln(len);End.第13页循环结构一、计数循环For控制变量:=初值to终值do循环体语句;For控制变量:=初值downto终值do循环体语句;控制变量为有序类型执行过程:(1)先将初值赋值给控制变量;(2)比较控制变量与终值,假如超出则不执行循环体中语句,结束循环;(3)不然执行循环体中语句;(4)将控制变量后继值赋给控制变量;(5)从(2)开始重复。循环执行次数为:|终值-初值|+1第14页例7:计算1+2+3+…+100之和。Programex_7(input,output);varI,s:integer;begins:=0;forI:=1to100dos:=s+I;writeln(s);End.循环体循环执行次数为:(100-1)+1=100执行结果为:5050执行过程:Is初值为0输出10+1=1s=s+I<=100初值为1终值1002<=1001+2=33<=1003+3=6…99<=1004851+99=4950100<=1004950+100=50505050101条件不成立退出循环第15页例8、编程找出四位整数abcd中满足下述关系数:(ab+cd)(ab+cd)=abcd分析:由题意知:abcd是个四位数,故其范围是:1000-9999,然后对每一个数看它高两位和低两位数和平方是否与该数相等。分离高两位和低两位方法是:高位:ab=abcddiv100低位:cd=abcdmod100Programex_8(input,output);varI,m,n,k:integer;beginforI:=1000to9999dobeginm:=Idiv100;n:=Imod100;k:=(m+n)*(m+n);ifk=Ithenwriteln(‘符合条件四位整数是:’,I)end;end.本题采取穷举法,又叫枚举法第16页当型循环While布尔表示式do语句执行过程:先求布尔表示式值,当其值为真时,重复执行指定语句;当其值为假时,终止循环。注意:为了能使while循环正常终止,一定要有一条能改变布尔表示式值语句,让表示式值为假,从而使循环结束。Programex_9(input,output);varx:integer;beginx:=1;whilex<100dobeginwrite(x:5);x:=x+2;end;end.例9、输出1-100之间奇数执行过程:x输出初值为1条件x<1001成立x=x+2=3成立13x=x+2=5成立5x=x+2=7成立7…x=x+2=99成立99x=x+2=101条件不成立退出循环循环次数为:(100-1)div2+1第17页分析:(1)让一个变量I呈自然数列增加,即一开始I=1;(2)让m作为一个因子,I作为另一个因子进行乘法运算,能够得到积s,此时s必定是m倍数;(3)再判断s是否能被n整除,若能整除转(5),不然执行下一步(4);(4)I变量增加1,再去执行(2);(5)输出s,此时s即为m,n最小公倍数。例10、求两个自然数m,n最小公倍数。Programex_9(input,output);varm,n,I,s:integer;beginwrite(‘请输入两个自然数’);readln(m,n);I:=1;s:=m*I;whilesmodn<>0dobeginI:=I+1;s=m*i;end;write(‘m,n最小公倍数为:’,s);end.注意:关系表示式smodn作用是判断一个数是否能被另一个数整除,在程序中惯用到。第18页直到型循环Repeat语句1;语句2;。。。语句nUntil布尔表示式执行过程:先执行指定语句,然后判断条件,当条件不成立时,继续执行指定语句,直到条件成立时终止循环。注意:为了能使repeat/until循环正常终止,循环体中要有一条能改变布尔表示式值语句,让表示式值为真,从而使循环结束。分析:该问题思绪如同“打擂台”,即先有任意一人站在擂台上,然后第二个人上来与它比武,胜者留在台上,如此重复,直到第n个人比完为止。(共打n-1次比赛),最终留在台上人必定是最强者。例11、从n个数中挑选出最大数。Programex_11(input,output);varn,x,m,y:integer;beginreadln(n);readln(x);m:=0;repeatreadln(y);ifx>=ythenx:=ym:=m+1;untilm=n-1;writeln(n,’个数中最大是:’,x);end.第19页多重循环:循环套循环ForI:=初值1to终值1dobegin…forj:=初值2to终值2dobegin…end;end;外循环内循环外循环体内循环体注意:1、循环次数为(|终值1-初值1|+1)*(|终值2-初值2|+1)2、外循环改变一次,内循环要从初值改变到终值一次。第20页例12、求100-999中水仙花数。(如三位数abc=a^3+b^3+c^3,则称abc为水仙花数。用三重循环编程序:Programex_12(input,output);vara,b,c:integer;beginfora:=1to9doforb:=0to9doforc:=0to9doifa*a*a+b*b*b+c*c*c=a*100+b*10+cthenwrite(a*100+b*10+c:6);readln;end.运行结果:153370371407第21页例13四个学生上地理课时,回答我国四大淡水湖大小时这么说。甲说:“最大洞庭湖,最小洪泽湖,鄱阳湖第三”;乙说:“最大洪泽湖,最小洞庭湖,鄱阳湖第二,太湖第三”;丙说:“最小洪泽湖,洞庭湖第三”;丁说:“最大鄱阳湖,最小太湖,洪泽湖第二,洞庭湖第三”。其中每个学生仅答对一个,请编程确定湖大小。分析:本题为逻辑判断题,每个湖大小不一样,所以分别用1、2、3、4表示它们各自大小。用四重循环来进行列举,然后再分别对他们所说话作判断即可。第22页programex_13(input,output);vardong,hong,bo,tai:integer;beginfordong:=1to4doforhong:=1to4doifhong<>dongthenforbo:=1to4doif(hong<>bo)and(dong<>bo)thenbegintai:=10-dong-hong-bo;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(dong=3)+ord(hong=4)=1)and(ord(bo=1)+ord(tai=4)+ord(hong=2)+ord(dong=3)=1thenwriteln(‘dong:’,dong,’hong:’,hong,’bo:’,bo,’tai:’,tai);end;end.运行结果:dong:2hong:4bo:1tai:3甲说:“最大洞庭湖,最小洪泽湖,鄱阳湖第三”;程序以下:第23页例14用5元钱买100只纽扣,其中金属纽扣每只5角,有机玻璃和每只1角,小揿扣1分钱买3个,编程求出各种纽扣各买了多少只?分析:用x、y、z分别表示金属纽扣,有机扣,揿扣只数,依题意可得:X+y+z=100(1)50X+10y+z/3=500(2)这是一个不定方程组,普通有多组解。由方程(1)可知X,Y,Z范围,它们分别为:1≤x≤1001≤y≤1001≤x≤100(2)式转化为:150X+30y+z=1500第24页Programex_14(input,output);varx,y,z:integer;beginforx:=1to100dofory:=1to100doforz:=1to100doif(x+y+z=100)and(150*x+30*y+z=1500)thenwrite(‘金属扣:’,x,’有机扣:’,y,’揿扣:’,z)end.执行次数为:100*100*100=10次6用三重循环编程,程序以下:第25页法II在法I基础上改进,由方程(2)可知1≤x≤10、1≤y≤50循环次数:10*50*100=50000次,是法I5%,运行时间缩短了很多。法III在法II基础上能够将方程(1)改为:z=100-x-y,这么能够降低一重循环。使程序运行时间变得更短。Programex_14c(input,output);varx,y,z:integer;beginforx:=1to10dofory:=1to50dobeginz:=100-x-y;if(150*x+30*y+z=1500)thenwrite(‘金属扣:’,x,’有机扣:’,y,’揿扣:’,z)end;end.缩短多重循环运行时间改进方法是:(1)缩小终值与初值距离(2)降低循环嵌套层数第26页例15已知faibonacci(费波那契数列)前几个数分别为0,1,1,2,3,5…,编程求此数列前n项。分析:观察找规律:f1=0(n=1)f2=1(n=2)fn=fn-1+fn-2(n=3)即从第三项起,后一项是前两项之和。现用f表示fn,p表示f前一

温馨提示

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

评论

0/150

提交评论