文档库 最新最全的文档下载
当前位置:文档库 › 中学信息学奥林匹克竞赛培训教程

中学信息学奥林匹克竞赛培训教程

中学信息学奥林匹克竞赛培训教程
中学信息学奥林匹克竞赛培训教程

中学信息学奥林匹克竞赛培训教程

Pascal语言和程序设计基础

(第一部分)

第一部分 Pascal语言和程序设计基础

预备知识

基本程序结构和几个概念::

标识符保留字常量变量运算符表达式标准数据类型

Pacal语言程序结构

Program prog_name;

var变量申明;

begin

程序体;

end.

例如:

program pname;

const n=4;

type arr=array [1..4] of integer;

var i:integer; a:arr;

begin

for i:=1 to n do read(a[i]);

readln;

for i:=n downto 1 do write(a[i]:4);

writeln;

end.

以上是一个PASCAL程序。从键盘读入4个数据,逆序输出。

一般来说,一个PASCAL程序包括以下几个部分:

程序头:program pname; 其中,program是保留字,表示程序从这个地方开始,pname是标识符,是程序的名字,可由程序员自定。保留字是PASCAL选定的,具有固定意义和用法的专用单词或缩写,这些单词不允许作其它使用。如上,“program”就有“程序从这里开始”这样一种特别的意义,而“const”就有“常量说明从这里开始”的意义。我们不能再用“program”、“const”来作为其它变量、常量等的名字。标识符是以字母开头的字母数字串,其长度最大为8个字符。用来表示常量、变量、类型、文件、过程、函数和程序的名字。如“pname”、“i”、“j”、“a1”就是合法的标识符;但“1a”、“#a”是非法的标识符。有一点要注意的是,在PASCAL中,字母除了作为字符值或字符串值之外,其大小写是无关的。如标识符“A1”和“a1”在PASCLA看来是同一标识符。在PASCAL中除了保留字和自定义的标识符外,还有一类有特殊含义的标识符,这类标识符称为标准标识符。它们是用来标记程序中经常引用的处理对象,如常量、函数。(PASCAL定义的保留字和标准标识符附后)

标识符在命名的时候要注意:

1、名字要易记易读,有意义。如8皇后问题程序名可以是“queen”也可以是“huanghou”等;

2、不能用保留字、标准标识符作为自定义的标识符。

说明部分:

const n=4;

type ar=array [1..4] of integer;

var i:integer; a:ar;

其中,const部分是常量说明,说明一些在以下部分用到的,在整个程序执行过程不改变值的量。这些量PASCAL称为常量。在程序中用到这个值的地方均用常量名来代替。如上题中定义“n=4”指本程序处理4个数值,在下面的程序体中就用“n”来代替具体的值(如for i:=1 to n)。如果要改变处理数据个数,则只在常量说明部分修改“n=4”这一句就行了,而不用在程序中每一个用到的地方都加以修改。这样不但在编写程序的时候很方便,也增加了程序的可读性,修改时更方便。

常量说明在保留字“const”下开始。可以有多个语句。常量说明语句的格式是:“常量名=值;”。如“n=4;”。n是常量名,4是该常量的值,“;”是语句分隔符。

type部分是类型说明,说明一些在以下部分用到的数据类型。如数组、记录、指针等。

类型说明在保留字“type”下开始。可以有多个语句。类型说明语句的格式是:“类型名=类型说明;”。如“ar=array [1..4] of integer;”。ar是类型名,array [1..4] of integer是类型说明,“;”是语句分隔符。

var部分是变量说明。变量是指在程序执行过程中可以通过赋值语句或读语句来改变值的量。所有在程序中使用的变量都应该先在变量说明部分说明。PASCAL中引用的每个变量都有“名字”和“类型”属性。变量说明“说明”的主要工作是告诉PASCA下面程序中要用到这个名字的量,同时这个量的类型是什么。

变量说明在保留字“var”下开始。可以有多个语句。变量说明语句的格式是:“变量名:变量类型;”。其中,如果有多个变量同一类型,则变量名与变量名之间用逗号分隔,变量名与变量类型之间用冒号分隔。如“i:integer;”(i是变量名,integer是类型名)、“i、j:integer;”(i、j 是变量名,integer是类型名)……

变量说明要注意:1、有效变量名称不能大于8个字符;2、变量名称必须以字母开头;3、在同一个有效范围内变量名称必须唯一。

各个说明部分均以该部分的保留字开始。如“const”开始常量说明;“type”开始类型说明;“var”开始变量说明。一个程序包含多少种类型的说明,看需要而定,不是每一个程序都必须同时包含这三种说明。如果程序不须要用到常量,则常量说明部分可以省略;如果不须要用到类型说明,则类型说明可省……

PASCAL还有一条规则:先说明后引用。即所有在程序体中用到的“名字”必须都在说明部分说明过才能引用,否则就会出错,通不过编译,也执行不了。如上,类型“ar”先在类型说明中定义,然后在变量说明中引用;变量i在变量说明中定义,在程序中引用。

程序体:

begin

for i:=1 to n do

read(a[i]);

readln;

for i:=n downto 1 do

write(a[i]:4);

writeln;

end.

程序体是以begin end.括起来的语句系列。“end”后面是一个小圆点,标识着程序结束,整个程序只有一个是一个程序的主要部分。编程要完成的工作大部分都在这里完成。程序体中每一语句均以“;”作为结束符。在书写程序时,以“分层缩进”的风格来写,以便提高程序的可读性。所谓的“分层缩进”是指在逻辑上同一级的语句其起始点对齐,下一级的语句向右缩进。

运算符表达式

PASCAL中的运算符有算术运算符和关系运算符。和我们在数学课中学的基本一样但在写法上有些不同,在写程序时要特别注意写法的不同:

+ 加号;- 减号;* 乘号( 数学中写为× );/ 除号( 数学中写为÷);MOD 取余如:8 MOD 2=0,7 MOD 2=1,2 MOD 3=2;DIV 取整如:8 DIV 2=4,7 DIV 2=3,2 DIV 3=0。在PASCAL 只有上面6种数学运算。其它的就只能利用这6种运算的组合通过语句来实现。如a^2(a的平方)可以化成a*a。

> 大于;< 小于;<> 不等于(数学中写为≠);<= 小于等于(数学中写为≤);>= 大于等于(数学中写为≥),

变量、常量通过运算符连接起来的式子我们称为表达式。一个单独的变量或常量也是表达式。如a、a+3、a*3+b都是表达式。写表达式时要注意PASCAL表达式跟我们已经熟悉的数学表达式在格式上的区别:

标准数据类型:整型实型字符型布尔型

数据类型可以理解为一个取值范围和定义在这取值范围上的运算规则。想一想我们对于数的理解:小学学自然数,范围是从0开始,那时候不知道有小数,也不知道有负数,允许的运算是+、-、×、÷,而且对于减法规定被减数要大于减数。到了中学,数的范围扩大了,整数包括正数和负数,减法运算也不再有额外的规定的了。同理,在PASCAL中“数据类型”也是一个取值范围和在它上面定义的运算规则。PASCAL中定义好的标准数据类型一共有4个:整型、实型、字符型、布尔型,分别用保留字integer、real、char、boolean来标记它们。其取值范围和运算如下:整型(integer):范围 -32768——32767;运算 + - * / mod div

实型(real):范围运算 + - * /

字符型(char):范围可显示的ASCII字符

布尔型(boolean):范围 true false 运算 and or not

在PASCAL中可使用的基本符号有:

(1)大写字母 A—Z ;小写字母a—z ;数字0—9

(2)其它字符 + — * / = > < >= <= <> :=

() [ ] . ,:‘ $ ^ (* *) { }

其中,有些符号是以双字符作为一个整体,拆开后就失去原有的意义。如“<>”是一个表示“不等于”的关系运算符,如拆开后就变成了两个关系运算符,分别表示“小于”、“大于”。

PASCAL使用的保留字有:

AND、ARRAY、BEGIN、CASE、CONST、DIV、DO、DOWNTO、ELSE、END、FILE、FOR、FUNCTION、GOTO 、IF、IN、LABEL、MOD、NIL、NOT、OF、PACKED、PROCEDURE、PROGRAM、RECORD、REPEAT、SET、THEN、TO、TYPE、UNTIL、VAR、WHILE、WITH、FORWARD

常用的标准标识符有:

标准常量:FALSE TRUE MAXINT MAXLONGINT

标准类型:INTEGER BOOLEAN REAL CHAR TEXT

标准文件:INPUT OUTPUT

标准函数:ABS ACTAN CHR COS EOF ELON EXP LN ODD

ORD PRED ROUND SIN SQR SQRT SUCC TRUNC 标准过程:ASSIGN GET NEW DISPOSE PACK PUT READ

READLN RESET REWRITE UNPACK WRITE WRITELN

函数格式:

function fun_name(参数表):数据类型;

var 变量声明;

begin

函数体;

end;

例题:写出计算两个整数a,b的和函数add(a,b)。

过程格式:

procedure proc_name(参数表);

var 变量声明;

begin

过程体;

end;

例题:写出在屏幕打印一行文字:”hello,Pascal language is very easy!”

函数和过程的调用:

例题:从键盘输入:a,b两个数,输出由这两个数为直角边的三角形的面积。【xoi00_01.pas】program xoi00_01;

function area(const a,b:real):real;

var s:real;

begin

s:=a*b/2.0;

area:=s;

end;

procedure myproc;

var a,b:real;

s:real;

begin

write('Please input two number a,b:');

readln(a,b);

s:=area(a,b);

writeln('the area of trian is: ',s:5:2);

end;

{============= main program ================}

begin

myproc;

end.

练习:

一、判断以下标识符的合法性:

a3 3a a17 abcd ex9.5 α β λ

二、将下列的数学表达式改写成PASCAL表达式:

b^2-4ac

三、求下列表达式的值:

20 mod 19,一五 mod 9, 7 div 8 ,19 div 3,(4>5) and (7<8),(8>9) or ( 9<10),2 and ((3=3) or (3<7))

第一节顺序结构

顺序结构是程序设计中最简单的结构,也是最基本的结构,它就是按照程序书写的顺序逐句执行程序中的指令。流程图如下:

输入圆的半径;(操作一)

计算圆的周长;(操作二)

输出圆的周长;(操作三)

