《《循環(huán)結(jié)構(gòu)for》PPT課件.ppt》由會員分享,可在線閱讀,更多相關《《循環(huán)結(jié)構(gòu)for》PPT課件.ppt(33頁珍藏版)》請在裝配圖網(wǎng)上搜索。
1、第三講 循環(huán)結(jié)構(gòu)一for,2009/09/26,循環(huán)結(jié)構(gòu),引例: 輸入n(n<=100)個正整數(shù)0..30000,輸出他們的和與平均值(小數(shù)點后保留2位小數(shù))。 輸入: 第一行:n。 第二行:n個用空格隔開的正整數(shù)。 輸出: 第一行:n個數(shù)的和。 第二行:n個數(shù)的平均值。,樣例輸入: 4 10 4 20 30 樣例輸出: 64 16.00,var n,i,x:integer; sum:longint; aver:real; begin readln(n); sum:=0; for i:=1 to n do begin read(x); sum:=sum+x; end; av
2、er:=sum/n; writeln(sum); writeln(aver:0:2); end.,循環(huán)結(jié)構(gòu)程序通常由三種循環(huán)語句來實現(xiàn)。它們分別為 1)、FOR 循環(huán) 2)、當循環(huán) while 3)、直到 repeat循環(huán)。,一)、for語句 1、for語句的一般格式: for := to do ; for := to do begin 語句1; 語句2; end; 表達式1 與表達式2的值也稱為控制變量的初值和終值。,循環(huán)體:重復執(zhí)行,循環(huán)體:重復執(zhí)行,var n,i,x:integer; sum:longint; aver:real; begi
3、n readln(n); sum:=0; for i:=1 to n do begin read(x); sum:=sum+x; end; aver:=sum/n; writeln(sum); writeln(aver:0:2); end.,For語句執(zhí)行過程 先將初值賦給左邊的變量i(稱為循環(huán)控制變量); 判斷循環(huán)控制變量的值是否已“超過”終值,如超過則跳到步驟; 如果末超過終值,則執(zhí)行do后面的那個語句(稱為循環(huán)體); 循環(huán)變量自動遞增(對to); 返回步驟; 循環(huán)結(jié)束,執(zhí)行循環(huán)下面的一個語句。,說明:,1、循環(huán)控制變量必須是順序類型。 如:整數(shù)(integer,longi
4、nt)、字符型 不能是實數(shù)型。 不能是int64型。 2、循環(huán)次數(shù):終值-初值+1。 3、初始值不一定必須是1。,for := downto do 表達式1表達式2。 循環(huán)控制變量每次-1。,例1: 輸入n,求s=1+2+3++n的值。n<=100.,Var n,i,s:integer; Begin readln(n); s:=0; for i:=1 to n do s:=s+i; writeln(s); End.,例2:輸入n,求n以內(nèi)所有能被2整除但不能被3整除的整數(shù)的和。n<=1000,var n,i:integer; s:longint; begin readln(n
5、); s:=0; for i: = 1 to n do if (i mod 2=0)and(i mod 30) then s:=s+i; writeln(s); end.,例3、鍵入一個自然數(shù)N(<=106),求這個自然數(shù)的因數(shù)的個數(shù)S(包含1和n)。 如: 輸入: 6 輸出: 4 (1,2,3,6),var n,I,s:longint; begin readln(n); s:=0; for i:=1 to n do if n mod i=0 then s:=s+1; writeln(s); end.,例4: 鍵入一個自然數(shù)N(<10000),求這個自然數(shù)的所有約數(shù)之和S (
6、n的約數(shù)不包含1和n)。 如: 輸入: 6 輸出: 5,var n,i:integer; s:longint; begin readln(n); s:=0; for i:=2 to n-1 do if n mod i=0 then s:=s+i; writeln(s); end.,例5、求100---999中的水仙數(shù)。 (若三位數(shù)abc,a3+b3+c3=abc,則稱abc為水仙數(shù)。如153,13+53+33=1+125+27=153,則153稱為水仙數(shù))。,var n,a,b,c:integer; begin for n:=100 to 999 do begin a
7、:=n div 100; b:=(n div 10) mod 10; c:=n mod 10; if n=a*a*a+b*b*b+c*c*c then writeln(n); end; end.,例6、 IMO2求出所有這樣的3位數(shù):它能被11整除,且所得的商是原三位數(shù)的各位數(shù)字的平方和。,var n,a,b,c:integer; begin for n:=100 to 999 do begin a:=n div 100; b:=(n div 10) mod 10; c:=n mod 10; if (n mod 11=0) and(a*a+b*b+c*c=n div 1
8、1) then writeln(n); end; end.,例7、從鍵盤上輸入n個數(shù),輸出他們的最大數(shù),最小數(shù),平均數(shù)。 輸入: 第一行:n(<100). 第二行:n個正整數(shù)(1,1000),中間一個空格隔開。 輸出: 第一行:最大數(shù)。 第二行:最小數(shù)。 第三行:n個數(shù)的平均值(小數(shù)點后保留2位小數(shù))。 樣例: 輸入: 4 10 4 20 30 輸出: 30 4 16.00,var n,i,x,min,max:integer; begin readln(n); min:=1001; max:=0; for i:=1 to n do begin read(
9、x); if xmax then max:=x; if x
10、(no); end.,例8、輸入正整數(shù)k(<1000),輸出k以內(nèi)的素數(shù).,For循環(huán)語句的嵌套,一重循環(huán)。 二重以上稱為嵌套。,例9、求100---999中的水仙數(shù)。 (若三位數(shù)abc,a3+b3+c3=abc,則稱abc為水仙數(shù)。如153,13+53+33=1+125+27=153,則153稱為水仙數(shù))。,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=100*a+10*b+c then writeln(100*a+10*b+c);
11、end.,例10、 IMO2求出所有這樣的3位數(shù):它能被11整除,且所得的商是原三位數(shù)的各位數(shù)字的平房和。,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=100*a+10*b+c then writeln(100*a+10*b+c); end.,for循環(huán)也稱為計數(shù)循環(huán)。 適合用于能事先確定循環(huán)次數(shù)的結(jié)構(gòu),注意: 1、for循環(huán)控制變量必須是順序類型的變量,如整數(shù),但不能是實數(shù)型real。整型如:integer,longint.
12、2、for語句的循環(huán)體中絕對不能修改循環(huán)控制變量,自動增加。 3、break:只退出當前所在的一層循環(huán)。 4、主要循環(huán)次數(shù)。 正常:=108,例11: 根據(jù)公式 計算圓周率的值。 小數(shù)點后保留6位小數(shù)。 輸入:10000 輸出:3.141497,var n,i:longint; s,p:real; begin readln(n); s:=0; for i:=1 to n do s:=s+1/i/i; p:=sqrt(6*s); writeln(p:0:8); end.,例12、鍵入一個自然數(shù)N(<=109),求這個自然數(shù)的因數(shù)的個數(shù)S(包含1和n)。 如: 輸入: 6 輸出: 4,va
13、r n,I,s,m:longint; begin readln(n); m:= trunc(sqrt(n)) ; s:=0; for i:=1 to m do if n mod i=0 then s:=s+2; writeln(s); end.,if n=m*m then s:=s-1;,例13 任何一個n3一定可以表示成n個連續(xù)的奇數(shù)和。 輸入n(n100),輸出n3對應的表達式。 樣例: 輸入:3 輸出:7+9+11 (說明:33=7+9+11),var n,x,i:integer; begin readln(n); x:=n*(n-1)+1; write(x); for i:=1 to n-1 do begin x:=x+2; write(+,x); end; end.,