PROGRAM T75_015; VAR i:integer; BEGIN writeln(); FOR i:=1 TO 26 DO write(chr(96+i)); writeln(); FOR i:=122 DOWNTO 97 DO write(chr(i)) END.
PROGRAM T75_016; VAR maximal,i,n:integer; BEGIN read(maximal); FOR i:=1 TO 19 DO BEGIN read(n); IF maximal
二、WHILE语句
26
当循环次数未知,例如它依赖于某个布尔表达式的值,而此值在循环执行过程中会改变。这种循环不可能由FOR语句实现,PASCAL为此提供了WHILE语句和REPEAT语句。
WHILE语句的一般形式: WHILE <布尔表达式> DO
<循环体>
T75_002 输入一串字符,以‘?’结束,输出其中字母个数与数字个数。
执行该语句时,首先检查布尔表达式的值,如果它为真,则执行循环体。在循环体中通常包括改变布尔表达式值的语句。每次执行循环体后,再次检查布尔表达式,如果它仍为真,继续执行循环体,否则循环结束,执行WHILE语句后的下一语句。当一开始布尔表达式就为假时,循环体根本不执行。
在WHILE语句中一定要有能改变布尔表达式值的语句,否则循环将不会结束。
三、REPEAT语句
REPEAT语句也用于循环次数未知的循环,它的用法与WHILE语句稍有不同。
REPEAT语句的一般形式如下: REPEAT
<循环体>
UNTIL <布尔表达式>
x3x5x7???... 直到最后一项的绝对值小于10-7时T75_003 计算sin(x)?x?3!5!7!停止计算,x由键盘输入。
sin(x)本来可以利用系统提供的标准函数直接写出。但是标准函数是如何计算sin(x)的呢?通过这个例子,将使我们对此有所了解,并可作为使用REPEAT语句的例子。
T43_004 以下三种IF的写法都是错误的,请指出错在哪里。 …
ch:char; …
read(ch);
IF (ch>=a) AND (ch<=z) …
IF ch>=’a’ AND ch<=’z’ …
IF ‘a’<=ch<=’z’ …
三种循环语句的相同点与不同点
27
语句格式 FOR FOR <循环变量>:=<初值> TO <终值> DO <语句> 赋值 WHILE WHILE <布尔表达式> DO <循环体> 布尔表达式 REPEAT REPEAT <循环体> UNTIL <布尔表达式> 无循环变量 不确定,由循环体后的布尔表达式决定,当值为“真”时结束循环。 至少有一次循环 多语句时,不需用BEGIN和END 循环变量 循环次数 确定,由初值和终值决定 不确定,由循环体前的布尔表达式决定,当值为“假”时,结束循环。 可能一次循环也没有 多语句时,需用BEGIN和END 多语句时,需用BEGIN和END 循环体
用计算机解题的基本方法 1、问题分析
计算机是用于表示和处理数据的工具。因此解题的前两个任务:一是定义在计算机存储器中表示的数据;二是描述算法——列出处理这些数据的步骤。这两个任务不是完全无关的。当描述算法时,可以改变数据定义。然而在构造算法前,应尽可能完全和仔细地招待数据定义。如果数据定义有错,描述算法是困难的,甚至是不可能的。
定义数据要求清楚地了解问题。首先必须确定由计算机计算和打印的信息,然后标识输入给计算机的信息。一旦标识了输入输出,我们要问,为了从给定的输入计算输出,是否有足够的信息可利用?如果没有,必须确定附加的信息,以及提供这些信息的手段。
当标识与问题有关的数据项时,要为每一项赋一个助忆名。它可以用来代表存储数据项的计算机存储单元,而不必考虑与每个变量名相联系的实际存储单元。编译程序将为每个变量名赋一个唯一的存储单元。
2、问题解的描述
在对问题有了清楚的分析后,可以仔细地构造求解步骤——算法。算法可以自顶向下、由粗到细,逐步求精。
描述问题由粗到细的过程,一般可以分为三步: 一级算法 二级求精 写出程序
四、多重循环
如果一个循环结构的内部(循环体)又包括一个循环结构,就称为多重循环结构。实现多重循环结构仍可以用前面讲的三种循环语句。因为任一循环语句的循环体部分都可以包含另一个循环语句,这种循环语句的嵌套为实现多重循环提供了方便。
多重循环的嵌套次数可以是任意的。可以按照嵌套层次数,分别叫做二重循环、三重循环等。处于内部的循环叫作内循环,处于外部的循环叫作外循环。
28
在设计多重循环时,要特别注意内、外循环之间的关系,以及各语句安放的位置,不要搞错。
T75_007 求1~100之间的素数(质数).
素数是大于1,且除了1和它本身外,不能被其它任何整数所整除的整数。 讨论:根据素数的定义可知
2、3、5、7、11、13、17等是素数。
1、4、6、8、9、10、12、14、15等不是素数。
为了判断某数i是否为素数,一个最简单的办法是用2、3、4、5、……、i-1这些数逐个去除i,看能否除尽。若被其中一个数除尽了,则i不是素数,否则(全都除不尽)i是素数。
当i较大时,用这种办法,除的次数太多。可以有许多改进办法,以减少除的次数,提高运行效率。下面介绍的是其中一种办法。
用2、3、4、……i去除,如果都除不尽,则i是素数。
这是因为,如果小于等于i的数都除不尽i,则大于i的数也不能除尽i。
用反证法证明:假设有大于i的数j能除尽i,则它的商k必小于i,且k能除尽i(其商为j)。这是与原命题(小于等于i的数都除不尽i)相矛盾的,假设不成立,原命题得到证明。
一级算法:
FOR i:=2 TO 100 DO BEGIN
1、用2到i去除i,看看能否除尽
2、IF 除不尽
THEN 输出素数i END
算法需进一步求精。用变量yn来表示是否除尽。
一开始让yn=1,当有一个数能除尽时,让yn=0表示能除尽,这时i不是素数;若循环结束时,yn仍等于1,表示都除不尽,这时i是素数。
二级求精
1、用2到i去除i,看看能否除尽 1-1 yn:=1
1-2 WHILE n IF i MOD n=0 THEN yn:=0 END 29 为了每行输出5个数,还需增加一个变量counter来计数。 PROGRAM T75_007; VAR i,n,yn,counter:integer; BEGIN writeln; counter:=0; FOR i:=2 TO 100 DO BEGIN n:=1; yn:=1; WHILE n IF i MOD n=0 THEN yn:=0; END;{WHILE} IF yn<>0 THEN BEGIN counter:=counter+1; IF counter MOD 5=0 THEN writeln(i) ELSE write(i,' , '); END;{IF} END;{FOR} END. T75_008 哥德巴赫猜想 验证哥德巴赫猜想(任何充分大的偶数都可由两个素数之和表示)。将4~2*s(s≤1000)中的所有偶数分别用两个素数之和表示。例如s=50,则输出 4=2+2 6=3+3 8=3+5 …… 100=3+97 讨论:哥德巴赫猜想是一个古老而著名的数学难题。它的理论证明很麻烦,迄今未得出最后的证明。在这方面中国数学家陈景润的研究成果处于世界领先地位。 在陈景润以前的数学家只证明出:对任一充分大的偶数even,可以找到4个素数p、q、r、s。使得 30