第3章循环结构程序设计

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

第3章循环结构程序设计

第1节For循环程序实例

【问题描述】

计算一副扑克牌的点数,其中牌A为1点,牌J、Q、K分别为11、12、13点,大、小王不算点。

【问题分析】

根据题意,要计算一副扑克牌的点数,可以先求出一种花色牌的点数和,再乘以4即可。进一步分析,求一种花色牌的点数和,即是求1~13的连续自然数之和。我们用S表示所求数的和,用T表示加数,这样可以让T从1变化到13,每次让T不断加入到S中,就可以求出S的值,最后乘以4即可。

【算法设计】

◆自然语言

①置初值,即S=0,T=1;

②使S=S+T,所求出的和仍放入S中;

③使T增加1,即T=T+1;

④如果T小于等于13,转第二步,否则转第五步;

⑤输出计算结果。

◆程序流程图和结构化流程(N-S)图

【程序设计】

[程序清单]

program ex3_1;

var

s,t:integer;

begin

s:=0;{S置初值为0}

for t:=1to13do{For循环语句}

s:=s+t;

writeln(‘total:’,s*4);

end.

[运行示例]

total:364

【知识拓展】

1.在程序处理过程中,经常需要对某一条或一组语句重复执行多次,以最终完成某项任务,这就是循环。对于重复次数已知,而不依赖循环中语句的结果,常用计数循环(for /to/do语句)。

2.for循环语句格式:

格式一:for控制变量:=初值to终值do

循环体语句;

格式二:for控制变量:=初值downto终值do

循环体语句;

其中for、to、downto、do为保留字,do后面的语句称为循环体。其中循环控制变量可以是整型、字符或布尔型,但不能为实型。一般地,可以是顺序类型数据。

初值、终值表达式通常要与控制变量的类型相同。

在for语句中如果使用的是to,称为递增型计数循环语句,如果使用的是downto,称为递减型计数循环语句。

3.For语句的执行过程:

①先将初值表达式的值计算出来并赋给循环控制变量。

②判断循环控制变量的值是否已“超过”终值(对于递增型循环来说,“超过”是指“大于”;对递减型循环来说,“超过”是指“小于”)。如已超过,则跳到步骤⑥。

③如果未超过终值,则执行do后面的语句(称为循环体)。

④循环变量递增(或递减)。

⑤返回执行步骤②。

⑥循环结束,执行for循环下面的一个语句

4.使用For语句的的注意事项:

①循环控制变量必须为顺序类型。例如,可以是整型、字符型、布尔型,不能为实型,如:

for i=3.5to8.5do write(i)是错误的。

②循环控制变量的值递增或递减的规律是:若是递增型循环,则按Succ函数规律变化;若是递减型循环,则按Pred函数规律变化。例如:

for k:=’a’to’z’do write(k)

将按顺序打印出26个小写英文字母“abcd…z”。

③循环体可以是一条基本语句,也可以是一条复合语句。例如:

for j:=1to n do

begin

readln(x);

wreteln(x+1)

end;

循环语句的范围直到end才结束。

④循环控制变量不得在循环体内再被赋值。例如:

for x;=1to10do

begin

x:=2*z+1;

end;

是错误的。

⑤循环控制变量的初值和终值一经确定,循环次数就确定不变了。

循环的次数可用如下公式计算:

0若初值〉终值递增型循环的循环次数=

Ord(终值)-Ord(初值)+1若初值≤终值

0若初值〈终值递减型循环的循环次数=

Ord(初值)-(终值)+1若初值≥终值

【同步练习】

1.宰相的麦子:相传古印度宰相达依尔,是国际象棋的发明者。有一次,国王因为他的贡献要奖励他,问他想要什么。达依尔说:“只要在国际象棋棋盘上(共64格)摆上这么些麦子就行了:第一格一粒,第二格两粒,……,后面一格的麦子总是前一格麦子数的两倍,摆满整个棋盘,我就感恩不尽了。”国王一想,这还不容易。于是令人扛来一袋麦子,可很快用完了,又扛来一袋,很快用完了……国王很奇怪,请你帮国王计算一下,要多少麦子。(1立方米的麦子约为1.42×108粒)

问题分析:

对于编程类问题的描述,要特别注意正确、全面地理解题意,要学会从描述性语言中抽象出具体的数据,并建立数学模型。在本题中根据“国际象棋棋盘上共有64格,第一格一粒,第二格两粒,……,后面一格的麦子总是前一格麦子数的两倍”的题意,我们可以建立数学模型:第一格为20,第二格为21,第三格为22,……第64格为263,设64格中应放麦子数为S,则可用下面的公式表示:

S=20+21+22+23+……+263

1立方米的麦子约为1.42×108粒,那么S粒麦子的体积T为:

T=S/(1.42×108)立方米。

这样我们将问题转化为一般数学模型,再根据数学模型写出算法设计,再写出具体程序就水道渠成。

[程序清单]

program p3_1_2(input,output);

var

n,s,t:integer

begin

s:=0;

for n:=0to63do

s:=s+2^n;

t:=s/(1.42*10^8)

writeln(‘s=’,s,)

writeln(‘t=’,t);

end.

[运行示例]

S=1.84467441E+19

T=1.29906648E+11

2.阅读下面的程序,说明该程序的作用。

[程序清单]

program p3_1_3(input,output);

var a,b,c:integer{此处integer表示整型数据}

beging

writeln(´请任意输入一个数:´);

readln(b);

for c:=1to5do

begin

read(a);

if a>b then b:=a;

end;

writeln(‘最后的值是:‘´,b:5);

end.

[运行示例]

请任意输入一个数:

6↙

4↙7↙13↙8↙11↙

最后的值是:13

第2节当循环程序实例

相关文档
最新文档