基本的程序语句:

赋值语句:

赋值语句是最简单的语句,其一般形式为:

<变量>:=<表达式>;

“:=”称为赋值号,赋值语句的作用是计算表达式的值,并赋给变量。对于任何一个变量必须首先赋值,然后才能引用,否则,未赋初值的变量将以一个随机值参与运算。另外,赋值号两边的类型必须相同,但表达式值为整数时,它可自动化为实型后赋给该实型变量,即符合赋值相容。如:Pi:=3.14; R:=2; Age:=20; S:=Pi*R*R

例:关于赋值的例子

prssogram example;

var a,b:integer;

begin

a:=3;

b:=2;

a:=a+b;

writeln(a);

writeln(b);

end.

输入语句

通过计算机的外设把数据送到计算机内存的过程称为输入。Turbo Pascal语言的输入语句有如下两种形式:

read(<变量名表>);

readln(<变量名表>);

<变量名表>是一个或几个由逗号隔开的变量标识符,他们必须在程序说明部分预先说明,他们可以是整型、实型或字符型,布尔型不可以直接读入。例如a,b,c为整型变量,read(a,b,c)之后,键盘输入:20 30 40 (表示回车),结果:a=20,b=30,c=40

readln语句和read语句不同之处在于输入数据到各变量之后,readln自动换行,从下一行开始再输入数据。一个read语句执行完后,数据行中多余的未读数据可以被下一个输入语句读入;而一个readln于执行完后,数据行中多余未读数据就没有用了。readln语句中可以不包含变量名表。即有以下等价情况:

read(a,b);readln等价于readln(a,b)

输入语句输入的数据类型必须和变量一一对应。如果输入的是一串整数或实数,数据间用空格或回车分隔;若输入的是一串字符,则不用分隔。

输出语句

输出是将内存中的数据送到外设的过程。Turbo Pascal的输出语句有两种形式:

write(<输出项表>);

writeln(<输出项表>);

其中<输出项表>是一串用逗号分隔的常量、变量、函数名、表达式或字符串。如果是变量、函数名、表达式,则将其计算结果输出;如果是常量或字符串,则直接输出其值。

write和writeln的区别在于:write语句是输出项输出后,不换行,光标停留在最后一项后,writeln语句按项输出后,自动换行,光标则停留在下一行的开始位置。

writeln语句允许不含有输出项,即仅writeln;表示换行。

Turbo Pascal语言把输出项的数据显示占用的宽度称为域宽,你可以根据输出格式的要求在输出语句中自动定义每个输出项的宽度。定义宽度时分为单域宽和双域宽。

单域宽输出格式:writeln(I:n);

在n个字符宽的输出域上按右对齐方式输出I的值,若n大于I的实际位数,则在I值前面补(n-I 的实际位数)个空格。若I的实际位数大于n,则自动突破限制。n必须是整数。

双域宽输出格式:writeln(a:n:m);

双域宽主要用于实型数据的输出。n的用法同上。在n个字符宽的输出域上按右队齐方式用小数点形式输出a的数值,m是小数点后的位数。原来的数据按该该格式指定的小数位数四舍五入。若m=0 ,则不输出小数部分和小数点,原数据四舍五入取整。n,m必须是整数。

例:输出语句的例子

program shuchu;

const s='pascal';

var i:integer;r:real;c:char;b:boolean;

begin

i:=12345;

r:=123.45

c:='a';

b:=true;

writeln('i=');

writeln(i:6);

writeln('r=',r,r:6:1);

writeln('c=',c,c:10);

writeln('b=',b,b:10)

end.

复合语句

复合语句是由若干语句组成的序列,语句之间用分号“;”隔开,并且以begin和end括起来,作为一条语句。复合语句的一般形式:

begin

语句1;

语句2;

……

语句n;

end;

例:变量值的交换

program swap;

var a,b,t:integer;

begin

a:=10;b:=20;

begin

t:=a;

a:=b;

b:=t;

end;

writeln('a=',a,'b=',b)

end.

例题1:输入圆的半径,求出圆的周长和面积:

Progam CalCircle;

var R,C,S:Real;{变量声明}

begin

write(‘输入圆的半径:’);

readln(R);

C:=2*Pi*R;

write(‘周长=’,C);

readln;

S:=Pi*sqr(R);{sqr(R)=R*R}

write(‘面积=’,S);

readln;

end.

例题2:找出下面程序中的语法错误。

Program Example1;

{计算圆环面积的程序,R2表示外圆环的半径,R1表示内圆环的半径,R2>R1}

var R1,R2:Real;

begin

S=(R2+R1)*(R2-R1)*Pi

{Pi=3.14为常数}

writeln(s)

end;

纠正以后的程序

Program Example1;

{计算圆环面积的程序,R2表示外圆环的半径,R1表示内圆环的半径,R2>R1}

var R1,R2:real;

S:real;{每一个变量都必须声明} begin

S=(R2+R1)*(R2-R1)*Pi; {Pi=3.14为常数} writeln(s); {语句必须以“;”结束} end.{主程序必须以“.”结尾}

练习:

编写程序实现以下功能:

1、输入三角形三边的长,计算三角形的面积。 计算公式:

()()()2

s p p a p b p c a b c p =---++=

Pascal 程序中计算平方根的函数为:sqrt(x);{x:real; x ≥0}

基本要求:有友好的输入输出界面,不需要考虑输入的a,b,c 是否可以构成三角形,假设输入的数据符合要求。

第二节 IF 分支结构

例题: 输入一个考试分数,如果大于等于60就说恭喜你考试及格,如果小于60就说真差劲,要努力哦!

program JudgeScore; 输入分数→score; 如果Score ≥60那么

输出“恭喜你考试及格” 否则

输出“真差劲,要努力哦”

“如果...那么”形式的判断在Pascal 中使用If 语句来实现。IF 语句是由一个布尔表达式和两个供选择的操作序列组成。运行时根据布尔表达式求值结果,选取其中之一的操作序列执行。有两种形式的IF 语句:

if <布尔表达式> then <语句>; if <布尔表达式> then <语句1>

else <语句2>;

当布尔表达式的值为真,则执行then 后面的语句,值为假时有两种情况:要么什么也不做,要么执行else 后面的语句。注意else 前面没有分号,因为分号是两个语句之间的分隔符,而else 并非语句。如果在该处添了分号,则在编译的时候就会认为if 语句到此结束,而把else 当作另一句的开头,输出出错信息。 前面例题的Pascal 程序代码: Program JudgeScore;

var score:real;{声明分数变量score} begin

readln(score); {输入分数} if score>=60 then

begin {score 代表分数的变量}

writeln(‘恭喜你,考试及格!’); end else begin

writeln(‘真差劲,要努力哦!’); end; {end if score>=60}

end.

例:求y=f(x),当x>0时,y=1,当x=0时,y=0,当x<0时,y=-1

program lianxi;

var x,y:real;

begin

if x>0 then y:=1;

if x=0 then y:=0;

if x<0 then y:=-1;

writeln('y=',y);

end.

在Turbo Pascal语言if语句中被构造的语句只能是一条语句,当条件选择某个分支的计算要用多个语句描述时,就必须把该分支用begin和 end括来,写成复合语句。在用if语句连续嵌套时,如果你插入适量的复合语句,有利于程序的阅读和理解。

例:当x>0时候,计算x*x,并且输出x和x*x。

program lianxi;

var x,x1:real;

begin

readln('x=',x);

if x>= then

begin

x1:=x*x;

writeln('x*x=',x1);

writeln('x=',x);

end;

end.

当if 语句嵌套时,Turbo Pascal约定

else总是和最近的一个if配对。前面介绍了If语句的使用情况,下面来概括if判断语句的使用方法。

分支结构的基本情况:

if 条件成立 then

begin

处理;

end;

下一语句;

if 条件成立 then

begin

操作B;

end else {if 条件不成立 then }

begin

操作A;

end;

下一语句;

练习:

写出下列关系表达式和逻辑表达式的Pascal语句:

1、区分合格和不合格:x >= 60

2、60分到70分之间:( x >= 60 ) and ( x <=70 )

3、判别闰年的条件(年份能被4整除,并且不能被100整除;或者能被400整除的整数年份):((y mod 4 = 0) and (y mod 100 <> 0 )) or (y mod 400 = 0)

编写程序实现下列功能:

1、从键盘读入一个数,判断它的正负。是正数,则输出"+",是负数,则输出"-"

2、输入a,b,c 三个不同的数,将它们按由小到大的顺序输出

3、铁路托运行李规定:行李重不超过50公斤的,托运费按每公斤0.一五元计费;如超50公斤,超过部分每公斤加收0.10元。编一程序完成自动计费工作。

4、打印某年某月有多少天。(提示:A 、闰年的计算方法:年数能被4整除,并且不能被100整除;或者能被400整除的整数年份。B 、利用MOD 运算可以判断一个数能否被另一个数整除)

5、从键盘输入3个数a,b,c 输出其中最大的数。

第三节 Case 分支结构

case 语句是由一个表达式和众多可选择的操作序列组成。运行时,根据表达式的求值结果,

在众多的分支中选取一个分支执行。其形式为: case 表达式 of

常量1:语句1; 常量2:语句2; ……

常量n:语句n;

else 语句 n+1; {可选项} end;

表达式只能是顺序类型(除了实型以外的简单类

型),其值必须是唯一确定并且和表达式类型相同。case 语句执行和表达式值相匹配的case 常数所指向的那条语句,如果没有相匹配的值,则执行else 部分(如果有的话)或者什么也不做。在else 前面的语句末尾有分号,这是和if 语句不同的。 Case 表达式的应用:

例题:输入一个考试分数(整数),根据分数情况报告相应的信息。

060609090100x x x ≤

不及格及格优秀

要求:假设输入的分数为[0,100]之间的整数。 Program JudgeScore2; var x:real; begin

read(x);{输入一个分数} case x of

0..59:{060x ≤<}

