信息学奥林匹克竞赛培训教案(4)

2019-08-30 13:42

例L3_2 读入三个数,找出并打印其中的最大数。 解:

PROGRAM L3_2; VAR

a,b,c:real; BEGIN

write('a=?'); read(a); write('b=?'); read(b); write('c=?'); read(c); IF a

THEN a:=b; IF a

THEN a:=c;

writeln('ZuiDaShu:',a) END.

3.2.2 复合语句

在IF语句中,跟在THEN或ELSE后的语句可能不止一个,这时要用到复合语句的概念。

复合语句是一个以BEGIN开始,以END结束的语句。在BEGIN与END之间可以包括若干个语句,每个语句之间以分号分开。一般形式为:

BEGIN

(语句1); (语句2); …

(语句n) END

一个复合语句从外部看来,相当于一个语句。 例L3_3 读两个数,将大数存于x,小数存于y。 解:

PROGRAM L3_3; VAR

x,y,temp:real; BEGIN

write('x=?'); readln(x); write('y=?'); readln(y); IF x

THEN BEGIN temp:=x;

16

x:=y; y:=temp END;

writeln('x=',x:8:2,',y=',y:8:2) END.

3.2.3 复合IF语句 在IF语句中,THEN或ELSE后的语句本身也可能是IF语句。此时称为IF语句的嵌套(或称为复合IF语句)。

例如语句 IF(条件1)

假 THEN(语句1) 真 条件1 ELSE IF(条件2)

THEN(语句2) ELSE(语句3)

假 真 条件2 就是一个复合IF语句,在它的

ELSE后又是一个IF语句。

语句3 语句2 语句1 例L3_4 输入某学生成绩,根据成绩的好坏输出相应评语。如果成绩在90分以上,输出评语:优秀(outstanding);如果成绩在60到90之间,输出评语:良好(satisfactory);如果成绩不足60分,输出评语:不及格(unsatisfactory)。

有时IF语句可能会有两种不同的理解。例如语句: IF (条件1)

THEN IF (条件2)

THEN (语句1) ELSE (语句2)

我们可以认为ELSE与后一个THEN配对,其流程图如图3_8(1)所示。

但是,我们也可以认为ELSE与前一个THEN配对,其流程图如图3_8(2)所示。 假 真 条件1 假 真 条件1

假 条件2 真 假 条件2 真 语句2 语句1 语句2 语句1 图3_8(1)

图3_8(2)

17

为了避免产生不同的理解,PASCAL系统规定ELSE总是与同一层前面最靠近它的,还没有ELSE与之配对的THEN配对。因此,上面的语句肯定是按第一种理解,即ELSE与后一个THEN配对。

如果要求按第二种理解执行流程图,可以通过在IF语句中加BEGIN、END的办法来实现。写成

IF(条件1) THEN BEGIN

IF(条件2) THEN(语句1) END

ELSE(语句2)

3.3 CASE语句

CASE语句是实现选择结构程序设计的另一种语句。它的使用有时比IF语句来得简单、直观。

CASE语句(或称情况语句)的一般形式是 CASE (表达式) OF (值表1):(语句1); (值表2):(语句2); …… (值表n):(语句n) END

在CASE语句头上的表达式必须是有序类型(整型、字符型、布尔型以及后面要介绍的枚举型、子界型)。值表是一些由逗号分开的常数。表达式所有可能的值必须在值表中出现,且每个值只能出现一次。

如果当前表达式的值在某个值表i中出现,则该程序只执行对应该值表i的语句,然后执行整个CASE语句后的下一语句。

例L3_5 输入年、月,输出该月有几天。

讨论:每年的1、3、5、7、8、10、12月,每月有31天;4、6、9、11月,每月有30天;2月闰年有29天,平年有28天。

年号能被4整除,但不能被100整除,或者年号能被400整除的年均是闰年。 用year、month、days分别表示年、月、每月天数。它们均为整数。 闰年的条件可以写成如下的布尔表达式:

(year MOD 4 = 0) AND (year MOD 100 <> 0) OR (year MOD 400 = 0)

PROGRAM L3_5; VAR

year,month,days:integer; BEGIN

write(‘year=?’);

readln(year);

write(‘month=?’);

18

readln(month); CASE month OF

1,3,5,7,8,10,12:days:=31; 4,6,9,11:day:=30;

2:IF(year MOD 4 = 0) AND (year MOD 100 <> 0) OR (year MOD 400 = 0) THEN days:=29 ELSE days:=28 END;

writeln(‘year=’,year,’,month=’,month,’,days=’days) END.

例L3_6 输入两个运算量及一个运算符,输出运算结果。这相当于计算器计算。 讨论:设两个运算量为x和y,一个运算符为oper,运算结果为result。

现在假定运算符只可能是+、-、*、/,将oper说明为字符型。x、y和result说明为实型。

习题

XT3_1 编制程序,根据输入的x值,计

PROGRAM XT3_1; 算y与z并输出。

CONST

PI=3.14159; 2??x?1(x?2.5) VAR y??2

x,y,z:real; ??x?1(x?2.5) BEGIN ?? write('x=?'); ??2x?3(x?0) read(x); ?z??0(x?0) IF x<=2.5 ?? THEN y:=x*x+1 ?x?5(x?0) ELSE y:=x*x-1; ?2 IF x<0

THEN z:=-PI/2*x+3

ELSE IF x=0 XT3_2 对一批货物征收税金,价格在1

THEN z:=0 万元以上的货物征税5%,在5000元以上,1

ELSE z:=PI/2*x-5; 万元以下的货物征税3%,在1000元以上,

writeln('x=',x:6:2,', y=',y:6:2,', z=',z:6:2) 5000元以下的货物征税2%,1000元以下的

END. 货物免税。编写一程序,读入货物价格,计算并输出税金。

19

XT3_3 输入某学生成绩,若成绩在85分以上,输出very good,若成绩在60分到85分之间,输出good,若成绩低于60分,输出no good。

XT3_4 输入3个数,将其中最小数输出。

XT3_5 输入3个字母,按字母表顺序从小到大输出这3个字母。

XT3_6 输入二次方程的3个系数a、b、c,计算二次方程的根。程序应考虑实根和复根两种情形。二次方程如下:

ax2+bx+c=0

提示:PASCAL不能表示复数。若为复根,应分别计算并输出实、虚部,在输出时将+、-与i用字符形式输出。

lnx+lny Ⅰ象限 XT3_7 输入x、y,根据所处象限,用相应sinx+siny Ⅱ象限

z=

公式计算z。 e2x+e3x Ⅲ象限

tan(x+y) Ⅳ象限

XT3_8 输入x、y及象限,计算z。z的计算公式同XT3_7题,要求用CASE语句编程序。

XT3_9 输入班号,输入该班学生人数。应用CASE语句编程序。 班号 人数 91 30 92 32 93 30 94 30 95 32 96 25

阅读学习《全国信息奥林匹克联赛培训教程(一)》(信息学奥林匹克科学委员会主编,清华大学出版社)及网上教案,阅读要求见下表: 阅读内容 5.2 Pascal程序的一般结构和输入输出语句 5.3.2 顺序结构 5.3.2 选择结构 页 码 《全国信息奥林匹克联赛培训教程(一)》P94 要求 全看 《全国信息奥林匹克联赛培训教程(一)》P100 《全国信息奥林匹克联赛培训教程(一)》P101 全看 看1、条件选择结构P101至P104 全看 全看 看1、整型;2、5.4.1 运算对象的显式定义 5.4.2 表达式 5.4.3 Pascal的简《全国信息奥林匹克联赛培训教程(一)》P116 《全国信息奥林匹克联赛培训教程(一)》P120 《全国信息奥林匹克联赛培训教程(一)》P121 20


信息学奥林匹克竞赛培训教案(4).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: