版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、第5章 循環(huán)結(jié)構(gòu)程序設(shè)計(jì) C 語言程序設(shè)計(jì)第5章 循環(huán)結(jié)構(gòu)程序設(shè)計(jì) C 語言程序設(shè)計(jì)2022/9/252循環(huán)結(jié)構(gòu)的應(yīng)用場合循環(huán)結(jié)構(gòu)是指根據(jù)問題的需要任意次地重復(fù)執(zhí)行一行或多行語句。具體地說就是某些語句在某一條件成立時(shí),需要重復(fù)執(zhí)行,直到條件不成立時(shí)才結(jié)束重復(fù)執(zhí)行。循環(huán)結(jié)構(gòu)的應(yīng)用場合計(jì)算1+2+3+n,屬于循環(huán)累加問題,總共執(zhí)行n次。計(jì)算n!=123n,屬于循環(huán)累乘問題,執(zhí)行n次。計(jì)算e的近似值,e=1+1/1!+1/2!+1/3!+1/n!,直到滿足精度的要求,即最后一項(xiàng)的絕對值小于10-5時(shí)循環(huán)停止。循環(huán)次數(shù)事先未知。以二維形式打印乘法九九表,屬于雙重循環(huán)問題。2022/9/242循環(huán)結(jié)構(gòu)的
2、應(yīng)用場合循環(huán)結(jié)構(gòu)是指根據(jù)問題的2022/9/253循環(huán)結(jié)構(gòu)類型NYP成立?A當(dāng)P成立時(shí) A A當(dāng)P成立時(shí)YNAP成立?N-S流程圖流程圖直到型循環(huán)當(dāng)型循環(huán)2022/9/243循環(huán)結(jié)構(gòu)類型NYP成立?A當(dāng)P成立時(shí) 2022/9/254本章主要內(nèi)容5.1 C語言的循環(huán)語句5.1.1 while語句(當(dāng)型循環(huán))5.1.2 do-while語句(直到型循環(huán))5.1.3 for語句5.1.4 三種循環(huán)語句的比較和使用5.2 循環(huán)的跳轉(zhuǎn)5.2.1 break語句5.2.2 continue語句5.3 循環(huán)嵌套5.4 循環(huán)結(jié)構(gòu)程序設(shè)計(jì)舉例2022/9/244本章主要內(nèi)容5.1 C語言的循環(huán)語句2022/9/
3、2555.1.1 while語句 語句一般格式 while (表達(dá)式) 語句 一般為關(guān)系表達(dá)式或邏輯表達(dá)式,也可以是C語言其他類型的合法表達(dá)式 用來控制循環(huán)體是否執(zhí)行稱為內(nèi)嵌語句,可以是基本語句、控制語句,也可以是復(fù)合語句是循環(huán)重復(fù)執(zhí)行的部分 2022/9/2455.1.1 while語句 語句一般格式2022/9/2565.1.1 while語句功能:計(jì)算表達(dá)式的值,為非0(邏輯真)時(shí),重復(fù)執(zhí)行內(nèi)嵌語句,每執(zhí)行一次,就判斷一次表達(dá)式的值,直到表達(dá)式的值為0 時(shí)結(jié)束循環(huán),轉(zhuǎn)去執(zhí)行while后面的語句。 當(dāng)表達(dá)式為真 語句N-S結(jié)構(gòu)圖NY流程圖表達(dá)式非0?語句循環(huán)控制條件循環(huán)體2022/9/24
4、65.1.1 while語句功能:計(jì)算表達(dá)2022/9/2575.1.1 while語句(舉例)【例5.1】編寫程序,求100個(gè)自然數(shù)的和即: s=1+2+3+ +100 思路:尋找加數(shù)與求和的規(guī)律 加數(shù)i從1變到100,每循環(huán)一次,使i增1,直到i的值超過100。i的初值設(shè)為1。求和設(shè)變量 sum 存放和,循環(huán)求sum=sum+i,直至i超過100。 2022/9/2475.1.1 while語句(舉例)【例52022/9/258算法和程序:#include main( ) int i,sum; i=1; sum=0; while (i=100) sum=sum+i; i+; printf(
5、sum=%dn,sum);程序輸出結(jié)果:sum=5050i: 循環(huán)控制變量sum: 累加器 i=1,sum=0 當(dāng)i = 100 sum=sum+i i+輸出sum2022/9/248算法和程序:#include stdi2022/9/259注意: 如果while的 (表達(dá)式) 值為0,則循環(huán)體一次也不執(zhí)行 (例如當(dāng)i的初值=101) 。在循環(huán)體中必須有使循環(huán)趨向結(jié)束的操作,否則循環(huán)將無限進(jìn)行(死循環(huán))。 在循環(huán)體中,語句的先后位置必須符合邏輯,否則會(huì)影響運(yùn)算結(jié)果。 思考程序段的輸出? while (i=100) i+; sum=sum+i; 運(yùn)行后,輸出:sum=5150原因是什么? 202
6、2/9/249注意: 如果while的 (表達(dá)式) 值2022/9/2510注意(續(xù)):為了保證循環(huán)正常運(yùn)行,應(yīng)該特別注意: 循環(huán)控制條件的描述 控制條件的初始狀態(tài)(初始值) 循環(huán)體內(nèi)部對控制條件的影響2022/9/2410注意(續(xù)):為了保證循環(huán)正常運(yùn)行,應(yīng)該2022/9/25115.1.1 while語句(舉例)【例5.2】編寫程序,從鍵盤輸入字符,直到輸入的字符為0時(shí)停止,統(tǒng)計(jì)輸入的字符個(gè)數(shù)。求累加和:確定變量len,初值為0確定循環(huán)條件:輸入字符不為0,即getchar()!=0思路:程序#include void main( ) char ch; int len=0; printf(
7、請輸入字符:n); while(ch=getchar()!=0) putchar(ch); len+; printf(字符個(gè)數(shù)為:%dn, len);自學(xué):P58例4-1;P61例4-2。2022/9/24115.1.1 while語句(舉例)【例2022/9/25125.1.2 do-while語句語句一般格式 do 語句 while (表達(dá)式); 功能:先執(zhí)行內(nèi)嵌語句(循環(huán)體),之后計(jì)算表達(dá)式的值,不為0(邏輯真)時(shí),再執(zhí)行循環(huán)體并判斷條件,直到表達(dá)式的值為 0 結(jié)束循環(huán),轉(zhuǎn)去執(zhí)行while下面的語句。2022/9/24125.1.2 do-while語句語句一2022/9/2513 do
8、-while循環(huán)的算法 循環(huán)體當(dāng)表達(dá)式為真N-S結(jié)構(gòu)圖NY循環(huán)體表達(dá)式非0?流程圖main( ) int i=1,sum=0; do sum=sum+i; i+; while (i=100); printf(%dn,sum);例:用do-while語句求100個(gè)自然數(shù)的和 2022/9/2413 do-while循環(huán)的算法 2022/9/25145.1.2 do-while語句(說明:) while和do-while都能實(shí)現(xiàn)循環(huán)控制,while結(jié)構(gòu)程序通常都可以轉(zhuǎn)換成do-while結(jié)構(gòu)。區(qū)別:do- while 語句先執(zhí)行循環(huán)體再判斷條件,循環(huán)體至少執(zhí)行一次; while 語句先判斷條件再執(zhí)
9、行循環(huán)體,循環(huán)體有可能一次也不執(zhí)行。dowhile循環(huán)體中一定要有能使表達(dá)式值趨于0的操作(如i+),否則會(huì)出現(xiàn)死循環(huán)。 2022/9/24145.1.2 do-while語句(說明2022/9/2515while 和 do-while 的用法比較輸入一些數(shù),求和,直到輸入負(fù)數(shù)為止。#include void main( ) int x, sum=0; do scanf(%d, &x); sum+=x; while (x0); printf(sum=%d, sum);#include void main( ) int x, sum=0; scanf(%d, &x); while (x0) su
10、m+=x; scanf(%d, &x); ; printf(sum=%d, sum);輸入 1 2 5 -10輸入 -10 1 2 5sum-x2022/9/2415while 和 do-while 的用2022/9/25165.1.2 do-while語句(簡單應(yīng)用) 【例5.3】用輾轉(zhuǎn)相除法求m和n的最大公約數(shù)。所謂輾轉(zhuǎn)相除法,即用兩數(shù)中較大數(shù)m除較小數(shù)n求余數(shù)r,然后再用較小數(shù)(賦給m)除余數(shù)(賦給n)求余數(shù)r,依次類推,當(dāng)所得余數(shù)為0時(shí)停止,最后的較大數(shù)m就是最大公約數(shù)。定義m、n、rmnT F m和n交換r=m%nm=nn=r 當(dāng)r != 0時(shí)輸出最大公約數(shù)mN-S結(jié)構(gòu)圖:程序#in
11、clude void main( ) int m,n,r; scanf(%d, %d,&m,&n); if (mn) r=m; m=n; n=r; do r=m%n; m=n; n=r; while(r!=0); printf(%dn,m);自學(xué):P62例4-3。2022/9/24165.1.2 do-while語句(簡單2022/9/25175.1.3 for語句 語句一般格式 for (表達(dá)式1;表達(dá)式2;表達(dá)式3) 語句 功能:計(jì)算表達(dá)式1的值,再判斷表達(dá)式2,如果其值為非0(邏輯真),則執(zhí)行內(nèi)嵌語句(循環(huán)體),并計(jì)算表達(dá)式3;之后再去判斷表達(dá)式2,一直到其值為0時(shí)結(jié)束循環(huán),執(zhí)行后續(xù)語句
12、。循環(huán)初始條件循環(huán)控制條件循環(huán)體2022/9/24175.1.3 for語句 語句一般格式功2022/9/2518for語句的算法N-S結(jié)構(gòu)圖for (表達(dá)式1;表達(dá)式2;表達(dá)式3) 語句NY流程圖計(jì)算表達(dá)式1 語句計(jì)算表達(dá)式3表達(dá)式2為真?例如:求100個(gè)自然數(shù)的和 main( ) int i,sum; sum=0; for ( i=1; i=100; i+) sum=sum+i; printf(sum=%dn,sum);可部分或全部省略,但“;”不可省略2022/9/2418for語句的算法N-S結(jié)構(gòu)圖for (2022/9/25195.1.3 for語句(省略表達(dá)式的for語句)省略表達(dá)
13、式1,即: for ( ;表達(dá)式2;表達(dá)式3) 此時(shí)應(yīng)在for 語句之前給循環(huán)變量賦初值。例如: i=1;for ( ; i100) 2022/9/24195.1.3 for語句(省略表達(dá)式的f2022/9/25205.1.3 for語句(省略表達(dá)式的for語句)省略表達(dá)式3,即:for (表達(dá)式1;表達(dá)式2;)等同于:表達(dá)式1; while(表達(dá)式2) (死循環(huán)) 此時(shí)應(yīng)在循環(huán)體中設(shè)置變量的增值。例如: for (i=1; i100) i+; 總結(jié):在省略某個(gè)表達(dá)式時(shí),應(yīng)在適當(dāng)位置進(jìn)行循環(huán)控制的必要操作,以保證循環(huán)的正確執(zhí)行。2022/9/24205.1.3 for語句(省略表達(dá)式的f202
14、2/9/25215.1.3 for語句(說明:)所有用 while 語句實(shí)現(xiàn)的循環(huán)都可以用for 語句實(shí)現(xiàn)。 等價(jià)于:for(表達(dá)式1;表達(dá)式2 ;表達(dá)式3) 語句;表達(dá)式1;while (表達(dá)式2) 語句; 表達(dá)式3; for 語句中的表達(dá)式1和表達(dá)式3,既可以是一個(gè)簡單表達(dá)式,也可以由逗號運(yùn)算符將多個(gè)表達(dá)式連接起來。例如:for ( i=0,sum=0; i=100; i+,i+) sum+=i; for ( i=0,sum=0; i=100; i=i+2) sum+=i; 2022/9/24215.1.3 for語句(說明:)所有用2022/9/25225.1.3 for語句(簡單應(yīng)用)
15、【例5.4】求n! ,即計(jì)算p=123n的值。 思路:求階乘與求累加的運(yùn)算處理過程類似,只要將“+”變?yōu)椤?”。設(shè)置:乘數(shù)i ,初值為1,終值為n(n是循環(huán)控制終值,需要從鍵盤輸入)累乘器 p ,初值為1,每次循環(huán)令p = p*i2022/9/24225.1.3 for語句(簡單應(yīng)用)【例2022/9/2523程序:#include main( ) int i, n; long p; p=1; printf(Enter n:); scanf(%d,&n); for (i=1; i=n; i+) p = p * i; printf(p = %ld n,p);思考:如何輸出1!, 2!, , n!
16、 ?如何求s =1!+ 2!+ + n! ? 2022/9/2423程序:#include stdio.2022/9/2524熟悉幾個(gè)循環(huán)語句 while (!x) x+; 當(dāng) x=0 時(shí),執(zhí)行循環(huán)體x+; while (c=getchar( ) != n) n=n+1; n 稱為計(jì)數(shù)器,作用是統(tǒng)計(jì)輸入字符的個(gè)數(shù)while (num+5); 先執(zhí)行循環(huán)體x*=-3,再判斷條件(x5) for (n=0; n26; n+) printf(%c , n+A); 作用是輸出26個(gè)大寫字母for (sum=0, i=1; i=100; sum=sum+i, i+=2) ;作用是計(jì)算100以內(nèi)的奇數(shù)和
17、2022/9/2424熟悉幾個(gè)循環(huán)語句 while (!x)2022/9/25255.1.4 3種循環(huán)語句的比較和使用while和do-while語句的表達(dá)式只有一個(gè),for語句有三個(gè)。while 和for先判斷循環(huán)條件后執(zhí)行循環(huán)體,do-while語句先執(zhí)行循環(huán)體后判斷循環(huán)條件。while語句多用于循環(huán)次數(shù)不定的情況do-while語句多用于至少要運(yùn)行一次的情況for語句多用于要賦初值或循環(huán)次數(shù)固定的情況2022/9/24255.1.4 3種循環(huán)語句的比較和使用w2022/9/25265.1.4 3種循環(huán)語句的比較和使用循環(huán)語句的選擇if(循環(huán)次數(shù)已知) 使用for語句else /* 循環(huán)次
18、數(shù)未知 */if (循環(huán)條件在進(jìn)入循環(huán)時(shí)明確)使用while語句else /* 循環(huán)條件需要在循環(huán)體中明確 */使用do-while語句2022/9/24265.1.4 3種循環(huán)語句的比較和使用循2022/9/25275.1.4 3種循環(huán)語句使用(課堂練習(xí))K1:求1+2+3+4+ nK2:求1+1/2+1/3+1/4+ 1/nK3:求1-1/2+1/3-1/4+ 1/nK4:求1-1/3+1/5-1/7+ 前n項(xiàng)之和K5:輸入100個(gè)整數(shù),求其中正數(shù)之和K6:輸入一個(gè)正整數(shù)n, 再輸入n個(gè)數(shù),輸出最大值( P71例4-7)2022/9/24275.1.4 3種循環(huán)語句使用(課堂練習(xí)2022/
19、9/25285.1.4 3種循環(huán)語句使用(課堂練習(xí))K1:求1+2+3+4+ n算法:i =1 to n s=s+i i+程序段:s=0;for(i=1; i=n; i+) s=s+i;2022/9/24285.1.4 3種循環(huán)語句使用(課堂練習(xí)2022/9/25295.1.4 3種循環(huán)語句使用(課堂練習(xí))K2:求1+1/2+1/3+1/4+ 1/n算法:i =1 to n s=s+t t=1.0/i i+程序段:s=0;for(i=1; i=n; i+) s=s+1.0/i;2022/9/24295.1.4 3種循環(huán)語句使用(課堂練習(xí)2022/9/25305.1.4 3種循環(huán)語句使用(課堂練
20、習(xí))K3:求1-1/2+1/3-1/4+ 1/n算法:i =1 to n s=s+t t=1.0/i*flag flag=-flag i+程序段:s=0;flag=1;for(i=1; i=n; i+) s=s+1.0/i*flag; flag=-flag;2022/9/24305.1.4 3種循環(huán)語句使用(課堂練習(xí)2022/9/25315.1.4 3種循環(huán)語句使用(課堂練習(xí))K4:求1-1/3+1/5-1/7+ 前n項(xiàng)之和算法:i =1 to n s=s+t t=1.0/i*flag flag=-flag tt=tt+2 i+程序段:s=0;flag=1;tt=1for(i=1; i=n;
21、i+) s=s+1.0/tt*flag; tt+=2; flag=-flag;2022/9/24315.1.4 3種循環(huán)語句使用(課堂練習(xí)2022/9/25325.1.4 3種循環(huán)語句使用(課堂練習(xí))K5:輸入100個(gè)整數(shù),求其中正數(shù)之和# include void main() int i , sum=0, x; for (i=0; i0) sum=sum+x; printf(%d,sum); 算法:i =1 to 100scanf(%d, &x)if x0sum=sum+xi+2022/9/24325.1.4 3種循環(huán)語句使用(課堂練習(xí)2022/9/25335.1.4 3種循環(huán)語句使用(課
22、堂練習(xí))K6:輸入一個(gè)正整數(shù)n, 再輸入n個(gè)數(shù),輸出最大值(P71例4-7)思路:void main() int i , max, n, x; scanf(%d, &n); if(n=1) scanf(%d, &x); max=x; for (i=1; in; i+) scanf(%d, &x); if (max x) max=x; printf(%d, max); x maxmaxx循環(huán)2022/9/24335.1.4 3種循環(huán)語句使用(課堂練習(xí)2022/9/25345.2 循環(huán)的跳轉(zhuǎn)有如下兩種語句實(shí)現(xiàn)跳轉(zhuǎn):break語句continue語句在循環(huán)語句的循環(huán)體中使用,可以進(jìn)行循環(huán)的流程控制2
23、022/9/24345.2 循環(huán)的跳轉(zhuǎn)有如下兩種語句實(shí)現(xiàn)跳2022/9/2535后續(xù)語句break;YN表達(dá)式?后續(xù)語句break;表達(dá)式?YN5.2.1 break語句功能:利用break語句能夠強(qiáng)迫終止本層循環(huán),轉(zhuǎn)到后續(xù)語句執(zhí)行。while語句do-while語句后續(xù)語句計(jì)算表達(dá)式3計(jì)算表達(dá)式1break;表達(dá)式2?YNfor語句2022/9/2435后續(xù)語句YN表達(dá)式?后續(xù)語句表達(dá)式2022/9/25365.2.1 break語句 int x,n=0,s=0;while (n10) scanf(%d,&x); if (x0) break; s+=x; n+; ; int x,n=0,s=
24、0;do scanf(%d,&x); if (x0) break; s+=x; n+; while (n10); for (n=0,s=0; n10; n+ ) scanf(%d,&x); if (x0) break; s+=x; 程序功能:從鍵盤輸入不超過10個(gè)數(shù),求和,一旦輸入負(fù)數(shù)立即停止輸入。2022/9/24365.2.1 break語句 int 2022/9/25375.2.1 break語句(舉例)算法:除了1和m,不能被其它數(shù)整除。設(shè) i 取值 2, m-1 如果m不能被該區(qū)間上的任何一個(gè)數(shù)整除,即對每個(gè)i,m%i 都不為0,則m是素?cái)?shù)只要找到一個(gè)i,使m%i為0,則m肯定不是素
25、數(shù)m %2 %3 %4 %5 %(m-1)不是素?cái)?shù) | =0 =0是素?cái)?shù) & !=0 !=0 m不可能被大于 m/2 的數(shù)整除 i 取值 2, m-1 、 2, m/2 、 2, for(i=2; im/2) printf(yesn)else printf(non”);【例5.5】輸入一個(gè)正整數(shù)m,判斷它是否為素?cái)?shù)。2022/9/24375.2.1 break語句(舉例)算法2022/9/2538#include int main(void) int i, m;printf(“Enter a number: );scanf (%d, &m);for (i=2; i m/2 ) printf(%
26、d is a prime number! n, m); else printf(No!n); 5.2.1 break語句(舉例)問題:能否改寫為:for (i= 2; i= m/2; i+) if (m%i= 0) printf(No!n); else printf(%d is a prime number! n, m); 循環(huán)條件?循環(huán)的結(jié)束條件?【例5.5】輸入一個(gè)正整數(shù)m,判斷它是否為素?cái)?shù)。2022/9/2438#include 52022/9/25395.2.1 break語句(說明)break只能終止并跳出最近一層的結(jié)構(gòu)。break不能用于循環(huán)語句和switch語句之外的任何其它語句
27、之中。思考:用break語句實(shí)現(xiàn)例5.3,即求m和n的最大公約數(shù)。分析:最大公約數(shù)在1到兩個(gè)數(shù)中較小的那個(gè)數(shù)之間,因此可用循環(huán)結(jié)構(gòu)實(shí)現(xiàn)。循環(huán)變量初值為m和n中較小數(shù),終值為1。具體語句: for (i=n; i=1; i-)if (m%i=0 &n%i=0) m=i;break; 2022/9/24395.2.1 break語句(說明)br2022/9/2540后續(xù)語句continue; YN表達(dá)式?后續(xù)語句continue;表達(dá)式?YN5.2.2 continue語句 功能:中斷循環(huán)體的本次執(zhí)行(即跳過循環(huán)體中尚未執(zhí)行的語句),立即開始執(zhí)行下一次循環(huán)。while語句do-while語句后續(xù)語
28、句計(jì)算表達(dá)式3計(jì)算表達(dá)式1continue;表達(dá)式2?YNfor語句2022/9/2440后續(xù)語句YN表達(dá)式?后續(xù)語句表達(dá)式2022/9/25415.2.2 continue語句(與break區(qū)別) int x,n=0,s=0;while (n10) scanf(%d,&x); if (x0) continue; s+=x; n+; ; int x,n=0,s=0;do scanf(%d,&x); if (x0) continue; s+=x; n+; while (n10); for (n=0,s=0; n10; n+) scanf(%d,&x); if (x0) continue; s+=
29、x; 程序功能:從鍵盤輸入10個(gè)數(shù),統(tǒng)計(jì)其中的正數(shù)和。2022/9/24415.2.2 continue語句(與b2022/9/25425.2.2 continue語句(舉例) 【例5.6】把100200之間能被7整除的數(shù),以十個(gè)數(shù)為一行的形式輸出,最后輸出一共有多少個(gè)這樣的數(shù)。 for (n=100; n=200; n+) n能被7整除 T F 終止本次循環(huán) 輸出n 輸出10個(gè)數(shù) T F 換行算法:2022/9/24425.2.2 continue語句(舉例2022/9/25435.2.2 continue語句(舉例)#include main( ) int n,j=0; for(n=100
30、;n=200;n+) if (n%7!=0) continue; printf(%6d,n); j+; if (j%10=0) printf(n); printf( n j=%dn,j); 2022/9/24435.2.2 continue語句(舉例2022/9/25445.3 循環(huán)的嵌套如果循環(huán)語句的循環(huán)體內(nèi)又包含了另一條循環(huán)語句,則稱為循環(huán)的嵌套。典型形式: (1) while() while() . (2) do do while( ); . while( );(3) while() do while( ); . (4) for( ; ;) do while(); while() .20
31、22/9/24445.3 循環(huán)的嵌套如果循環(huán)語句的循環(huán)體2022/9/25455.3 循環(huán)的嵌套(注意:)while、do-while、for循環(huán)語句可以并列,也可以相互嵌套,但要層次清楚,不能出現(xiàn)交叉。多重循環(huán)程序執(zhí)行時(shí),外層循環(huán)每執(zhí)行一次,內(nèi)層循環(huán)都需要循環(huán)執(zhí)行多次。例如:for(a=1;a=10;a+) for (b=0;b=5;b+) 外循環(huán)執(zhí)行了10次,內(nèi)循環(huán)執(zhí)行6次循環(huán)正常結(jié)束時(shí),內(nèi)循環(huán)執(zhí)行了106=60次 2022/9/24455.3 循環(huán)的嵌套(注意:)while2022/9/25465.3 循環(huán)的嵌套(舉例)【例5.7】 P67例4-5:求1!+2!+n! (n由輸入決定)分
32、析:這是一個(gè)累加求和問題,共循環(huán)n次,每次累加1項(xiàng),循環(huán)算式:sum = sum + 第i項(xiàng)(i!)因此累加求和的for語句為: for (i=1; i=n; i+) item=i!; sum=sum+item; 進(jìn)一步改寫為: for (i=1; i=n; i+) item=1; for (j=1; j=i; j+) item=item*j; sum = sum + item; 2022/9/24465.3 循環(huán)的嵌套(舉例)【例5.7】2022/9/25475.3 循環(huán)的嵌套(舉例)【例5.7】 求1!+2!+n! (n由輸入決定)程序:#include int main(void) in
33、t i, j,n;double item, sum; sum= 0; scanf(“%d“,&n); for(i=1; i=n; i+) item=1; for (j=1; j=i; j+) item=item*j;sum=sum+item; printf(1!+2!+3!+%d!=%en, n,sum); item=1; for (i=1; i=n; i+) for (j=1; j=i; j+) item=item*j; sum = sum + item; 問題:內(nèi)層循環(huán)的初始化能否改為:2022/9/24475.3 循環(huán)的嵌套(舉例)【例5.7】2022/9/25485.3 循環(huán)的嵌套(舉
34、例)【例5.7】 求1!+2!+n! (n由輸入決定)for(i=1; i=n; i+) item=1; for (j=1; j=i; j+)item=item*j; sum=sum+item; 分析嵌套循環(huán)的執(zhí)行過程: 外層循環(huán)變量 i 的每個(gè)值 內(nèi)層循環(huán)變量 j 變化一個(gè)輪次; 內(nèi)外層循環(huán)變量不能相同 分別用 i 和 j2022/9/24485.3 循環(huán)的嵌套(舉例)【例5.7】2022/9/25495.3 循環(huán)的嵌套(舉例)【例5.7】 求1!+2!+n! (n由輸入決定)如果理解了階乘的含義,該題實(shí)際也可用單循環(huán)來編程,程序如何寫?累加求和的for語句為: sum=0;for (i=1
35、; i=n; i+) item=i!; sum=sum+item; 改寫為:item=1; for (i=1; i=n; i+) item=item*i; sum=sum+item; 2022/9/24495.3 循環(huán)的嵌套(舉例)【例5.7】2022/9/25505.3 循環(huán)的嵌套(舉例)【例5.8】 編寫程序,輸出如下九九乘法表。12 43 6 94 8 12 165 10 15 20 256 12 18 24 30 367 14 21 28 35 42 498 16 24 32 40 48 56 649 18 27 36 45 54 63 72 81分析:這是一個(gè)典型的雙重循環(huán)問題。需要
36、兩個(gè)循環(huán)變量i、j。ij外循環(huán)變量i用于控制輸出行數(shù),因此初值為1,終值為9。內(nèi)循環(huán)變量j用于控制輸出列數(shù),因此初值為1,終值為當(dāng)前外循環(huán)的i值(為什么?)。2022/9/24505.3 循環(huán)的嵌套(舉例)【例5.8】2022/9/25515.3 循環(huán)的嵌套(舉例)【例5.8】 編寫程序,輸出九九乘法表。程序:#include main( ) int i, j; for ( i=1; i10; i+ ) for ( j=1; j2)fn= 設(shè)變量f1、f2和f3,并為f1和f2賦初值1,令f3=f1+f2得到第3項(xiàng);將f1f2, f2f3,再求f3=f1+f2得到第4項(xiàng);依此類推求第5項(xiàng)、第6
37、項(xiàng)這是一種遞推算法應(yīng)采用循環(huán)實(shí)現(xiàn)2022/9/24545.4 循環(huán)結(jié)構(gòu)程序設(shè)計(jì)(舉例)【例52022/9/2555【例5.10】:算法和程序#include main( ) int i,f1,f2,f3; f1=f2=1; printf(n%8d%8d,f1,f2); for (i=3; i=20; i+) f3=f1+f2; f1=f2; f2=f3; printf(%8d,f3); if (i%5=0) printf(n); f1=1,f2=1并輸出for (i=3; i=20; i+) f3=f2+f1 f1=f2,f2=f3 輸出f3 輸出5個(gè)數(shù) T F 換行2022/9/2455【例
38、5.10】:算法和程序#inclu2022/9/25565.4 循環(huán)結(jié)構(gòu)程序設(shè)計(jì)(舉例)【例5.11】編程序求21000以內(nèi)的完數(shù)。 完數(shù):一個(gè)數(shù)的因子(除了這個(gè)數(shù)本身)之和等于該數(shù)本身。思路:設(shè)定i從2變到10000,對每個(gè)i找到其因子和s;判定 is?若相等,則i為完數(shù),否則不是。 例如:6的因子是1、2、3,因子和 1+2+36因此 6 是完數(shù)。使用窮舉算法用雙層循環(huán)實(shí)現(xiàn)2022/9/24565.4 循環(huán)結(jié)構(gòu)程序設(shè)計(jì)(舉例)【例52022/9/2557【例5.11】:算法和程序#include main( ) int i,j,s; for (i=2; i=1000; i+) s=0; for (j=1; ji; j+) if (i%j=0) s+=j; if (i=s) printf(%6dn,s); for(i=2;i=1000
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 醫(yī)療器械行業(yè)采購工作總結(jié)
- 婚慶行業(yè)品牌推廣案例
- 安防保安行業(yè)美工工作總結(jié)
- 金融行業(yè)員工培訓(xùn)
- 探索自我提升之路計(jì)劃
- 財(cái)務(wù)會(huì)計(jì)前臺工作總結(jié)
- 音樂錄制委托合同三篇
- 神經(jīng)內(nèi)科護(hù)理工作感悟
- 2024年瓦斯抽放管理制度
- 2024年稅務(wù)師題庫及參考答案(完整版)
- 紙巾合同范本
- 四川省德陽市2025屆數(shù)學(xué)三年級第一學(xué)期期末聯(lián)考模擬試題含解析
- 2024年平面設(shè)計(jì)師技能及理論知識考試題庫(附含答案)
- 2024年高考真題-英語(新高考Ⅰ卷) 含解析
- 2023-2024年6月廣東省普通高中學(xué)業(yè)水平生物考試及答案
- 鐵路技術(shù)管理規(guī)程-20220507141239
- 植物學(xué)智慧樹知到答案2024年浙江大學(xué)
- 礦山開采與生產(chǎn)管理
- 大學(xué)體育與健康智慧樹知到期末考試答案章節(jié)答案2024年齊魯師范學(xué)院
- 化學(xué)實(shí)驗(yàn)操作評分細(xì)則表
- 西安市蓮湖區(qū)2022-2023學(xué)年七年級上學(xué)期期末語文試題【帶答案】
評論
0/150
提交評論