fccjxxw.com
非常超级学习网 学习超级帮手
当前位置:首页 >> 学科竞赛 >>

06第六课 循环结构程序设计(全课)_图文

第六课 循环结构程序设计

概念
?

在程序设计中,经常需要将一些功能按一 定要求反复执行多次,我们将这一过程称 为循环。

一个循环控制结构需指明以下三件事情中的 两件: 1、被重复执行的语句(循环体)

2、是否重复的条件
3、详细指明重复方式

?

for 语句用来描述已知重复次数的循环结构。for 语句 有两种形式: (1) for 循环变量:=初值 to 终值 do 语句; (2) for 循环变量:=初值 downto 终值 do 语句;

步长型循环(For语句)

第一种形式的for 语句是递增循环。首先将初值赋给控制变量,接 着判断控制变量的值是否小于或等于终值,若是,则执行循环体, 在执行了循环体之后,自动将控制变量的值改为它的后继值,并重 新判断是否小于或等于终值。当控制变量的值大于终值时,退出for 循环,执行for语句之后的语句。 第二种形式的for 语句是递减循环。首先将初值赋给控制变量,接 着判断控制变量的值是否大于或等于终值,若是,则执行循环体, 在执行了循环体之后,自动将控制变量的值该为它的前趋值,并重 新判断是否大于或等于终值。当控制变量的值小于终值时,退出for 循环,执行for语句之后的语句。

说明
?

①循环控制变量必须是顺序类型。例如,可以是 整型、字符型等,但不能为实型。 ②循环控制变量的值递增或递减的规律是:选用 to则为递增;选用downto则递减。

③循环体可以是一个基本语句,也可以是一个复 合语句。 ④循环控制变量的初值和终值一经确定,循环次数 就确定了。但是在循环体内对循环变量的值进行修 改,常常会使得循环提前结束或进入死环。建议不 要在循环体中随意修改控制变量的值。

例:计算1+2+3+……+99+100的和
?

program jia; var i,n,sum:integer; begin sum:=0; for i:=1 to 100 do sum:=sum+i; writeln(sum); readln; end.

不允许在循环体内再对循环控 制变量赋值。
?

a:=10;b:=50; for k:=a to b do begin k:=k+1;{这一句是错误的!!!!!} writeln (k); end;

?

当循环初值或循环终值中包含变量时,允许在循 环体内改变这些变量的值,并不改变原定的循环 次数。 例: a:=1;b:=10; for i:=a to b do begin a:=5;b:=4; end; 在上面例子中,A,B的值在循环的内部发生了变 化,但并不影响循环的次数,依然是10次。

输出1-100之间的所有偶数。
?

var i:integer; begin for i:=1 to 100 do if i mod 2=0 then write(i:5); end.
思考:还有什么办法完成?

求N!=1*2*3*…*N ,这里N 不大于10。
?

var

n,i : integer;{i为循环变量} S : longint;{s作为累乘器} begin write(‘Enter n=’);readln(n);{输入n} s:=1; for i:=2 to n do{从2到n累乘到s中} s:=s*i; writeln(n,'!=',s);{输出n!的值} end.

循环嵌套
?

?

当一个循环的循环体中又包含循环结构程 序时,我们就称之为循环嵌套 。 求1!+2!+…+10!的值。

分析:这个问题是求10自然数的阶乘之和,可以用for 循环 来实现。程序结构如下: for n:=1 to 10 do begin ①N!的值t ②累加N!的值t end 显然,通过10次的循环可求出1!,2!…,10!,并同时累加起 来, 可求得S的值。而求T=N!,又可以用一个for循环来实现:

程序
?

program ex4_5; var t,s:real; i,j,n:integer; begin S:=0; for n:=1 to 10 do begin t:=1; for j:=1 to n do t:=t*j; S:=S+t; end; writeln('s=',s:0:0); end.

程序改进
?

