信息学奥林匹克竞赛普及培训.docx

上传人:b****4 文档编号:26873275 上传时间:2023-06-23 格式:DOCX 页数:120 大小:106.44KB
下载 相关 举报
信息学奥林匹克竞赛普及培训.docx_第1页
第1页 / 共120页
信息学奥林匹克竞赛普及培训.docx_第2页
第2页 / 共120页
信息学奥林匹克竞赛普及培训.docx_第3页
第3页 / 共120页
信息学奥林匹克竞赛普及培训.docx_第4页
第4页 / 共120页
信息学奥林匹克竞赛普及培训.docx_第5页
第5页 / 共120页
点击查看更多>>
下载资源
资源描述

信息学奥林匹克竞赛普及培训.docx

《信息学奥林匹克竞赛普及培训.docx》由会员分享,可在线阅读,更多相关《信息学奥林匹克竞赛普及培训.docx(120页珍藏版)》请在冰豆网上搜索。

信息学奥林匹克竞赛普及培训.docx

信息学奥林匹克竞赛普及培训

信息学奥林匹克竞赛普及培训系列

(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模板 > 可爱清新

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1