当前位置:首页 >> 学科竞赛 >>

NOIP(全国青少年信息学奥林匹克联赛)复习Pascal


一、复习回顾
顺序结构

P

程序设计
ascal

基本结构

选择结构 循环结构 过程和函数
整型 integer 0 -2 3678 实型 real 两种表示: 小数表示法 、科学表示法 字符型 char 如:‘a’ 、 ‘A’、‘ ’ 布尔型 boolean 如

: 真 true 假 false 文件类型 file

标准类型

JSOI2009年大丰冬令营(B层)

常量:指在程序执行过程中值不能改变的量。 常量的说明:如: 圆周率π Const

P

程序设计
ascal

pi=3.14 ; 变量:指在程序执行过程中值可以改变的量。 注意:变量必须先说明再使用! 变量说明:
VAR

表达式和函数:

x:integer ;

算术运算符:div (整除)
mod (取余)

34 div 5=6
34 mod 5=4

JSOI2009年大丰冬令营(B层)

常用函数:
函数名 Abs(x) Sqr(x) Sqrt(x) Chr(x) Ord(x) Trunc(x) Round(x) pred succ 功能
求变量的绝对值
求变量x的平方 求变量x的平方根 取ASCII码的值 取字符的ASCII值 截尾函数 舍入取整 前导函数

P
举例 Abs(-5.4)=5.4 Sqr(2)=4 Sqrt(4)=2 Chr(48)=0

程序设计
ascal

ord(‘A’)=65 Trunc(1.99)=1 Round(-3.9)=-4 round(-3.1)=-3 Round( 3.9)= 4 round( 3.1)= 3 Pred(2)=1 pred(‘b’)= ‘a’ Succ(1)=2 Succ(‘a’)=‘b’ JSOI2009年大丰冬令营(B层)

后继函数

表达式
x mod 3 2 * pi * r
3、将任一大写字母转换成小写字母。

P

程序设计
ascal

1、写出一个整数被3整除所得余数的表达式。 2、写出计算圆的周长表达式。

Chr( ord (x) +ord (‘a’) – ord (‘A’))
4、写出表示年龄大于50岁的表达式。

N>50
5、写出一个数既能被3整除又能被5整除的表达式。

(x mod 3=0) and (x mod 5=0)
JSOI2009年大丰冬令营(B层)

基本语句:
一、赋值语句 变量:=表达式;

P
功能:先计算后赋值

程序设计
ascal

二、输入语句 read/readln read (变量1,变量2,。。。) readln(变量1,变量2,。。。) 功能: 依次从键盘上读入数据。 三、输出语句 write/writeln

write (变量1,变量2,。。。) writeln(变量1,变量2,。。。)

JSOI2009年大丰冬令营(B层)

ascal 例:从键盘输入两个数,交换后输出。 Program ex_1(input,output); 程序首部 var 说明部分 a,b,c:integer; begin writeln(‘请输入两个数:’); read(a,b); c:=a; 语句部分 a:=b; b:=c; writeln(‘交换后的值是:’,a:5,b:5) End.
运行: 请输入两个数: 3 4 交换后的值是: 4

P

程序设计

3
JSOI2009年大丰冬令营(B层)

例:从键盘输入一个三位数,分离出百位、十位和个位并输出。 Program ex_2(input,output); 程序首部 var 说明部分 x,ge,shi,bai:integer; begin writeln(‘请输入一个三位数:’); read(x); ge:=x mod 10; bai:=x div 100 ; 语句部分 shi:=(x-bai*100) div 10; writeln(‘bai=’,bai, ’shi=‘:10,shi,’ge=‘:10,ge) End. 运行结果:请输入一个三位数: 836

P

程序设计
ascal

bai=8

shi=3

ge=6
JSOI2009年大丰冬令营(B层)

P
四、选择结构的程序设计 格式一:If 条件 then 语句1; 格式二:If 条件 then 语句1 else 语句2; 格式一功能: 如果条件成立则执行then后的语句1, 否则执行该条件语句的下一条语句。 格式二功能: 如果条件成立则执行then后的语句1, 否则执行else后的语句2。

程序设计
ascal

JSOI2009年大丰冬令营(B层)

