nbhkdz.com冰点文库

全国青少年信息学(计算机)奥林匹克竞赛


1.1 什么是算法?
算法就是一组有穷的规则,它规定了解决某一特定类 型问题的一系列运动,通俗的说就是解决问题的方法 与步骤。 算法也可以理解为: 程序(数据处理)+数据结构(数据组织) 算法的性质: 1.有限性,算法中的运算项是有限的,且每个运算都可在 有限的时间内完成的; 2.确定性,即算法中的每一项运算都有明确的定义,无二 义性; 3.输入输出,可以没有输入,

但是一定要有输出运算项; 4.可行性,即对于任意给定的合法输入均可得到相应的正 确输出结果。

1.2 算法的描述
1. 自然语言 2. 流程图(N-S流程图)

A
成立

p
不成立 B A

当P

A A
直到P

B

3. 程序语言
cobol,pascal,basic,c,c++,java

【例1-1】交换A和B的值 自然语言: (1)赋A和B的初值; (2)把A的值给X; (3)把B的值给A; (4)把X的值给B; (5)输出A、B的值;vcc
流程图:

程序设计语言: Program p1_1; Var a,b,x:integer; Begin A:=3;b:=4; X:=a;a:=b;b:=x; Writeln(‘a=‘,a,’b=’,b); End.

A

3,B 4 X A A B B X

【练一练】用流程图表示将A 和B两个数中较大的数给MAX;

3.1 程序设计的入门语言——Pascal
3.2 Pacal基本符号 3.3 Pascal保留字 3.4 Pascal标识符 3.5 Pascal的数据类型 3.6 常量和变量 3.7 Pascal标准函数 3.8 Pascal的运算符及表达式

3.9 ASCII码
3.10 Pascal程序的结构

3.1程序设计的入门语言——Pascal
Pascal是世界上第一个结构化程序设计高级语言。 顺序结构 结构化 选择结构 循环结构 一个入口 一个出口

层次分明

例:结构化程序的结构由三种基本结构组成,下面(B)不属于这三 种基本结构? (A)顺序结构 (B)输入输出结构 (C)分支结构 (D)循环结构

Pascal程序的一般结构 Program 程序名(参数表); {说明部分} Begin {语句部分} End.
(1)程序首部 由保留字Program开头,后面跟一个程序名;其格式为: Program 程序名;

程序名由用户自己取,它的第一个字符必须是英文字母或下划线,其后的 字符只能是字母或数字和下划线组成,程序名中不能出现运算符、标点符和 空格。

Pascal程序的说明部分
(2)说明部分 程序中所用的常量、变量,或类型、及过程与自定义函数 ,需在使用之前预先说明,定义数据的属性(类型)。Var S,R,C: Real; 是变量说明。只有被说明为某一类型的变 量,在程序中才能将与该变量同类型的数值赋给该变量。变 量说明的格式为:
Var 变量表:类型;

Pascal程序的语句部分
(3)语句部分 指由保留字 Begin (开始)至 End. (结尾)之间的语句系列, 是解决问题的具体处理步骤, 也是程序的执行部分。 Pascal程序不管是哪部分, 每句末尾都必须有分号(;), 但允许最接近 End 的那个语句 末尾的分号省略;程序结束的 End末尾必须有圆点(. ),是整 个程序的结束标志。 程序中花括号“{ }”之间的部 分为注释部分。
Program 程序名; 标号说明; (Label) 常量说明; (Const) 类型说明; (Type) 变量说明; (Var) 过程或函数说明; 程序首部 说明部分

Begin 序) 语句系列; End.

