第3章循环结构程序设计.docx

上传人:b****5 文档编号:2824900 上传时间:2022-11-15 格式:DOCX 页数:21 大小:42.64KB
下载 相关 举报
第3章循环结构程序设计.docx_第1页
第1页 / 共21页
第3章循环结构程序设计.docx_第2页
第2页 / 共21页
第3章循环结构程序设计.docx_第3页
第3页 / 共21页
第3章循环结构程序设计.docx_第4页
第4页 / 共21页
第3章循环结构程序设计.docx_第5页
第5页 / 共21页
点击查看更多>>
下载资源
资源描述

第3章循环结构程序设计.docx

《第3章循环结构程序设计.docx》由会员分享,可在线阅读,更多相关《第3章循环结构程序设计.docx(21页珍藏版)》请在冰豆网上搜索。

第3章循环结构程序设计.docx

第3章循环结构程序设计

第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)图

【程序设计】

[程序清单]

programex3_1;

var

s,t:

integer;

begin

s:

=0;{S置初值为0}

fort:

=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语句的的注意事项:

①循环控制变量必须为顺序类型。

例如,可以是整型、字符型、布尔型,不能为实型,如:

fori=3.5to8.5dowrite(i)是错误的。

②循环控制变量的值递增或递减的规律是:

若是递增型循环,则按Succ函数规律变化;若是递减型循环,则按Pred函数规律变化。

例如:

fork:

=’a’to’z’dowrite(k)

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

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

例如:

forj:

=1tondo

begin

readln(x);

wreteln(x+1)

end;

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

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

例如:

forx;=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)立方米。

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

[程序清单]

programp3_1_2(input,output);

var

n,s,t:

integer

begin

s:

=0;

forn:

=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.阅读下面的程序,说明该程序的作用。

[程序清单]

programp3_1_3(input,output);

vara,b,c:

integer{此处integer表示整型数据}

beging

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

´);

readln(b);

forc:

=1to5do

begin

read(a);

ifa>bthenb:

=a;

end;

writeln(‘最后的值是:

‘´,b:

5);

end.

[运行示例]

请任意输入一个数:

6↙

4↙7↙13↙8↙11↙

最后的值是:

13

第2节当循环程序实例

【问题描述】

农场主的预算报告

放暑假学校组织夏令营来到一个农场,农场主热情的接待了他们。

在参观时,同学们发现在农场的左上角圈出了一块地方,这儿阳光充足,通风也不错,但却什么也没有,觉得很奇怪。

农场主告诉大家因为农场四周由许多小朋友因没钱交学费而缀学,所以决定引进品种不错的雌雄一对小白兔,在这饲养。

小白兔需经过一个月才能长大,长大后每个月都生雌雄一对小白兔。

想等小白兔繁殖到1000对的时候,在分发给周围贫困的人,希望能帮助他们重新进入课堂。

现正在写一份预算报告,其中预计所需时间却却没算出来。

同学们现在就让我们来帮助这位好心的农场主算出时间。

【问题分析】

这问题从表面来看好象没有什么规律,不妨设计一张表格来推算一下。

月份

1

2

3

4

5

6

……

兔子数(对)

1

2

4

8

16

32

……

因为第一个月小白兔没长大,所以兔子数是1对。

到了第二个月小白兔长大了,生了一对小白兔,兔子数是2对。

第三个月小白兔也长大了,大白兔是2对,它们都生了一对小白兔,兔子数是4对……。

依此类推,发现除了第一个月,其它都是:

前一个月的兔子数×2=本月兔子数。

我们发现这又是一个循环,直到兔子数为1000对的时候结束。

可是用for语句显然不行,因为我们不知道循环的次数。

下面我们用当型循环(while/do语句)来编写程序。

农场主的预算可以描述如下:

月份:

=1;

兔子数:

=1;{预定义第一个月的兔子数是1对}

while兔子数<1000do{当兔子数小于1000对时进入循环}

begin

月份:

=月份+1;

兔子数:

=兔子数*2;

end;

【程序设计】

[程序清单]

programp4-1(input,output);

var

month,rabbit:

integer;

begin

month:

=1;

rabbit:

=1;

whilerabbit<1000do

begin

month:

=month+1;

rabbit:

=rabit*2;

end;

writeln(‘Themonthsis:

’,month);

end.

【知识拓展】

1.while循环语句

当型循环(while语句)是这样描述循环的:

当指定条件成立时,重复执行指定的语句。

格式:

while布尔表达式do语句;

      例如:

    k:

=10;

    WHILEk>0DO

    BEGIN

        Writeln(k);

        k:

=k-1

    END;

    其中

    

(1)WHIlE和DO是PASCAL保留关键字,是WHILE循环语句的组成部分。

    

(2)保留关键字DO后面的“语法”只能是一条语句,称为“循环体”;如果循环体中需要包含多个语句则应该如上例所示,采用一条复合语句。

2.WHILE循环的执行功能

当执行到WHILE语句时

(1)求出布尔表达式的值

(2)若布尔表达式的值为真,则执行循环体内的语句;若为“假”,执行步骤4

(3)重复步骤1和2

(4)循环结束,执行循环后面的语句。

3.本例While循环的结构化流程图如下:

While布尔表达式

循环体语句

【同步练习】

1.周末小明遇到一个有趣的题目:

找出四位整数abcd中满足下述关系的数:

(ab+cd)(ab+cd)=abcd

请你帮小明编写一个程序,找出满足条件的所有的数。

问题分析:

这道题属于搜索问题,因为是四位整数,不难看出范围是从1000~9999,所求的数究竟在哪里,无法确定,只有在这个范围内从小到大一个一个进行搜索,对每一个数看它的高两位数与低两位数和的平方是否与该数相等。

ab和cd两个数可以在abcd中将高两位与低两位分离开来。

我们可以这样考虑,将abcd整除100,可得到高两位ab。

如:

abcd=1234,1234div100=12。

有了ab,也就可用下面的式子把低两位cd分离出来:

abcd-ab×100=abcd-ab00=cd

如:

1234-12×100=1234-1200=34

同学们仔细想想,在求解的过程中,条件都是一样的,只是abcd这个数不同。

实际上是在反复做同一个步骤。

下面我们用当型循环来解这道题。

[程序清单]

Programxuhuan(input,output);

Vari,m,n,k:

integer;

Begin

I:

=1000;{给I赋值,即abcd假设一个数;}

WhileI<=9999do{判断I(即abcd)的值是否超出范围,;如果超过则不执行循环

Begin体中的语句,结束循环;}

M:

=Idiv100;{分离出ab和cd两个数,如果符合条件,就写出来;}

N:

=I-m*100;

K:

=(m+n)*(m+n);

Ifk=Ithen

Writeln(‘符合条件的四位整数是:

’,I);

I:

=I+1{I的值加1;}

End;

End.

[运行示例]

符合条件的四位整数

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 工学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1