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

信息学竞赛--pascal知识点小结和练习


信息学竞赛——pascal 知识点小结和练习
pascal 介绍
一、pascal 的基本语法单位 1、基本符号(教材第页) 注意:pascal 语言除了能使用以上规定的基本符号外,不得使用任何其它符号。 2、保留字(教材第页) 注意:所起的文件名不能与保留字相同。 3、标识符(教材第页) 以字母打头的字母数字串,中间可以有下划线,长度小于等于 8。 标准标识

符(共三十九个) 了解各标准函数的作用 二、程序结构 1、由三大部分组成:程序首部,说明部分,语句部分。 (教材第页) 2、大量使用标点符号,保留字后不加标点符号(END 除外) 。

顺序结构程序设计
一、标准数据类型 1、实型(real) 小数表示法、科学记数法 2、整型(integer) 正、负整数和零 maxint=32767 3、字符型(char) 是指在两个单引号中的一个字符。 4、布尔型(boolean) false;true 二、常量和变量的定义 常量的定义: (教材第页) 变量的定义: (教材第页) 三、表达式及赋值语句 [例]:b2-4ac 写成:sqt(b)-4*a*c 赋值语句:<变量>:=<表达式>; 四、输入输出语句 1、输入语句: (教材第页) read(<变量表>);readln(<变量表>) 注:表达式里面变量与变量之间用逗号隔开; 信息学竞赛 第 1 页 共 13 页

readln 表示下一个语句将从下一行开始操作; 输入时,整型或实型用空格或回车隔开,字符型之间无需分隔,一个接一个输入。 2、输出语句: (教材第页) write(<输出表>);writeln(<输出表>) 注:对 Real 或 Integer 限定场宽:write('a=',a:2:0) {a 为 real 型}

选择结构程序设计
一、if 语句 格式:IF<条件> THEN<语句 1> ESLE<语句 2> 注:1、ELSE 与最近的并且未被配对的 ELSE 配对; 2、复合,如果 THEN 或 ELSE 带有多个语句,则要用 BEGIN——END 括起来。 二、CASE 语句 格式:CASE <表达式> OF <值表 1>:<语句 1>; <值表 2>:<语句 2>; ?? <值表 n>:<语句 n>; [ELSE<语句 n+1>] END; 注:1、值表的三种表达方式: ”“2,4,6:; “1:; ”“10..100: ” 2、CHAR,INTEGER,BOOLEAN 有序

循环结构程序设计
一、FOR 语句 格式:1、FOR <循环变量>:=<初值> TO <终值> DO <语句>; 2、FOR<循环变量>:=<终值> DOWNTO <初值> DO <语句>。 [例 1]:输入 10 个数,求最大值、最小值、和、及平均值。(程序略) [例 2]:求 s=1!+2!+3!+??+10! Program sum_fac(input,output); Var i,j,s,m:integer; Begin s:=0: for j:=1 to 10 do begin m:=1; for j:=1 to i do m:=m*j; s:=s+m; 信息学竞赛 第 2 页 共 13 页

end; write(……); End. 二、while 语句 格式:WHILE <条件> DO <循环体> [例]:输入一串字符串,求第一个“, ”前的大小写字母个数和其它字符个数。 Program string(input,output); var ch:char; c,s,o:integer; Begin write(……); read(ch); c:=0; s:=0; o:=0; while ch<>',' do begin if (ch>='A')and(ch<='Z') then c:=c+1 else if (ch>='a')and(ch<='z') then s:=s+1 else o:=o+1; read(ch); end; write(??); End. 三、REPEAT 语句 格式:REPEAT <循环体> UNTIL

函数与过程程序设计
一、函数(包括标准函数和自定义函数) 1、函数的定义 格式:FUNCTION 函数名(<形参表>) :返回值类型; VAR <变量说明> BEGIN <函数体> END [注]:1) 、形参表每个参数都写明其类型; 信息学竞赛 第 3 页 共 13 页