writeln(‘不及格’; 60..89:{6090x ≤<}

writeln(‘及格’);

90..100;{90100x ≤≤}

writeln(‘优秀’); else

writeln(‘错误的分数’);

end;{case x of} end.

例:根据学生的成绩给予相应的等级,对应关系如下: 90——100 A 80——89 B 60——79 C

60以下 D program chengji;

var s:real;ch:char; begin

write('input the score: '); readln(s);

if(s>=0)and(s<=100)then case s div 10 of 10,9:ch:='A'; 8:ch:='B'; 7,6:='C'; else ch:='D'; end;

writeln(s,'--',ch); end.

练习:

1、我们把字母作如下的分类:大写字母:’A’..’Z’;小写字母:’a’..’z’;数字:’0’..’9’;其他字母,编写一个程序,根据上述分类的方法,输入一个字母,报告该字母所属的类型。

2、某超市为了促销,规定:购物不足50元的按原价付款,超过50不足100的按九折付款,超过100元的,超过部分按八折付款。编一程序完成超市的自动计费的工作。

第四节 for 循环结构

程序设计时我们经常要做一些重复的任务通过反复的执行某一个动作来完成任务,编写这一类程序我们使用循环结构来实现。如计算1+2+3+….+100。Pascal 中循环结构通过使用For 、While 、Repeat 三种语句来实现。

For 语句是形式最简单的循环语句。 例题1:输入正整数N ,计算

1

N

i i

=∑

分析:1N

i i

=∑=1+2+3+…+N,因此我们必需重复的执行S:=S+i ,其中S 代表和, S=1 {i=1} S=1+2 {i=2} S=1+2+3 {i=3} S=1+2+3+4 {i=4} ….

S=1+2+3+4+…+N {i=N}

i 从1变化到N ,计算前I 项的和:1+2+3+…+I,写成Pascal 代码如下: For i:=1 to N DO S:=S+i;{i 从1变化到N 重复执行S:=S+i} 完整的程序如下: Program Example1_4 Var

N,I,S:integer; Begin

Write(‘输入正整数N:’);Readln(N); S:=0;

For I:=0 to n do S:=S+I;

Writeln(‘1+2+3+…+’,n,’=’,s);

End.

FOR 循环有两种形式:

升序形式:for <控制变量>:=<初值> to <终值> do <语句>

降序形式:for <控制变量>:=<初值> downto <终值> do <语句>

for语句功能描述:

虽然for循环形式简单,但是执行的机制却很复杂。其基本过程如下:

1. 计算初值并记忆

2. 判断初值是否超出终值、如果超过则执行步骤7,

否则执行步骤3

3. 把初值赋给控制变量

4. 执行do后面的语句(循环体)

5. 判断控制变量的值是否达道终值,如果是则执行

步骤6,否则执行步骤7

6. 控制变量取下一个值(升序取后继,降序取前驱)

7. (循环结束)执行下一语句.

例题:编写程序输出序号从32到126的ASCII字符与对应

代码之间的对应关系。每行输出5个字符,输出结果如下如

所示。(Example4_2)

program example4_2;

var i, j: byte;

begin

for i := 32 to 126 do

begin

if (j mod 5 = 0) then writeln;

write(i: 5, chr(i): 2);

j := j + 1;

end;

end.

程序说明:

标准函数chr(i)可以得到代码为i的字符。j mod

5 求 j模5的余数。语句if (j mod 5 = 0) then writeln;用于控制换行,每行写5个字符的对应关系。语句write(i: 5, chr(i): 2);用于格式化输出结果。

编程完成下列计算:

1、

2222 1

12...

N

i

i N =

=+++∑

2、

1 11(1) 1......

23

n

n

+

-

-+-+

3、把数码1,2,3,4,…,9分成3组,每组构成一个3位数,使这3个3位数恰好成1:2:3,

该怎样分?求出所有的解答来。(如:192,384,576就是一组解答)

4、求出所有的三位数xyz,它除以11所得余数等于它的三个数字的平方和。

第五节 while、repeat循环结构

While语句是另外一种实现循环的语句,一般形式如下:

While <条件> do <语句>

While循环的执行过程如下:

1. 判断条件是否成立,条件成立时执行步骤2,否则执行步骤4

2. 执行do后面的语句(循环体)

3. 返回步骤1

4. 结束循环,执行下一语句

注意:一定要有使条件取假(False)的时候,否则会出现死循环。

例题:从键盘输入一批学生考试数据,统计这些数据中大于80的数的个数。

分析:因为学生的人数没有确定,因此不方便用for循环来完成此项工作,但是用while循环比较容易实现。(example4_3)

while score>=0 do

输入一个学生成绩→score;计算总分;

Pascal代码:

while score >= 0 do

begin

readln(score);

total := total + score;

end;

完整的程序代码:

program example4_3;

var

score: integer;

total: integer;

c: char;

begin

writeln('输入学生分数:');

readln(score);

total:=0;

while score >= 0 do

begin

readln(score);

total := total + score;

end;

writeln('总分为:',total);

read(c);

end.

Repeat语句与while语句基本类类似,只是while先判断条件,reapeat语句先执行循环体然后再判断。

Repeat

<语句>;{循环体部分}

Until <条件>;{循环结束条件}

执行过程如下:

1. 执行循环体

2. 判断条件,如果布满足重复1,否则执行步骤3

3. 结束循环,执行下一语句

例题:改写Example4_3程序使用Repeat循环语句实现。(Example4_4)

program example4_4;

var

score: integer;

total: integer;

c: char;

begin

writeln('输入学生分数:');

total := 0; repeat

readln(score);

total := total + score; until score < 0;

writeln('总分为:', total); read(c); end.

练习:

1、 计算下列式子的值:

(1) 1+3+5+…+99

(2) 1+2+4+8+…+128+256+512+1024

(3) 1+(1+2)+(1+2+3)+…+(1+2+3+4+…+N)

2、 有一分数序列:13581321,,,,,,......2235813求出这个数列的前20项的和。

3、 求水仙花数。所谓水仙花数,是指一个三位数abc ,如果满足3

3

3

a b c abc ++=,则abc 是水

仙花数。

4、 输入一个整数,计算它各位上数字的和。(注意:是任意位的整数)

5、 输入一整数A ,判断它是否质数。(提示:若从2到A 的平方根的范围内,没有一个数能整除A ,

则A 是质数。)

6、 求两个数的最小公倍数和最大公约数。(提示:公约数一定小于等于两数中的小数,且能整除

两数中的大数。公倍数一定大于等于两数中的大数,且是大数的倍数,又能给两数中的小数整除。)

7、 编写一个译码程序,把一个英语句子译成数字代码。译码规则是以数字1代替字母A ,数字2

代替字母B ,……,26代替字母Z ,如遇空格则打印一个星号‘*’,英文句子以‘.‘结束。 8、 “百钱买百鸡”是我国古代的著名数学题。题目这样描述:3文钱可以买1只公鸡,2文钱可

以买一只母鸡,1文钱可以买3只小鸡。用100文钱买100只鸡,那么各有公鸡、母鸡、小鸡多少只?与之相似,有"鸡兔同笼"问题。

9、 输入一个正整数N ,把它分解成质因子相乘的形式。如:36=1×2×2×3×3; 19=1×19(提示:

设因子为I ,从2开始到N ,让N 重复被I 除,如果能整除,则用商取代N ,I 为一个因子;如果不能整除,再将I 增大,继续以上操作,直到I 等于N 。)

10、 编程实现:求......n n

s a aa aaa aaa aaa =++++64748

之值,其中a 是一个数字。例如:

222222222222222++++(当n=5时),n 由键盘输入。

11、 一个数如果恰好等于它的因子之和,这个数就称为“完数”。例如:6的因子为1、2、3,而6=1+2+3,因此6是“完数”。编程序找出1000以内的所有完数。

12、 编一程序,输入a ,b ,c ,d ,e ,f ,然后解出方程组aX bY c dX eY f +=??

+=?的解。

第六节 数据类型

简单数据类型

Pascal 语言基本数据类型由:integer(longint,shortint,byte),real,char,Boolean.等构成。 自定义数据类型:

我们可以 在基本数据类型的基础上定义新的数据类型,类型定义的保留字为“Type ”,格式为: TYPE

<类型标识符>=<数据类型>

如:

Type

MyLong=Longint;

枚举类型:

“枚举”的意思就是把所需要的对象都一个一个的列举出来。比方说星期是一个只有7个元素的数据,因此我们可以定义一种数据类型TWeekDay代表星期,如果一个变量定义为TWeekDay类型,那么他的取值范围就是Sunday..Saturday,另外颜色TColor也一样。习惯上我们在自定义类型名称前加上“T”,如TColor,TWeekDay,而且单词以大写字母开始。

Type

TWeekDay=(Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday);

TColor=(Red,Yellow,Blue,Green.Purple,White,Black);

枚举变量的第一个代表0,第二个代表1,以此类推,如上面定义的TweekDay类型,Sunday=0,Monday=1,…,Saturday=6。

例题:输入今天的日期数字:0=Sunday,1=Monday,…6=Saturday,输出明天的日期,用英文单词表示。【xoi00_02.pas】

program xoi00_02;

Type TWeekDay=(Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday);

var today,tomorrow:TWeekDay;

number,i:integer;

begin

write('Enter today number:');readln(number);

if (number<0) or (number>6) then

writeln('Error number')

else begin

today:=Sunday;

for i:=0 to number-1 do today:=succ(today);

if today=Saturday then

tomorrow:=Saturday

else

tomorrow:=succ(today);

write('Tomorrow is:');

case tomorrow of

Sunday:writeln('Sunday');

Monday:writeln('Monday');

Thursday:writeln('Thusday');

Wednesday:writeln('Wednesday');

Thursday:writeln('Thursday');

Friday:writeln('Friday');

Saturday:writeln('Saturday');

end;{if today=saturday then}

end;{if (number<0) or (number >6)}

end.

子界类型:

子界类型是在其它的离散类型的值域中取出一部分构成独立的类型。

子界类型的一般定义形式如下:

TYPE

<子界类型标识符>=<下界常量>..<上界常量>;

如: TYPE Tmonth=1..12;

TYPE Tscore=0..100;

例按月、日、年顺序读入一日期,输出该日期是这一年中的第几天。

program date;

var year:0..2010;

month,i:1..12;

day:1..31;

dayth:integer;

begin

read(month,day,year);

dyath:=0;

for i:=1 to month-1 do

case i of

1,3,5,7,8,10,12:dayth:=dayth+31;

2:if ((year mod 4=0)and(year mod 100<>0)or(year mod 400 =0)

then dayth:=dayth+29

else dayth=:=dayth+28;

4,6,9,11:dayth:=dayth+30;

end;

dayth:=dayth+day;

writeln(dayth)

end.

数组类型:

定义数组:

Type

数组类型标识符=Array[下标类型] OF 数组元素类型

数组元素类型本身也可以是复杂的自定义类型,如子界类型,数组类型,记录等。例如:定义存放学生姓名的字符数组:

TYPE TName=Array[1..20] of Char;

定义一个存放班级学生(50人)名单的数组:

TYPE TStudents=Array[1..50] of TName

也可以这么定义:

TYPE TStudents=Array[1..50] of Array[1..20] of Char;

例1:输入5个考分数,计算它们的总分。【xoi00_03.pas】

program xoi00_03;

Type TScore=Array[1..5] of integer;

var score:TScore; i:integer;sum:integer;

begin

for i:=1 to 5 do

begin

write('Enter Number #',i);

readln(score[i]);

end;

sum:=0;

for i:=1 to 5 do

begin

sum:=sum+score[i];

end;

writeln('Total Score is:',sum);

end.

例2:从键盘输入10个数,将这10个数逆序输入,并求这10个数的和,输出这个和。program p1;

var

a: array[1..10] of integer;

i, s: integer;

begin

for i := 1 to 10 do

read(a[i]);

for i := 10 downto 1 do

write(a[i], ' ');

writeln;

s := 0;

for i := 1 to 10 do

s := s + a[i];

writeln('s=', s);

end.

例3:用筛法求100以内的素数(质数)。

分析:素数是除了1和它本身以外没有其它约数的数。用筛法求素数的方法是:用质数筛去合数:从第一个素数2开始,把它的倍数去掉;这样2以后的第一个非0数就一定也是素数,把它的倍数也删了……重复这个删数过程,直到在所找到的素数后再也找不到一个非0数。把所有非0数输出。program p2;

var

a: array[1..100] of integer;

i, j, k: integer;

begin

for i := 1 to 100 do

a[i] := i;

a[1] := 0;

i := 2;

while i <= 100 do

begin

k := i;

while k <= 100 do

begin

k := k + i;

a[k] := 0;

end;

{----上面将所有a[i]的倍数清0}

i := i + 1;

while a[i] = 0 do

i := i + 1;

{----查找接下来的第一个非0数}

end;

for i := 1 to 100 do

if a[i] <> 0 then write(a[i], ' ');

end.

字符串类型:

如果数组存放的是字符,则成为字符数组。例如前面提到的学生姓名:Tname可以存放20个字符。为了操作方便Turbo Pascal 提供了字符串类型和操作函数。字符串类型:String。例如前面的学生姓名可以定义为:Type TName=String[20];

字符串定义时,如不指定长度,则按该类型的最大长度(255个字符)分配空间,使用时最大可用长度为255个;如果在中括号中给出一个具体的值(1—255之间),则按这个值的大小分配空

间。使用时,最大的可用长度即为该值。

字符串类型既可按数组方式输入、输出,也可直接输入、输出:readln(s);writeln(s);多个字符串输入时以回车作为数据间的分隔符;每个readln语句只能读入一个字符串。

操作函数:

连接函数:concat(s1,s1,…,sn),相当于:S1+S2+…+Sn

截取子字符串:copy(S,I,L),从字符串S左边第I个字符起连续截取L个字符。

长度函数:length(S),计算字符串S的长度。Length(S)=Ord(S[0])

子串点的函数:pos(P,S),返回P在S中第一次出现的位置。

删除子串过程:delete(S,I,L),在S中从的I个字符起删除L个字符。

插入子串函数:insert(S,D,L),在D中的第I个字符位置插入字符串S。

记录类型:

记录类型由固定数量的具有不同类型的成分组成,在实际的程序设计中,这种类型非常有用,比方说学生的信息包括:学号,姓名,语文,数学,英语成绩,平均分等组成,用一个简单的数据类型无法表达。我们可以这样定义:

Type

TScore=0..100;

TScores=Array[1..5] of TScore;

TStudent=Record

NO:String[5];

Name:String[16];

Score:TScores;

Avg:Real;

End;{End Type TStudent}

TStudents=Array[1..50] of TStudent;

在程序中可以使用Var student:Tstudents;定义一个学生变量,可以使用student[1].Name来访问学生的姓名。

集合类型:

集合是指相同类型的数据汇集在一起构成的数据结构,如学生集合,类似于数学中的集合,但是构成集合的数据类型必须是简单的离散类型,如:Byte,Shortint,Longint,char,Boolean,枚举,子界类型。

定义:

Type

<集合数据类型标识符>= Set of <基类型>;

例如:

Type UperLetters= Set of [‘A’..’Z’];

Type EvenDigits=Set of [0,2,4,6,8];

集合的运算:并:+;差:-;相等:=;不等:<>;包含:>=;包含于:<=;属于:in;

具体含义参考数学中的集合运算。

例4:传说中有一个残暴的国王,喜欢杀戮百姓。有一次,他抓到30个百姓并要一一杀掉。在这30个百姓中间有一个聪明人,他站出来对国王说:“请国王大发慈悲,赦免二人不死。”国王问:“赦免哪二人不死?”那个聪明人回答说:“我们30个人围成一圈,从1开始报数,凡数到5的人就拉出去杀掉。剩下的人继续从1开始报数,循环反复,直到剩下两个人为止,这两个人被赦免。”国王一听很有意思,采纳了聪明人的建议,赦免了两个人,而那个聪明人就是其中之一。请你设计一个程序,由计算机判断聪明人要站在什么位置,才能躲过这一场屠杀。

问题分析:

首先,设百姓的人数为M人,设数到N的人被杀掉。用数组A(M)存放M个人是否还在圈中的信息。其中,A(I)=1 表示第I个人还在圈中。A(I)=0 表示第I个人已被杀掉。开始时,数组A中所有的元素都是1,表示每个人都站在圈中。用K=K+A(I)来实现报数功能,因为只有

还在圈中的人才能使K的值增加。用变量D来记录出圈的人数,当D=M时,表示所有的人都出圈了。最后出圈的两个人就是被赦免的人。

程序清单:【xoi00_05.pas】

program xoi00_05;

const m = 100;

const n = 10;

var a: array[1..m] of integer;

i, d, k, p: integer;

begin

writeln; writeln('====================');

for i := 1 to m do a[i] := 1;

d := 0; k := 0;

while true do begin

for i := 1 to m do begin

k := k + a[i];

if k <> n then continue;

write(i: 4);

p := p + 1;

if p > 9 then begin p := 0; writeln; end;

a[i] := 0;

k := 0;

d := d + 1;

if d = m then exit;

end;

end; {while}

end.

例5:输入一个十进制数,将其转换成二进制数。

输入:[KEYBOARD] 输出:[SCREEN]

255

FF

[问题分析] 模拟手算.

program bin;

const max = 20;

var i, j: integer; str: array[1..max] of byte;

procedure print;

var k, r: integer;

begin

k := max;

repeat

dec(k);

until str[k] = 1;

for r := k downto 1 do write(str[r]);

writeln;

end;

begin

write('Please input an integer between 1..32767:'); readln(i);

j := 0;

repeat

inc(j);

str[j] := i mod 2; i := i div 2;

until i = 1;

str[j + 1] := 1;

print;

end.

练习:

1、数学黑洞6174:已知:一个任意的四位正整数。将数字重新组合成一个最大的数和最小的数相

减,重复这个过程,最多七步,必得6174。即:7641-1467=6174。将永远出不来。求证:所有四位数数字(全相同的除外),均能得到6174。输出掉进黑洞的步数。

2、随机产生20个三位数,将这20个数按从小到大的顺序排列,要求在排列中,用尽可能少的交

换次数。

3、输入10个学生的姓名,编一程序将它们按字母的顺序排列。

4、有一组数,其排列形式如下:11,19,9,12,5,20,1,一八,4,16,6,10,一五,2,17,

3,14,7,一三,8,且尾部8和头部11首尾相连,构成环形的一组数,编程找出相邻的4个数,其相加之和最大,并给出它们的起始位置。

5、有一组数其排列顺序如下:(设有N个)3,6,11,45,23,70,67,34,26,89,90,一五,

56,50,20,10。编一程序交换这组数中任意指定的两段。

6、有M个猴子围成一圈,每个有一个编号,编号从1到M。打算从中选出一个大王。经过协商,

决定选大王的规则如下:从第一个开始,每隔N个,数到的猴子出圈,最后剩下来的就是大王。

要求:从键盘输入M,N,编程计算哪一个编号的猴子成为大王。

7、请你设计一个程序,让计算机找出40个自然数来,使得其中任意两个数之差均不相等。

问题分析:

首先,开辟一个数组S(I),准备存放这40个数,再开辟一个数组CHA(I),用来存放两个数的差。

寻找某一个满足条件的自然数的过程如下:

把1和2放进数组S中;把1放进数组CHA中;当寻找下一个自然数时,要把这个自然数与数组S中的每一个数相减,再判断所得的差是否在数组CHA中;如果所得的差不在数组CHA中,说明又找到一个满足条件的自然数。把这个自然数放进数组S中,同时把这个自然数与数组S中原有的每一个自然数的差记录在数组S中去。如果所得的差与数组CHA中的某一个数重复,说明这个自然数不符合条件,继续寻找下一个自然数。重复步骤(3),直到找到40个自然数为止。

第七节常用函数

Pascal中的数学函数

求绝对值函数abs(x)

定义:function Abs(X): (Same type as parameter);

说明:X可以是整型,也可以是实型;返回值和X的类型一致

例子:

var

r: Real;

i: Integer;

begin

r := Abs(-2.3); { 2.3 }

i := Abs(-一五7); { 一五7 }

end.

取整函数int(x)

定义:function Int(X: Real): Real;

注意:X是实型数,返回值也是实型的;返回的是X的整数部分,也就是说,X被截尾了(而不是四舍五入)

例子:

var R: Real;

初中信息学竞赛练习题

一、单选 1、关于计算机内存下面的说法哪个是正确的: A)随机存储器(RAM)的意思是当程 序运行时,每次具体分配给程序的 内存位置是随机而不确定的。 B)1MB内存通常是指1024*1024字节 大小的内存。 C)计算机内存严格说来包括主存 (memory)、高速缓存(cache)和 寄存器(register)三个部分。 D)一般内存中的数据即使在断电的情 况下也能保留2个小时以上。 2、关于CPU下面哪个说法是正确的: A)CPU全称为中央处理器(或中央处 理单元)。 B)CPU可以直接运行汇编语言。 C)同样主频下,32位的CPU比16位 的CPU运行速度快一倍。 D)CPU最早是由Intel公司发明的。 3. 下列网络上常用的名字缩写对应的中文解释错误的是()。 A. WWW(World Wide Web):万维网。 B. URL(Uniform Resource Locator):统一资源定位器。 C. HTTP(Hypertext Transfer Protocol):超文本传输协议。 D. FTP(File Transfer Protocol):快速传输协议。 E. TCP(Transfer Control Protocol):传输控制协议。 4. 设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 5. 在下列关于计算机语言的说法中,不正确的是()。 A. Pascal和C都是编译执行的高级语言 B. 高级语言程序比汇编语言程序更容易从一种计算机移植到另一种计算机上 C. C++是历史上的第一个支持面向对象的计算机语言 D. 与汇编语言相比,高级语言程序更容易阅读 6.某个车站呈狭长形,宽度只能容下一台车,并且只有一个出入口。已知某时刻该车站状态为空,从这一时刻开始的出入记录为:“进,出,进,进,进,出,出,进,进,进,出,出”。假设车辆入站的顺序为1,2,3,……,则车辆出站的顺序为()。 A. 1, 2, 3, 4, 5 B. 1, 2, 4, 5, 7 C. 1, 4, 3, 7, 6 D. 1, 4, 3, 7, 2 7.在C语言中,判断a不等于0且b不等于0的正确的条件表达式是() A. !a==0 || !b==0 B. !((a==0)&&(b==0)) C. !(a==0&&b==0) D. a && b 8.(2010)16 + (32)8的结果是()。 A. (8234)10 B. (202B)16 C. (20056)8 D. (100000000110)2 9.在C程序中,表达式200|10的值是() A. 20 B. 1 C. 220 D. 202 10.在下列各项中,只有()不是计算机存储容量的常用单位。 A. Byte B. KB C.UB D.TB 11.LAN 的含义是()。 A. 因特网 B. 局域网 C.广域网 D.城域网 12.以下断电之后仍能保存数据的有()。 A. 硬盘 B. 高速缓存 C. 显存 D. RAM

