07循環(huán)結(jié)構(gòu)程序設(shè)計_第1頁
07循環(huán)結(jié)構(gòu)程序設(shè)計_第2頁
07循環(huán)結(jié)構(gòu)程序設(shè)計_第3頁
07循環(huán)結(jié)構(gòu)程序設(shè)計_第4頁
07循環(huán)結(jié)構(gòu)程序設(shè)計_第5頁
已閱讀5頁,還剩40頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、設(shè)有兩個正整數(shù)m和n,如何求其最大公約數(shù)?有多種方法,例如:令k等于m和n中較小的數(shù),用k去除m和n,若不能整除,則令k的值減去1,直到某個值能同時將m和n整除。求最大公約數(shù) k = mn?m:n; while (m%k!=0 | n%k!=0) k-; 求最大公約數(shù)(笨辦法)NYk能同時整除m和n?輸出k的值輸入正整數(shù)m和n結(jié)束k k-1準(zhǔn)備K MIN(m,n)#include int main( ) int m, n, k; scanf(%d%d,&m,&n); if (m1|n1) return 0; k = mn?m:n; while (m%k!=0 | n%k!=0) k-; pri

2、ntf(gcd=%dn,k); return 0;設(shè)有兩個正整數(shù)m和n,如何求其最大公約數(shù)?有多種方法,例如:令k等于m和n中的較小者,用k去除m和n,若不能整除,則令k的值減去1,直到某個值能同時將m和n整除。求解速度最快的方法是輾轉(zhuǎn)相除法。輾轉(zhuǎn)相除法(歐幾里得算法):給定兩個正整數(shù)m和n,求它們的最大公約數(shù)(公因子)。步驟1:【求余數(shù)】以n除m并令r為所得余數(shù)(0rn)步驟2:【余數(shù)為0?】若r=0,則算法結(jié)束;n即為答案步驟3:【置換】置mn, nr,轉(zhuǎn)向步驟1。求最大公約數(shù)輾轉(zhuǎn)相除法求最大公約數(shù)YNrm被n除的余數(shù)r不等于0?n r輸出n的值輸入正整數(shù)m和n結(jié)束m n準(zhǔn)備ABCD求最大

3、公約數(shù)流程圖YNr不等于0?輸出n的值輸入正整數(shù)m和n開始結(jié)束m n; n rr m % nABCDr m % n求最大公約數(shù)程序#include int main( ) return 0;YNr不等于0?輸出n的值輸入正整數(shù)m和n開始結(jié)束m n; n rr m % nr m % nwhile (r != 0) m = n; n = r; r = m % n;printf(input two integers:);scanf(%d%d,&m,&n); r = m % n; int m, n, r;printf(ngcd = %dn ,n);C的循環(huán)語句C語言提供了描述循環(huán)計算的語句: whil

4、e語句 for語句 do.while語句學(xué)習(xí)循環(huán)結(jié)構(gòu)程序設(shè)計就是掌握以上語句的使用方法還要掌握break、continue語句分析問題,在求解過程中:存在一個(些)運(yùn)算(動作)需要重復(fù)進(jìn)行(循環(huán))若干次。重復(fù)的次數(shù)是事先確定的,或者是根據(jù)條件確定的。處理循環(huán)計算需要明確的三個問題:循環(huán)體:哪些運(yùn)算(動作)是需要重復(fù)進(jìn)行的;循環(huán)條件:重復(fù)這些運(yùn)算的條件是什么,即在什么情況下終止/繼續(xù)這個重復(fù)的過程。循環(huán)準(zhǔn)備:在進(jìn)行重復(fù)的運(yùn)算處理之前,需要進(jìn)行的準(zhǔn)備工作是什么;循環(huán)結(jié)構(gòu)程序的編寫要點(diǎn)for語句for語句的格式和含義for語句的基本格式:for(表達(dá)式1;表達(dá)式2;表達(dá)式3) 循環(huán)體語句Afor語句