2) 、有且只有一个返回值,并且要将返回值赋值给函数名。 [例]:求三角形的面积 Function area(a,b,c:real):real; var p:real; Begin p:=(a+b+c)/2; area:=sqrt(p*(p-a)*(p-b)*(p-c); End; 2、函数的调用 1) 、函数的调用必然出现在表达式中(等号的右边) ,不能以单独地在语句出现 2) 、调用时,将每个实参传递给对应的形参 Program ml_area(input,output); var l1,l2,l3,l4,l5,l6,l7,s:real; Function area(a,b,c:real):real; var p:real; begin p:=(a+b+c)/2; area:=sqrt(p*(p-a)*(p-b)*(p-c); end; Begin write('input'); readln(l1,l2,l3,l4,l5,l6,l7); s:=area(l1,l2,l6)+area(l2,l6,l7)+……; writeln('s=',s:10:3); End. 二、过程 格式:PROCEDURE<过程名>(<形式参数表>) VAR <说明部分> BEGIN <过程体> END; [例 1]某过程的形参表为 (var a,b:real;c,d:integer;var e:char); 主程序中有如下变量说明: x,y:real; m:integer; next:char; 则以下实参表中合法的有:(1、2、3) 1、(x,y,m+3,70,next) 2、(y,x,m,m,next) 3、(y,x,35,m DIV 10,next) 4、(m,x,30,10,next) 5、(x,y,m,10) 6、(35,0,y,m,10,next) 信息学竞赛 第 4 页 共 13 页

7、(x,y,m,m/10,next) 8、(A,B,30,10,next) [例 2]求程序输出的结果。 Program ex(input,output); var x,y,z:integer; procedure s(x:integer; var y:integer); var z:integer begin x:=5; y:=6; z:=7; end; Begin x:=1; y:=2; z:=3; s(x,y); writeln(x,y,z); End. 输出结果:1 6 3 [例 3]:求五个数中的最大值。 Program max_in_5(input,output); var n1,n2,n3,n4,n5:integer; procedure lagest_in_three(a,b,c:integer;var e:integer) begin e:=a; if b>e then e:=b; if c>e then e:=c; end; Begin write('……'); readln(n1,n2,n3,n4,n5); lagest(n1,n2,n3,n1); lagest(n1,n4,n5,n1); write(n1); End. 三、嵌套 [例]:计算 、 Program Cmn(input,output); function fax(x:integer):integer: var i:integer; begin fac:=1; for i:=1 to x do fac:=fac*i; end; function c(a,b:integer):real; begin c:=fac(a)/fac(b)*fac(a-b) end; 信息学竞赛 第 5 页 共 13 页

Begin writeln('c(9,3)=',c(9,3)); writeln('c(8,5=',c(8,5)); End. 四、递归 函数或过程调用它本身,称为递归。 [例 1]、用递归计算 n! { =m!/n!(m-n)!} Function fac(n:integer):integer; Begin if n=1 then fac:=1 else fac:=n*fac(n-1); End; [例 2]、下列 2 个递归函数和过程的功能是? 1)、 Function power(a,b:integer):integer; Begin if b=1 then power:=a else power:=a*power(a,b-1); End; 2)、 Procedure power(a,b:integer;var c:integer); Begin if b=1 then c:=a else power(a,b-1,c); c:=a*c; End; [例 3]、输入一串字符串(以‘.’结束)按逆顺输出 Program revers(input,output); procedure rever; var c:char; begin read(c); if c<>'.' then rever; write(c); end; Begin ever; End. 五、标识符的作用域 1、全局变量和局部变量 1) 、全局变量:在主程序中被说明(程序的一开始定义的变量) ,作用域:整个程序; 2) 、局部变量:在子程序中被说明(子程序中定义的变量) ,作用域:定义该变量的子程序及 其下级子程序。 2、子程序(function、precedure)的作用域 一个子程序可以调用它的下一级子程序,或可以调用在它之前定义的同级子程序。 [例]写出程序运行的结果。 信息学竞赛 第 6 页 共 13 页

Program range(input,output); var x,y:integer; procedure p1; var x,z:integer; begin x:=10; y:=y+1; z:=10; writeln(x,y,z); end; Begin x:=1; y:=1; writeln(x,y); p1; writeln(x,y,z); End. 结果为: (x y z) 11 10 2 10 1 2 (error) 3、在子程序中被改变值的变量可以回传的两种方法: a、变量参数 procedure(var 变量名); b、在上一级程序定义了的,且在下一级程序未被重新定义的。 [注]如果主程序的变量在子程序被重新定义,在子程序中主程序的变量被稳藏,在主程序中子 程序的变量无效。 4.值形参和变量形参 值形参——传值 变量形参——传地址

数组
一、一维数组 1、数组的定义格式: var a:array [1..10] of integer; 其中:a 是这一批数据的名称,称为数组名;array、of 是定义数组的保留字;中括号中的数 字是数据编号的下限和上限,财时也说明了数据的个数(上限-下限) ;最后一个是数据的基 类型,如 integer,char,real,boolean。 2、数组元素的输入: 数组名代表的并不是一个变量,而是一批变量,因而,不能直接整个数组读入,而是要逐个 数组元素读入,通常用循环结构来完成这一功能。下面是几个常用输入数组元素的例子: for i:=1 to 10 do read(a[i]); {从键盘读入数组元素的值;最常用的方法} 信息学竞赛 第 7 页 共 13 页