例:输入一个数X,要求不使用ABS函数,输出其绝对值。 分析:首先输入一个数给X,然后判断X是否小于0, 如果是则(-X)为X的绝对值,否则输出X。

P

程序设计
ascal

Program ex_3(input , output); var x: real; begin readln(x); if x<0 then writeln(-x) else writeln(x) End.

JSOI2009年大丰冬令营(B层)

例4、将输入的两个非负实数中较大的放在 max里,小的放在min里,并输出。
算法: (1)输入两个数max,min (2)判断max是否小于min,

P

程序设计
ascal

如果小于min,则交换max
和min的值, (3)输出max,min的值

Program ex_4(input,output); var max, min ,t: real; begin read(max,min ); if max<min then begin t:=max; max:=min; min:=t end; writeln(max,min) End. JSOI2009年大丰冬令营(B层)

ascal If 语句嵌套 在格式一或格式二中,当语句1或语句2本身也是一个条件 语句时,称该语句为条件语句嵌套。 注意:1、else语句总是和与它最近的那个还没有其他的else
配对的if/then配对。如果内层的else子句要省,则写一个空 语句或采用复合语句,即增加语句括号。 2、在书写程序时采用缩进式,以增强程序的可读性。

P

程序设计

Case语句

Case 表达式 of 常数表1:语句1; 常数表2:语句2; 。。。 常数表n:语句n; Else 语句n+1 End;

表达式为有序类型
整型、布尔型、字符型

JSOI2009年大丰冬令营(B层)

例5:输入两个数(不为0)及一个算术运算符,输出其运算结果。 Program ex_5(input,output); var x,y,s:real; ch:char; begin writeln(‘请输入x、y 以及运算符:’); readln(x,y); readln(ch); case ch of ‘+’: s:=x+y; ‘-’: s=x-y; ‘*’: s=x*y; ‘/’: s=x/y end; Writeln(x,ch,y,’=‘,s) end. JSOI2009年大丰冬令营(B层)

P

程序设计
ascal

ascal 分析:某年某月的天数分为这几种情况: (1)每年的1,3,5,7,8,10,12这七个月每月为31天。 (2)每年的4,6,9,11这四个月为30天; (3)2月又分为两种情况 : 闰年为29天,否则为28天。
判断闰年的条件:年数能被4整除, 并且不能被100整除,但可以被 Case month of 400整除的年份为闰年。 1,3.5,7,8,10,12: len:=31; (year mod 4=0) and (year mod 4,6,9,11: len:=30; 2: begin 100<>0) or (year mod 400=0) if (year mod 4=0) Program ex_6 (input, output); and (year mod 100<>0) var or (year mod 400=0) then len:=29 year,month,len: integer; else len:=28 begin end writeln(‘input year and month’); End; readln(year,month); Writeln(len); End. JSOI2009年大丰冬令营(B层)

例6、打印某年某月有几天。

P

程序设计

循环结构
一、计数循环 For 控制变量:=初值 to 终值 do

P

程序设计
ascal

循环体语句;
For 控制变量:=初值 downto 终值 do 循环体语句;

控制变量为有序类型

执行过程: (1)先将初值赋值给控制变量; (2)比较控制变量与终值,如果超过则不执行循环体中的语句, 结束循环; (3)否则执行循环体中的语句; (4)将控制变量的后继值赋给控制变量; (5)从(2)开始重复。

循环的执行次数为:|终值-初值|+1 JSOI2009年大丰冬令营(B层)

例7:计算1+2+3+…+100之和。
Program ex_7(input,output); var I,s:integer; begin s:=0; for I:=1 to 100 do s:=s+I; 循环体 writeln(s); End. 执行结果为:5050 循环执行次数为:(100-1)+1=100

P
初值为1 终值100

程序设计
ascal

执行过程: I s 初值为0
s=s+I

输出

1 <=100 2 <=100 3 <=100

0+1=1 1+2=3 3+3=6


99 <=100 4851+99=4950

100 <=100 4950+100=5050 101 条件不成立退出循环

5050

JSOI2009年大丰冬令营(B层)

例8、编程找出四位整数abcd中满足下述关系的数: (ab+cd)(ab+cd)=abcd