5、的含義:1) 計算表達(dá)式1;2) 計算表達(dá)式2,若表達(dá)式2的值為“假”,則結(jié)束for語句的執(zhí)行,轉(zhuǎn)4);否則,執(zhí)行循環(huán)體語句A;3) 計算表達(dá)式3, 然后轉(zhuǎn)2);4) 執(zhí)行for語句之后的第一條語句;表達(dá)式2?A真 假表達(dá)式1表達(dá)式3for語句:1+2+.+100#include main( ) int i, s; printf( %dn ,s);BYNI 1S 0I=100?S S+I輸出S的值開始結(jié)束I I+1ACfor(i = 1,s = 0; i = 100;i+) s += i;#include int main( ) int i, s; i = 1; s = 0; while (i

6、 = 100) s += i; i+; printf( %dn ,s); return 0;for語句中的表達(dá)式for語句的基本格式:for(表達(dá)式1;表達(dá)式2;表達(dá)式3) 循環(huán)體語句A一般情況下表達(dá)式1進(jìn)行循環(huán)計算的初始化處理表達(dá)式2是循環(huán)的條件表達(dá)式3進(jìn)行的計算能夠?qū)Ρ磉_(dá)式2的值產(chǎn)生影響表達(dá)式2?A真 假表達(dá)式1表達(dá)式3求最大公約數(shù)程序(for)#include main( ) int m, n, r; printf(input two integers:); scanf(%d%d,&m,&n); printf(ngcd = %dn ,n);YNr不等于0?輸出n的值輸入正整數(shù)m和n開始結(jié)

7、束m n; n rrm被n除的余數(shù)rm被n除的余數(shù)for(r = m % n; r != 0; r = m % n) m = n; n = r;for語句與while語句的等價關(guān)系for語句的基本格式:for(表達(dá)式1;表達(dá)式2;表達(dá)式3) 循環(huán)體語句A表達(dá)式2?A真 假表達(dá)式1表達(dá)式3表達(dá)式1;while (表達(dá)式2) 循環(huán)體語句A; 表達(dá)式3;Y N K 2K不能整除n?K K+1輸出n是素數(shù) 輸入n的值開始結(jié)束YNK等于n?輸出n不是素數(shù)判斷素數(shù)算法及程序#include int main ( ) int k, n; printf(input an integer:); scanf(%d

8、,&n); k = 2; while (n % k != 0) k+; if ( k = n) printf(%d is a prime.n,n); else printf(%d is not a prime.n,n); return 0;#include main ( ) int k, n; printf(input an integer:); scanf(%d,&n); if ( k = n) printf(%d is a prime.n,n); else printf(%d is not a prime.n,n);for(k = 2; n % k !=0; k+);for語句小結(jié)表達(dá)式1

9、可放置在for語句之前for(表達(dá)式1;表達(dá)式2;表達(dá)式3) 循環(huán)體語句A表達(dá)式1;for(;表達(dá)式2;表達(dá)式3) 循環(huán)體語句A表達(dá)式3可放置在for語句的循環(huán)體中for(表達(dá)式1;表達(dá)式2;) 循環(huán)體語句A; 表達(dá)式3;for語句中的表達(dá)式可以是C語言允許的任何表達(dá)式for語句小結(jié)(續(xù))進(jìn)一步,表達(dá)式2可以沒有,表示無休止地循環(huán)for(表達(dá)式1;表達(dá)式3) 循環(huán)體語句A三個表達(dá)式都省略for(;) 循環(huán)體語句AAA表達(dá)式1表達(dá)式3break語句break語句的作用在switch語句中使用 grade = score / 10; /*百分制成績score轉(zhuǎn)換為等級分制*/ switch (gr

10、ade) case 10: case 9: printf( grade = An ); break; case 8: printf( grade = Bn ); break; case 7: printf( grade = Cn ); break; case 6: printf( grade = Dn ); break; case 5: case 4: case 3: case 2: case 1: case 0: printf( grade = En ); break; default: printf( Invalid data!n ); break語句的作用(續(xù))在循環(huán)語句中使用,強(qiáng)行中止