for i:=1 to 10 do a[i]:=i; {数组元素 a[1]到 a[10]的值分别为 1 到 10;数据赋初值} for i:=1 to 10 do a[i]:=0; {数组元素清 0;最常用的数据初始化的方法} for i:=1 to 10 do a[i]:=random(100); {随机产生 10 个 100 以内的数,赋给各数组元素} 3、数组元素的输出: 和数组元素的输入相同,数组元素的输出也不能由一个 write 语句直接完成。同样要逐个数组 元素输出。通常也用循环结构来完成这一功能: for i:=1 to 10 do write(a[i],' ');{数组元素之间用空格分隔} writeln; 4、数组的应用: 例:从键盘输入 10 个数,将这 10 个数逆序输入,并求这 10 个数的和,输出这个和。 二、二维数组 二维数组在编程中多数用于描述二维的关系:如地图、棋盘、城市街道、迷宫等等。而二维 数组元素有两个下标:第一个下标表示该元素在第几行,第二个下标表示在第几列。二维数 组的定义格式如下: var a:array[1..10,1..5] of integer; 其中:a 是数组名,由程序员自定;array 和 of 是定义数组的保留字; (这两点和一维数组定 义的格式一样)中括号中的两个范围表示二维数组共有多少行、多少列(第一个范围表示行 数,第二个范围表示列数) ;最后一个表示数组元素的类型,规定和一维数组一样。如上例, 定义了一个二维数组 a,共有 10 行 5 列。 使用二维数组要注意: 1) 、数组元素的指称:数组名[行号,列号]。如第三行第四个元素:a[3,4]。 对某一行进行处理。如累加第 4 行的数据。则固定行号为 4。如:for i:=1 to 5 do s:=s+a[4,i]; 对某一列进行处理。如累加第 4 列的数据。则固定列号为 4。如:for i:=1 to 10 do s:=s+a[i,4]; 2) 、二维数组的输入输出要用双重循环来控制: for i:=1 to 10 do{————控制行数} begin for j:=1 to 5 do read(a[i,j]){第一行读入 5 个元素} readln;{读入一个换行符} end; {最常用的方法:从键盘读入数据初始化二维数组} for i:=1 to 10 do for j:=1 to 5 do a[i,j]:=0; {最常用的方法:将二维数组清 0} for i:=1 to 10 do begin 信息学竞赛 第 8 页 共 13 页

for j:=1 to 5 do write(a[i,j]:4); writeln; end; {最常用的输出方法:按矩阵形式输出二维数组的值} 3、二维数组的应用

附录
Pascal 中的常用数学函数
求绝对值函数 abs(x) 说明:x 可以是整型,也可以是实型;返回值和 x 的类型一致 例子: var r: Real; i: Integer; begin r := Abs(-2.3); { 2.3 } i := Abs(-157); { 157 } end. 取整函数 int(x) 注意:x 是实型数,返回值也是实型的;返回的是 x 的整数部分,也就是说,x 被截尾了(而 不是四舍五入) 例子: var R: Real; begin R := Int(123.567); { 123.0 } R := Int(-123.456); { -123.0 } end. 截尾函数 trunc(x) 注意:x 是实型表达式. Trunc 返回 Longint 型的 x 的整数部分 例子: begin Writeln(1.4, ' becomes ', Trunc(1.4)); { 1 } Writeln(1.5, ' becomes ', Trunc(1.5)); { 1 } Writeln(-1.4, 'becomes ', Trunc(-1.4)); { -1 } Writeln(-1.5, 'becomes ', Trunc(-1.5)); { -1 } end. 四舍五入函数 round(x) 注意:x 是实型表达式. Round 返回 Longint 型的 x 的四舍五入值.如果返回值超出了 Longint 的表示范围,则出错. 例子: begin Writeln(1.4, ' rounds to ', Round(1.4)); { 1 } Writeln(1.5, ' rounds to ', Round(1.5)); { 2 } Writeln(-1.4, 'rounds to ', Round(-1.4));{ -1 } Writeln(-1.5, 'rounds to ', Round(-1.5));{ -2 } end. 信息学竞赛 第 9 页 共 13 页

取小数函数 frac(x) 注意:x 是实型表达式. 结果返回 x 的小数部分; 也就是说,Frac(x) = x - Int(x). 例子: var R: Real; begin R := Frac(123.456); { 0.456 } R := Frac(-123.456); { -0.456 } end. 求平方根函数 sqrt(x)和平方函数 sqr(x) Sqrt(x) 注意:x 是实型表达式. 返回实型的 x 的平方根. Sqr(x) 注意:x 是实型或整型表达式.返回值的类型和 x 的类型一致,大小是 X 的平方,即 X*X.