P

程序设计
ascal

分析:由题意知:abcd是个四位数,故其范围是:1000-9999,然后对每一 个数看它的高两位和低两位数和的平方是否与该数相等。 分离高两位和低两位的方法是: 高位:ab=abcd div 100 低位:cd=abcd mod 100

Program ex_8(input, output); var I,m,n,k:integer; 本题采用穷举法,又叫枚举法 begin for I:=1000 to 9999 do begin m:=I div 100; n:=I mod 100; k:=(m+n)*(m+n); if k=I then writeln(‘符合条件的四位整数是:’, I) end; end.

JSOI2009年大丰冬令营(B层)

当型循环

While 布尔表达式 do 语句 执行过程:先求布尔表达式的值,当其值为真时,重复执行 指定语句;当其值为假时,终止循环。 注意:为了能使while循环正常终 执行过程: 止,一定要有一条能改变布尔表 达式值的语句,让表达式的值为 x 输出 初值为1 条件 x<100 假,从而使循环结束。 例9、输出1-100之间的奇数

P

程序设计
ascal

Program ex_9 (input,output); var x:integer; begin x:=1; while x<100 do begin write(x:5); x:=x+2; end; end.

1 x=x+2=3 x=x+2=5 x=x+2=7 x=x+2=99 x=x+2=101

成立 成立 成立 成立

1 3 5 7 99



成立

条件不成立退出循环

循环次数为:(100-1) div 2+1

JSOI2009年大丰冬令营(B层)

例10、求两个自然数m,n的最小公倍数。

分析:(1)让一个变量I呈自然数列增长,即一开始I=1; (2)让m作为一个因子,I作为另一个因子进行乘法运算,可以得 到积s,此时s必定是m的倍数; (3)再判断s是否能被n整除,若能整除转(5),否则执行下一步(4); (4)I变量增长1,再去执行(2); (5)输出s,此时s即为m,n的最小公倍数。 Program ex_9 (input,output); var m,n,I,s:integer; begin write(‘请输入两个自然数’); readln(m,n); I:=1; s:=m*I; while s mod n<>0 do begin I:=I+1; s=m*i ; end; write(‘m,n的最小公倍数为:’, s); end. 注意:关系表达式 s mod 整除,在程序中常用到。

P

程序设计
ascal

n

的作用是判断一个数是否能被另一个数

JSOI2009年大丰冬令营(B层)

直到型循环
Repeat 语句1; 语句2; 。。。 语句n Until 布尔表达式

执行过程:先执行指定的语句,然后判 断条件,当条件不成立时,继续执行指 定的语句,直到条件成立时终止循环。 注意:为了能使repeat/until循环正常终止,循环体中 要有一条能改变布尔表达式值的语句,让表达式的 值为真,从而使循环结束。 Program ex_11(input,output); var n,x,m,y:integer; begin readln(n); readln(x); m:=0; repeat readln(y); if x>=y then x:=y m:=m+1; until m=n-1; writeln(n,’个数中最大的是:’,x); end.

P

程序设计
ascal

例11、从n个数中挑选出最大的数。
分析:该问题的思路如同“打
擂台”,即先有任意一人站在 擂台上,然后第二个人上来与

它比武,胜者留在台上,如此
反复,直到第n个人比完为止。 (共打n-1次比赛),最后留在

台上的人肯定是最强者。

JSOI2009年大丰冬令营(B层)

多重循环:循环套循环
For I:= 初值1 to 终值1 do begin … 外 for j:=初值2 to 终值2 do 内 循 begin 外循环体 循 内循环体 … 环 环 end; end;

P

程序设计
ascal

注意:1、 循环次数为 (|终值1-初值1|+1)*(|终值2-初值2|+1) 2、外循环变化一次,内循环要从初值变化到终值一次。

JSOI2009年大丰冬令营(B层)