11、循環(huán)pA成立不成立循環(huán)結(jié)構(gòu) (while)BbreakpA成立不成立BbreakpA成立不成立循環(huán)結(jié)構(gòu) (while)Bbreak語句的作用(續(xù))在循環(huán)語句中使用,強(qiáng)行中止循環(huán)/*計算正整數(shù)m和n的最大公約數(shù)*/ for(k = m; k=1; k-) if ( n % k = 0 & m % k = 0) break; printf(Gcd = %dn,k);k = 1?成立不成立breakn % k = 0且m % k =0?k = m否是k = k - 1printf(k)continue語句continue語句的作用執(zhí)行流程到達(dá)continue語句時,結(jié)束本輪循環(huán),開始下一輪循環(huán)pA成

12、立不成立循環(huán)結(jié)構(gòu) (while)BpA成立不成立循環(huán)結(jié)構(gòu) (while)BcontinuepA成立不成立循環(huán)結(jié)構(gòu) (while)Bcontinuecontinue語句的應(yīng)用舉例輸出100200之間所有不能被3整除的整數(shù)。#include main( ) int n; for(n = 100; n = 200; n+) if (n % 3 = 0) continue; printf(%dt, n); /*end of for*/n = 200?成立不成立printf(%dt, n)continuen % 3 = 0?n = 100否是n +循環(huán)語句應(yīng)用舉例已知雞兔共籠,頭共45個,腳共120只,

13、問雞、兔各幾何?#include int main( ) int chicken, rabbits; for (chicken = 0; chicken = 45; chicken+) rabbits = 45 chicken; if (chicken * 2 + rabbits * 4 = 120) break; /*end of for*/ printf(chicken: %dt rabbits: %dn , chicken, rabbits); return 0;a = 0; b = 45;while (2*a+4*b != 120) a+; b-;單重循環(huán)和多重循環(huán)for語句和whil

14、e語句for語句的基本格式:for(表達(dá)式1;表達(dá)式2;表達(dá)式3) 循環(huán)體語句A表達(dá)式2?A真 假表達(dá)式1表達(dá)式3while語句的格式:while (表達(dá)式p) 循環(huán)體語句ApA真 假循環(huán)結(jié)構(gòu)循環(huán)語句應(yīng)用舉例已知雞兔共籠,頭共45個,腳共120只,問雞、兔各幾何?#include int main( ) int chicken, rabbits; for (chicken = 0; chicken = 45; chicken+) rabbits = 45 chicken; if (chicken * 2 + rabbits * 4 = 120) break; /*end of for*/ pr

15、intf(chicken: %dt rabbits: %dn , chicken, rabbits); return 0;循環(huán)體語句可以是語言允許的任何語句,多于一條語句時必須用括起來百錢百雞問題中國古代數(shù)學(xué)家張丘建在他的算經(jīng)中曾提出著名的“百錢百雞問題”,其題目如下: 雞翁一,值錢五;雞母一,值錢三;雞雛三,值錢一;百錢買百雞,翁、母、雛各幾何? 百錢百雞問題解:設(shè)i、j、k分別代表公雞、母雞、小雞的數(shù)量,根據(jù)題意列方程: 根據(jù)題意可知,i、j、k的范圍一定是0到100的正整數(shù),那么,最簡單的解題方法是:窮舉i、j、k每一種可能的取值組合,直接代入方程組,若滿足該方程組則是一組解。這樣即可得

