资源描述
PASCAL基本语句,For 语句,循环语句,(1)for 语句,s := 0; s置初值0 for i := 1 to 100 do s := s + i ; writeln(s=,s); 输出累加和s,For 语句,for 语句,s := 0; for i := 100 downto 1 do s := s + i ; writeln(s=,s);,For 语句,for 语句注意事项,控制变量不能为real型,for语句的步长是一定的,不要在循环体内改 变循环控制变量,如: for k := 1 to 100 do begin k := 3; 循环体中改变了循环变量k的值 end,For 语句,for 语句注意事项,for语句执行完,控制变量无定义, 因此for语句的后续语句不能认为控制变量的值是终值而加以利用。,当初值超过终值时,不执行循环,循环次数为0。,例1:换零钱,例:换零钱 把一张一元钞票换成一分、二分和五分的硬币(每种至少一枚),问有哪几种换法?,分析 采用穷举法解决: 令五分钱硬币的个数为k,k的取值范围为119 ; 二分钱硬币的个数为j,j的取值范围为149 ; 一分钱硬币的个数则为100k5j2 ; n为计数器,累计兑换方案的总数。 这样利用二重循环就可以得到每一种组合。,例1:换零钱,program s100; var i , j , k , n : integer; begin n := 0; 计数器n清0 for k := 1 to 19 do 五分硬币的个数 for j := 1 to 49 do begin 二分硬币的个数 i := 100k * 5j * 2 ; 一分硬币的个数 if i 1 then begin 想想:为什么要加这一判断 writeln ( 1 fen: , i , 2 fen:, j , 5 fen: , k ); n := n + 1; 计数器加1 end; if end; writeln ( total = , n ); end.,For 语句,for 语句嵌套,打印 * 阵,while 语句,While语句,var i : longint; begin i:=1; while i50 do begin writeln ( i ); i:=i+3; end; end.,输出: 1 4 7 10 13 16 ,while 语句,不小心出现死循环怎么办? 按Ctrl+Break强制中断程序运行。,var i : longint; begin i:=1; while i50 do begin writeln ( i ); i:=i+3; end; end.,注意防止死循环,循环体中必须有修改WHILE后面的循环终止条件操作,while 语句,例:求最大公约数,辗转相除法,如果 x可以被 y 整除(即 x mod y=0),则 y 为 x 和y 的最大公约数; 否则,设 z为x除以y的余数( z:=x mod y),再设 x:=y; y:=z; 看x可以被 y 整除,若能整除,则y为x 和y 的最大公约数; 否则,继续辗转相除下去,while 语句,例:求最大公约数,辗转相除法,例如: x=24 y=15 x y z,24 15 = 1 9,15 9 = 1 6, 6 = 1 3,6 3 = 2 0,while 语句,例:求最大公约数,辗转相除法,var a, b, c : longint ; begin readln(a,b); while a mod b0 do begin c:=a mod b; a:=b; b:=c; end; writeln(b); end.,repeat 语句,repeatuntil语句,repeat 语句,repeatuntil语句,var i : longint; begin i:=1; while i50 do begin writeln ( i ); i:=i+3; end; end.,var i : longint; begin i:=1; repeat writeln ( i ); i:=i+3; until i=50; end.,repeat 语句,试商法判断质数,输入一个大于1的整数N,若为质数,输出T,否则输出F。,var x,i: integer; f : boolean; begin readln(x); f:=true; i:=2; if x2 then repeat if x mod i=0 then f:=false; i:=i+1; until (isqrt(x) or (f=false); if f=true then writeln(T) else writeln(F); end.,i能否被x整除,没必要从2检测到n-1,x=a*b (a=b),24=2*12 =3*8 =4*6,
展开阅读全文