for循环语句练习题讲解及其它循环结构)20130815
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
运行调试如下程序,观察现象。 Program Ex1_4 Var i,S:integer; Begin s:=0; For i:=0 to 100 do begin i:=i+1; S:=S+i;end; Writeln(‘1+2+3+…+’,n,’=’,s); End.
练习: 1.计算并输出1*3*5*7*(2N-1)的积.(n<10) 2.计算s=1*2+3*4+5*6+7*8+…+(2N-1)*2n 的积.(n<1000)
end.
9
program ex11; var i,j,s:integer; Begin for i:=1 to 1000 do begin s:=0; for j:=1 to (i div 2) do if i mod j=0 then s:=s+j; if s=i then write(i,' ');
end;
End.
var a:array[0..200] of integer;
i,n,j,m,s1,s2:integer;
p:boolean; Begin readln(n); //生成质数 for i:=2 to 1000 do
begin p:=true;
for j:=1 to a[0] do if i mod a[j]=0 then begin p:=false;break;end; if p then begin a[0]:=a[0]+1;a[a[0]]:=i;end;
练习13.找出1-9999中的所有史密斯数(可 以分解的整数,且所有数位上的数字和等于 其全部素数的数字总和。如:9975就是史密 斯数,因为:9975=3*5*5*7*9; 9+9+7+5=30; 1+3+5+5+7+19=30)。
8。参考答案: var i,a:longint; f:boolean; begin
说明: ①repeat语句的特点是:先执行循环,后判 断结束条件,因而至少要执行一次循环体。 ②repeat-until是一个整体,它是一个(构 造型)语句,不要误认为repeat是一个语句, until是另一个语句。 ③repeat语句在布尔表达式的值为真时不再 执行循环体,且循环体可以是若干个语句, 不需用begin和end把它们包起来, repeat 和until已经起了begin和end的作用。 while循环和repeat循环是可以相互转化的。
一、for语句的一般格式 for <控制变量>:=<表达式1> to <表达式2> do <语句>; for <控制变量>:=<表达式1> downto <表达式2> do <语句>
程序如下: Program Ex1_4 Var I,S:integer; Begin i:=2; For i:=0 to 100 do begin s:=0; S:=S+i;end; Writeln(‘1+2+3+…+’,n,’=’,s); End.
readln(a);
f:=true; for i:=2 to trunc(sqrt(a)) do if a mod i=0 then begin f:=false; break; end; if f then writeln('Yes,it is a prime.') else writeln('No,it is not a primr.');
练习6:校体操队到操场集合,排成每行2人, 最后多出1人;排成每行3人,也多出1人; 分别按每行排4,5,6人,都多出1人;当排 成每行7人时正好不多。求校体操队至少是多 少人?
分析: 1、设体操队为X人,根据题意应为7的倍数, 因此X的初值为7,以后用inc(x,7)改变X值; 2、为了控制循环,用逻辑变量yes为真(true) 使循环结束; 3、如果诸条件中有一个不满足,yes的值就会 为假(false),就继续循环。
program ex; var s : real; n : integer;{n表示项数} begin s:=0.0; n:=0; while s<=10 do{当s的值还未超过10时} begin n:=n+1;{项数加1} s:=s+1/n;{将下一项值累加到s} end; writlen('n=',n);{输出结果} end.
练习7: 求1992个1992的乘积的末两位是多少?
分析:积的个位与十位数只与被乘数与乘 数的个位与十位数有关,所以本题相当于 求1992个92相乘,而且本次的乘积变为下 一次相乘的被乘数,因此也只需取末两位 参与运算就可以了。
练习8、输入一整数A,判断它是否质数。 (提示:若从2到A的平方根的范围内,没有一个 数能整除A,则A是质数。) 练习9、求两个数的最小公倍数和最大公约数。
例1 、求恰好使s=1+1/2+1/3+…+1/n的值大于 10时n的值。
分析:“恰好使s的值大于10”意思是当表达式 s的前n-1项的和小于或等于10,而加上了第 n项后s的值大于10。从数学角度,我们很难 计算这个n的值。故从第一项开始,当s的值 小于或等于10时,就继续将下一项值累加起 来。当s的值超过10时,最后一项的项数即为 要求的n。
练习: 1.计算并输出1*3*5*7*(2N-1)的积. 2.计算s=1*2+3*4+5*6+7*8+…+(2N-1)*2n 的积.
练习1:一个两位数x,将它的个位数和 十位数对换得到另一个数y,此时Y恰好比 X大36,编程求出所有这样的两位数。
分析
练习2:输入一个自然数,求该自然数 所有约数之和。
end;
for i:=10 to n do begin m:=i; s1:=0; //求质因数和 for j:=1 to a[0] do if a[j]<m then begin if m mod a[j]=0 then s1:=s1+a[j]; end else break; if s1=0 then continue;//该数不能分解质因数 s2:=0; //求所有数位上的数字之和 while m>0 do begin s2:=s2+m mod 10; m:=m div 10; end; if s1=s2 then write(i:4);//符合条件输出 end; end.
(提示:公约数一定小于等于两数中的小 数,且能整除两数中的大数。公倍数一定 大于等于两数中的大数,且是大数的倍数, 又能给两数中的小数整除。)
练习10、编写一个译码程序,把一个英语句子译 成数字代码。译码规则是以数字1代替字母A,数 字2代替字母B,……,26代替字母Z,如遇空格 则打印一个星号‘*’,英文句子以‘.‘结束。
练习11.设1小球从200米高空自由落地,每 次落地后反跳回原来高度的一半,然后再落 下。编写一程序,求该球第十次落地时共经 过了多少路程?
…………
练习12.求出1-1000中的所有完数(因子之 和等于它本身的数。如:28的因子是:1,2, 4,7,14,且1+2+4+7+14=28,所以 28是完数)。
例2、求两个正整数m和n的最大公约数。 分析:求两个正整数的最大公约数采用的 辗转相除法求解。以下是辗转的算法: 分别用m,n,r表示被除数、除数、余数。 ①求m/n的余数r. ②若r=0,则n为最大公约数.若r≠0,执行第③步. ③将n的值放在m中,将r的值放在n中. ④返回重新teger; begin write('Input m,n='); readln(m,n); a:=m; b:=n; repeat r:=a mod b; a:=b; b:=r; until r=0; writeln('The greatest common divide is',a); end.
二、直到循环(REPEAT-until语句) 用while语句可以实现“当型循环”,用repeatuntil 语句可以实现“直到型循环”。repeat-until 语句的含义是:“重复执行循环,直到指定的条件 为真时为止”。 直到循环语句的一般形式: repeat <语句1>; : <语句n>; until <布尔表达式>; 其中Repeat、until是Pascal保留字,repeat与 until之间的所有语句称为循环体。
一、WHILE循环 对于for循环有时也称为计数循环,当循环次数 未知,只能根据某一条件来决定是否进行循 环时,用while 语句或repeat语句实现循环要 更方便。 while语句的形式为: while <布尔表达式> do <语句>; 其意义为:当布尔表达式的值为true时,执行 do后面的语句。
while语句的执行过程为:
①判断布尔表达式的值,如果其值为真,执行步骤 2,否则执行步骤4; ②执行循环体语句(do后面的语句); ③返回步骤1; ④结束循环,执行while的下一个语句。
说明:这里while和do为保留字,while语句的特 点是先判断,后执行。 当布尔表达式成立时, 重复执行do后面的语句(循环体)。
分析
输入X----找出X的所有约数(从1到X逐个判断, 看X MOD Y是否为0),并且累加起来保存在S中 ---输出S即可
练习3: 把整数3025从中剪开分为30和25两个数, 此时再将这两数之和平方,(30+25)^2=3025 计算结果又等于原数,求所有符合这样条件的四 位数。
WHILE循环与REPEAT…UNTIL循环