程序体 (主程 语句部分

【练一练】 B 1.Pascal程序的执行部分是_____。 A.程序体 B.语句 C.程序的说明部分和语句部分 D.整个程序
C 2.标准pascal程序说明部分的正确顺序是_____。 A.lable—const—var—type B. var—const—lable—type C. lable—const—type—var D. const—var—type—lable

3.2 Pascal基本符号
1.英文字母

A—Z

a—z

除字符串中的字母外,其他地方的字母不区分大小写。 Var a:integer; 2.数字 0 1 2 3 4 5 6 7 8 9 3.特殊符号 + () * / [] { } := = < . , > ; : <> ‘ <= ^ >=
..

var A:integer;

除规定的基本符号外,不允许使用其他的符号。

3.3 Pascal保留字
保留字:已被系统使用、有专门的用途。
1.程序、函数、过程的起始符号 PROGRAM, FUNCTION, PROCEDURE 2.说明部分的专用定义符号

ARRAY, CONST, FILE, LABEL, PACKED, VAR, RECORD,
SET, TYPE 3.语句专用符号 CASE, DO,DOWNTO,ELSE, FOR,GOTO,IF, OF, REPEAT, THEN,TO,UNTIL,WHILE,WITH ,FORWARD 4.运算符号 AND, DIV, IN, MOD, NOT,OR

5.分隔符号
BEGIN,END 6.空指针常量 NIL

3.4 Pascal标识符
标识符:以字母或下划线开头的字母、数学、下划线序列。

1.常用的标准标识符: 标准常量 False Maxint True 标准类型 Boolean Char Real Integer Text 标准函数 Abs Arctan Chr Cos Eof Eoln Exp Ln Odd Ord Pred Round Sin Sqr Sqrt Succ Trunc 标准过程 Get New Pack Page Put Read Readln Reset Rewrite Unpack Write Writeln 标准文件 Input Output
2.用户自定义标识符:由你自己根据需要来定义。 允许大小写混合,但不能与标准标识符或保留字同名。

【练一练】 1.下列中合法的PASCAL标识符是( A )。 (A) A1B2C3 (B) FOR (C) 2AB (D) A[1]

2.下列是非法的标识符的是( C )。 A.A23456 B.A_17 C.3X D.P5Q
3.下例不是保留字的是( A)。 A.NEW B.PROGRAM C.DIV D.VAR

3.5 Pascal的数据类型
1.标准数据类型
数据类型
整数类型

分类
正整数、负 整数、零 正实数、负 实数、实数 零

类型符号

运算符

运算优先级

运算结果类型
整数

shortint、 integer、 +、-、*、div、 *、div、mod mod longint、 byte、 ?+、Word Real +、-、*、/ *、/? +、-

实数类型

可以与整数混 合运算,结果 为实数

字符类型

字符:char 字符串:string True、false Not、and、or Not?and?or 布尔类型

布尔类型 真、假 (有序数据)

2.自定义类型
枚举型、子界型

下面(A)是Pascal数。 (A)73e4 (B)-e4 (C)36.74-e6 (D)1,742,258
下面(B)是实数。 (A)10 (B)0.0 (C)’0’ (D)0 下面有效的Pascal字符型数据是(D)。 (A)’This is (B)6 (C)Y (D)’’’’

3.6 常量和变量
1.常量:在程序执行过程中其值不能改变的数据。
常量定义:常量定义出现在说明部分。它的语法格式是: const <常量标识符>=<常量>; ... <常量标识符>=<常量>; 例如:const a=12 隐含说明a是整型;

2.变量:相对于常量,在程序执行中值可变。
变量说明:变量说明出现在说明部分。它的语法格式是: var <变量标识符列表>:<类型>; ... <变量标识符列表>:<类型>;

下面常量定义中正确的是(C)。 (A)const d=40 or d=100 (B)const s : 0.5 (C)const s=2.15 (D)const s : =(2>5);
下列变量说明中,不合法的是(A)。 (A)var a = real; (B)var r : Real (C)var red : Integer (D)var i1,i2 : Integer;

3.7 Pascal标准函数
?
?

熟悉各个标准函数的用途 注意函数的自变量的类型和函数值的类型

标准函数 1.数学函数 Abs(x) inc(x) sqr(x) sqrt(x)

Abs(-1)=1 inc(5)=6 sqr(3)=9 sqrt(16)=4
2.转换函数 chr(x) ord(x) round(x) trunc(x)

chr(97)=‘a’ ord(‘A’)=65
3.顺序函数

round(4.6)=5 trunc(1.999)=1

Pred(x) succ(x) Pred(‘b’)=‘a’ succ(‘a’)=‘b’

4.逻辑函数
Odd(x) eoln(x) eof(x) odd(5)=true

下列函数值是整型的是(B)。 (A)chr(23) (B)ord(false) (C)succ(false) (D)odd(98) 下列函数值不可能是布尔类型的是(B)。 (A)odd(x) (B)ord(x) (C)pred(x) (D)succ(x)

设有变量说明:VAR AA:(C,G,A,J,K);则 函数SUCC(A)的取值是( C )。 (A) G (B) 3 (C) J (D) B

3.8 Pascal的运算符及表达式
1.运算符 a.算术运算符 + * / div mod b.逻辑运算符 not and or c.关系运算符 = <> < > <= >= 2.表达式 算术表达式、逻辑表达式、关系表达式

注意表达式中的运算符优先级别: (1)同级运算从左到右,不同级别运算从高到低运算; (2)括号优先级最高,从内到外逐层降低; (3)not优先级为4; (4)*,/,div,mod,and优先级别为3; (5)+,-,or优先级别为2。 (6)关系运算符优先级别为1。

表达式35 div 3 mod 4的值是(C)。 (A)0 (B)2 (C)3 (D)6 下列表达式中,其值为TRUE的是( A )。 (A) 150>=150 (B)100>150 (C)ABS(-200)<>200 (D)SUCC('A')>SUCC('A') 表达式10*4 mod 5 * 22 / 4* 5的值是 i是j的整数倍的布尔表达式 i mod j=0 0 , , 。

m是偶数的布尔表达式是 Not(odd(m))或者m mod 2 =0

y是闰年的布尔表达式 是 (y mod 4 =0)and(y mod 100 <>0) or (y mod 400 =0)



3.9 ASCII码
ASCII码:美国标准信息交换代码
8位二进制 右面7位表示字符

最高位检验错误,或空闲不用
常用字符的ASCII: 字符 0 A a ASCII码 48 65 97

有一编码规则如下: 原码:A B C …… X Y Z 密码:Z Y X …… C B A 已知原码变量为x, 则密码的表达式是 Chr(ord(’A’)+ord(‘Z’)-ord(x))



3.10 Pascal程序的结构
program exam1; 程序首部 说明部分

var r,c,s:integer;
begin readln(r);

{读入圆的半径r}

c:=3.14*2*r; {求周长c} s:=3.14*r*r; {求面积s}

writeln(c,s); {输出周长与面积}
end.

执 行 部 分

程 序 体

4.1 赋值语句
变量标识符 := 表达式; 注意: 1. 不要与=混淆,具有方向性 2. 先计算表达式的值,后赋值给变量 3. 两边类型应相同,例外:当表达式的值为整型 时,能自动转变成实型后赋给一个实型变量 4. 一个赋值语句只能给一个变量赋值 5. 变量可进行多次赋值 6. 赋值语句左边只能是单个变量

Program P4_1(input,output); Const a=128; Var b,d:integer; c:real; Begin b:=a div 16; {先计算a div 16,得8,再赋给b} c:=a/b; {计算a/b得16,再自动变为实型16.0赋给c} d:=a; {d的值为128} End.

Program P4_2(input,output); Var b,d:integer; Begin a:=1; b:=2; a:=b; b:=a; End.
在程序中,经常用a:=a+1作计数器,a:=a+x作累加器,a:=a*x作累乘器。

下列( C )程序行是对的。 (A)x:=y:=5; (B)a+b:=c3 (C)y:=1;y:=y+1; (D)i:=x10’’;

已知R1,R2是实型变量,I1,I2是整型变量 下列中错误的赋值语句是( B )。 (A)I2:=I1+I2 DIV I1 (B)I1:=I1/I2 (C)R2:=3/5*SQR(R1+R2) (D)R1:=R2+I1 有变量说明: VAR I1,I2:INTEGER; R1,R2:REAL; B1,B2:BOOLEAN; 设各变量均已赋值,下列语句中无语法错误的是( C )。 (A)B2:=ORD(R1>R2) (B)I2:=I1+R1 (C)B1:=I1=I2 (D)B1:=B1+B2

4.2 输入(read、readln)语句
输入语句的格式: read(变量列表); readln(变量列表);
执行该语句时,程序进入等待状态,等待用户从键盘输入数据,输入的 数据将依次赋给变量表中的变量。

注意: 1. 变量表中的变量可以是一个,也可以是多个,多个时,要 以逗号分开。 2. 从键盘输入数据时,数据的个数不能少于变量的个数,否 则系统仍处于等待状态。当数据多于变量个数时,对于 readln语句便将其忽略。对于read语句,要么将其忽略, 要么被下一个语句读入。 3. 输入数值型数据时,数据间用空格或回车键分隔,最后一 定要按回车。输入字符型数据时,数据间不能用空格或回 车分隔,必须连续输入。 4. 从键盘输入的数据必须是常量,且与变量的类型要一致。 5. Readln后可以没有变量名表,()中内容是可选项。此时 该语句只相当读入“回车”符。

? ?

输入数值型的数据时,用空格间隔,直到输入回车。 输入字符型时,就不能用空格间隔,也不能用回车分隔。
设x是整型变量,y是实型变量,ch1和ch2是字符型变量,输入语句 写作: Read(x,y,ch1,ch2); 若想得到的执行结果为:x=50,y=4.2,ch1=‘a’,ch2=‘b’。

输入:50 4.2ab
如果出入:50 4.2 ab 结果会是怎么样的?

Read与Readln的区别:
1. 当输入的个数多于变量的个数时,readln忽略掉多余;read要么忽 略,要么被下一个输入语句读入。 2. Read后面必须有变量表,且只能是变量;readln后允许没有变量表, 若没有,其作用的是换行读取数据。
(1)Read(a); Read(b,c,d,e); Read(f,g); (2)Readln(a); Readln(b,c,d,e); Readln(f,g); 如果两组语句输入相同的数据: 1 2 3 4 5 6 7 8 9 那么两组语句的执行结果会怎样? a=1

b=2 c=3 d=4 e=5
f=6 g=7

a=1
b=4 c=5 d=6 e=7 f=0 g=0

4.3 输出(write、writeln)语句 输入语句的格式:
write(变量列表); writeln(变量列表);

? 输出可以是一项,也可以是多项,输出多项时各项以逗号 分隔。 ? 输出项可以是任何一个标准数据类型。 ? 输出项可以是常量,变量,表达式,字符串,函数。

? Write语句输出完最后一项后不换行,此语句至少含有一 个输出项。Writeln语句输出完最后一项后换行,该语句 允许没有输出项,此时该语句不输出任何内容,只起换行 作用。

Program P4_3(input,output); Const a=1; b=2; Begin writeln(6); writeln(a); writeln(sqr(3)); writeln(a+b); writeln(‘a+b’,a+b); write(‘pi=’); writeln(3.14); End.

? 输出项可以是常量,变量,表达式,字符串。 ? Write与writeln的区别 1. Write输出后不换行,而writeln换行。 2. Write至少有一个输出项,而writeln可以没有输出项,仅起 换行作用。 ? 场宽

场宽:数据输出时所占据的列数。
1.标准场宽 整型 12 实型 17(以科学计数法输出)

字符型 1

布尔型 4(true)或5(false)

默认时按标准输出,小于场宽时左侧补空格

2.自定义场宽 (1)单场宽

? 场宽可以是正整数,也可是值为正整数的整型表达式。
? 输出超过场宽时,自定义场宽失效,按实际位数输出。 ? 输出项可以是:整型,布尔型和字符型,但不允许是实型。 (2)双场宽 ? 双场宽:用来表示实数的输出格式。 ? 定义:输出项:总场宽:小数位数 ? 没有达到场宽时,左侧补空格;超出时,按实际输出。 ? 双场宽的输出结果并未改变该数的精度。 Writeln(-10.1195:9:3); 输出:┕ ┕ -10.120

设有程序 PROGRAM exam(Input,Output); Var ch1,ch2,ch3:Char; BEGIN Readln(ch1,ch2,ch3); Readln(ch1,ch2); Readln(ch1); Writeln(ch1,ch2,ch3) END. 运行以上程序时,若输入为: abc def ghi 则输出是( B )。 (A) abc (B) gec (C) ceg (D) adg

下面的输出语句中错误的语句是( D ) (A)Writeln('''$''is used to mean ''US doller'''); (B)Writeln('The word ''china'' has five letters'); (C)Writeln('The sign ''$''is used to mean ''USdoller'''); (D)Writeln('The word 'china' has five letters'); 设A,B,C为整型变量,并有以下程序段: READ(A); READLN(B,C); READLN(C,B); READLN(A,B); WRITELN(A:2,B:2,C:2); 若运行时输入: 123 456 789 则输出是(D )。 (A) 1 2 3 (B) 1 4 7 (C)7 8 3 (D)7 8 4

写出程序的运行结果 PROGRAM P4_3 (Input,Output); Var a:integer; b:real; c:char; d:boolean; BEGIN a:=78; b:=2003.09; c:=‘%’; d:=true; writeln(a,a:2); writeln(b,b:5:2); writeln(c,c:2); writeln(d,d:5); writeln(‘zhe’:6); END.

4.4 编程需要好算法
? ?

?
?

分析问题 设计算法 编写程序 上机调试

数学模型 方法和步骤 实现算法 编辑、调试、运行

算法的特点:
1. 有穷性:有限个步骤终止 2. 确定性:每一项计算有明确的定义

3. 可行性:每一项计算在有限时间内完成
4. 输入输出:输入可无,输出必有

4.5 编程小指挥——流程图
表述方法 自然语言 优点 日常使用 通俗易懂 缺点 文字叙述繁琐 容易产生歧义

流程图
N-S图

形象、直观 逻辑清楚、易理解
简化成几何图形

占版面多 绘画麻烦

N-S图:
基本结构:顺序结构、选择结构、循环结构

输入两个数(例如2和3),将其中的大数存入max。 试用三种方式描述算法。
(1)自然语言描述算法 1. 为变量a赋值2,为变量b赋值为3; 2. 将a的值赋给max; 3. 比较b与max;当b>max时,将b的值赋给max; 4. 输出max的值。 (2)流程图

(3)N-S图

用N-S图写出下列问题的算法。
1.某航空公司,对旅客随身携带的物品收费标准为:30kg以下(含30kg)不 收费,超出30kg的部分每千克收20元。 2.求n!。(n!=1*2*3*…*n)。

【练一练】输出下列程序的结果
1.Program ex1; Var a,b,s,d:integer; L,e,g:boolean; Begin A:=3; b:=7; S:=a+b; d:=a div b; l:=a<b;e:=a=b; g:=a>b; write(‘s=‘,s:5); writeln(‘d=‘,d:5); writeln(‘l=‘,l); writeln(‘e=‘,e,’g=‘,g); Writeln(b/a:5:5); End.
结果是: s= 10 d= L=true E=false g=false 2.33333 0 2.Program ex2; Var a,b:integer; C,d:boolean; Begin a:=8; b:=7; c:=odd(a);d:=odd(b); Writeln(‘c=‘,c); Writeln(‘d=‘,d); If a>b then Begin If c=d then write(c) Else write(d) end End. 结果是: C=false D=true true

4.6 顺序结构程序设计
有三个小朋友甲乙丙。甲有50粒糖果,乙有43粒糖果,丙有13粒糖果。 现在他们做一个游戏。从甲开始,将自己的糖分三份,自己留一份,其余两 份分别给乙与丙,多余的糖果自己吃掉,然后乙与丙也依次这样做。问最后 甲、乙、丙三人各有多少粒糖果? program ex2; var A,B,C:integer; begin A:=50;B:=43;C:=13; {初始时每个小朋友所拥有的糖果数} A:=A div 3; B:=B+A;C:=C+A; {甲小朋友分糖果后,每个人拥有的糖果数变化情况} B:=B div 3; A:=A+B;C:=C+B; {乙小朋友分糖果后,每个人拥有的糖果数变化情况} C:=C div 3; A:=A+C;B:=B+C; {丙小朋友分糖果后,每个人拥有的糖果数变化情况} writeln('A=',A,'B=',B,'C=',C); {输出结果} readln; end.

4.7 应用实例
例1:
鸡兔同笼问题。已知鸡和兔的总数量是H,鸡兔腿的总数量为F,求鸡和 兔各多少只。

分析:设鸡为c只,兔为r只,则有 C+r=H 2*c+4*r=F 解得:c=(4*H-F) DIV 2, r=H-c

程序:
鸡兔同笼问题。已知鸡和兔的总数量是H,鸡兔腿的总数量为F,求鸡和 兔各多少只。

5.1 逻辑运算及布尔表达式
(1)布尔常量 const t=true; f=false; 在程序的执行部分就可以用t代表“真”,f代表“假”。
(2)布尔变量 var t,f:boolean; 定义后t和f就成了布尔变量,他们的值可能是true或false;
注意:布尔变量的值只允许通过赋值获得,不能通过read语句输入。 Pascal语言系统中将true和false的序号定为1和0,可以看出true要大于false, 即:false<true.

(3)关系表达式 关系表达式是由关系运算符连接而成的表示变量关系的式子, 表达运算符前后数据之间的大小关系。
关系运算对数据的比较则是按照其序号大小关系进行比较的, 如:’X’<‘Y’。 关系运算符: 等于 = 不等于 <>

小于 <

大于 >

小于等于 <=

大于等于>=

(4)逻辑运算 逻辑运算符:not(非)、OR(或)、AND(与)

P True True False False

Q True False True False

P or Q True True True False

P and Q True False False False

P True

Not P False

False

True

逻辑运算的注意点
1. not?and?or 2. 括号?函数、not?*、/、div、mod、and?+、-、 or?>、=、<、>=、<=、<> 3. 同级从左至右

4. 逻辑表达式中,如果逻辑运算符连接的是布尔表达式, 必须用括号将布尔表达式括起来,否则会发生逻辑错 误,例如(a<5) and (b>=0)。
表达式True AND NOT Odd(-202)<(7-3<=4)的值是( B )。 (A) True (B)False (C) 0 (D)1

5.2 条件(if)语句 5.1.1条件语句的两种形式
if 条件 then 语句1; if 条件 then 语句1 else 语句2;
布尔表达式或 布尔变量 Program e1(input,output); 语句1后的 ‘;’不要

var
a:integer; begin

readln(a);
if a mod 2 =0 then writeln(a,’-jishu’); end. writeln(a,’-oushu’);

例:输入两个整数,输出其中较大者。程序如下:
Program example1;
var x,y:integer;

begin
write(‘Please input x,y:’); readln(x,y);

if x>y then writeln(‘x=’,x)
else writeln(‘y=’,y); end.

5.2 条件(if)语句

5.1.2复合语句
if a mod 2 =0 then begin writeln(a, ’-oushu’); b:=a; writeln(b); end else writeln(a,’-jishu’);

Begin 语句1; 复合语句的格式

语句2;
语句3; ……

语句n;
end;

例:某超市要根据两种货物a和b的库存情况制定进货顺序, 原则是库存少的具有优先进货权。程序如下:
Program example2; var a,b:integer; begin readln(a,b); if a<b then begin writeln(‘(1) a’); writeln(‘(2) b’); end else begin writeln(‘(1) b’); writeln(‘(1) a’); end; end.

复合语句

复合语句

练一练:已知程序如下,输出程序运行的结果。
Program test1; var x,y,z,t:integer; begin write(‘Please input x,y,z:’); readln(x,y,z); if x<y then begin t:=x; x:=y; y:=t; end;

if x<z then begin t:=x; x:=y; y:=t; end;
if y<z then begin t:=x; x:=z; z:=t; end; writeln(x,y:4,z:4);

end.

输入数据:12 33 45

结果为:45 33 12

5.3 条件(if)语句的嵌套
IF 条件 THEN BEGIN if 条件1 then …… else ……; END ELSE BEGIN if 条件2 then …… else ……; end;

注意:
1. 多层嵌套if语句时,要注意if、then、else的配套;其中else是与最近 的一个if配套的。 2. 为了增强程序的可读性,最好将条件嵌套语句写成缩进式形式。

例:有一个函数表达式为:
-1 x<0

y=

0 1

x<0 x<0

编写程序,输入x,输出y的值。 Program example4; var x:real; y:integer;

If x>0 then y:=1 else y:=0; Writeln(‘y=’,y); End.

begin
write(‘Please input x:’); readln(x);

if x<0 then y:=-1 else

例:输入某同学的数学百分制成绩,要求输出成绩等级A、B、 C、D。规定90分以上为A,80-90分为B,60-79分为C,60分 以下者为D。
Program example5; var score:real; begin write(‘Please input the score:’); readln(score); write(‘deng ji shi:’); if score>=90 then writeln(‘A’) else if score>=80 then writeln(‘B’) if score>=60 then writeln(‘C’) else writeln(‘D’); end.

else

下列程序段运行后,变量value的值为( A )。 X:=20; If X>=10 then value:=5*X else value:=4*X; (A)100 (B)80 (C)90 (D)70 下列程序段运行后,变量max的值为( B )。 a:=5; b:=10;max:=a; if b>max then max:=b; (A)5 (B)10 (C)5和10 (D)以上都不是 已知x=10,y=20,z=30,以下程序段执行后x,y,z的值应是( A)。 IF x>y THEN z:=x; x:=y; y:=z; (A) x=10,y=20 ,z=30 (B) x=20,y=30,z=30 (C)x=20,y=30 ,z=10 (D) x=20,y=30,z=20

当同时满足a<b和c=d时把y赋给x,而 当a>=b时把n赋给m,应选用的程序段 是( D )。
(A) if a<b then if c=d then x:=y else m:=n

(B) if a<b then begin if c=d then x:=y else m:=n end
(C)if (a<b)and (c=d) then x:=y else m:=n

program ex1(input); var a,b:integer; c,d:Boolean; begin a:=8;b:=7; c:=odd(a);d:=odd(b); writeln(‘c=’,c); writeln(‘d=’,d); if a>b then begin if c=d then write(c); else write(d); end end. 输出: c=false
d=true true

(D)if a<b then begin if c=d then x:=y end else m:=n

5.4 分情况(case)语句
Case语句: 当多分支选择的各个条件由同一个表达式的不同结果值决定时,可以用 case语句实现。 有序类型(整型、字符型、 格式: 布尔型、枚举型、子界型), case 表达式 of 不能是实型 标号1:语句1; 标号2:语句2; …… 标号n:语句n; else 语句n+1 end;

case语句在使用时有几点要注意: 1. end与case对应;标号与语句之间用“:”分隔;else与语句之间 不用分隔符。 2. 标号必须是一常量,其类型与表达式的类型一致。 3. 可以多个标号对应同一条语句,标号之间用“,”分隔。 4. 语句可以是多个语句,但必须用语句括号begin……end括起 5. case语句也可以嵌套

例:设计一个简单的计算器,具有加、减、乘、除。
Program example6; var x,y,s:real; ch:char; begin write(‘Please input x,y,s:’); readln(x,y); readln(ch); case ch of ‘+’: s:=x+y; ‘-’: s:=x-y; ‘*’: s:=x*y;

‘/’: s:=x/y;
end; writeln(x:8:2,ch,y:8:2,’=’,s:8:3) end.

例:从键盘上读入年和月,输出该月有多少天。
program pcase2; var year,month,day:integer; runnian:boolean; begin write('Enter year and month:'); readln(year,month); case month of 1,3,5,7,8,10,12: day:=31; 4,6,9,11: day:=30;{————以上处理31天和30天的情况} 2:begin runnian:=(year mod 400=0) or ((year mod 4=0) and (year mod 100<>0)); case runnian of true: day:=29; false: day:=28; end; end; {————以上处理2月的情况:闰年29天,平年28天} end; end.

阅读程序写结果:
Program test1; var num1,num2:integer; begin write(‘Please input the first integer:’); readln(num1); write(‘Please input the second integer:’); readln(num2); if (num1>num2) then writeln(num1,’>’,num2) else if (num1=num2) then writeln(num1,’=’,num2) else writeln(num1,’<’,num2);

end.

输入:45 88

输出:45<88

输入:33 22

输出:32<22

Program test2; var a,b,c,d,sum:longint; begin readln(a,b,c,d); a:=a mod 23; b:=b mod 28; c:=c mod 33; sum:=a*5544+b*14421+c*1288 – d; sum:=sum+21252; sum:=sum mod 21252 if (sum=0) then sum:=21252; writeln(sum); end.

输入:283 102 23 320

输出:8910

Program test3; var a,b:integer; begin read(a,b); case a of 1: b:=a*10; 2: b:=a*20; 3: b:=a*30; 4: b:=a*40; 5: b:=a*50; else b:=0; 输出:0

输入:3 4
输出:90

输入:8 5

end;
writeln(b); end.

Free Pascal实例演示
Program p2_01(input,output); Var a,b,c: integer; begin writeln(‘请输入两个数:’); read(a,b); c:=a; a:=b; b:=c; writeln(‘交换后的值是:’,a:5,b:5); end.
这是一段Pascal语言写的代码,它运行的结果是什么?解决了什么问题呢?

编辑器中的代码
编辑窗口

菜单栏

状态栏

File菜单的介绍
File菜单用于对文件的管理,如新建文件、打开文件、保存文件等 。

子菜单 New OPEN

快捷键

功能描述 创建新的编辑窗口,以NONAME00.PAS为新 的文件的初始名

F3

显示打开文件对话框,供选择打开已有的文件

SAVE
SACVE AS SAVE ALL Change dir print Print setup Exit

F2

将当前的文件存盘
以用户指定的路径和文件名将当前文件存盘 所有编辑窗口内的文件存盘 改变当前工作目录 打印当前窗口中的内容 打印机设置

ALT+X

推出PASCAL

Edit菜单的介绍
Edit菜单用于对当前窗口中的内容进行编辑,如复制、粘贴、删除等 。

子菜单 Undo Redo

快捷键 Alt+Backspace 撤销最近的操作

功能描述 撤销Undo的操作

Cut
Copy Paste

Shift+Del
Ctrl+Ins Shift+Ins

删除选定的文本,并将其置于剪贴板中
将选中的文本复制到剪贴板中 将剪贴板中的文本粘贴到当前窗口光标处

Clear
show clipboard

Ctrl+Del

删除所选定的文本
显示剪贴板中的内容

Search菜单的介绍
Search菜单提供与字符串搜索的相关功能,如执行程序、单步执行等。

子菜单 Find Replace Search again

快捷键

功能描述 显示Find对话框,在当前编辑框中寻找指定 的字符串 显示replace对话框,查找并替换指定的字符 串 删除选定的文本,并将其置于剪贴板中

Go to line number
Show last compile error Find error Find procedure

提示用户输入要查的行号
在当前编辑窗口中显示产生编译错误的代码 行 打开Find error对话框,显示程序运行时错误 内存地址 打开Find procedure对话框,在对话框中输入 需要查找的函数或过程名

Run菜单的介绍
Run菜单提供在集成调试环境下运行Pascal的功能,如执行程序、单步执行等。

子菜单 Run Step over Trace into Go to cursor

快捷键 CTRL+F9 F8 F7 F4 运行当前程序

功能描述 单步运行当前程序,遇到函数和过程调用一 次运行完毕,不跟踪其内部 单步执行当前程序,遇到函数和过程调用, 跟踪到其内部 运行程序到光标所在代码行处

Program reset
Parameters

CTRL+F2

将正在运行的程序复位
显示Program Parameters对话框,设置程序运 行参数

Compile菜单的介绍
Compile菜单提供在集成调试环境下编译Pascal的功能,如编译、连接等。

子菜单 Compile Make

快捷键 ALT+F9 F9

功能描述 编译当前编辑窗口中的程序 编译连接生成可执行文件

Build
Destination

重新编译、连接生成可执行文件
源文件是编译到内存还是磁盘

Primary file
Information Clear Primary file

显示Primary file对话框,进行编译和连接 Pascal文件
显示当前文件编译、连接的信息 清除Primary file菜单项设置

Debug菜单的介绍
Debug菜单提供在集成调试环境下调试Pascal的功能,如设置断点、检查、修 改变量、表达式等。

子菜单 Breakpoints Register Watch Output User screen Modify ADD breakpoint ADD watch

快捷键

功能描述 打开Breakpoints窗口,显示正在调试程序的所 有断点 打开Register窗口,显示正在调试程序的寄存器 打开Watch窗口,显示被跟踪变量的值 打开Output窗口,显示程序运行的结果

ALT+F5

进入DOS提示符状态,显示程序运行的结果

CTRL+F4 打开Modify窗口,输入需要检查和更改的被跟 踪变量 打开ADD breakpoint窗口,设置一个新的断点 CTRL+F7 打开ADD watch窗口,添加一个被跟踪变量。

主菜单的菜单栏选项注意点(键盘操作)
?

?

按F10键,光标移到主菜单,再用键盘的左 右方向键来选择所需的主菜单。按回车打 开所选的主菜单。 同时按在ALT键和所需主菜单项中的高亮度 字母,即可选中并打开其子菜单。例如: Alt + F就可打开File菜单。

子菜单的使用说明
?

?

部分子菜单有快捷键操作,则可以通过此 快捷键直接启动命令,如F3可以快速地打 开“Open a file”窗口。 子菜单项后有“ ”记号,表示该子菜单 项还有下一级菜单;
子菜单项后有“?”记号,表示选择该操 作后会出现相应的对话框。

?

编辑窗口的组成

状态栏的作用
? ?

提示当前状态下可用的快捷键。
用于显示工作状态,提示当前程序所做的 工作等等。

编辑窗口的组成


全国信息学奥赛NOI培训教程(Pascal 2016)

全国信息学奥赛 NOI 培训教程 青少年信息学奥林匹克竞赛情况简介信息学奥林匹克竞赛是一项旨在推动计算机普及的学科竞赛活动,重在培养学生能力,使得 有潜质有才华的...

全国青少年信息学奥林匹克联赛大纲

全国青少年信息学奥林匹克联赛大纲(节选)NOIP 大纲 一、 总则 由中国计算机学会负责组织的全国青少年信息学奥林匹克联赛(NOIP)是全国信息学奥林匹克竞赛 (NOI)整个...

第二十一届(2015)全国青少年信息学奥林匹克联赛初赛试题(含答案)

第二十一届(2015)全国青少年信息学奥林匹克联赛初赛试题(含答案)_学科竞赛_高中...在计算机内部原来传递、存储、加工处理的数据或指令都是以()形式进行的。 A. ...

全国青少年信息学奥林匹克竞赛

全国青少年信息学奥林匹克竞赛(NOI)是由中国计算机学会主办的一项面向全国青少 年的信息学竞赛和普及活动。 也是与联合国教科文组织提倡的国际信息学奥林匹克竞赛, ...

全国青少年信息学奥林匹克竞赛

全国青少年信息学奥林匹克竞赛(NOI)是由中国计算机学会主办的一项面向全国青少 年的信息学竞赛和普及活动。 也是与联合国教科文组织提倡的国际信息学奥林匹克竞赛, ...

全国青少年信息学奥林匹克竞赛

全国青少年信息学奥林匹克竞赛(NOI)是由中国计算机学会主办的一项面向全国青少 年的信息学竞赛和普及活动。 也是与联合国教科文组织提倡的国际信息学奥林匹克竞赛, ...

全国青少年信息学奥林匹克竞赛

全国青少年信息学奥林匹克竞赛(NOI)是由中国计算机学会主办的一项面向全国青少 年的信息学竞赛和普及活动。 也是与联合国教科文组织提倡的国际信息学奥林匹克竞赛, ...

全国青少年信息学奥林匹克竞赛

全国青少年信息学奥林匹克竞赛(NOI)是由中国计算机学会主办的一项面向全国青少 年的信息学竞赛和普及活动。 也是与联合国教科文组织提倡的国际信息学奥林匹克竞赛, ...

全国青少年信息学奥林匹克竞赛

全国青少年信息学奥林匹克竞赛(NOI)是由中国计算机学会主办的一项面向全国青少 年的信息学竞赛和普及活动。 也是与联合国教科文组织提倡的国际信息学奥林匹克竞赛, ...