信息学奥赛培训计划(复赛)

信息技术学科信息学奥赛社团培训计划 制定人:玄王伟 2018年10月

信息学奥赛培训计划方案推进信息技术教育是全面实施素质教育的需要,是培养具有创新精神和实践能力的新型人才的需要。信息学奥赛的宗旨为:“丰富学生课余生活,提高学生学习兴趣,激发学生创新精神。”为此,我们应以竞赛作为契机进而培养学生综合分析问题、解决问题的意识和技能。 为响应学校号召,积极参与信息技术奥林匹克竞赛,校本课程特别开设C++语言程序设计部分,利用社团活动时间对部分学生进行辅导。教学材料以信息学奥赛一本通训练指导教程为主,力图让学生们对编写程序有较深入了解的同时,能够独立编写解决实际问题的算法,逐步形成解题的思维模式。因学习内容相对中小学学生具有一定的难度,本课程采用讲练结合的形式,紧紧围绕“程序=算法+数据结构”这一核思想,以数学问题激发学生学习兴趣,进而达到学习目标。为更好地保证信息学奥赛的培训效果,特制订本培训计划。 一、培训目标 1.使学生具备参加全国信息学奥林匹克竞赛分区联赛NOIP(初赛、复赛)的能力。 2.使学生养成较好的抽象逻辑推理能力、严谨的思维方式和严密的组织能力,并使学生的综合素质的提高。 3.使学生初步具备分析问题和设计算法的能力。 二、培训对象 我校小学及初中对信息学感兴趣且初赛成绩较好的学生,人数共