ascal 例12、求100-999中的水仙花数。 (如三位数abc =a^3+b^3+c^3,则称abc为水仙花数。
用三重循环编程序:

P

程序设计

Program ex_12(input,output); var a,b,c:integer; begin for a:=1 to 9 do for b:=0 to 9 do for c:=0 to 9 do if a*a*a+b*b*b+c*c*c=a*100+b*10+c then write(a*100+b*10+c:6); readln; end. 运行结果:153 370 371 407
JSOI2009年大丰冬令营(B层)

例13 四个学生上地理课时,回答我国四大淡水湖大小时 这样说。 甲说:“最大洞庭湖,最小洪泽湖,鄱阳湖第 三”;乙说:“最大洪泽湖,最小洞庭湖,鄱阳湖第二, 太湖第三”;丙说:“最小洪泽湖,洞庭湖第三”;丁说: “最大鄱阳湖,最小太湖,洪泽湖第二,洞庭湖第三”。 其中每个学生仅答对一个,请编程确定湖的大小。 分析:本题为逻辑判断题,每个湖的大小不一样,所 以分别用1、2、3、4表示它们的各自的大小。用四重 循环来进行列举,然后再分别对他们所说的话作判断 即可。

P

程序设计
ascal

JSOI2009年大丰冬令营(B层)

程序如下:

program ex_13(input,output); var dong,hong , bo, tai:integer; begin for dong:=1 to 4 do for hong:=1 to 4 do 甲说:“最大洞庭湖,最小洪泽 if hong<>dong then 湖,鄱阳湖第三”; for bo:=1 to 4 do if (hong<>bo) and (dong <> bo ) then begin tai:=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)=1 then writeln(‘dong:’,dong,’hong:’,hong,’bo:’,bo,’tai:’,tai); end; end.
运行结果:dong:2 hong: 4 bo:1 tai: 3

P

程序设计
ascal

JSOI2009年大丰冬令营(B层)

例14 用5元钱买100只纽扣,其中金属纽扣每只5角,有机玻 璃和每只1角,小揿扣1分钱买3个,编程求出各种纽扣各买了 多少只?
分析:用x、y、z分别表示金属纽扣,有机扣,揿扣的只数, 依题意可得: X+y+z=100 (1) 50X+10y+z/3=500 (2)式转化为:150X+30y+z=1500 (2)

P

程序设计
ascal

这是一个不定方程组,一般有多组解。由方程(1)可知X, Y,Z的范围,它们分别为: 1≤x≤100 1≤y≤100 1≤x≤100

JSOI2009年大丰冬令营(B层)

用三重循环编程,程序如下:

P

程序设计
ascal

Program ex_14(input,output); var x,y,z:integer; begin for x:=1 to 100 do for y:=1 to 100 do for z:=1 to 100 do if (x+y+z=100) and (150*x+30*y+z=1500 ) then write(‘金属扣:’,x,’有机扣:’,y,’揿 扣:’,z) end. 6 执行的次数为:100*100*100=10 次 JSOI2009年大丰冬令营(B层)

ascal 法II 在法I的基础上改进,由方程(2)可知 1≤x≤10 、1≤y≤50 循 环次数:10*50*100=50000次,是法I的5%,运行时间缩短了很多。 法III 在法II的基础上可以将方程(1)改为:z=100-x-y,这样可以减 少一重循环。使程序的运行时间变得更短。
Program ex_14c(input,output); var x,y,z:integer; begin for x:=1 to 10 do for y:=1 to 50 do begin z:=100-x-y; if (150*x+30*y+z=1500 ) then write(‘金属扣:’,x,’有机扣:’,y,’揿 扣:’,z) end; 缩短多重循环的运行时间的改进方法是: (1)缩小终值与初值的距离 end. (2)减少循环嵌套的层数 JSOI2009年大丰冬令营(B层)

P

程序设计

ascal 例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的前 一项(fn-1),l表示它的前两项(fn-2),则有等式f=p+l 第一次 第二次 第三次 。。。 p 0 1 1 l 1 1 2 f f=0+1=1(第三项) f=1+1=2(第四项) f=1+2=3(第五项)

P

程序设计

JSOI2009年大丰冬令营(B层)

程序如下: Program ex_15(input,output); var n,p,l,t:integer; {t记录第几项} begin read(n); p:=0; l:=1; t:=2; write(0,1); {打印前两项} while t< >n do begin f:=p+l; if (t mod 4=0) then writeln; {每行打印四个数} write(f:6); p:=l; 本题采用递推法,递推即在一个序列 l:=f; 中,下一项的值是在前一项值的基础 t:=t+1; 上推算出来的,也就是下一项对前一 end; 项有某种依赖关系。 end.

