信息学奥林匹克竞赛普及培训.docx
- 文档编号:4745265
- 上传时间:2022-12-08
- 格式:DOCX
- 页数:103
- 大小:106.49KB
信息学奥林匹克竞赛普及培训.docx
《信息学奥林匹克竞赛普及培训.docx》由会员分享,可在线阅读,更多相关《信息学奥林匹克竞赛普及培训.docx(103页珍藏版)》请在冰豆网上搜索。
信息学奥林匹克竞赛普及培训
信息学奥林匹克竞赛普及培训系列
(1)
初识FreePascal
湖南省岳阳县教学仪器电教站
前言:
为了实践全纳教育,培养学生的信息技术素养,提高学生参加信息学奥林匹克竞赛的能力,本刊推出“信息学奥林匹克竞赛普及培训系列”栏目。
通过系列培训,全面介绍FreePascal知识、数据结构与算法基础、历年试题及解析等方面内容,为学生了解竞赛,参与竞赛,赛出实力进行全方位指导。
1.竞赛的语言环境
本培训针对竞赛语言之一的FreePascal进行。
计算机操作系统可以选择Windows或Linux。
根据学校现行基础,这里我们选择Windows平台下的语言环境。
1.1软件下载
进入全国信息学奥林匹克竞赛网站(),单击NOIP2008栏目下的超链接“2008竞赛评测系统与语言环境”,点击“Windows平台下的语言环境,请通过如下网址下载:
-/~zqy/tmp.htm”进入下载页面下载软件fpc-2.0.2.i386-win32.exe(此网页笔者2009年元月19日下载该软件成功)。
使用Linux环境则直接点击“软件下载”进入
1.2软件安装
解压缩NOIPEnvironmentforWindows-.rar文件,双击运行fpc-2.0.2.i386-win32.exe文件。
第一个页面为欢迎页面,确定安装软件则点击Next;第二个页面可点Browse按钮选择安装路径,然后点击Next;部件选择页面有三个选项:
Fullinstall-ation为完全安装,Minimuminstallation为典型安装,Custominstallation为定制安装,选择选项后点击Next;下一页面可以选择程序启动的文件夹或选中复选框取消创造程序启动文件夹,按需选择后点击Next;接下来选择附加任务,可以按默认设置点击Next;这时进入安装页面,点击Install进行安装;安装进度条走完弹出安装信息框,阅读后点击Next;最点出现的是安装向导完成对话框,点击Finish按钮,FreePascal安装完成。
1.3代码页问题
启动FreePascal软件,可以完成代码录入、调试和编译等各项工作。
但是,运行后的第一个页面可能显示的是乱码,这是因为代码页设置错误造成的。
修改方法是:
右击标题栏,选择“默认值”这个快捷菜单,将“选项”页中“默认代码页”修改成“437(OEM-美国)”。
在这里,你还可以修改其他的控制台窗口属性。
2.创建第一个程序
2.1新建和保存文件
点击File菜单的子菜单New,你就有了一个空白的编辑区域,在这里你可以编写代码。
这里我们在编辑区域输入下面的代码求两数的和。
Programp1_1(input,output);
Vara,b,s:
integer;
Begin
Write('PlasereadAandB:
');
readln(a,b);
s:
=a+b;
write('a+b=',s);
writeln
End.
完成源代码编辑工作之后,应当保存文件。
点击File菜单的子菜单Save,弹出“SaveFileAs”对话框,在Name文本框输入文件名,点击Ok按钮保存文件。
2.2编译并运行文件
Compile菜单下的子菜单“Compile”编译当前程序,“Make”编译、连接当前可执行文件,“Build”重新编译、连接当前可执行文件。
编译菜单可以进行文件调试,若存在错误,“CompileMessages”框报告错误信息,没有错误则Compilesuccessful,可以按任意键继续。
初学者会经常出现错误,应当按照错误信息进行修改。
点击Run菜单的子菜单“Run”可以运行程序。
在“FreePascalIDE”框按提示输入数据,回车后程序运行完成。
点击Debug菜单下的子菜单“Output”或点击子菜单“Userscreen”或直接按Altf5快捷键可以查看程序运行结果。
3.程序结构
3.1程序p1_1结构
程序p1_1由两部分组成:
1.程序首部
程序首部由保留字Program开始,后接程序名p1_1(这个名称是用户自定义的标识符)及参数列表(input,output),以分号结束。
input和output这两个参数实现程序与设备输入和输出的交流。
2.程序体
程序体由程序说明部分和执行部分组成,是程序的主体。
“Vara,b,s:
integer;”是p1_1程序的说明部分。
说明了a、b、s这三个整形(integer)变量(Var)。
“Begin”和“End”之间的部分是程序的执行部分。
“Write('PlasereadAandB:
');”提示输入两个数A和B。
Write在这里表示在屏幕上输出,writeln表示屏幕输出并回车。
“readln(a,b);”接受从键盘输入两个数a和b。
read表示从键盘输入,readln表示从键盘输入并回车。
“s:
=a+b;”为计算a和b的和并赋值给变量s。
赋值语句的格式是
变量标识符:
=表达式;
执行顺序是先计算后赋值。
在这里先计算“a+b”这个表达式,再将结果赋值给变量s。
“write('a+b=',s);”表示在屏幕上写出“a+b=”这个字符串和“s”的值。
字符串必须加单引号,变量的值不加单引号。
“writeln”表示程序运行结束再回一次车,这是个习惯问题,可以尝试不写这一行程序,看看多次运行程序后程序运行结果的情况。
3.2完整的程序结构
一个完整的程序结构应该是这样的:
Program程序名(程序参数表);
Label
标号说明;
Const
常量说明;
Type
类型说明;
Var
变量说明;
Function
函数说明;
Procedure
过程说明;
Begin
程序语句;
……;
程序语句;
End.
FreePascal语言中,除字符串中的字符外,字母无大小写之分。
程序首部、程序说明部分、程序主体语句都以分号(;)结束,程序主体部分完成,以句号(.)号结束。
但所有“Begin”和“End”之间的最后一个语句可以省略“;”。
自主探究
1.熟悉FreePascal的菜单。
2.编写程序计算两数的积。
3.了解编译出现的错误信息的含义。
信息学奥林匹克竞赛普及培训系列
(2)
顺序结构程序设计
湖南省岳阳县教学仪器电教站
2.Pascal语言基础
1.1Pascal数据类型
Pascal
数
据
类
型
简单类型
标准类型
整型
integer
-32768~32767
shortint
-128~127
longint
-2147483648~2147483647
byte
0~255
word
0~65535
实型
real
绝对值在1E-38~1E38间
singel
(单精度型)
double
(双精度型)
extended
(扩展型)
comp
(装配十进制型)
字符型
char
(字符)
string
(字符串)
布尔型
boolean
只有两个值true和false
用户自定义类型
枚举型
子界型
构造类型
数组类型
记录类型
集合类型
文件类型
指针类型
2.2常量
在程序执行过程中,不能改变值的数据称为常量。
Pascal包含三个标准常量maxint(32767)、true(逻辑值真)、false(逻辑值假)。
用户还可以定义新的常量。
常量定义的格式是
const
常量标识符=常量;
如:
constpi=3.14159;
1.3变量
在程序执行过程中,可以改变值的数据称为变量。
变量定义的格式是
var
变量名表:
类型标识符;
如:
vara,b,s:
integer;
1.4Pascal标准函数
前趋函数pred(x)。
x为整数时,函数值为x-1。
如:
pred(6)=5。
x为字符时,函数值为x代表字符的前一字符。
如:
pred(’6’)=’5’pred(B)=A。
x为布尔值时,pred(true)=false,但pred(false)无意义。
后继函数succ(x)。
x为整数时,函数值为x+1。
如:
succ(6)=7。
x为字符时,函数值为x代表字符的后一字符。
如:
succ(’6’)=’7’succ(B)=C。
x为布尔值时,succ(false)=true,但pred(true)无意义。
绝对值函数abs(x)。
函数值为x的绝对值。
如:
abs(6)=6abs(-6)=6。
平方函数sqr(x)。
函数值为x的平方。
如:
sqr(6)=36sqr(-6)=36。
平方根函数sqrt(x)。
函数值为x的算术平方根。
如sqrt(9)=3。
x值为负数时编译出错。
奇函数odd(x)。
当x值为奇数时,函数值为true;当x值为偶数时,函数值为false。
x的值只能是整型。
如:
odd(5)=trueodd(-6)=false。
字符函数chr(x)。
函数值为ASCII码x代表的字符。
x必须为整数。
如:
chr(65)=’A’。
序数函数ord(x)。
x为字符时,函数值为该字符的ASCII码值。
如:
ord(’A’)=65。
x为布尔值时,ord(false)=0ord(true)=1。
指数函数exp(x)。
函数值为指数ex。
对数函数ln(x)。
函数值为x的自然对数。
Pascal函数没有幂运算符和函数,计算x的n次方可表示为exp(n*ln(x))。
正弦函数sin(x)。
函数值为弧度值x的正弦。
余弦函数cos(x)。
函数值为弧度值x的余弦。
反正切函数arctan(x)。
函数值为弧度值x的反正切。
截尾函数trunc(x)。
舍去实数x的整数部分,并转换成整型。
如:
trunc(6.6)=6trunc(-6.6)=-6。
舍入函数round(x)。
对实数x作四舍五入,并转换为整型。
如:
round(6.4)=6round(-6.6)=-6。
但在fpc-2.0.2.i386-win32.exe中测试该函数存在运算错误。
1.5运算符
Pascal语言的基本运算符有五种:
算术运算符:
+、—、*、/、div(整除)、mod(取余)。
关系运算符:
=、<>(不等于)、<、>、<=、>=、in。
逻辑运算:
not、and、or。
集合运算:
+、—、*。
赋值运算:
:
=。
表达式中运算符的优先级别如下:
括号优先级别为5最高,从内到外逐层降低。
只允许使用圆括号,且成对出现。
not优先级别为4。
*、/、div、mod、and优先级别为3。
+、—、or优先级别为2。
关系运算符和in优先级别最低为1。
同级运算从左至右,不同级运算从高到低。
如第十四届初赛普及组试题一大题二小题:
设A=true,B=false,C=true,D=false,以下逻辑运算表达式值为真的是()。
A.(A∧B)∨(C∧D∨﹁A)
B.((﹁A∧B)∨C)∧﹁D
C.(B∨C∨D)∧D∧A
D.A∧(D∨﹁C)∧B
计算A答案项的方法应该是:
2.顺序结构程序设计
2.1交换a、b两个变量的值
算法说明:
如下图,先将变量a的值赋给临时变量x,再将变量b的值赋给a,然后将变量x的值赋给b,这样就实现了两个变量a、b值的交换(大家可以思考:
交换两个变量值的方法还有哪些)。
Programp2_1(input,output);
Vara,b,x:
integer;
Begin
Write('PlasereadAandB:
');
readln(a,b);
x:
=a;a:
=b;b:
=x;
write('a=',a,'b=',b);
writeln
End.
2.2随机产生一个三位数,记算其个位、十位和百位的值
算法流程图:
Programp2_2(input,output);
Varx,g,s,b:
integer;
Begin
randomize;
x:
=trunc(random*900)+100;
writeln('x=',x);
g:
=xmod10;
s:
=(xmod100)div10;
b:
=xdiv100;
writeln('g=',g);
writeln('s=',s);
write('b=',b);
writeln
End.
自主探究
1.用户自定义标识符必须满足哪些条件?
2.已知上底、下底和面积,编程计算梯形的高。
3.熟悉Pascal表达式的书写规则。
已知上底、下底和高,求梯形的面积。
Programtx(input,output);
Vara,b,h,s:
real;
begin
readln(a,b,h);
s:
=(a+b)8h/2;
writeln(s:
12:
6){场宽、双场宽}
end.
随机产生一个三位数,求个位、十位和百位的和。
Programsj(input,output);
Varx,ge,shi,bai,h:
integer;
Begin
Randomize;{每次运行程序时,random函数产生不同的随机数}
X:
=trunc(random*900)+100;
Writeln(‘x=’,x);
Ge:
=xmod10;
Bai:
=xdiv100;
Shi:
=(x-bai*100)div10;
H:
=ge+shi+bai;
Writeln(‘h=’,h)
End.
信息学奥林匹克竞赛普及培训系列(3)
选择结构程序设计
湖南省岳阳县教学仪器电教站
求一个数的绝对值。
Programjdz(input,output);
Varx:
real;
Begin
Readln(x);
Ifx<0thenwriteln(-x)
Elsewriteln(x)
End.
输入两个非负数,将较大的放在max里,小的放在min里输出。
Programdx(input,output);
Varmax,min,t:
real;
Begin
Read(max,min);
Ifmax Bein T: =max; Max: =min; Min: =t End; Writeln(max,min) End. 任意输入三个数,按由大到小的顺序打印出来。 Programsgs(input,output); Vara,b,c,t: real; Begin Readln(a,b,c); Ifa =a;a: =b;b: =tend; Ifa =a;a: =c;c: =tend; Ifb =b;b: =c;c: =tend; Writeln(a: 6: 3,b: 6: 3,c: 6: 3) End. 输入三角形的三边,判断是否为直角三角形。 (嵌套) Programrt(input,output); Vara,b,c: integer; Begin Readln(a,b,c); If(a>0)and(b>0)and(c>0)and(a+b>c)and(b+c>a)and(c+a>b) Then If(a*a+b*b=c*c)or(b*b+c*c=a*a)or(c*c+a*s=b*b) Thenwriteln(‘Isrttriangle.’) Elsewriteln(‘Isnotrttriangle.’) Else Elsewriteln(‘Isnottriangle.’) End. 求一元二次方程的实数根。 Programyyrc(input,output); Varx1,x2,a,b,c,dt: real; Begin Readln(a,b,c); Dt: =b*b-4*a*c; Ifa<>0 Then Ifdt>=0 Then Ifdt=0 Then begin X1: =-b/2/a; Writeln(‘x=’,x1) end Else Begin X1: =(-b+dt)/2/a; X2: =(-b-dt)/2/a; Writeln(‘x1=’,x1,’x2=’,x2) end Elsewriteln(‘wujie.’) Elsewriteln(‘error! ’) End. 对两个数进行加、减、乘、除运算。 Programszrs(input,output); Varx,y,s: real; Ch: char; Begin Writeln(‘PleaseinputX、Y: ’); Readln(x,y); Writeln(‘PleaseinputCH: ’); Readln(ch); Casechof ‘+’: begins: =x+y;writeln(‘s=’,s)end; ‘-‘: begins: =x-y;writeln(‘s=’,s)end; ‘*’: begins: =x*y;writeln(‘s=’,s)end; ‘/’: ify<>0thenbegins: =x/y;writeln(‘s=’,s)endelsewriteln(‘error! ’); Elsewriteln(‘error! ’) end End. 输出某年某月的天数。 Programts(input,output); Varyear,month,len: integer; Begin Readln(year,month); Casemonthof 1,3,5,7,8,10,12: beginlend: =31;writeln(‘len=’,len)end; 4,6,9,11: beginlend: =30;writeln(‘len=’,len)end; 2: begin If(yearmod4=0)and(yearmod100<>0)or(yearmod400=0) Thenbeginlend: =29;writeln(‘len=’,len)end Elsebeginlend: =28;writeln(‘len=’,len)end End; Elsewriteln(‘error.’) End; End. 信息学奥林匹克竞赛普及培训系列(4) 循环结构程序设计 湖南省岳阳县教学仪器电教站 计算1+2+3+4+……+100的和(计数循环) programsun006(input,output); vari,s: integer; begin s: =0; fori: =1to100dos: =s+i; writeln(s) end. 试着计算: 2+4+6+……+100; 1+1/2+1/3+……+1/100; 12+22+32+……+1002; 编程打印下图图形 ########### ######### ####### ##### ### # programsun007(input,output); vari,j,k: integer; begin fori: =6downto1do begin write(''); write('': 6-i); fork: =2*i-1downto1dowrite('#'); writeln end; writeln end. 求一个整数的各位数字之和(当循环) programsun008(input,output); varx,t,s: integer; begin readln(x); s: =0; whilex<>0do begin t: =xmod10; s: =s+t; x: =xdiv10 end; writeln(s: 8) end. 从n个数中挑选出最大的数(直到循环) programsun009(input,output); varn,x,m,y: integer; begin write('Importanumber.'); readln(n); write('Thefirstnumbers: '); readln(x); m: =0; repeat write('Timeassoonasnumber: '); readln(y); ifx =y; m: =m+1; untilm=n-1; write('Themaxis: ',x); writeln end. 求100-999中的水仙花数(注: 一个数字的各位数字的立方和等于这个数)(多重循环) programsun010(input,output); vara,b,c: integer; begin fora: =1to9do forb: =0to9do forc: =0to9do if(a*a*a+b*b*b+c*c*c=a*100+b*10+c) thenwriteln(a*100+b*10+c: 8) end. 找出3-100之间的所有质数。 (Goto语句) Programzs(input,output); Label20; Vari,j: integer; Begin Fori: =3to100do Begin Forj: =2toIdiv2do IfImodj=0thenfoto20; Writeln(n); 20; end End. 用尼考曼彻斯法(辗转相减)求两个自然数的最大公约数。 Programgys(input,output); Varm,n,a,b,t: integer; Begin Readln(a,b); M: =a;n: =b; Repeat Ifa Begin T: =a;a: =b;b: =t End; A: =a-b Untila=0; Writeln(‘(‘,m,’,’,n,’)=’,b) End. 求Faibonacci数列的前n项(前6项为: 0,1,1,2,3,5)。 Programfblq(input,output); Varn,p,l
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 信息学 奥林匹克 竞赛 普及 培训