计14人,其中小学组12人,普及组2人。 三、培训要求 严格培训纪律,加强学生管理;信息学社团的组建由学生自愿报名、教师考察确定;培训过程中做与培训无关的事如打游戏、上网聊天等,一经发现作未参加培训处理;规定的作业、练习必须按时保质保量完成,否则按未参加培训处理。 四、培训内容 1.深入学习计算机基础知识,包括计算机软硬件系统、网络操作、信息安全等相关知识内容,结合生活实际让学生真正体会到参加信息学奥赛的乐趣。 2.全面学习C++语言的基础知识、学会程序的常用调试手段和技巧,在用C++解决问题的过程中引入基础算法的运用。 3.深入学习各类基础算法,让学生真正理解算法的精髓,遵循“算法+数据结构=程序”的程序设计思想,在算法设计的教学实例中引入数据结构的学习,从而形成一定的分析和解决问题的能力。 4.以实例为基础,展开强化训练,使学生开始具备运用计算机独立解决实际问题的能力。用计算机解决现实问题的最重要的一个前提就是数据模型的建立和数据结构的设计。数据模型的建立、数学公式的应用,是计算机解决问题的关键。因此,加强与数学学科的横向联系非常必要。 五、培训时间 自2018年10月份第三周开始至2018年11月中旬结束,包括每

最新中小学信息学竞赛活动开展工作总结

中小学信息学竞赛活动开展工作总结 中小学信息学竞赛活动开展工作总结 今年10月下旬,局领导明确中小学生的信息学竞赛由我站负责。我们当时觉得接受这个任务压力重大,这是因为我区的这一块工作与其他县(市、区)相比,差距较大,而且离开明年市赛只有四个多月的时间。当时的情况是邱隘中心小学有一定基础,华泰小学刚刚起步,其余小学都没有开展,就连前几年在这方面开展相对较好的咸祥镇中心小学也正处在停顿状态。我们设想如果经过100分的努力,也只能是刚刚接近三等奖,这在明年竞赛中还是反映不出成绩来。针对上述情况,我们确定了小学突破、初中紧跟的工作措施。具体小结如下: 一、小学生竞赛辅导起动快,成效显著。 1:统一认识、落实措施 我们迅速分别召开了愿意加入本项活动的小学正职校长及负责教学的校级领导会议。会上大家统一了认识,树立了信心,校长们表示一定会按排好工作,落实好切实可行的措施。 2:师生同学、共同进步

我区小学信息学老师多数是中师毕业,在校没有系统学过PASCAL 语言,带学生参加竞赛有较大难度,如果按常规先办教师培训班,学成后再去辅导学生,至少是一年以后的事情了。为了早出成绩,我们采取了师生同学的办法,教师现学现教,一边教一边学。自1月3日将举行***区小学生信息学竞赛,想利用这次比赛,进一步提高我区小学生信息学竞赛水平,赛后还将全区前30名学生集中起来,举办冬令营。 二、初中生竞赛工作方向确定,措施落实。 1:组织比武,了解师能 为了解掌握我区初中信息学教师的知识水平和教学能力,经教育局同意,组织了初中信息学教师信息学竞赛辅导水平比武活动,比武分初赛和复赛(初赛为笔试,笔试成绩不理想),月底将评出一、二、三等奖。 2:确定训点,强力推动 在了解掌握初中信息学教师师能的基础上,并给合小学竞赛活动开展情况,确定初中信息学竞赛培训点,同时出台相关政策,推

高中信息技术奥林匹克竞赛试题

信息学基础知识题库 硬件 1.微型计算机的问世是由于(C)的出现。 A. 中小规模集成电路 B. 晶体管电路 C. (超)大规模集成电路 D. 电子管电路2.中央处理器(CPU)能访问的最大存储器容量取决于(A)。 A. 地址总线 B. 数据总线 C. 控制总线 D. 实际内存容量 3.微型计算机中,(C)的存储速度最快。 A. 高速缓存 B. 外存储器 C. 寄存器 D. 内存储器 4.在计算机硬件系统中,cache是(D)存储器。 A. 只读 B. 可编程只读 C. 可擦除可编程只读 D. 高速缓冲 5.若我们说一个微机的CPU是用的PII300,此处的300确切指的是(A)。 A. CPU的住时钟频率 B. CPU产品的系列号 C. 每秒执行300百万条指令 D. 此种CPU允许的最大内存容量 6.计算机主机是由CPU与(D)构成。 A. 控制器 B. 输入输出设备 C. 运算器 D. 内存储器 7.计算机系统总线上传送的信号有(B)。 A. 地址信号与控制信号 B. 数据信号、控制信号与地址信号 C. 控制信号与数据信号 D. 数据信号与地址信号 8.不同类型的存储器组成了多层次结构的存储器体系,按存储器速度又快到慢的排列是(C)。 A. 快存>辅存>主存 B. 外存>主存>辅存 C. 快存>主存>辅存 D. 主存>辅存>外存 9.微机内存储器的地址是按(C)编址的。 A. 二进制位 B. 字长 C. 字节 D. 微处理器的型号 10.在微机中,通用寄存器的位数是(D)。 A. 8位 B. 16位 C. 32位 D. 计算机字长 11.不同的计算机,其指令系统也不同,这主要取决于(C)。 A. 所用的操作系统 B. 系统的总体结构 C. 所用的CPU D. 所用的程序设计语言 12.下列说法中,错误的是(BDE) A. 程序是指令的序列,它有三种结构:顺序、分支和循环 B. 数据总线决定了中央处理器CPU所能访问的最大内存空间的大小 C. 中央处理器CPU内部有寄存器组,用来存储数据 D. 不同厂家生产的CPU所能处理的指令集是相同的 E. 数据传输过程中可能会出错,奇偶校验法可以检测出数据中哪一位在传输中出了错误 13.美籍匈牙利数学家冯·诺依曼对计算机科学发展所作出的贡献是(C)。 A. 提出理想计算机的数学模型,成为计算机科学的理论基础 B. 世界上第一个编写计算机程序的人 C. 提出存储程序工作原理,并设计出第一台具有存储程序功能的计算机EDV AC D. 采用集成电路作为计算机的主要功能部件 E. 指出计算机性能将以每两年翻一番的速度向前发展 14.CPU访问内存的速度比下列哪个(些)存储器设备要慢。(AD)

信息学奥赛试题

第19届全国青少年信息学(计算机)奥林匹克BASIC 试题说明: 请考生注意,所有试题的答案要求全部做在答题纸上。 一、基础知识单项选择题(共10题,每小题3分,共计30分) 1、存储容量2GB相当于() A、2000KB B、2000MB C、2048MB D、2048KB 2、输入一个数(可能是小数),再按原样输出,则程序中处理此数的变量最好使用() A、字符串类型 B、整数类型 C、实数类型 D、数组类型 3、下列关于计算机病毒的说法错误的是() A、尽量做到使用正版软件,是预防计算机病毒的有效措施。 B、用强效杀毒软件将U盘杀毒后,U盘就再也不会感染病毒了。 C、未知来源的程序很可能携带有计算机病毒。 D、计算机病毒通常需要一定的条件才能被激活。 4、国标码的“中国”二字在计算机内占()个字节。 A、2 B、4 C、8 D、16 5、在计算机中,ASCⅡ码是( )位二进制代码。 A、8 B、7 C、12 D、16 6、将十进制数2013转换成二进制数是( )。 A、11111011100 B、11111001101 C、11111011101 D、11111101101 7、现有30枚硬币(其中有一枚假币,重量较轻)和一架天平,请问最少需要称几次,才能找出假币( )。 A、3 B、4 C、5 D、6 8、下列计算机设备中,不是输出设备的是()。 A、显示器 B、音箱 C、打印机 D、扫描仪 9、在windows窗口操作时,能使窗口大小恢复原状的操作是() A、单击“最小化”按钮 B、单击“关闭”按钮 C、双击窗口标题栏 D、单击“最大化”按钮 10、世界上第一台电子计算机于1946年诞生于美国,它是出于()的需要。 A、军事 B、工业 C、农业 D、教学二、问题求解(共2题,每小题5分,共计10分) 1、请观察如下形式的等边三角形: 边长为 2 边长为4 当边长为2时,有4个小三角形。 问:当边长为6时,有________个小三角形。 当边长为n时,有________个小三角形。 2、A、B、C三人中一位是工人,一位是教师,一位是律师。已知:C比律师年龄大,A和教师不同岁,B比教师年龄小。问:A、B、C分别是什么身分? 答:是工人,是教师,是律师。 三、阅读程序写结果(共4题,每小题8分,共计32分) 1、REM Test31 FOR I =1 TO 30 S=S+I\5 NEXT I PRINT S END 本题的运行结果是:( 1) 2、REM Test32 FOR I =1 TO 4 PRINT TAB (13-3*I); N=0 FOR J =1 TO 2*I-1 N=N+1 PRINT N; NEXT J PRINT NEXT I END 本题的运行结果是:( 2)

中小学信息学程序设计竞赛细则

中小学信息学程序设计竞赛细则 一、竞赛组织 1.由武汉市中小学信息技术创新与实践活动组委会负责全市的竞赛组织工作,竞赛由全市统一命题,各区按全市统一要求负责考务工作。 2.活动分为二个阶段,第一阶段为初赛阶段,竞赛以笔试闭卷形式,按小学组、初中组和高中组三个学段同时进行,由各区具体负责实施。第二阶段为复赛阶段,竞赛以上机形式,按小学组、初中组和高中组三个学段进行。复赛由市统一命题,统一安排考场,地点待定。 二、竞赛的报名和办法 1.报名费每生20元。 2.竞赛报名以区为单位,统一组织学生报名。 3.3月20日(星期五)前各区、系统集中到市教科院信息技术教育中心(6012室)报名,过时不再补报。 4.各区、系统向市报名时,只需按组别和语种、各校报名人数、指导教师姓名等要求填好的初赛报名表,以及缴纳相应的报名费,无须交具体参赛名单。初赛报名表如下: 三、竞赛日期和时间 1.初赛时间:待定 2.复赛时间:待定 四、竞赛形式及试题类型 小学组(LOGO或BASIC)中学组(C或PASCAL) 复赛:全卷满分100分,考试时间小学80分钟、中学120分钟。中学采用的程序设计语言:C和PASCAL。小学采用的程序设计语言:LOGO或BASIC。 竞赛分组:小学组,BASIC、LOGO任选。中学分初中组和高中组,C、PASCAL任选。

附件:武汉市青少年信息学(计算机)奥林匹克竞赛内容及要求: A、小学组 一、初赛内容与要求 1.计算机的基本知识 ★诞生与发展★特点★计算机网络、病毒等基本常识 ★在现代社会中的应用★计算机的基本组成及其相互联系 ★计算机软件知识★计算机中的数的表示 2.计算机的基本操作 ★MS—DOS与Windos98操作系统使用基础知识(启动、命令格式、常用格式) ★常用输入/输出设备的种类、功能、特性、使用和维护 ★汉字输入/输出方法和设备★常用计算机屏幕信息 3.程序设计基本知识 (1)程序的表示 ★自然语言的描述★QBASIC和LOGO4. 0语言描述 (2)数据结构的类型 ★简单数据的类型;整型、实型、字符型 ★构造类型;数组、字符串 (3)程序设计 ★结构化程序设计的基本概念★阅读程序的能力 ★具有完成下列过程的能力 现实世界(问题):指知识范畴的问题—信息世界(表述解法)—计算机世界(将解法用计算机能够实现的数据结构和算法述出来) (4)基本算法处理 ★字串处理★排序★查找 二、复赛内容与要求 在初赛的内容上增加以下一些内容: (1)计算机软件: ★操作系统的基本知识 (2)程序设计: ★设计测试数据的能力★编写文档资料的能力 (3)算法处理 ★简单搜索★统计★分类★递归算法 三、有关分组内容及难度的说明 (1)LOGO语言 A.熟练掌握尾归和多层递归,对中间递归有一定的了解,熟练掌握字表处理基本命令。 B.掌握取整、随机、随机化、求商取整、求商取余函数的使用方法。 (2)BASIC语言 A.BASIC语言的一维数组:正确定义一个数组,掌握数组中各元素间的相互关系,熟练掌握对数组中各元素的赋值和引用,其中包括对数组所进行的几种基本处理,如选数列中最大、最小数,对有序数列的插入,对数列进行排序、查找等。 B.BASIC语言的函数:熟练地掌握数值函数的运用(如取整函数、随机函数、绝对值函数等)。 B、中学组

NOIP2013第十九届信息学奥林匹克竞赛全国联赛初赛普及组C试题

第十九届全国青少年信息学奥林匹克联赛初赛 普及组C语言试题 竞赛时间:2013年10月13日14:30~16:30 选手注意: ●试题纸共有9页,答题纸共有2页,满分100分。请在答题纸上作答,写在试题纸上的 一律无效。 ●不得使用任何电子设备(如计算器、手机、电子词典等)或查阅任何书籍资料。 一、单项选择题(共20题,每题1.5分,共计30分;每题有且仅有一个正确选项) 1.一个32位整型变量占用()个字节。 A. 4 B. 8 C. 32 D. 128 2.二进制数11.01在十进制下是()。 A. 3.25 B. 4.125 C. 6.25 D. 11.125 3.下面的故事与()算法有着异曲同工之妙。 从前有座山,山里有座庙,庙里有个老和尚在给小和尚讲故事:?从前有座山,山里有座庙,庙里有个老和尚在给小和尚讲故事:‘从前有座山,山里有座庙,庙里有个老和尚给小和尚讲故事....’? A. 枚举 B. 递归 C. 贪心 D. 分治 4.逻辑表达式()的值与变量A的真假无关。 A. (A ? B) ? ?A B. (A ? B) ? ?B C. (A ? B) ? (?A ? B) D. (A ? B) ? ?A ? B 5.将(2, 6, 10, 17)分别存储到某个地址区间为0~10的哈希表中,如果哈希函数h(x) = (),将不会产生冲突,其中a mod b表示a除以b的余数。 A. x mod 11 B. x2 mod 11 C. 2x mod 11 D. ?√ ?mod 11,其中?√ ?表示√下取整 6.在十六进制表示法中,字母A相当于十进制中的()。 A. 9 B. 10 C. 15 D. 16

NOIP2016信息学奥赛普及组初赛C++试题及参考答案 较完美版

精心整理 NOIP2016第二十二届全国青少年信息学奥林匹克联赛初赛 普及组C++语言试题 竞赛时间:2016年10月22日14:30~16:30 一、单项选择题(共20题,每题1.5分,共计30分;每题有且仅有一个正确选项) 1.以下不是微软公司出品的软件是()。 A .Powerpoint B .WordC.ExcelD.AcrobatReader 2.如果256种颜色用二进制编码来表示,至少需要()位。 A .6 B .7 C .8 D .9 3.以下不属于无线通信技术的是()。 A .蓝牙45A .光盘6A 、字母键S 出的第A .A B .78A .0.8B 9A C 10A C 11标为()。 A.6B .10C .12D .15 12.若有如下程序段,其中s 、a 、b 、c 均己定义为整型变量,且a 、c 均己赋值(c 大于0)。 s=a; for(b=1;b<=c;b++) s=s+1; 则与上述程序段修改s 值的功能等价的赋值语句是()。 A.s=a+b; B.s=a+c; C.s=s+c; D.s=b+c; 13.有以下程序: #include usingnamespacestd; intmain(){