P

程序设计
ascal

JSOI2009年大丰冬令营(B层)

For / while / repeat/ 语句使用时注意:
(1)已知循环次数,宜用 for 循环;

P

程序设计
ascal

(2)当循环次数未知则选用while 或repeat语句。 (3)在进行循环程序设计时,一定要搞清楚在循环前应 做什么事,(通常在循环前要做一些准备工作,如:累加, 计数器清零,变量赋初值等),在循环中需做什么事,解

决什么问题,在循环后又要做什么事。若将该做的事忘了,
或将它们放错顺序或位置,则不能得到正确的结果。

JSOI2009年大丰冬令营(B层)


相关文章:
全国青少年信息学奥林匹克联赛初赛试题2009-2015
全国青少年信息学奥林匹克联赛初赛试题2009-2015_学科竞赛_初中教育_教育专区。第...⑦ ; 第 33 页共 65 页 CCF NOIP2011 普及组(Pascal 语言)参考答案与评分...
NOIP(2014)第二十届全国青少年信息学奥林匹克联赛初赛试题及答案(提高组试题及答案PASCAL)
NOIP(2014)第二十届全国青少年信息学奥林匹克联赛初赛试题及答案(提高组试题及答案PASCAL)_学科竞赛_高中教育_教育专区。NOIP(2014)第二十届全国青少年信息学奥林...
NOIP(2014)第二十届全国青少年信息学奥林匹克联赛初赛(普及组试题及答案)
NOIP(2014)第二十届全国青少年信息学奥林匹克联赛初赛(普及组试题及答案) 第二十届全国青少年信息学奥林匹克联赛初赛( 普及组 Pascal 语言 二小时完成 ) ●● ...
NOIP(2014)第二十届全国青少年信息学奥林匹克联赛初赛试题及答案(提高组PASCAL)
NOIP(2014)第二十届全国青少年信息学奥林匹克联赛初赛试题及答案(提高组PASCAL)_学科竞赛_高中教育_教育专区。NOIP(2014)第二十届全国青少年信息学奥林匹克联赛初赛试...
全国青少年信息学奥林匹克联赛大纲
全国青少年信息学奥林匹克联赛大纲 总则 由中国计算机学会负责组织的全国青少年信息学奥林匹克联赛(National Olympiad in Informatics in Provinces, 简称 NOIP)是全国...
全国青少年信息学奥林匹克联赛大纲
全国青少年信息学奥林匹克联赛大纲(节选)NOIP 大纲 一、 总则 由中国计算机学会...比赛中使用的程序设计语言是: ●●● 2003 年:初赛:BASIC、PASCAL 或 C/C++...
NOIP(全国青少年信息学奥林匹克联赛)复习Pascal——试题汇编
2008 江苏省信息技术学业水平测试单机练习试题汇编 网络应用技术 【13-练习(01)】【单选题】 【第 01 题】下列关于 ASP 的工作原理说法正确的是 ( 中 ) B、...
第八届全国青少年信息学奥林匹克联赛(NOIP2002)试题
第八届全国青少年信息学奥林匹克联赛(NOIP2002)试题 (普及组 PASCAL 语言二小时完成) 全部试题答案均要求写在答卷纸上,写在试卷纸上一律无效 一.选择一个正确答案...
NOIP2013全国青少年信息学奥林匹克联赛初赛参考答案(提高组PASCAL)
NOIP2013全国青少年信息学奥林匹克联赛初赛参考答案(提高组PASCAL)_学科竞赛_高中教育_教育专区。NOIP2013全国青少年信息学奥林匹克联赛初赛参考答案(提高组PASCAL)第...
CCF NOIP2010全国青少年信息学奥林匹克联赛初赛试题
第十六届全国青少年信息学奥林匹克联赛初赛试题试题及答案 NOIP2010(Pascal 提高组) 一、单项选择题 1.与 16 进制数 A1.2 等值的 10 进制数是 () A.101.2...
更多相关标签: