第二章 顺序结构程序

  • 格式:doc
  • 大小:28.00 KB
  • 文档页数:4

下载文档原格式

  / 7
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第二章顺序结构程序

顺序结构

前面的简单程序已体现出处理问题步骤、思路的顺序关系,这就是顺序结构程序。[例1.6]交换两个变量的值:由键盘输入两个正整数A和B,编程交换这两个变量的值。

解:交换两个变量的值,可以想象成交换两盒录音带(称为A和B)的内容,可以按以下步骤处理:

步骤①:拿一盒空白录音带C为过渡,先将A翻录至C;

步骤②:再将B翻录至A;

步骤③:最后将C翻录至B。

这样操作,可达到题目要求。

Pascal程序:

Program Exam16;

Var a,b,c : integer;

Begin

Write(‘A,B=’);

Readln(a,b);

C:= A; {等价于步骤1}

A := B; {等价于步骤2}

B := C; {等价于步骤3}

Writeln(A,B);

End.

[例1.7] 分钱游戏。甲、乙、丙三人共有24元钱,先由甲分钱给乙、丙两人,所分给的数与各人已有数相同;接着由乙分给甲、丙,分法同前;再由丙分钱给

甲、乙,分法亦同前。经上述三次分钱之后,每个人的钱数恰好一样多。求原先各人的钱数分别是多少?

解:设甲、乙、丙三人的钱数分别为A,B,C。用倒推(逆序)算法,从最后结果入手,按反相顺序,分步骤推算出每次各人当时的钱数:(在每个步骤中,各人钱数分别存在A、B、C中)

步骤①: A=8 B=8 C=8 {这是最后结果的钱数,三人都一样多 }

步骤②: A=A/2 (=4) B=B/2 (=4) C=A+B+C(=16) { A,B未得到丙分给的钱时,只有结果数的一半;C应包含给A,B及本身数三者之和 }

步骤③: A=A/2 (=2) C=C/2 (=8) B=A+B+C(=14) {A,C未得到乙分给的钱时,只有巳有数的一半;B应包含给A,C及本身数三者之和 }

步骤④: B=B/2 (=7) C=C/2 (=4) A=A+B+C(=13)

C未得到甲分给的钱时,只有巳有数的一半;A应包含给B,C及本身数三者之和 }

步骤⑤: 输出A(=13)B(=7)C(=4){此时的A,B,C 就是三人原先的钱数 }

Pascal程序:

Program Exam17;

Var a,b,c: integer;

Begin

a:=8; b:=8; c:=8; {对应于步骤①}

a:=a div 2; b:=b div 2; c:=a+b+c; {对应于步骤②}

a:=a div 2; c:=c div 2; b:=a+b+c; {对应于步骤③}

b:=b div 2; c:=c div 2; a:=a+b+c; {对应于步骤④}

Writeln('a=',a,' ': 4,'b=',b,' ': 4,'c=',c) ; {输出} Readln

细心观察,会发现本程序语句的顺序很关键。此例用反推顺序(逆序),按步骤正确推算出各变量的值。当然,有的问题可按正序步骤编程,这类程序都称为顺序程序。

本程序Writeln语句的输出项含有( ' ' : 4 ),这里的冒号用来指定该项显示所占宽度,此处是输出4个空格即(空格项占4格)。

[例1.8] 有鸡兔同笼,头30,脚 90,究竟笼中的鸡和兔各有多少只?

解:设鸡为J只,兔为T只,头为H,脚为F,则:

J+T=30 ①

2*J+4*T=90 ②

解此题暂不必采用数学上直接解方程的办法,可采用“假设条件与逻辑推理”的办法:

假设笼中30 个头全都是兔,那么都按每头4只脚计算,总脚数为(4*H),与实际脚数 ( F )之差为(4*H—F),如果这个差=0,则笼中全是兔(即鸡为0只);如果这个差值 >0,说明多计算了脚数,凡是鸡都多给算了两只脚,用它除以2就能得到鸡的只数,处理步骤为:

① J=(4*H—F)/2 {先用脚数差值除以2算出鸡的只数}

② T=H—J {再用总头数减鸡数算出免的只数}

按此方法,这两步运算必须注意先后顺序才会符合运算逻辑。

Pascal程序:

Program Exam18;

Const H=30; {常量说明 }

F=90;

Var J,T: byte; {为字节类型的整数 }

J:=(4*H-F) div 2; {整除运算 }

T:=H-J

Writeln ('J=',J,' ': 6,'T= ',T ) ;

Readln

End.

本程序中H,F为常量,变量J,T为byte类型,属于整数类型。

上机实践

1.完成例1.6。交换两个变量的值:由键盘输入两个正整数A和B,编程交换这

两个变量的值

完成例1.7。分钱游戏:甲、乙、丙三人共有24元钱,先由甲分钱给乙、丙两人,所分给的数与各人已有数相同;接着由乙分给甲、丙,分法同前;再由丙分钱给甲、乙,分法亦同前。经上述三次分钱之后,每个人的钱数恰好一样多。求原先各人的钱数分别是多少?

完成例1.8。鸡兔同笼:有鸡兔同笼,头30,脚 90,究竟笼中的鸡和兔各有多少只?

2.输入一个字符,求其序号(ord)、前导(pred)、后继(succ)

3.输入三个字符,然后按输入字符次序输出这三个字符(一行),再输出每个字

符的序号(一行,求字符序号,用ord函数,如ord(a)),最后按与输入字符相反的次序输出这三个字符(一行)。

4.输入一个三位整数,将它反向输出。例如输入127,输出应为721。

5.从键盘上读入小写的“pascal”,利用chr()和ord(),输出大写的“PASCAL”。

6.从键盘上读入长方形的边长a,b(实型),计算它的面积和周长,并分两行输

出。