回答即可得2分经验值第三章 循环程序
在编程中经常遇到需要多次规律相同的重复处理,这就是循环问题。Turbo Pascal采用不同的循环方式来实现,常用的环循有三种: for、repeat、while.
第一节 for 循环
for循环是一种自动计数型循环。
[例3.1] 试打印出1~20的自然数。
解:① 用a代表1~20各数,同时也用a兼作计数,以控制循环次数;
② 让a从1开始;
③ 输出a;
④ a自动计数(加1),如果未超越所规定的循环范围则重复步骤③,否则结束循环。
Pascal程序:
Program Exam12;
Var a: byte;
Begin
for a:=1 to 20 do
Writeln (a);
Readln
End.
程序中 for a:=1 to 20 do Writeln (a); 是for循环语句。
for 循环语句有两种格式:
(1) for 循环变量:=初值 To 终值 do 语句;
(2) for 循环变量:=初值 downto 终值 do 语句;
第(1)种格式的初值小于等于终值,循环变量值按自动加1递增变化;
第(2)种格式的初值大于或等于终值,循环变量值按自动减1递减变化。for 循环是 (以递增1或以递减1) 计数型循环。
比如: 若将[例3.1]程序改为倒计数(递减)循环,则输出20~1的自然数数:
Program Exam31;
Var a: byte;
Begin
for a:=20 downto 1 do
Writeln(a) ;
Readln
End.
[例3.2]打印出30至60的偶数。]
解:
方法一:
= 1 \* GB3 ①设a表示30至60的所有的数,可用for循环列出;
= 2 \* GB3 ②用式子 a mod 2=0 筛选出其中的偶数并输出。
Pascal程序:
Program ex32;
Var a : integer;
Begin
For a := 30 to 60 do
If (a mod 2=0) then writeln(a);
Readln;
End.
在这个程序中,for循环后的循环语句是一个条件分支语句。
方法二:我们知道,在式子a=2*n中,若n取自然数1、2、3、…,时,则a依次得到偶数2、4、6、…。因此要想得到30至60的偶数,就可以让上面式子中的n取15至30的自然数就可以了。所以本题还可以按以下步骤处理:
= 1 \* GB3 ①设n表示15至30的所有自然数,可用for循环列出;
= 2 \* GB3 ②用式子 a := 2*n 求出其中的偶数;
= 3 \* GB3 ③将结果输出至屏幕。
Pascal程序:
Program ex32;
Begin
For n := 15 to 30 do
Begin
a := 2*n;
Writeln(a);
End;
Readln;
End.
[例3.3]自然数求和:编一个程序,求从1至100的自然数的和。
解:① 令S=0;
② 令a表示1至100的自然数,用循环列出;
③ 将这些自然数用公式S:=S+a 逐一累加到S中去;
= 4 \* GB3 ④ 循环结束后,S即为1至100的自然数的和,输出即可。
Pascal程序:
Program ex33;
var s,a : integer;
Begin
S := 0;
For a := 1 to 100 do
S := S+a;
Writeln(‘S=’,S);
Readln;
End.
[例3.4]一个两位数x,将它的个位数字与十位数字对调后得到一个新数y,此时y恰好比x大36,请编程求出所有这样的两位数。
解:① 用for循环列举出所有的两位数,x为循环变量;
② 用公式a:= x div 10分离出x的十位数字;
③ 用公式b:= x mod 10分离出x的个位数字;
④ 用公式y:= b*10+a合成新数y;
= 5 \* GB3 ⑤ 用式子y-x=36筛选出符合条件的数x并输出。
Pascal程序:
Program ex34;
Begin
For x := 10 to 99 do
Begin
a := x div 10;
b := x mod 10;
y := b*10+a;
if y-x=36 then writeln(x);
End;
Readln;
End.
[例3.5] 把整数3025从中剪开分为30和25两个数,此时再将这两数之和平方,(30+25)2=3025计算结果又等于原数。求所有符合这样条件的四位数。
解:设符合条件的四位数为N,它应当是一个完全平方数,用(a*a)表示。
① 为了确保N=(a*a)在四位数(1000~9999)范围内,可确定a在32~99循环;
② 计算N=a*a;将四位数N拆分为两个数n1和n2;
③ 若满足条件(n1+n2)*(n1+n2)=N 就输出 N 。
Pascal程序:
Program Exam35;
Var N,a, x,n1,n2: Integer;
Begin
for a:=32 to 99 do
begin
N:=a*a;
n1:= N div 100; {拆取四位数的前两位数}
n2:= N-n1*100; {拆取四位数的后两位数}
X:=n1+n2;
if x*x=N then writeln (N);
end;
Readln
End.
[例3.6]用“*”号打印出如下的长方形图案。
*********
*********
*********
*********
解:① 上面给出的图例共有4行,我们可以用一个循环控制行的变化;
② 在每行中又有9列,我们可以在前面控制行的循环中再套一个循环来控制列的变化。
Pascal程序:
Program ex36;
Begin
For a := 1 to 4 do {外循环控制行的变化}
Begin
For b := 1 to 9 do {内循环控制列的变化}
write(‘*’);
Writeln; {输出一行的“*”后换行}
End;
Readln;
End.
程序中的循环对于a的每个值都包含着一个b=(1~9)次的内循环。外循环for a 将内循环for b 包含在里面,称为for循环的嵌套。嵌套形式如:
for a:=n1 to n2 do
for b:=m1 to m2 do 循环体语句;
[例3.7] 打印出九九乘法表:
解:设a为被乘数,范围为1~9;b为乘数,范围为1~a;乘式为a*b=(a,b的乘积),则
a=1: b=1~a 1*1=1
a=2: b=1~a 2*1=2 2*2=4
a=3: b=1~a 3*1=3 3*2=6 3*3=9
a=4: b=1~a 4*1=4 4*2=8 4*3=13 4*4=16
: :
a=9 b=1~a 9*1=9 9*2=18 … 9*9=81
⑴从上面分解的横行中看到共有9行,这里的“行”数变化与a的变化从1~9相同,可用a控制“行”的循环;
⑵每“行”里面相乘的次数与b的范围相关,由b控制每“行”里面的“内部”循环;
⑶内循环被包含在最里层,执行完每“行”的内部循环,就到下一“行”去执行新“行”里面的循环,每“行”都拥有形式相同的( b=1~a )内循环。
即每到一“行”都要执行该“行”的内循环。这里所指的“行”可以理解成抽象的行,不一定是实际上具体对应的行,可以是一个处理“块”。
Pascal程序:
Program Exam37;
Var a,b: byte;
Begin
for a:=1 to 9 do {外循环 }
begin
for b:=1 to a do {内循环 }
write(a,’* ’,b,’= ’,a*b,’ ’:3);
writeln
end;
Readln
End.
根据这种格式还可以实现多层循环嵌套,例如:
for a:=n1 to n2 do
for b:=m1 to m2 do
for c:=k1 to k2 do 循环体语句;
[例3.8]从七张扑克牌中任取三张,有几种组合方法?请编程输出所有组合形式。
解:设每次取出三张分别为a,b,c。用三重循环分别从1~7的范围里取值;为了排除取到重号,用(a-b)*(b-c)*(a-c) < >0进行判断。
Pascal程序:
program Exam38;
const n=7;
var a,b,c,t: integer;
Begin
t:=0;
for a:=1 to n do
for b:=1 to n do
for c:=1 to n do
if (a-b) * (b-c) * (a-c) < >0 then
Begin
inc (t);
writeln (a:3, b:3, c:3)
End;
writeln ( total:, t :5);
readln
End.
[例3.9] 数学上把除了1和它本身,没有别的数能够整除它的自然数叫做素数(或质数)。现在由键盘输入一个自然数N,编程判断N是否是素数,是则输出“Yes”,否则输出“No”。
解:根据定义,对于给定的自然数N,只需判断除1和它本身外,还有没有第三个自然数即可。
① 令K从1循环至N;
② 根据N mod K是否为0可统计K的约数的个数;
③ 若N的约数的个数超过2个,则判定N不是素数。
Pascal程序:
Program Exam39;
Var n,m,k,t: integer;
Begin
write(‘N=’);
ReadLn(N);
t:=0;
for k:=1 to N do {外循环 }
if N mod k=0 then t := t+1; {如果N是奇数 }
if t>2 then writeln(‘No’)
else writeln(‘Yes’);
Readln;
End.
程序中的变量yse为布尔(或逻辑)类型(Boolean)。布尔值只有两个:
True(真) False(假)
布尔值与条件判断结果为真(条件成立)或为假(条件不成立)的作用相同,常用于条件语句和循环语句中。
上面程序中用 if yes and (t mod 7=0) then writeln;实现每行打印七个素数换行,程序中布尔变量yes为真,在逻辑上表示是素数;关系式(t mod 7=0) 的值为真时,表示该行输出素数巳是7个;用and将这两个“条件”连起来是作一种布尔(逻辑)运算。
Pascal 共有四种逻辑运算符:
① and (与) 两条件都为True时,其结果值为True;否则为False;
② or (或) 两条件中只要有一个为True ;其结果值为True;否则为False;
③ xor (异或) 两条件的逻辑值不相同时,其结果值为True;否则为False;
④ not (非) 条件为True时,其结果值为False;否则为True;(取反)
习题3.1:
1.打印出1至20的平方数表。
2.打印出100至200之间的奇数。
3. 鸡兔同笼(用for循环程序完成)
4.一辆快车和一辆慢车开往同一地点,快车票价为18元,慢车票价为13. 5元,共售出400张,共计5940元,求快车票和慢车票各多少张?.
5.求出能被5整除的所有四位数的和。
6.在下面式子中的二个□内填入一个合适的同样的数字,使等式成立。
□3*6528=3□*8256
7.有一个三位数,它的各位数字之和的11倍恰好等于它自身,请编程求出这个三位数。
8.在自然数中,如果一个三位数等于自身各位数字之立方和,则这个三位数就称为是水仙花数。如:153=13+53+33,所以153是一个水仙花数。求所有的水仙花数。
9.编程序打印出下列图案:
平行四边形 等腰三解形 菱形
****** * *
****** *** ***
****** ***** *****
****** ******* ***
****** ********* *
10.编程打印出如下图案:
1
222
33333
4444444
555555555
11.有三种明信片:第一种每套一张,售价2元;第二种每套一张,售价4元; 第三种每套9张,售价2元。现用100元钱要买100张明信片,要求每种明信片至少要买一套,问三种明信片应各买几套?请输出全部购买方案。
12.某人想把一元钱换成伍分、贰分、壹分这样的零钱, 在这三种零钱中每种零钱都至少各有一个的情况下,共有多少种兑换方案。并打出这些方案。
13.
14. 输出100 以内的全部素数,要求每行显示5 个。
15.A、B两个自然数的和、差、积、商四个数加起来等于243,求A、B两数。
16.百钱买百鸡:今有钱100元,要买100只鸡,公鸡3元一只,母鸡1元一只,小鸡1元3只,若公鸡、母鸡和小鸡都至少要买1只,请编程求出恰好用完100元钱的所有的买鸡方案。
,回答被采纳可同步增加经验值和财富值
温馨提示:内容为网友见解,仅供参考
free pascal 是什么
Free Pascal是一种开源的Pascal和Object Pascal编程语言编译器和运行时系统。它支持多种操作系统和硬件平台,并允许开发者编写跨平台的Pascal应用程序。Free Pascal的核心特点之一是它对Pascal和Object Pascal语言的广泛支持。Pascal是一种结构化的编程语言,以其简洁的语法和强大的功能而著称。Object Pascal则...
FreePascal同步训练编辑推荐
《FreePascal同步训练》教材的编写团队深入理解青少年的学习特点,注重理论与实践相结合,旨在帮助学习者在轻松愉快的氛围中掌握编程知识,提升信息学竞赛的实战能力。通过本书的学习,学习者不仅能够掌握FreePascal语言的基础知识,还能在信息学竞赛中取得优异的成绩。因此,这本书是青少年信息学竞赛培训不可或...
Free Pascal简介
Free Pascal是一款由国际团队精心打造的Windows兼容的Pascal语言编译器,它在设计上与Delphi相似,特别适合开发Windows应用程序。相较于早期的Turbo Pascal和Borland Pascal,Free Pascal展现出了显著的优势。以往的PASCAL编译器,如Turbo Pascal和Borland Pascal,由于资源限制,往往无法充分利用大量的内存。然而,...
FreePascal更改语言
首先,将鼠标光标移动至 Free Pascal 的窗口顶部,找到并点击标题栏以展开选项菜单。在菜单中选择“默认值”选项,系统会弹出一个属性窗口。在属性窗口的底部,你会发现一个名为“默认代码页”的下拉菜单。从这里,你可以根据需要选择不同的语言代码页。例如,选择“437(OEM-美国)”代码页可将语言设置...
如何利用free PASCAL正确编写程序
我们以下的示范,是以时下比较流行的Borland Pascal 7.0为例子,其他的编程环境可能略有不同,但大致上是一致的。我们先编一个比较简单的程序,看看程序是如何调试的。program tiaoshi;var i:integer;begin for i:=1 to 300 do begin if i mod 2 = 0 then if i mod 3 = 0 then if i mo...
free pascal的编程拜托了
for i:=0 to 8 do begin for j:=1 to abs(4-i) do write(' ');for k:=1 to 2*(5-abs(4-i))-1 do write(i div 2);for j:=1 to abs(4-i) do write(' ');writeln;end;readln;end.var i,j,k:integer;begin for i:=1 to 9 do begin for j:=1 to abs(5-i...
用free pascal 编一元二次方程编程步骤
我做的是直接读入了ax2+bx+c中的a,b,c var a,b,c,d,e,f:real;begin readln(a,b,c);d:=-b;e:=sprt(b*b-4*a*c);f:=2a;x1:=(d+e)\/f;x2:=(d-e)\/f;writeln(x1,x2);end;应该对的
关于Free Pascal编程的几个问题。
按alt+F9是编译,按了如果有错会出现如图的界面,会告诉你坐标,说的很清楚了。如果对的话就会提示"press any key";如果你是直接保存,那就在你安装的那个地方,比如说我的装在D:\\FPC里,那文件就在D:\\FPC\\2.4.0\\bin\\i386-win32\\文件夹里面。(扩展名为.pas)...
free pascal 是什么
Free Pascal是个由国际组织开发的完全的win32的pascal语言编译器,类似delphi,可编写windows程序。目前,该项目的网站为www.freepascal.org,最新版本为2系列。此前被广泛使用的PASCAL编译器普遍为Turbo Pascal & Borland pascal。但是它们可用的空间十分有限。而Free Pascal理论上可以使用4GB内存。所以在利用...
pascal语言编程问题(free pascal
如下,能给满意回答吗,谢谢 program prime;var a : array [2..1000] of boolean;i , p : integer;begin read(n);for i:=2 to n do a[i]:=true; {a数组初始化,全部置true} for i:=2 to n div 2 do if a[i] then begin { a[i] 相当于 a[i]=true...