16、到問題的全部解。 百錢百雞問題i 0i 20?買母雞和小雞NY開始結(jié)束i i + 1YNj 34?j j + 1j 0買小雞YNk 100?k k + 1k 0將i、j、k的值代入i+j+k和i+3j+k/3,若都為100,則是一種買法i = 0;while (i 20 ) i+; int i, j, k; /*i、j、k分別表示公雞、母雞和小雞的數(shù)目*/ j = 0;while (j 34) j+;k = 0;while ( k 100) if ( i + j + k = 100 & i*5 + j*3 + k/3 = 100) printf(%d %d %dn,i,j,k); k+;百錢百

17、雞問題(while)輸出:0 25 753 20 774 18 787 13 808 11 8111 6 8312 4 84for(i = 0; i 20; i+ ) /*設(shè)定公雞的數(shù)目*/ int main( ) int i, j, k; /*i、j、k分別表示公雞、母雞和小雞的數(shù)目*/ return 0; for(j = 0; j 34; j+) /*設(shè)定母雞的數(shù)目*/ for(k = 0; k 100; k+) /*設(shè)定小雞的數(shù)目*/ if ( i + j + k = 100 & i*15 + j*9 + k = 300) printf(%d %d %dn,i,j,k);百錢百雞問題(f

18、or)輸出:0 25 754 18 788 11 8112 4 84for(i = 0; i 20; i+ ) /*設(shè)定公雞的數(shù)目*/ int main( ) int i, j, k; /*i、j、k分別表示公雞、母雞和小雞的數(shù)目*/ return 0; for(j = 0; j 34; j+) /*設(shè)定母雞的數(shù)目*/ k = 100 i j ;if (i*15 + j*9 + k = 300) printf(%d %d %dn,i,j,k);百錢百雞問題(for續(xù))直到型循環(huán)結(jié)構(gòu)和do-while語句pAab循環(huán)結(jié)構(gòu)2(until)pA成立不成立ab循環(huán)結(jié)構(gòu)1(while)until循環(huán)結(jié)構(gòu)

19、循環(huán)結(jié)構(gòu)當(dāng)型循環(huán)結(jié)構(gòu)(while型循環(huán))重復(fù)地判斷條件p,若成立,則執(zhí)行計算A;條件p不成立時,終止該重復(fù)過程,如圖循環(huán)結(jié)構(gòu)1所示直到型循環(huán)結(jié)構(gòu)(Until型循環(huán)) 先執(zhí)行計算A,然后判斷條件p是否成立,如圖循環(huán)結(jié)構(gòu)2所示do-while語句的格式和含義do-while語句的使用格式:do 循環(huán)體語句Awhile (表達(dá)式p);do-while語句的含義:1) 執(zhí)行循環(huán)體語句A;2) 計算表達(dá)式p,若表達(dá)式的值為“假”,則結(jié)束do-while語句的執(zhí)行;否則,執(zhí)行循環(huán)體語句A,然后轉(zhuǎn)1);pAab循環(huán)結(jié)構(gòu)Y N K 2K不能整除n?K K+1輸出n是素數(shù) 輸入n的值開始結(jié)束YNK等于n?BEG

20、IN input n; /*輸入正整數(shù)n*/ k2; while (n mod k 0) do k k+1; if (k=n) then print “n是素數(shù)” else print “n不是素數(shù)” END輸出n不是素數(shù)判斷素數(shù)算法及程序#include main ( ) int k, n; printf(input an integer:); scanf(%d,&n); k = 2; while (n % k != 0) k+; if ( k = n) printf(%d is a prime.n,n); else printf(%d is not a prime.n,n);Y N K 2

21、K不能整除n?K K+1輸出n是素數(shù) 輸入n的值開始結(jié)束YNK等于n?輸出n不是素數(shù)判斷素數(shù)程序#include main ( ) int k, n; printf(input an integer:); scanf(%d,&n); k = 2; while (n % k != 0) k+; if ( k = n) printf(%d is a prime.n,n); else printf(%d is not a prime.n,n);#include main ( ) int k, n; printf(input an integer:); scanf(%d,&n); k = 1; do k+; w

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論