program ex4_5; var t,s:real; i,j,n:integer; begin S:=0;t:=1; for n:=1 to 10 do begin t:=t*n; S:=S+t; end; writeln('s=',s:0:0); end.


?

一个炊事员上街采购,用500元钱买了90只鸡, 其中母鸡一只15元,公鸡一只10元,小鸡一只5 元,正好把钱买完。问母鸡、公鸡、小鸡各买多 少只?

分析:设母鸡I只,公鸡J只,则小鸡为90-I-J只, 则15*I+ 10* J+(90-I-J)*5=500,显然一个方 程求两个未知数是不能直接求解。必须组合出所有 可能的I,j值,看是否满足条件。这里I的值可以 是0到33,J的值可以0到50。

源程序
?

programr ex4_6; var i,j,k:integer; begin for i:=0 to 33 do for j:=0 to 50 do begin k:=90-i-j; if 15*i+10*j+5*k=500 then writeln(i:5,j:5,k:5); end; end.

For循环通常在已知循环次数的 情况下使用,有时候我们无法预知 循环次数的情况下,就无法用for循 环来实现。
问题描述:求整数n的值,使 1+1/2+1/3+……+1/n 的值不大于10。

当(while)语句
?

当语句的语法格式是: while 布尔表达式 do begin 语句序列;(循环体) end; 语句2

其作用是,当布尔表达式的值为 TRUE时, 才会运行语句序列(循环体),否则循环将 不会被执行,即从循环头部就退出,而转向 执行 END后的语句2。

程序框图
?

从框图中可以看出, 要使用循环语句时, 必须要确定循环体 及条件(布尔表达 式)两个重要因素, 亦即首要考虑的是: 我要重复执行哪些 语句,我要重复到 什么时候为止!

while语句的执行过程为:
?

①判断布尔表达式的值,如果其值为真,执行 步骤2,否则执行步骤4; ②执行循环体语句(do后面的语句); ③返回步骤1; ④结束循环,执行while的下一个语句。
这里while和do为保留字,while语句的特点是先判 断,后执行。 当布尔表达式成立时,重复执行do后 面的语句(循环体)。 while语句用于“当满足某一条件时进行循环” 的情况,为了能使while重复能终止,循环前应给 循环控制变量赋上适当的值,循环体中一定要有影 响布尔表达式的操作,否则该循就是一个死循环。

?

例:计算 18!
?

var i:integer; x:longint; begin i:=1; x:=1; While i<=18 do begin x:=x*I; i:=i+1; end; Writeln(x); End.

例题
?

从键盘上输入两个整数 M, N,求它们的 最大公约数。

分析:我们只需从 M, N中更小的一个数开始,每 次让其减 1,直到这个数能同时被 M和 N数整除为 止。

程序
Var m,n,x:integer; Begin Write(‘Please input 2 numbers:’) Readln(m,n); If m>n then x:=n else x:=m; While (n mod x<>0) or (m mod x<>0) do begin x:=x-1; End; Writeln(x); End.

repeat-until语句(直到循环)
?

repeat 语句用于"重复执行循环体,一直 到指定的条件为真时为止"。语法格式为: repeat 语句1; …… 语句n; until 布尔表达式; 其中Repeat、until是Pascal保留字, repeat与until之间的所有语句称为循环体。

求sum=1+2+3+......+n 的和
?