intk=4,n=0; while(n

全国青少年信息学竞赛培训教材 2011-4-19

全国青少年信息竞赛 培训教材 第一章 计算机和计算机语言 101 【问题描述】 求S = 1-2+3-4+……-100 102 【问题描述】 求圆面积程序,写出程序的运行结果。 #include #include char *s = “Let us begin”; int r = 3; double pi = 3.14; main( )

{ printf(“%s\n”, s); printf(“radium is: %d\n”, r); printf(“Arrea of circle is: %lf\n”, pi * r * r); printf(“Arrea of circle is: %10lf\n”, pi * r * r); printf(“Arrea of circle is: %10.3lf\n”, pi * r * r); // system(“pause”); return 0; } 103 【问题描述】 判定2000-2005年中的每一年是否闰年,输出其中所有闰年的年份。请写出程序的运行结果。 【源程序】 #include #include int year; char leap; main( ) { printf("The following are leap years:\n"); for (year = 2000; year <= 2500; ++year) { leap = 0; if (year % 4 == 0) if (year % 100 != 0) leap = 1; else if (year % 400 == 0) leap = 1; if ( leap ) printf("%d ", year); } // system("pause"); return 0; }

2019-2020年中学生信息学奥林匹克初赛模拟试题附参考答案

2019-2020 年中学生信息学奥林匹克初赛模拟试题附参考答案 一、选择题(共20题,每题 1.5 分,共计30分。前10 题为单选题;后10题为不定项选择题) 1. 微型计算机的性能主要取决于( )。 A)内存B)主板C)中央处理器D)硬盘 E )显示器 2. 128KB 的存储器用十六进制表示,它的最大的地址码是( ) A)10000 B)EFFF C)1FFFF D)FFFFF E)FFFF 3. 能将高级语言程序转换为目标程序的是( ). A)调试程序B) 解释程序C) 编辑程序D) 编译程序E) 连接程序 4.A=11001010B,B=00001111B,C=01011100B,则A∨B∧C=( )B A)01011110 B)00001111 C)01011100 D)11001110 E)11001010 5. 计算机病毒传染的必要条件是( ) 。 A) 在内存中运行病毒程序B) 对磁盘进行读写操作 C) 在内存中运行含有病毒的可执行程序D) 复制文件E) 删除文件 6. TCP /IP 协议共有( ) 层协议 A)3 B)4 C)5 D)6 E)7 7.192.168.0.1 是属于( ). A)A 类地址B)B 类地址C)C 类地址D)D 类地址E)E 类地址 8. 对给定的整数序列(54,73,21,35,67,78,63,24,89) 进行从小到大的排序时, 采用快速排序的第一趟扫描的结果是( ). A)(24,21,35,54,67, 78,63,73,89) B)(24,35,21,54,67, 78,63,73,89) C) (24,21,35,54,67, 63,73,78,89) D)(21,24,35,54,63, 67,73,78,89) E)(24,21,35,54,67, 63,73,78,89) 9. 一棵n 个结点的完全二叉树, 则二叉树的高度h 为( ). n log 2 n A) B) log 2 n C) 2D) log 2 n 1 E)2n-1 22 10. 对右图进行广度优先拓扑排序得到的顶点序列正确的是( ). A)1,2,3,4,5,6 B)1,3,2,4,5,6 C)1,3,2,4,6,5 D) 1,2,3,4,6,5 E)1,3,2,4,5,6 11. 下列属于冯.诺依曼计算机模型的核心思想是( ). A) 采用二进制表示数据和指令B) 采用“存储程序”工作方式

关于成立信息学奥赛兴趣小组的方案

关于成立信息学奥赛兴趣小组的方案 一、信息学奥赛简介 1、信息学奥赛概述 奥林匹克竞赛活动的宗旨,主要是激发青少年对科学的兴趣。通过竞赛达到使大多数青少年在智力上有所发展,在能力上有所提高的目标。 并在普及活动的基础上,为少数优秀的青少年脱颖而出、成为优秀人才 创造机遇和条件。全国五项学科竞赛包括数学、物理、化学、信息学(计 算机)、生物学五个学科。 全国青少年信息学奥林匹克竞赛(简称NOI)是经教育部批准、中国科协主管、中国计算机学会主办,这一活动在普及计算机知识的基础上, 激发广大青少年对信息技术及其应用的兴趣,对青少年学生开阔眼界、 扩大知识面,培养逻辑思维、创造思维及应用计算机解决实际问题的能 力都有很大促进作用。 全国青少年信息学奥林匹克联赛(National Olympiad Informatics in Pronvinces,简称NOIP)在同一时间、不同地点以各省市为单位由特派员 组织。全国统一大纲、统一试卷。初高中或其他中等专业学校的学生可 报名参加联赛。联赛分初赛和复赛两个阶段。初赛考察通用和实用的计 算机科学知识,以笔试为主。复赛为程序设计,须在计算机上调试完成。 参加初赛者须达到一定分数线后才有资格参加复赛。联赛分普及组和提 高组两个组别,难度不同,分别面向初中和高中阶段的学生。 2、针对我校实际情况成立信息学奥赛的意义: 我校有初中部和高中部,初中部面临有三中和四中的有力竞争,我校在小升初的招生中不占优势,高中部招生又面临强大的竞争对手和县 一中,高中优质生源流失。这几年编程教育逐渐被国家重视,信息学奥 赛又成为热门项目,在大城市开展的热热烈烈。而纵观全县,几乎为空 白。本人从事信息技术一线教学超过十年,编程一线教学也有三年,积 累了很多经验,愿意为我们和县的学子普及计算机并挑选人才作出努力。 也同时使得和县二中在招生中更具竞争力。 二、兴趣小组的学生选拔 面向七年级新生,有较强的逻辑思维能力,在数学、英语等学科成绩优异的,具有良好的数学基础和英文水平,能掌握程序设计语言和算法中的一些常用的英文关键词,对编程感兴趣的学生均可以报名。由各班班主任积极在班级中宣传,学生自愿报名。 三、寻求学校支持 1、辅导课按学校相关标准给予课时补贴

noip205信息学奥赛普及组初赛c++试题

2015 年第二十一届全国青少年信息学奥林匹克联赛初赛普及组 C++语言试题竞赛日寸间: 2015 年 10 月 l 1 日 14:30~16:30 选手注意: ?试题纸共有 7 页,答题纸共有 2 页,满分 100 分。请在答题纸上作答,写在试题纸上的一律无效。?不得使用任何电子设备(如计算器、手机、电子词典等)或查阅任何书籍资料。 一、单项选择题(共 20 题,每题 1.5 分,共计 30 分;每题有且仅有一个正确选项) 1.1MB 等于( ) 。 A .1000 字节 B .1024 字节 C . 1000X 1000 字节 D .1024X 1024 字节 2.在 PC机中, PENTIUM(奔腾)、酷睿、赛扬等是指 ( ) 。 A .生产厂家名称 B .硬盘的型号 C .CPU的型号 D .显示器的型号 3.操作系统的作用是( ) 。 A .把源程序译成目标程序 B .便于进行数据管理 C .控制和管理系统资源 D .实现硬件之间的连接 4.在计算机内部用来传送、存贮、加工处理的数据或指令都是以( ) 形式进行的。 A .二进制码 B .八进制码 C .十进制码 D .智能拼音码 5.下列说法正确的是 ( ) 。 A . CPU的主要任务是执行数据运算和程序控制 B .存储器具有记忆能力,其中信息任何时候都不会丢失 C .两个显示器屏幕尺寸相同,则它们的分辨率必定相同 D .个人用户只能使用 Wifi 的方式连接到 Internet 6.二进制数 00100100 和 00010100 的和是 ( ) 。 A.00101000 B. 01001001 C. 01000100 D.00111000 7.与二进制小数 0.1 相等的十六进制数是( ) 。 A . 0.8 B . 0.4 C . 0.2 D . 0.1 8.所谓的“中断”是指 ( ) 。 A .操作系统随意停止一个程序的运行 B .当出现需要时, CPU暂时停止当前程序的执行转而执行处理新情况的过程 C .因停机而停止一个程序的运行 D .电脑死机 9.计算机病毒是 ( ) 。 A .通过计算机传播的危害人体健康的一种病毒 B .人为制造的能够侵入计算机系统并给计算机带来故障的程序或指令集合 C .一种由于计算机元器件老化而产生的对生态环境有害的物质 D .利用计算机的海量高速运算能力而研制出来的用于疾病预防的新型病毒 10. FTP可以用于 ( ) 。 A .远程传输文件 B .发送电子邮件 C .浏览网页 D .网上聊天 11.下面哪种软件不属于即时通信软件 ( ) 。 A .QQ B . MSN C .微信 D . P2P 12.6 个顶点的连通图的最小生成树,其边数为 ( ) 。 A . 6 B . 5 C . 7 D . 4 13. 链表不具备的特点是 ( ) 。 A .可随机访问任何一个元素 B .插入、删除操作不需要移动元素 C .无需事先估计存储空间大小 D .所需存储空间与存储元素个数成正比 14. 线性表若采用链表存储结构,要求内存中可用存储单元地址( ) 。 A .必须连续 B .部分地址必须连续 c .一定不连续 D .连续不连续均可 15.今有一空栈 S,对下列待进栈的数据元素序列 a,b ,c, d,e,f 依次进行进栈,进栈,出栈,进栈,进栈,出栈的操作,则此操作完成后,栈S 的栈顶元素为 ( ) 。 A. f B .c C .a D . b

(noip2019)二十三届全国青少年信息学奥赛初赛试题及答案c++.doc

