广铁一中
信息学竞赛初级教材
前言:信息学奥赛是全国5大奥赛之一,初中拿省赛一等奖能上重点中学(一般是华附、省十、六中、二中、铁一和执信),高中拿省赛一等奖能保送重点大学。但凡是只想拿奖而又不努力的基本上是无功而返,除非是天才。一般来说,只有数学基础中上等水平才能进入信息学奥赛小组,所以你能开始学习首先这就是你的优势,你现在要做得就是将你的优势变成你的胜势,注意以下方法,非常的重要;
1、时间:时间是你成功的关键,因为都是初学,学完一个巩固一个又要学习下一个。保证你学习的时间和效率,最好是每次连续2个小时,尤其是以后学习高级算法时。一周一般最少要保证3次,最好是5、6次(包括双休)
2、方法:不同的学生适合不同的方法,你要找到最适合你的方法,下面的每一章结构都是2个(没有将总结写上去),基本知识和练习。环节包括:自己看,做练习,老师讲解重难点,自己总结体会。每个环节基本上都不能省略,尤其是练习和总结体会分类。
能将上面两个方面记住并落实到实处,成功就在等你。老师在你学习的环节中就像教你功夫的师傅,如果你全部跟着老师的步伐,只能做一个平庸的武林人士;你要想成为武林高手,一定要走在别人前面,努力刻苦专心时刻伴随着你。
这是一个被保送清华的oier也是我以前的学生说的话:许多事情之所以半途而废,往往不是因为难度太大,而是觉得成功离我们太远。确切的说,我们不是因为失败而放弃,而是因为放弃而失败。大家以此自勉,请记住:保证你的时间,做好每一个环节尤其是练习和总结体会分类。
第一章
一、知识点拨
抄写 你人生中的第一个pascal程序:
程序结果输出You are welcome to the PASCAL world ! 1、 begin writeln(’You are welcome to the PASCAL world ! ’); end.
2、以下程序是求正方形的面积
var a,s:integer; {声明a,s为整数类型} begin{程序开始} readln(a);{从键盘读入a的值} s:=a*a;{把a*a的值存入s中} writeln(s);{把s输出到屏幕} end.{程序结束}
二、竞赛练习
根据例题,请编写一个程序,求一个正方的周长。程序名字为:zhc.pas。
根据例题,请编写一个程序,求一个长方形的周长 程序名字为:cc.pas。
根据例题,请编写一个程序,求一个三角形的周长 程序名:san.pas
请编写一个程序,从键盘输入两个整数,要求求和然后输出和 程序名:he.pas 例如: 输入 1 4 输出 5
在编写过程中注意的就是结构和方法,包括每一个符号。在学习中你应该感觉到了数学在里面的作用。很多时候你可以和数学练习。
1、除BEGIN外,每一句PASCAL语句后均有分号或句号,只有程序的最后一个END后才用句号,而其它任何行未都是分号!!!每一行一般只写一个句子 2、下面开始进行基础知识的补充及相关的说明,你可以先简单看看,再接着学习;也可以先学习然后再回过头看看。
1
PASCAL语言程序基本概念 补充知识,就算看也不要花多的时间
1、PASCAL程序的组成,以第一章例题二为例。
每一个PASCAL程序都由程序头部和程序主体组成,最后以“end.”作为整个程序的结束。VAR为开始的部分是说明程序中要用到的变量,说明其名称及类型,相当于数学中的未知数。var a,s:integer; a,s是名称,integer为整数类型。 2、PASCAL的数据类型
整数类型(没有小数部分)
INTEGER:取值范围[-32768,32767]。占用内存2个字节(16位)。 WORD:取值范围[0,65535]。占用内存2个字节(16位)。 BYTE:取值范围[0,255]。占用内存1个字节(8位)。
LONGINT:取值范围[-2147483648,2147483647]。占用内存4个字节(32位)。 SHORTINT:取值范围[-128,127]。占用内存1个字节(8位)。 实数类型
REAL:取值范围[2.9E-39,1.7E+38]。占用内存6个字节(48位)。
实数的表示法有两种:1、直接表示,如:-0.4576, 123.567, -234, 0 2、科学计数法,如:1.234E-4, -3.546E12
表示1.234乘10的负4次.方;-3.546乘10的12次方。
字符类型
CHAR:单字符型,即取1个字符,如‘A’, ‘1’。
STRING:字符串型,即多个字符,如‘ABCD!123’,‘%¥#DS12’。
如果一个常/变量只要用到1个字符,则可把它定义成CHAR型;如果是多个字符,但不知确切多少个,则定义成STRING型,字符串在PASCAL中使用都是加上单引号。
布尔型
BOOLEAN:布尔型即为逻辑型,取值为TRUE、FALSE, 即真、假。
最开始你知道integer和real就可以了。
3、常量、变量、标准函数和表达式
常量:程序运行过程中,其值不会改变的量,称为常量。在程序头部中说明,以CONST引导。圆周率不会变,因此可以定义 const pi=3.1415926; 这个pi就是常量。
变量:程序运行过程中,其值可改变的量,称为变量。在程序头部中加以说明,以VAR引导。如a、s
标准函数(简单看看,以后用到再回过头来看看) 函数名 Abs Chr Copy Cos Exp Int Length
语法 Abs(r:real/integer):real/integer chr(i:integer):char Copy(s:string;n,m:integer):string Cos(r:real):real Exp(r:real):real Int(r:real):real Length(s:string):integer 2
说明 返回参数R的绝对值,类型与参数相同 返回参数所对应的ASCII码值,类型为CHAR 返回字串S的第N个字符开始的M个字符 返回参数R的余弦值 返回参数R的以e为底的幂 返回参数R的整数部分,返回的值是实数类型 返回字串S的长度 Ln odd ord random round sin sqrt trunc 过程名 Delay (CRT单元) Delete Exit Gotoxy (CRT单元) halt nosound Sound (CRT单元) str val Ln(r:real):real Odd(I:integer):boolean Ord(s:scalar):integer Random Round(r:real):longint Sin(r:real):real sqrt(r:real):real Trunc(r:real):integer 语法 Delay(ms:word) 返回参数R的自然对数 判断参数I是否奇数,如是,则返回TRUE 返回任意有序量的序值 返回0至于间的任意一个小数(随机数) 返回参数R的四舍五入取整值 返回参数R的正弦值 返回参数R的平方根 返回参数R的整数部分,返回的值是整数类型 标准过程 说明 延迟发声MS毫秒 Delete(s:string;n,m:integer) Exit Gotoxy(x,y:integer) Halt Nosound Sound(f:word) Str(I:integer;var s:string) Val(s:string;var r:real;var c:word) 把串S中的第N个字符开始的M个字符删除 从当前执行的程序中退出 把光标定位到第X列Y行处 中断程序的运行 关闭机器喇叭 让机器喇叭发出频率为F的声音,直到nosound 把数值I转换为字符串S 把字符串S转换为数值R,并返回错误代码C 表达式
由算术运算符(+,—,*,/)及数字、常量、变量、标准函数所组成的式子中心表达
式。如:5+9; A*B-34*ABS(-34)/INT(B)。另外,PASCAL中有两个很有用的运算符,DIV:求商的整数值;MOD:求余数。如:记住这两个运算及用法,非常有用 8 DIV 3 的值是2, 10 DIV 3 的值是3;
8 MOD 3的值是2, 10 MOD 3的值是1;
在PASCAL的表达式中,不允许出现我们日常生活中的那种分式或根号等式子,我们必须按照PASCAL的语法把它们改写成PASCAL表达式。在PASCAL的表达式中,运算顺序是:
()? 函数 ? *,/,DIV,MOD ,and? +,-,or
如:把下列算式改写成PASCAL表达式:
改写为PASCAL表达式为:(x*x+3*y-5*(z-2))/(x-y*y)
从上例中可以看出:
1、 PASCAL表达式中没有分式,只能以除号“/”来隔开; 2、 PASCAL表达式中的分子与分母应该用括号括开;
3、 PASCAL表达式中只有小括号,不能有中括号或大括号,小括号可以有很多层; 4、 PASCAL表达式中没有乘幂,内能用乘法来表达;
5、 PASCAL*表达式中任意两个常量、变量、数值、括号、函数之间都必须不能缺省
运算符,即乘号必不可少;
这些要求希望大家记熟,这是我们编写PASCAL程序的必要基础。
x?3y?5(z?2)x?y22
3
第二章
一、知识点拨
运算符div mod
div 是一个数除以另外一个数的整数部分: 5 div 2 =2 (也就是商) mod 是一个数除以另外一个数的余数部分: 5 mod 2=1 (也就是余数) 试说出以下结果是多少?
31 div (5 mod 2) 31 div 5 mod 2 31 /5 div 2
以下程序是求从键盘输入一个两位数,要求交换个位和十位然后输出: var a,b,s:integer;{说明a,b,s都是整数} begin
readln(s);{从键盘输入一个两位数给s} a:=s div 10;{把s的十位给a} b:=s mod 10;{把s的个位给b} s:=b*10+a;{交换之后又给s} writeln(s);{输出交换后的值} end.{程序结束}
二、竞赛练习
一、根据例题,要求从键盘输入一个三位数,要求百位变十位,十位变个位,个位变百位(程序名:ji.pas) 例如 输入:123 输出 312
二、输入一个四位数要求输入各位数字的和。ghe.pas 例如 输入 4567 输出 22
四、编一程序,键盘输入整数A,B的值,然后打印A除以B的商的整数部分及余数。zen.pas
4