程序设计的方法
1.模块化: (1) 把一个较大的程序划分为若干子程序,每一个子程序解决一个总是独立成为一个模块; (2) 每一个模块又可继续划分为更小的子模块; (3) 程序具有一种层次结构。 注:运用这种编程方法,考虑问题必须先进行整体分析,避免边写边想。 2.自顶向下: (1) 先设计第一层(即:顶层),然后步步深入,逐层细分,逐步求精,直到整个问题可用程序 设计语言明确地描述出来为止。 (2) 步骤: 首先对问题进行仔细分析,确定其输入、输出数据,写出程序运行的主要过程和 任务; 然后从大的功能方面把一个问题的解决过程分成几个问题, 每个子问题形成一个模块。 (3) 特点:先整体后局部,先抽象后具体。 3.自底向上: (1) 即先设计底层,最后设计顶层; (2) 优点:由表及里、由浅入深地解决问题; (3) 不足:在逐步细化的过程中可能发现原来的分解细化不够完善; (4) 注意:该方法主要用于修改、优化或扩充一个程序。 4.例子:求 1 到 n 之间的素数。 解:要求 1 到 n 之间的素数,程序要做的事就是从 1 开始依次找,判断是否是素数,是则打 印出来,否则继续往下找,直到 n 为止。于是初步设想成: begin read(n); number:=2; while number〈n do begin 信息学竞赛 第 10 页 共 13 页

if number 是一个素数 then write(number); number 取下一个值; end end. 第二步:细化“number 是一个素数”及“number 取下一个值” 。 (1) 细化“number 是一个素数” : “number 是一个素数”这是一个布尔值,当 number 是一个素数时为 true,否则为 false。细化 如下: k:=2; lim:=number-1; repeat if nubmer 能被 k 整除 then prim:=false else begin k:=k+1;prim:=true; end; until not(prim) or (k 达到 lim); (2) 细化“number 取下一个值” : number:=number+1; 第三步:细化“number 能被 k 整除”及“k 达到 lim” 。 (1) 细化“number 能被 k 整除” : number mod k=0; (2) 细化“k 达到 lim” : k<=lim; 第四步:补充完整程序。 第五步:从所有的素数除了 2 之外都是奇数的角度出发优化程序。

程序设计步骤
1.分析问题: 对要解决的问题,首先必须分析清楚,明确题目的要求,列出所有已知量,应该用到的数据, 找出题目的求解范围、解的精度等。 2.建立数学模型: 对实际问题进行分析之后,找出它的内在规律,就可以建立数学模型。只有建立了模型的问 题,才能可能利用计算机来解决。 3.选择算法: 建立数学模型后,还不能着手编程序,必须根据数据结构,解决问题的算法。一般选择算法 要注意: (1) 算法的逻辑结构尽可能简单; (2) 算法所要求的存贮量应尽可能少; (3) 避免不必要的循环,减少算法的执行时间; (4) 在满足题目条件要求下,使所需的计算量最小。 4.编写程序: 把整个程序看作一个整体,先全局后局部,自顶向下,一层一层分解处理,如 信息学竞赛 第 11 页 共 13 页

