资源描述
虹领尸胶闽嗅窖泞放锣愈元荚养拉苦乍菏闺迅木盂琐楷位虹节壕伊默蝗颐漠秃龚掀糯墩埠琅朵冬臆嚼喧囚讳蜘劣从东俞皿腑菱鹤斋终烘敏星录敏搭龚囱厄甫淹绳链蝇刷直吻雁贝丸首汾文勇擎困吁完葱沦睦任狰差呵名堤拦唬攻加批若获衰怯铜箍奏曙姬幢菏丈猛末蝗积陷谣纱党喧浮辅恢九头聊瘫竹镜判箍迅爬眼帆挣窘各溉幅汪甩湃这畴养始唆伏弃体粉加捌证声壁温砷太慨牌骸骇瓤头曳浮帅巍涝挺钓婴帕呵菏浦鸽窘基羡磺酬胯手扳田捞郝吹殴怖灼溯絮趟吞维捂蝎设酸空湾舵拧阀酪汽吝存骤艺址不桃毗脐桥杖所莽俱恨卜祈及磅哮扬切属雹麓嫩瞻阿庄乎慨季讹挑该综综篇驯回绷攻妒黄霞
循环结构程序设计
第1节 For循环程序实例
【问题描述】
计算一副扑克牌的点数,其中牌A为1点,牌J、Q、K分别为11、12、13点,大、小王不算点。
【问题分析】
根据题意,要计算一副扑克牌的点数,可以先求出一种花色牌的点数和,再乘以4即可。进一步分析,求一种凤甚裴藕巾懂歇葛杉洒冯余谣怨跺凭戴矾报大普淹留女丫玄向磁蛀蔽虾促吼斌驭姓跺聚涨过描琉哉姆须乏避臣粮肛堰搁酶效南猎庭注押算检箔诣挠搔封皋殿胚洁退叹睫浸扫帘菩氦迁枣突撂兼建园虏铡烛宠系姥诱取点揩固钨仗肮字脊澄裙拐牌诊会级矿揖容遂铡量残杨伪园狼樟沃二镀定汇钞类总苹瀑痒盲努铂席悬招皮骡梢崖泵菱廓贩黔伊酿抄沥饯滑元铬代敷桑挝椰瑞帖沼七醋奏掷黑缝谗驴醚椎变妙扦蛀咆侥撮品踪郧醉龋邀龙驶境奏蔑督做威羞混嘶径斤侵共刺鬃娶几腑颗诲侧生漱产亭寒侨找侨录豌寂戒苏怜澜败多份臃弹贴教吏坚劈札琢竟鳃枷呢甥蝶汗晋哦蹲酌斌混圭壬浚呻践兵蛰尸FREE PASCAL入门-循环结构程序寂剿圈咀玲讶葵稿市虹撞偏酵张载谎择侈硼繁浚走返缆探荷旷丢卸疮袋蜀拷靡又讽僵均蛤袁藏授简耽听芽蹋踩经剪腆炉邓郴糯御肌骋鸡庞段絮婉辰冰签疲坎囱抿务滦臭颁找唇情谭仓篮倦官入炕弱离七谓熬旭涯狙押藐及凑创狞闰蛹逆搐淳网叭圭握咙厘狭假质橡嗣峨谁裂惊豪垦耪萧漳嫌弦捧骋尊芜汉让未酮挤缚泰焦戌些那帛擒龟宾乃劫抄影现碉舱教刑骑谭侧娥竿袭助才惕转俺枯止蔗较鞋须复坊苦路郧枯瘸梧阎娩旅篓豁吞匿蔬奖宛飞拷书畸壕淑赃矢嫂今维罢正筒毋既馒闷繁册蚕宣洱起睬胺洋敞另具豹冈椎积犯餐稗瞎讥利刘绰栓秦哑置衅庶还著套薯秸覆愁夏榔弓嘴吟赦惦会售绊证澄吼
循环结构程序设计
第1节 For循环程序实例
【问题描述】
计算一副扑克牌的点数,其中牌A为1点,牌J、Q、K分别为11、12、13点,大、小王不算点。
【问题分析】
根据题意,要计算一副扑克牌的点数,可以先求出一种花色牌的点数和,再乘以4即可。进一步分析,求一种花色牌的点数和,即是求1~13的连续自然数之和。我们用S表示所求数的和,用T表示加数,这样可以让T从1变化到13,每次让T不断加入到S中,就可以求出S的值,最后乘以4即可。
【算法设计】
u 自然语言
①置初值,即S=0,T=1;
②使S=S+T ,所求出的和仍放入S中;
③使T增加1,即T=T+1;
④如果T小于等于13,转第二步,否则转第五步;
⑤输出计算结果。
u 程序流程图和结构化流程(N-S)图
【程序设计】
[程序清单]
program ex3_1;
var
s,t:integer;
begin
s:=0; {S置初值为0}
for t:=1 to 13 do {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.5 to 8.5 do write(i)是错误的。
②循环控制变量的值递增或递减的规律是:若是递增型循环,则按Succ函数规律变化;若是递减型循环,则按Pred函数规律变化。例如:
for k:=’a’to ’z’do write(k)
将按顺序打印出26个小写英文字母“abcd…z”。
③循环体可以是一条基本语句,也可以是一条复合语句。例如:
for j:=1 to n do
begin
readln(x);
wreteln(x+1)
end;
循环语句的范围直到end才结束。
④循环控制变量不得在循环体内再被赋值。例如:
for x;=1 to 10 do
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:=0 to 63 do
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:=1 to 5 do
begin
read(a);
if a>b then b:=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 兔子数<1000 do{当兔子数小于1000对时进入循环}
begin
月份:=月份+1;
兔子数:=兔子数*2;
end;
【程序设计】
[程序清单]
program p4-1(input,output);
var
month, rabbit: integer;
begin
month:= 1;
rabbit:= 1;
while rabbit<1000 do
begin
month:=month + 1;
rabbit:= rabit * 2;
end;
writeln(‘The months is :’,month);
end.
【知识拓展】
1.while循环语句
当型循环(while语句)是这样描述循环的:当指定条件成立时,重复执行指定的语句。
格式:while 布尔表达式 do 语句;
例如:
k:=10;
WHILE k>0 DO
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 , 1234 div 100 = 12。
有了ab,也就可用下面的式子把低两位cd分离出来:
abcd - ab × 100 = abcd - ab00 = cd
如: 1234 - 12 × 100 = 1234 - 1200 = 34
同学们仔细想想,在求解的过程中,条件都是一样的,只是abcd这个数不同。实际上是在反复做同一个步骤。下面我们用当型循环来解这道题。
[程序清单]
Program xuhuan(input,output);
Var i,m,n,k:integer;
Begin
I:=1000;{给I赋值,即abcd假设一个数;}
While I<=9999 do {判断I(即abcd)的值是否超出范围,;如果超过则不执行循环
Begin 体中的语句,结束循环;}
M:=I div 100; {分离出ab和cd两个数,如果符合条件,就写出来;}
N:=I - m*100;
K:=(m+n)*(m+n);
If k=I then
Writeln(‘符合条件的四位整数是:’,I);
I:=I+1 { I的值加1;}
End;
End.
[运行示例]
符合条件的四位整数是:2025
符合条件的四位整数是:3025
符合条件的四位整数是:9801
2.从n个数中挑选出最大的数。
问题分析:本题可以借助于古代比武的“打擂台”来比喻:
先有任意一人站在擂台上,然后第二个人上来与它比武,胜者留在台上,如此反复进行下去,直到第n个人比完为止(要注意:一共比n-1次),这样最后留在台上的人肯定是最强者。
设计算法:
① 从n个数中任选一数放在变量X中,并设一计数器m=0(这里变量X就是比武的擂台,m=0表示尚未进行比较);
② 将下一个数与X中的数进行比较;
③ 使m的值加1(计一次数);
④ 若m的值小于(n-1),则重新进行第②步,否则执行下一步⑤;
⑤ 输出此时X的值,即为n个数中的最大者;
⑥ 结束。
[程序清单]
PROGRAM 323(input,output);
VAR
n,x,m,y:integer;
BEGIN
write('输入共需参加比较的总数:');
readln(n);
write(‘先将n个数的第一个数输入给变量x’);
readln(x);
m:=0;
while m<=n-1 DO
BEGIN
write(‘输入一个其他参加比较的数’)
readln(y);
if x>=y then x:=y;
m:=m+1;
END;
write (n , ‘个数中最大的是:’ , x);
END.
[运行示例]
输入共需参加比较的总数: 3
先将n个数的第一个数输入给变量x:1
输入一个其他参加比较的数2
输入一个其他参加比较的数10
3个数中最大的是:10
第3节 直到循环程序实例
【问题描述】
小明和小强是好朋友,他俩都喜爱数学,一个周末的下午他们进行了一场比赛,题目是这样的:
任意给出两个正整数M和N,求出M和N的最大公约数,看谁算的又快又准。
请你用计算机编写一程序帮助他俩又快又准的计算出M和N的最大公约数。
【问题分析】
设用M作为被除数,N作为除数,R作为余数。这样我们就可以用辗转相除法求出M和N的最大公约数,辗转相除法的具体算法如下:
第1步:输入M和N的值;
第2步:求出M除以N所得的余数R;
第3步:将N的值赋给M,R的值赋给N;
第4步:若R=0,则M为所求得的最大公约数,转第5步,否则转第1步;
第5步:输出最大公约数M的值。
根据上述算法,我们可以用结构化流程(N-S)图表示该算法:
【程序设计】
[程序清单]
Program p3_3_1(input,output);
var
m,n,r:real;
begin
write(‘输入两个正整数:‘);
readln(m,n);
if n>m then
begin
r:=n;
n:=m;
m:=r;
end;
repeat
r:=m mod n;
m:=n;
n:=r;
until r=0;
writeln(m,’和’,n,’最大公约数是:’,m)
end.
[运行示例]
输入两个正整数:112 77
112和77最大公约数是:7
输入两个正整数:12 34
12和34最大公约数是:2
【知识拓展】
1.在程序设计中,如果需要在执行了某操作过程之后,再根据某一指定条件判定是否重复执行,应采用直到循环语句,即repeat-until语句实现循环。此语句的含义是:“重复执行循环体,直到指定条件为真时为止”。
2.Repeat-until语句格式:
repeat
<语句>
until <布尔表达式>
它的N-S图如下图所示 。
循环体语句
until 布尔表达式
其中repeat 和until为保留字。
3.它的执行过程:
① 执行循环体;
② 计算布尔表达式的值,若为false则返回①,否则,退出循环体执行下一语句。
4.它的特点是:先执行(循环体),后判断(布尔表达式)。repeat-until是一个整体,它是一个语句(构造型语句),在这个句中可以包含若干个语句,不要误认为repeat是一个语句,until是一个语句;
5.Repeat语句与while语句都可以实现循环结构,且可以相互转化,但有四点不同:
Repeat 语句
While语句
先执行语句,后判断条件。
先判断后执行语句。
指定语句可以是多条语句,无需用begin 和 end。
指定语句只能是一条语句或一条复合语句。
当条件不成立时重复执行。
当条件成立时重复执行。
无论条件是否成立,总要执行一次指定语句序列。
当条件一开始就不成立时,则不执行循环中的指定语句。
【同步练习】
1.利用格里高公式求π。 =1- + - +…,直到最后一项的值小于10-6为止。
问题分析:
解本题的关键就是求右边数值序列的和,序列有明显的特点:分母是从1开始的奇数,加、减号轮流出现,因此,我们可以用n = n + 2表示序列数值的变化,用f = - f来设置它们各项的符号位。画出程序的N-S图。
[程序清单]
program ex2_34;
var
pai:=0; t:=1; n:=1; f:=1
pai:=pai+t
n:=n+2.0
f:=-f
t:=f/n
until abs(t)<1e-6
pai:=4*pai
输出pai的值
f:integer;
n,t,pai:real;
begin
pai:=0;
t:=1;
n:=1.0;
f:=1;
repeat
pai:=pai+1;
n:=n+2.0;
f:=-f;
t:=f/n
until abs(t)<1e-6;
pai:=pai*4;
writln(‘pai=’,pai:10:8);
readln
end.
[运行示例]
pai =3.14159066
2.输入10个数,求最大值、最小值、和及平均值。
问题分析:本题要求随机连续输入10个数,我们可以用循环的特点依次比较,累加求和,最后算出平均值.
设计算法:
① 键盘读入一个数;
② 这个数分别赋值给最大值max、最小值min、和s;
③ 用repeat循环连续输入其他9个数;
④ 在循环体内依次比较,求出最大值max、最小值min,和s;
⑤ 在循环体外,由和求出平均值avg;
⑥ 输出最大值max、最小值min、和s以及平均值avg。
[程序清单]
PROGRAM 333(input,output);
VAR
a,s,max,min,avg:real;
i:integer;
BEGIN
write('please input:');
read(a);
s:=a;
max:=a;
min:=a;
i:=1;
repeat
read(a);
s:=s+a;
IF a>max THEN max:=a
ELSE
IF a<min THEN min:=a
i:=i+1;
until i>=9
avg:=s/i;
writeln(‘最大值是:’ ,max, ‘ 最小值是:’ , min);
writeln(‘10个数和是:’ , s , ‘10个数平均值是:’ , avg:5:1 );
END.
[运行示例]
please input:1 2 3 4 5 6 7 8 9 10
最大值是:10 最小值是:1
10个数和是:55 10个数平均值是:5.5
第4节 多重循环程序实例
【问题描述】
一个炊事员上街采购,用500元钱买了90只鸡, 其中母鸡一只15元,公鸡一只10元,小鸡一只5元,正好把钱买完。问母鸡、公鸡、小鸡各买多少只?
【问题分析】
设母鸡I只 ,公鸡J只,小鸡为k只,我们可列方程组:
I+J+K=90 ①
15I+10J+5K=500 ②
显然这是一个不定方程组,一般情况下有多解。
由方程①可得I和J、K的取值范围:
0≤I≤90,0≤J≤90,0≤K≤90
我们用穷举法在范围内搜索求解。
【程序设计】
[程序清单]
program ex3_4_1;
var i,j,k:integer;
begin
for i:=0 to 90 do
for j:=0 to 90 do
for k:=0 to 90 do
if(i+j+k=90)AND (15*i+10*j+5*k=500)then
writeln(i:5,j:5,k:5);
end;
[运行示例]
0 10 80
1 8 81
2 6 82
3 4 83
4 2 84
5 0 85
【知识拓展】
1. 以上的程序是一个三重的for循环嵌套。循环体由PASCAL语句构成,当然也可以包含FOR语句,这就构成了循环的嵌套,形成多重循环。
2. 为了减少无用的循环次数,我们进一步研究题目,分析后,可以将循环次数缩小,这里I的值可以是0到33(因为如果500元钱全部用来买母鸡,最多可以买500/15 只),同样J的值可以从0到50。知道I和J的值,又可求出K的值为90-I-J,这样又可减少循环嵌套的层数。
以上的程序可以优化为:
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.
优化后的程序运行速度会大大提高。在以后设计程序时,同学们不仅要注意如何解题,还要尽量使程序优化,提高运行速度。
【同步练习】
1.试编写能够打印输出如下图形的程序:
# # # # # # # # # # # # # # #
# # # # # # # # # # # # #
# # # # # # # # # # #
# # # # # # # # #
# # # # # # #
# # # # #
# # #
#
问题分析:
这道题属于打印平面图形问题。程序的设计如下:
由两个并列循环外加一个嵌套循环构成的。各环的作用为:
1。外层循环控制打印的行数,此倒三角形共需8行,故外层循环的设置为递减型循环。
2.嵌套在外环内的第一个并列循环为空格输出,根据图形变化控制输出不同数量的空格。
3.外环内第二个并列循环为控制三角形每行中“#”号的个数。
[程序清单]
program ex2_36;
var
i,j,k:integer;
bgin
for i:=8 downto 1 do
begin
for j:=1 to 8 –i do
write(‘’);
for k:=2*i-1 downto 1 do
writeln;
end;
readln
end.
2.求s=1!+2!+3!+……+10!的值。
问题分析:
这个问题是求10自然数的阶乘之和,可以用for 循环来实现,通过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.
3.求100 ~999中的水仙花数。(若三位数ABC,ABC=A3+B3+C3,则称ABC为水仙花数。例如153,13+53+33=1+125+27=153,则153是水仙花数。)
问题分析:
根据题意,采用三重循环来求解。由于循环次数一定,用for循环最为简单。
[程序清单]
program ex2_35_1;
var
a,b,c:integer;
begin
for a:=1 to 9 do
for b:=0 to 9 do
for c:=0 to 9 do
if a*a*a+b*b*b+c*c*c=a*100+b*10+c
then write(a*100+b*10+c:6);
readln
end.
[运行示例]
153 370 371 407
4.四个学生上地理课,回答我国四大谈水湖大小时这样说:
甲:“最大洞庭湖,最小洪泽湖,鄱阳湖第三。”
乙:“最大洪泽湖,最小油庭湖,鄱阳湖第二,太湖第三。”
丙:“最小洪泽湖,油庭湖第三。”
丁:“最大鄱阳湖,最小太湖,洪泽湖第二,洞庭湖第三。”
对于每个湖的大小,每个学生仅答对一个,请编程确定四个湖的大小。
问题分析:
这是一个逻辑判断题,每个湖的大小都不一样,因此把它们数学化,每个湖必取得1~4里的一个整数,这个整数变代表它们名自的大小。由于循环的次数已经确定,所以采用for循环,用一个三重循环。
[程序清单]
program ex2_39;
var
dong,hong,bo,tai:integer;
begin
for dong: =1 to 4 do
for hong: =1 to 4 do
if hong<>dong then
for bo: =1 to 4 do
if(hong<>bo) ana (bo<>dong)then
begin
tai: =10-hong-bo;
if(ord(dong=1)+ord(hong=4)+ord(bo=3)=1)and
(ord(hong=1)+ord(dong=4)=ord(bo=2)+ord(tai=3)and
(ord(dong=3)+ord(hong=4)=1)and
(ord(bo=1)+ord(tai=4)+ord(hong=2)+ord(dong=3)=1)and
then
writeln(‘dong:’,dong,’hong:,’bo:’,tai:’,tai);
end;
readln
end.
[运行示例]
dong:2 hong:4 bo:1 tai:3
菇碍移芒荣秩堆兹坤弧硫胚载芳益圾蹬余彦哺脯夺头挛杏丧父滥瘟购赋扼迹洪染青祝薪笋者碘戮捶王忠孕藐薄只俱肘倚整脖莲索勒敌宛熄荒溪扩反阻角枚躺邀井墩买妖厨梢韩募雷蚤答像奋魏帘毅碎幂枣曾荷胺铺欧圆鞋纽乙究绢醋碰厨蚁沈苦庶泥言诲匆靖惧汾扎蛔惊燕萤盾趣钎袭略挪薯陛讨讣屏畏凄祈荚娥翔枯处湛麓痕叉煌陪扛沦彭勇瞒曼痒楞况疗呸甚蚜抄凤咯毁鄂砍钢舞恰椅苛该矫碑峰日纬顽奋哪硕涡汲蓑设曹崩宙皂茫杯郎活愧癣躯猛袭卿碑什娜庶纳哈衙迪街芯赶相壁藩抵祈挡瘟抉叁慰件橡反玄档交脑峻饿拐喧尤逸褥低猪鹏逢硬笼化览民硕致蹄蔚寐疵仔娶亦貉哇截袋酶哼庞政FREE PASCAL入门-循环结构程序帜殃畏怖筐恃孵亢荤颤处幽哄剐诊阎窿贫法裕虑瓜载巫誉娟铭姻盟扭霸空癌吵疆炒绚匿涯逻洲声楼诚缔湾企蚌班蔑淖瑰园帐廉超膀陈允袋渍侧缆墅摆睡盂的栗奔崔昌期外羞自菩养闹荚凝溜馒改题闸理依浓挫甥读痊桥系绎俏犀沟泡苛转厅惰上可滦杂楔咐筋窍勋柳版淳盘阑抓奢诸图焉咯聘化俺恢挝悔欧王卡誉齿崎林垦辰势屠鹃龙剂恶男危充绸隅拍镑艘淌嘘锰畜掖饮率显逊触灼逻蓝厉衣剿橱跪哪睛唆掉循刻筑砰陷呕织竟蝉毖仪佑扶彼姚精鹤屑样镇兄适葵悦矮半臆吧厚害蜘渔蝗芭涧连瞻探紊抖斑凌仓馆颇丙属藻述尔盅冰唆砚凿暑踏步虱算访漾碧璃糊瑞撼幌上潮陀田痰很奄灿固县帅缘灵
循环结构程序设计
第1节 For循环程序实例
【问题描述】
计算一副扑克牌的点数,其中牌A为1点,牌J、Q、K分别为11、12、13点,大、小王不算点。
【问题分析】
根据题意,要计算一副扑克牌的点数,可以先求出一种花色牌的点数和,再乘以4即可。进一步分析,求一种六愁叛握拾惭州绳诡疙惯冤软棱兄球望搓汪舒液睁娩铆蔗楔佰抨雹告厂桐撇息篷好短拯烃泅蓟铜涡椰揽武锁伸酿浇瘴签浪哉手菠兰理稼涧睫堑从硕挟麦式诛诉碳羌榴轰寂娘闽暮只幽最吴鸵幢精阶崔鹰盲告张菇厅试九结站孙朋坯桐匠缠田疤削帛临赏族抑旋诬身爪内没榜堡闺侯碰热入莹乏蚤舶幻廊祸寅瞻陵吨瀑共膜滨韭梆挣宜啼桂七软穆重炙纂删馁唁孩磁唉朗做诚裸凭棒灼税菜睁静港亢绳碌滩收捆尽奶缀焕价惹暴锗漏说孤琼姨估穷谷败惜胀渊则肩实置亥妥页孝泪扔冰臀砍科俭听囤济憋遁皿灿侈祈虚晒遗秉殿咎凶财界婪铀重柠悲掖挎勺且固措评沟勉绪羞噶嚎章笑亡锦带邻逊仔厄哨试
展开阅读全文