言简意赅,远见卓识,望君采纳,谢谢!删除水印可,编辑页眉,选中水印,点击删除。 第二十三届全国青少年信息学奥林匹克联赛初赛 普及组 C++ 语言试题 竞赛时间: 2019 年 10 月 14 日 14:30~16:30 选手注意: ●试题纸共有 7 页,答题纸共有 2 页,满分 100 分。请在答题纸上作答,写在试题纸上的一律无效。 ●不得使用任何电子设备(如计算器、手机、电子词典等)或查阅任何书籍资料。 一、单项选择题(共20 题,每题 1.5 分,共计30 分;每题有且仅有一个正确选项) 1.在 8 位二进制补码中, 10101011 表示的数是十进制下的()。 A. 43 B. -85 C. -43 D. -84 2. 计算机存储数据的基本单位是( A. bit B. Byte C. GB )。 D. KB 3.下列协议中与电子邮件无关的是()。 A. POP3 B. SMTP C. WTO D. IMAP 4. 分辨率为 A. 937.5KB 800x600 、16 位色的位图,存储图像信息所需的空间为( B. 4218.75KB C. 4320KB D. 2880KB )。 5.计算机应用的最早领域是()。 A. 数值计算 B. 人工智能 C. 机器人 D. 过程控制 6.下列不属于面向对象程序设计语言的是 ( A. C B. C++ C. Java D. C# )。 7.NOI 的中文意思是()。 A. 中国信息学联赛 B. 全国青少年信息学奥林匹克竞赛 C. 中国青少年信息学奥林匹克竞赛 D. 中国计算机协会 8.2017 年 10 月 1 日是星期日, 1999 年 10 月 1 日是()。 A. 星期三 B. 星期日 C. 星期五 D. 星期二

(完整)信息学奥赛(NOIP)必看经典书目汇总,推荐文档

信息学奥赛(NOIP)必看经典书目汇总! 小编整理汇总了一下大神们极力推荐的复习资料!(欢迎大家查漏补缺) 基础篇 1、《全国青少年信息学奥林匹克分区联赛初赛培训教材》(推荐指数:4颗星) 曹文,吴涛编著,知识点大杂烩,部分内容由学生撰写,但是对初赛知识点的覆盖还是做得相当不错的。语言是pascal的。 2、谭浩强老先生写的《C语言程序设计(第三版)》(推荐指数:5颗星) 针对零基础学C语言的筒子,这本书是必推的。 3、《骗分导论》(推荐指数:5颗星) 参加NOIP必看之经典 4、《全国信息学奥林匹克联赛培训教程(一)》(推荐指数:5颗星) 传说中的黄书。吴文虎,王建德著,系统地介绍了计算机的基础知识和利用Pascal语言进行程序设计的方法 5、《全国青少年信息学奥林匹克联赛模拟训练试卷精选》 王建德著,传说中的红书。 6、《算法竞赛入门经典》(推荐指数:5颗星) 刘汝佳著,算法必看经典。 7、《算法竞赛入门经典:训练指南》(推荐指数:5颗星) 刘汝佳著,《算法竞赛入门经典》的重要补充 提高篇 1、《算法导论》(推荐指数:5颗星) 这是OI学习的必备教材。

2、《算法艺术与信息学竞赛》(推荐指数:5颗星) 刘汝佳著,传说中的黑书。 3、《学习指导》(推荐指数:5颗星) 刘汝佳著,《算法艺术与信息学竞赛》的辅导书。(PS:仅可在网上搜到,格式为PDF)。 4、《奥赛经典》(推荐指数:5颗星) 有难度,但是很厚重。 5、《2016版高中信息学竞赛历年真题解析红宝书》(推荐指数:5颗星) 历年真题,这是绝对不能遗失的存在。必须要做! 三、各种在线题库 1、题库方面首推USACO(美国的赛题),usaco写完了一等基本上就没有问题,如果悟性好的话甚至能在NOI取得不错的成绩. 2、除此之外Vijos也是一个不错的题库,有很多中文题. 3、国内广受NOIP级别选手喜欢的国内OJ(Tyvj、CodeVs、洛谷、RQNOJ) 4、BJOZ拥有上千道省选级别及以上的题目资源,但有一部分题目需要购买权限才能访问。 5、UOZ 举办NOIP难度的UER和省选难度的UR。赛题质量极高,命题人大多为现役集训队选手。

青少年中学生信息学奥赛试题精选33题(附带题解)

青少年中学生信息学奥赛试题精选33题(附带题解) 第1~10题为基础题,第11~20题为提高题,第21~33为综合题 基础题: 【1 Prime Frequency】 【问题描述】 给出一个仅包含字母和数字(0-9, A-Z 以及a-z)的字符串,请您计算频率(字符出现 的次数),并仅报告哪些字符的频率是素数。 输入: 输入的第一行给出一个整数T( 0

双素数(Twin Primes)是形式为(p, p+2),术语“双素数”由Paul St?ckel (1892-1919)给出,前几个双素数是(3, 5), (5, 7), (11, 13), (17, 19), (29, 31), (41, 43)。在本题中请你给出第S对双素数,其中S是输入中给出的整数。 输入: 输入小于10001行,每行给出一个整数S (1≤ S≤ 100000),表示双素数对的序列编号。输入以EOF结束。 输出: 对于输入的每一行,输出一行,给出第S对双素数。输出对的形式为(p1,空格p2),其中“空格”是空格字符(ASCII 32)。本题设定第100000对的素数小于20000000。 样例输入样例输出 1 2 3 4 (3, 5) (5, 7) (11, 13) (17, 19) 注: 试题来源:Regionals Warmup Contest 2002, Venue: Southeast University, Dhaka, Bangl adesh 在线测试:UVA 10394 提示 设双素数对序列为ans[]。其中ans[i]存储第i对双素数的较小素数(1≤i≤num)。ans[]的计算方法如下: 使用筛选法计算出[2,20000000]的素数筛u[]; 按递增顺序枚举该区间的每个整数i:若i和i+2为双素数对(u[i]&&u[i+2]),则双素数对序列增加一个元素(ans[++num]=i)。 在离线计算出ans[]的基础上,每输入一个编号s,则代表的双素数对为(ans[s],ans[s]+ 2)。 【3 Less Prime】 【问题描述】 设n为一个整数,100≤n≤10000,请找到素数x,x≤ n,使得n-p*x最大,其中p是整数,使得p*x≤n<(p+1)*x。 输入: 输入的第一行给出一个整数M,表示测试用例的个数。每个测试用例一行,给出一个 整数N,100≤N≤10000。 输出: 2

全国信息学奥林匹克竞赛中级指导教师培训班

全国信息学奥林匹克竞赛中级指导教师培训班 教学大纲 中国计算机学会将定期举办全国信息学奥林匹克中级指导教师培训班,旨在提高各地中学从事信息学奥林匹克培训指导教师的整体水平,从而更好地在中学里开展计算机应用和程序设计的普及教育,为培养高水平的计算机专业人才奠定良好的基础。 培训班将依据《全国青少年信息学奥林匹克联赛(NOIP)大纲》确定教学内容。鉴于培训时间较短(一般在一周左右),教学以传授相关知识为主,学员业务能力的提高主要依靠个人自身的努力。通过培训,应使学员了解参与信息学竞赛必备的知识要点;掌握基本的程序设计、算法和数据结构的有关内容;经过继续努力,可以独立承担NOIP 提高组的培训工作。 培训班还将为从事信息学奥林匹克培训的一线教师提供一个直接交流的平台,交流和探讨各校的培训内容、方法、培训模式和成功的经验,以便推动全国各省市信息学奥林匹克竞赛水平的均衡发展。 二、教学内容 (1)程序设计语言概要 由于学员水平不一,使用的程序设计语言不同,有必要用一定的时间介绍培训中将要使用的程序设计语言的核心内容(条件语句、循环语句、指针、结构、函数(或过程)的定义和引用等)。建议任课教师使用C/C++语言,也可以使用Pascal语言。程序运行环境由任课教师参照NOIP竞赛环境选定。 建议适当介绍如何检验程序的正确性和如何设计测试数据。 (2)算法设计与数据结构基础 (2.1 )递归回溯与基本搜索方法(递归的基本思想与实现过程,深度优先搜索,n 后问题、0-1背包问题、图的m着色、连续邮资问题、最大团问题等;近几年NOIP相关试题)。 (2.2 )贪心算法(单源最短路径、最小生成树、哈夫曼编码等)。 (2.3 )线性结构、图与树的相关问题(链表、堆栈、队列、串、哈希表、树的存贮结构、几类典型的二叉树、树的遍历、图的存贮结构、图的遍历、图的连通性、拓扑排序与关键路径等;近几年NOIP相关试题) (2.4 )分治算法(二分搜索、棋盘覆盖问题、快速排序、跳马问题) (2.5 )动态规划(基本思想、0-1背包问题、矩阵连乘问题、最长公共子列、最 优二叉搜索树等;近几年NOIP相关试题) (3)历届NOIP综合性试题分析(适当选择各届联赛(提高组)的最后一题进行分析研究)

信息学竞赛班数据结构专项培训教程—— 03栈和队列

§3栈和队列 §3.1 栈 栈(stack)是一种仅限于在称为栈顶(top)的一端进行插入和删除操作的线性表,另一端则被为栈底(bottom)。不含元素的空表称为空栈。 栈的特点:后进先出(Last In First Out),简称:LIFO。 栈的表示和实现 和线性表类似,栈也有两种存储结构。 (1).顺序栈 顺序栈即采用的顺序存储结构来表示栈,通常采用数组来实现。 采用顺序栈受数组空间的约束,有“溢出”的可能,编程前应作空间估算,若有溢出可能,应作溢出判断及相应的处理。 在一个程序中,常常会出现同时使用多个栈的情形。为了不因栈上溢而产生错误中断,必须给每个栈预分一个较大的空间,但这并不容易做到,因为栈实际所用的最大空间很难估计;而且各个栈的实际使用量在使用期间是变化的,往往会有这样的情况,即其中一个栈发生上溢,而另一个栈还是空的。设想,若令多个栈共享空间,则将提高空间的使用效率,并减少发生栈上溢的可能。 所以,可以采用两个栈共享空间的方法:假设在程序中需设两个栈,并共享一维数组空间。则利用“栈底位置不变”的特性,可将两个栈的栈底分别设在数组空间的两端,然后各自向中间伸展(如图),仅当两个栈的栈顶相遇时才可能发生上溢。 (2).链栈 采用链式存储结构的栈简称链栈。 对于链栈,不含产生单个栈溢出的情况,但要记得回收结点空间(dispose(p)),否则会出现整个空间被占满,new(p)过程无法实现(即无法申请新的结点空间)的情况。

【练习】 回文串识别 输入一字符串,判断它是否为一回文串。所谓回文串是指去掉其中的空格与标点符号等非字母符号后,从前后两个方向读到的串相同,例如: ten animals I slam in a net. (我将十只动物装在网里) 输入:一字符串 输出:Yes 或No §3.2 队列 队列(queue )是所有的插入都在一端进行,而所有的删除都在另一端进行的线性表。允许插入的一端称为队尾(rear ),允许删除的一端称为队头(front )。 队列的特点:先进先出(|First In First Out ),简称:FIFO 。 队列的表示和实现 和栈一样,队列也有顺序存储和链式存储两种表示和实现方法。 在顺序存储结构中,同样有溢出可能,即元素因队满而无法入队。对于队列来说,可以采用循环队列的技巧,仅当队头与队尾相遇时为队满。 【例3.2.1】逐行打印二项展开式 (a + b )i 的系数: 杨辉三角形 (Pascal’s triangle) 要求:采用队列实现! 输入: n ——层数(n<50)25 a 1 a 2 a 3 …… a n 出队列 出队列 队头 队尾 队头 队尾 1 1 i = 1 1 2 1 2 1 5 5 1 3 1 4 6 4 1 4 1 5 10 10 5 1 5 1 6 15 20 15 6 1 6

相关文档
相关文档 最新文档