果某些子问题的算法相同而仅参数不同,可以用子程序来表示。 5.调试运行; 6.分析结果; 7.写出程序的文档: 主要是对程序中的变量、函数或过程作必要的说明,解释编程思路,画出框图,讨论运行结 果等。 8.例 1:输入奇数 n,计算并输出 n 位的魔方阵。 说明: (1) 魔方阵就是 n*n 个不同的正整数按方阵排列时,它的每一行,每一列以及沿对角线的几个 数的和具有同一性质的方阵。 (2) 由 1 到 n*n 个自然数数构成的魔方阵是最基本的,又称为“幻方” ,这种方阵的每行、每 列和每个对角线上的元素的和全部相等,亦即等于一个常数。该常数是 n(n*n+1)/2。 (3) 方法: 首先确定 1 的位置,通常放在第一行的中间位置; 然后当前自然数的右上方放下 一个自然数; 如果当前自然数在第一行但不在最右侧,则下一个自然数在最后一行,列数右 移一列; 如果当前自然数在第一行最右侧,则下一个自然数在当前自然数的下侧; 如果当 前自然数在其它行的最右侧,则下一个自然数在上一行的最左侧。 9.例 2:任何一个整数的立方都可以写成一串奇数之和。 说明: (1)这是著名的尼科梅切斯定理。即 1^3=1 23=3+5=8 33=7+9+11=27 ?? (2)数据间关系的规律: ·n3 是 n 个奇数之和,如 23 是 2 个奇数之和,33 是 3 个奇数之和; ·这 n 个奇数是相邻的,只要知道各式的第一个奇数也就知道所有的 n 个奇数: 组成 13 的 1 个奇数是奇数序列中的第 1 个奇数; 组成 23 的 2 个奇数中最大的奇数是奇数序列中的第 3(3=1+2)个奇数(值为 5); 组成 33 的 3 个奇数中最大的奇数是奇数序列中的第 6(6=1+2+3)个奇数(值为 11); 由此推出: 组成 n3 的 n 个奇数中最大的奇数是奇数序列中的第 m(m=1+2+3+...+n)个奇数, m=n(n+1)/2 即: ·奇数序列中第 m 个奇数的值是: modd=2m-1 数序列中最大的一个奇数。 例如,第 2 个奇数是 3,第 6 个奇数是 11。 ·n3=modd+(modd-2)+(modd-4)+...(modd-2(n-1)) modd 表示“第 m 个奇数” ,是组成 n3 的奇

寒假练习 (做到作业本上,下学期开学后交。要求:写出算法,画出流程图,写出程序)
1、用筛选法求 100 以内的素数(质数) 。 分析:素数是除了 1 和它本身以外没有其它约数的数。用筛选法求素数的方法是:用质数筛 去合数:从第一个素数 2 开始,把它的倍数去掉;这样 2 以后的第一个非 0 数就一定也是素 数,把它的倍数也删了??重复这个删数过程,直到在所找到的素数后再也找不到一个非 0 数。把所有非 0 数输出。 信息学竞赛 第 12 页 共 13 页

2、求一个 5×5 数阵中的马鞍数,输出它的位置。所谓马鞍数,是指在行上最小而在列上最 大的数。 3、 4、 5、 6、

信息学竞赛 第 13 页 共 13 页


相关文章:
信息学竞赛--pascal知识点小结和练习
供新手学... 28页 1财富值如要投诉违规内容,请到百度文库投诉中心;如要提出功能问题或意见建议,请点击此处进行反馈。 信息学竞赛--pascal知识点小结和练习 隐藏>...
PASCAL知识点小结 1
PASCAL知识点小结 4 暂无评价 3页 7下载券 信息学竞赛--pascal知识... 暂无...PASCAL 知识点小结 1 一、Pascal 的字符与符号 PASCAL 语言中,允许使用的基本...
初中信息学竞赛pascal语言试卷
初中信息学竞赛试题(Pascal 语言) 第Ⅰ卷一、选择题:(本大题共 15 小题,每小题 2 分,共 30 分,每小题给出 的四个选项中,只有一项是符合要求的) 1 、...
(PASCAL)信息学竞赛初级篇题库
pascal练习(PASCAL)信息学竞赛初级篇题库 1. 输入 ...19. 任意给定平面上三个点 A(X1,Y1) ,B(X2,...创意简历模板汇集 推理型题分析与总结文档贡献者 0502072...
pascal信息学竞赛教程
pascal信息学竞赛教程_计算机软件及应用_IT/计算机_专业资料。第一讲: 信息学竞赛讲座:预备知识计算机语言是计算机软件中非常独特的一部份, 它属于系统软件, 但又和...
小学信息学竞赛试题_PASCAL
小学信息学竞赛试题_PASCAL_专业资料。2007 年东阳市小学信息学竞赛 试题卷(Pascal 语言 满分:100 分 考试时间 : 二小时完成) ★★ 全部试题答案均要求写在答卷...
小学信息学竞赛试题_PASCAL (2)
小学信息学竞赛试题_PASCAL (2)_学科竞赛_小学教育_教育专区。2014 年小学信息...我们要在其他小学生中普及网络法律知识和有关规定 ,并养成道德自律的良好习惯 D...
信息学奥赛基础知识习题
信息学奥赛基础知识习题(答... 31页 免费如要投诉违规内容,请到百度文库投诉中心...( A ) MS—DOS PASCAL ( B ) UCDOS (C) (D)WINDOWS (B)字长 (C)...
第十届绍兴市少儿信息学奥赛--初赛试题(PASCAL)
第十届绍兴市少儿信息学奥赛--初赛试题(PASCAL)_电脑基础知识_IT/计算机_专业资料...应届生求职季宝典 英文个人简历模板 创意简历模板汇集 推理型题分析与总结20080...
更多相关标签: