haihongyuan.com
海量文库 文档专家
全站搜索:
您现在的位置:首页 > 小学教育 > 学科竞赛学科竞赛

第四章选择结构程序设计

发布时间:2013-09-26 08:30:45  

Pascal语言(中学版)
——选择结构程序设计

嵊州

信技

J

【计算机解题的基本方法】
?计算机是用于表示和处理数据的工具。
程序 = 数据结构 + 算法 数据结构:定义如何在计算机存储器中表示数据。 算法:描述出处理这些数据的步骤。

【计算机解题的基本方法】
?算法设计遵循的原则:

“自顶向下逐步求精”
即先把问题分成几个子问题,每个子问题对应一个 程序块,然后对每个子问题再加以细化,分成更小 的子问题,直至能直接用语句编制程序为止。

【自顶向下逐步求精】
★例1:输入1个三位整数,将它反向输出,写出程序。 例如输入159,输出951。 一级算法: 1、输入一个三位数x; 2、分别取出个十百位上的数字; 3、按照个、十、百的顺序输出。 二级求精: 第2步:分别取出个十百位上的数字 2-1、取出百位上的数字a:=x div 100; 2-2、取出十位上的数字b:=(x mod 100) div 10; 2-3、取出个位上的数字c:=x mod 10;

【Pascal程序设计的基本结构】
?顺序结构 :按照书写顺序执行的语句 ;
?选择结构:根据某个变量或表达式的值做出判断, 以决定执行哪些语句和跳过哪些语句不执行; ?循环结构 :根据情况重复运行多次的语句结构; ?“过程”和“函数”结构 :使得可以通过简单的 函数或过程调用执行一组复杂的语句。

条件(if)语句
PASCAL语言选择结构可以通过两种语句实现,它们是 if语句(条件语句)和case语句(分情况语句)。
if 条件 then 语句; 例如: if x>y then writeln('y=',y); 格式二 if 条件 then 语句1 else 语句2; 例如: if x>y then writeln('y=',y) else writeln('x=',x); 格式一 我们可以把整个if语句看做一条语句模块,作为整体该语句末尾 加一分号。 1、在else前的语句末端不能有分号或“.”。 2、语句1或语句2可以是复合语句,但要用begin和end包括起来。

条件(if)语句
例:输入两个整数,输出其中较大者
一级算法:

1、输入2个整数x,y;
2、判断x,y的大小关系; 3、根据判断结果输出x或y。

二级求精:
第3步: 3-1、x大,则输出x;

3-2、不是x大,则输出y ;

program p4_1(input,output); 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.

例:某超市要根据两种货物a和b的库存情况指定进 货顺序,原则是库存少的具有优先进货权。
program p4_2(input,output); var 一级算法: a,b:integer; 1、输入a,b的库存; begin readln(a,b); 2、判断a,b的大小关系; if a<b then 3、根据判断结果输出优先进货权。 begin writeln('(1) a'); 二级求精: writeln('(2) b'); 第3步: end else 3-1、a库存少,则优先进a; begin writeln('(1) b'); 3-2、否则,则优先进b; writeln('(2) a

'); end; end.

例:任意输入3个数x,y和z,按由大到小的顺序输出。
一级算法: 1、输入3个数x,y,z; 2、判断x,y,x的大小关系; 3、根据判断结果由大到小输出。 二级求精: 第2步: 2-1、x与y比,大的存入x; 2-2、x与z比,大的存入x ; 2-3、y与z比,大的存入y。

program p4_2(input,output); var x,y,z,t:integer; begin writeln('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:=z; z:=t; end; if y<z then begin t:=y; y:=z; z:=t; end; writeln(x,y:4,z:4); end.

if语句的嵌套

if语句中的then后的语句1和else语句2原则上可以 是任意语句,当语句1或语句2是if语句时称之为if语句的嵌 套。利用if语句的嵌套可以帮助解决较为复杂的多重分支问 题。 在进行if语句的嵌套时应 注意if与else的配对关系,else 是不能省略的,否则将造成逻 辑错误。解决的办法是写一个 空语句或者采用复合语句,即 增加语句括号(begin...end)。 从内层开始,else总是 与它上面最近的(未曾配对的)if 配对。

if 条件1 then if 条件2 then 语句21 else 语句22 else if 条件3 then 语句31 else 语句32;

例:有一个函数的表达式为: y= 编写程序,输入x的值,输出y的值
一级算法: 1、输入x;

-1 x<0 0 x=0 1 x>0

2、判断x与0的大小关系;
3、根据判断结果输出。 二级求精:

第3步:
3-1、x小于0,输出-1; 3-2、x等于0,输出0 ;

3-3、x大于0,输出1 。

program p4_4(input,output); var x:real; y:integer; begin write('please input x='); readln(x); if x<0 then y:=-1 else if x>0 then y:=1 else y:=0; writeln('y=',y); end.

例:输入某同学的数学百分制成绩,要求输出成绩等级A、B、 C、D。规定90分以上为A,80~89分为B同60~79分为C, 60分以下为D。
一级算法:

1、输入成绩score;
2、判断score所在等级; 3、根据判断结果输出。

二级求精:
第2步:
1、score是否 ≥90,是等级:A

2、不是, score是否 ≥80,是等级:B
3、不是, score是否 ≥60,是等级:C 4、不是,那么等级:D

program p4_5a(input,output); 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') else if score>=60 then writeln('C') else writeln('D'); end.

例:输入某同学的数学百分制成绩,要求输出成绩等级A、B、 C、D。规定90分以上为A,80~89分为B同60~79分为C, 60分以下为D。
一级算法:
1、输入成绩score; 2、判断score的合理与所在等级;

3、根据判断结果输出。
二级求精: 第2步:
1、score是否 >90,是“too big!” 2、不是, score是否 ≥90,是等级:A 3、不是, score是否 ≥80,是等级:B

4、不是, score是否 ≥60,是等级:C
5、不是, score是否 ≥0,是等级:D 6、不是,

那么“too small !”

program p4_5b(input,output); var score:real; begin write('please input the score:'); readln(score); if score>100 then writeln('too big!') else if score>=90 then writeln('deng ji shi:A') else if score>=80 then writeln('deng ji shi:B') else if score>=60 then writeln('deng ji shi:C') else if score>=0 then writeln('deng ji shi:D') else writeln('too small!'); end.

分情况(case)语句
分情况语句适用于对一个条件的多种情况的响应。
case语句的一般形式如下: 1、case的英文意义有“情况”、 case 表达式 of “情形”的意思。 2、else可以省略,此时若无表达 常数表1:语句1; 式的值与之相匹配的常数表时,程 常数表2:语句2; 序将向下运行并跳出case语句。 常数表3:语句3; 3、end与case对应;标号与语句 常数表n:语句n; 之间用“:”分隔;else与语句之间 else 不用分隔符。 语句n+1; 4、可以多个标号对应同一条语句 end; 5、语句可以是多个语句,但必须 用复合语句(begin……end)。

例:设计一个简单的计算器,具有加、减、乘、除的功能。
一级算法: 1、输入x,y及运算符(字符型); 2、判断运算符,利用case语句进 行相应的运算; 3、根据判断结果输出。

program p4_6(input,output); var x,y,s:real; ch:char; begin writeln('input x,y,ch:'); readln(x,y); read(ch); case ch of ‘+':s:=x+y; ‘-':s:=x-y; ‘*':s:=x*y; ‘/':s:=x/y; end; writeln(x:8,ch,y:8,'=',s:8:3); end.

例:输入某同学的数学百分制成绩,要求输出成绩等级A、B、 C、D。规定90分以上为A,80~89分为B同60~79分为C, 60分以下为D。
program p4_7(input,output); var a,score:integer; ch:char; begin write('input the score:'); read(score); a:=score div 10; if (score>=0) and (score<=100) then case a of 10,9:ch:='A'; 8:ch:='B'; 7,6:ch:='C'; else ch:='D'; end else ch:='G'; writeln(score,'----->',ch); end.


网站首页网站地图 站长统计
All rights reserved Powered by 海文库
copyright ©right 2010-2011。
文档资料库内容来自网络,如有侵犯请联系客服。zhit326@126.com