program he; var n,i,sum:integer; begin write(‘n='); readln(n); sum:=0; i:=1; repeat sum:=sum+i; i:=i+1; until i>n; writeln ('sum=',sum); readln end.

注意
?

①repeat语句的特点是:先执行循环,后判断结 束条件,因而至少要执行一次循环体。 ②repeat-until是一个整体,它是一个(构造型) 语句,不要误认为repeat是一个语句,until是另 一个语句。 ③repeat语句在布尔表达式的值为真时不再执行 循环体,且循环体可以是若干个语句,不需用 begin和end把它们包起来, repeat 和until已 经起了begin和end的作用。while循环和repeat 循环是可以相互转化的。

当循环和直到循环的区别
?

1、在repeat语句的结构中,布尔表达式求 值在计算操作之后,而while语句中,布尔 表达式求值在计算操作之前,也就是说 repeat至少执行一次循环体。
2、while语句的成分语句只能是一个语句。 因此,当重复动作包含多个语句时,要用 begin和end ,使它变成一个复合语句。 而repeat语句的保留字repeat和until已经 起语句括号作用,可以包含多个语句而无 须begin和end。

?

当循环和直到循环的区别
?

3、repeat语句中,当布尔表达式为true时 结束循环,而while语句中,是当表达式为 false时才结束循环。当描述由计算操作后 的情况确定重复是否继续进行的计算时, 通常用repeat语句描述。

简单练习
? ? ?

求1-100之间所有数的和。 求0-100之间所有奇数的积。 输入本班50个同学的某科成绩,求平均分数。

练习
?

?

?

输入一整数A,判断它是否质数。(提示:若 从2到A的平方根的范围内,没有一个数能整除 A,则A是质数。) 求水仙花数。所谓水仙花数,是指一个三位数 abc,如果满足a^3+b^3+c^3=abc,则 abc是水仙花数。 计算1—1000之间能同时被3和5整除的整数的 和。

练习
? ? ?

求0-100这间所有奇数的积。 编程计算11+22+33+……+99的值。 宰相的麦子:相传古印度宰相达依尔,是国际象 棋的发明者。有一次,国王因为他的贡献要奖励 他,问他想要什么。达依尔说:“只要在国际象 棋棋盘上(共64格)摆上这么些麦子就行了:第 一格一粒,第二格两粒,……,后面一格的麦子 总是前一格麦子数的两倍,摆满整个棋盘,我就 感恩不尽了。”国王一想,这还不容易,刚想答 应,如果你这时在国王旁边站着,你会不会劝国 王别答应,为什么?

作业
?

?

?

1、输入一整数A,判断它是否质数。(提示: 若从2到A的平方根的范围内,没有一个数能整 除A,则A是质数。) 2、已知四位数3025有一个特殊性质: 它的前 两位数字30和后两位数字25的和是 55, 而55 的平方刚好等于该数(55*55=3025). 试编一 程序打印所有具有这种性质的四位数. 3、如果一个数从左边读和从右边读都是同一个 数, 就称为回文数. 例如: 686就是一个回文数. 编程找出所有既是回文数又是素数的三位数.

作业
?

?

1、“百钱买百鸡”是我国古代的著名数学题。题 目这样描述:3文钱可以买1只公鸡,2文钱可以 买一只母鸡,1文钱可以买3只小鸡。用100文钱 买100只鸡,那么各有公鸡、母鸡、小鸡多少只? 2、输入一个正整数N,把它分解成质因子相乘的 形式。 如:36=1 X 2 X 2 X 3 X 3; 19=1 X 19 (提示:设因子为I,从2开始到N,让N重复被I 除,如果能整除,则用商取代N,I为一个因子; 如果不能整除,再将I增大,继续以上操作,直到 I等于N。)

作业
?

?

1、编写一个译码程序,把一个英语句子译成数字 代码。译码规则是以数字1代替字母A,数字2代 替字母B,……,26代替字母Z,如遇空格则打印 一个星号‘*’,英文句子以‘.‘结束。 2、五个好朋友聚在一起,第一个带了很多糖块送 给大家,他使每人的糖块在原来基础上翻了一倍。 接着第二个人也同样向每人发糖块,他也使每人 的糖块翻了一倍。然后第三、第四、第五个人都 一照此办理。奇怪的是经过这样互赠糖块之后, 发现每个人的糖块都一样是32块,请问各个朋友 原先各有多少块糖?


更多相关文章:

非常超级学习网 fccjxxw.com

copyright ©right 2010-2021。
非常超级学习网内容来自网络,如有侵犯请联系客服。zhit325@126.com|网站地图