版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、第第 四四 章章 循環(huán)結構循環(huán)結構4.1 用格里高利公式求用格里高利公式求的近似值的近似值 (while語句語句)4.2 統(tǒng)計一個整數(shù)的位數(shù)統(tǒng)計一個整數(shù)的位數(shù) (do-while語句語句)4.3 判斷素數(shù)判斷素數(shù) (break 和和 continue 語句語句)4.4 求求1!+2!+.+100! (循環(huán)嵌套循環(huán)嵌套)4.5 循環(huán)結構程序設計循環(huán)結構程序設計本資料由-大學生創(chuàng)業(yè)|創(chuàng)業(yè)|創(chuàng)業(yè)網(wǎng)http:/ 減肥藥排行榜|淘寶最好的減肥藥|什么減肥藥效果最好|減肥瘦身藥|http:/本章要點本章要點n什么是循環(huán)什么是循環(huán)? 為什么要使用循環(huán)為什么要使用循環(huán)? 如何實現(xiàn)循環(huán)如何實現(xiàn)循環(huán)?n實現(xiàn)循環(huán)時
2、,如何確定循環(huán)條件和循環(huán)體實現(xiàn)循環(huán)時,如何確定循環(huán)條件和循環(huán)體?n怎樣使用怎樣使用while 和和do-while語句實現(xiàn)次數(shù)不確定的語句實現(xiàn)次數(shù)不確定的循環(huán)循環(huán)?nwhile 和和do-while語句有什么不同語句有什么不同?n如何使用如何使用break語句處理多循環(huán)條件語句處理多循環(huán)條件?n如何實現(xiàn)多重循環(huán)如何實現(xiàn)多重循環(huán)?4.1 用格里高利公式求用格里高利公式求的近似值的近似值使用格里高利公式求使用格里高利公式求的近似值,要求精的近似值,要求精確到最后一項的絕對值小于確到最后一項的絕對值小于104。4.1.1 程序解析程序解析4.1.2 while語句語句 4.1.3 輸入一批學生的成績
3、,統(tǒng)計平均分輸入一批學生的成績,統(tǒng)計平均分11114357#include int main(void) int denominator, flag; double item, pi; flag = 1; denominator = 1 ; item = 1.0; pi = 0; while(fabs (item) = 0.0001) item = flag * 1.0 / denominator; pi = pi + item; flag = -flag; denominator = denominator +2; pi = pi * 4; printf ( “pi = %fn”, pi);
4、 return 0;4.1.1 程序解析求程序解析求的近似值的近似值pi = 3.141613 item=0.0 ?fabs(item) 0.00014.1.2 while 語句語句while (條件條件) 循環(huán)體語句循環(huán)體語句; 真真假假while下一條語句下一條語句表達式表達式循環(huán)體語句循環(huán)體語句循環(huán)條件循環(huán)條件循環(huán)體循環(huán)體一條語句一條語句while 語句和語句和for語句語句都是在循環(huán)前先判斷條件都是在循環(huán)前先判斷條件while 語句說明語句說明表達式表達式1;while (表達式表達式2) for的循環(huán)體語句的循環(huán)體語句; 表達式表達式3;把把for語句改寫成語句改寫成while語句語
5、句for(表達式表達式1; 表達式表達式2; 表達式表達式3) 循環(huán)體語句循環(huán)體語句while 和和 for 的比較的比較for (i = 1; i = 10; i+) sum = sum + i; i = 1; 循環(huán)變量賦初值循環(huán)變量賦初值while (i = 10) 循環(huán)條件循環(huán)條件 sum = sum + i; i+; 循環(huán)變量的改變循環(huán)變量的改變循環(huán)體循環(huán)體例例4-2 從鍵盤輸入一批學生的成績,計算平均從鍵盤輸入一批學生的成績,計算平均分。分。分析:分析:求累加和求累加和確定循環(huán)條件確定循環(huán)條件n不知道輸入數(shù)據(jù)的個數(shù),無法事先確定循環(huán)次數(shù)不知道輸入數(shù)據(jù)的個數(shù),無法事先確定循環(huán)次數(shù)n用一
6、個用一個特殊的數(shù)據(jù)特殊的數(shù)據(jù)作為正常輸入數(shù)據(jù)的結束標志,作為正常輸入數(shù)據(jù)的結束標志,比如選用一個負數(shù)作為結束標志比如選用一個負數(shù)作為結束標志。4.1.3 統(tǒng)計輸入的一批學生的平均成績統(tǒng)計輸入的一批學生的平均成績#include Int main(void) int num; double grade, total; num = 0; total = 0;printf(“Enter grades: n); scanf(%lf, &grade); /* 輸入第輸入第1個數(shù)個數(shù)*/while (mark = 0) /* 輸入負數(shù),循環(huán)結束輸入負數(shù),循環(huán)結束 */ total = total
7、+ grade; num+; scanf (“%lf”, &grade);if(num != 0) printf(“Grade average is %.2fn, total/num);else printf( Grade average is 0n); return 0;Enter grades: 67 88 73 54 82 -1Grade average is 72.80Enter grades: -1 67 88 73 54 82Grade average mark is4.2 統(tǒng)計一個整數(shù)的位數(shù)統(tǒng)計一個整數(shù)的位數(shù)從鍵盤讀入一個整數(shù),統(tǒng)計該數(shù)的位數(shù)。從鍵盤讀入一個整數(shù),統(tǒng)計該數(shù)
8、的位數(shù)。4.2.1 程序解析程序解析4.2.2 do - while語句語句 4.2.3 循環(huán)語句的選擇循環(huán)語句的選擇int main(void) int count, number; count = 0;printf(“Enter a number: );scanf (%d, &number) ;if (number 0) number = -number; do number = number / 10; count +; while (number != 0);printf(It contains %d digits.n, count); return 0;4.2.1 程序解析統(tǒng)
9、計一個整數(shù)的位數(shù)程序解析統(tǒng)計一個整數(shù)的位數(shù)Enter a number: 12534It contains 5 digits.Enter a number: -99It contains 2 digits.Enter a number: 0It contains 1 digits.while (number != 0) number = number / 10; count +;4.2.2 do - while 語句語句do 循環(huán)體語句循環(huán)體語句 while (表達式表達式)先循環(huán)先循環(huán)后判斷后判斷真真假假表達表達式式循環(huán)體語句循環(huán)體語句do-while的下一條語句的下一條語句n while
10、是先判別條件,再決定是否循環(huán);是先判別條件,再決定是否循環(huán);n do-while 是先至少循環(huán)一次,然后再根據(jù)是先至少循環(huán)一次,然后再根據(jù)循環(huán)的結果決定是否繼續(xù)循環(huán)。循環(huán)的結果決定是否繼續(xù)循環(huán)。while 和和 do-while 的比較的比較真真假假表達式表達式循環(huán)體語句循環(huán)體語句do-while的下一條語句的下一條語句真真假假while的下一條語句的下一條語句表達式表達式循環(huán)體語句循環(huán)體語句4.2.3 循環(huán)語句的選擇循環(huán)語句的選擇if(循環(huán)次數(shù)已知)循環(huán)次數(shù)已知) 使用使用for語句語句else /* 循環(huán)次數(shù)未知循環(huán)次數(shù)未知 */if (循環(huán)條件在進入循環(huán)時明確循環(huán)條件在進入循環(huán)時明確)使
11、用使用while語句語句else /* 循環(huán)條件需要在循環(huán)體中明確循環(huán)條件需要在循環(huán)體中明確 */使用使用do-while語句語句4.3 判斷素數(shù)判斷素數(shù)輸入一個正整數(shù)輸入一個正整數(shù)m,判斷它是否為素數(shù)。判斷它是否為素數(shù)。4.3.1 程序解析程序解析4.3.2 break語句語句 和和continue語句語句4.3.1 程序解析判斷素數(shù)程序解析判斷素數(shù)算法:除了算法:除了1和和m,不能被其它數(shù)整除。,不能被其它數(shù)整除。設設 i 取值取值 2, m-1 n如果如果m不能被該區(qū)間上的任何一個數(shù)整除,即對不能被該區(qū)間上的任何一個數(shù)整除,即對每個每個i,m%i 都不為都不為0,則,則m是素數(shù)是素數(shù)n只
12、要找到一個只要找到一個i,使使m%i為為0,則,則m肯定不是素數(shù)肯定不是素數(shù)m %2 %3 %4 %5 %(m-1)不是素數(shù)不是素數(shù) | =0 =0是素數(shù)是素數(shù) & !=0 !=0 m不可能被大于不可能被大于 m/2 的數(shù)整除的數(shù)整除 i 取值取值 2, m-1 、 2, m/2 、 2, mfor(i = 2; i m/2) printf(yesn)else printf(non”);int main(void) int i, m;printf(“Enter a number: );scanf (%d, &m);for (i = 2; i m/2 ) printf(%d is
13、 a prime number! n, m); else printf(No!n); 例例4-4源程序判斷素數(shù)源程序判斷素數(shù)Enter a number: 9NoEnter a number: 1111 is a prime number!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)條件?循環(huán)的結束條件循環(huán)的結束條件?break 語句語句while(exp) 語句語句1 if (expb) break; 語句語句2真真假假 exp 語句語
14、句1假假 expb 語語 句句2循環(huán)體循環(huán)體真真for (i = 2; i m/2 ) printf(Yes); else printf(No!n); 當循環(huán)有多個出口時:當循環(huán)有多個出口時: 表示循環(huán)條件表示循環(huán)條件 區(qū)分結束條件區(qū)分結束條件for(i = 2; i = m/2; i+) if(m%i = 0) printf(No!n); break; printf(Yes); continue 語句語句while(exp) 語句語句1 if (expb) continue; 語句語句2真真假假 exp 語句語句1假假e x pb 語語 句句2循環(huán)體循環(huán)體真真跳過跳過continue后面的語
15、句,繼續(xù)下一次循環(huán)后面的語句,繼續(xù)下一次循環(huán)break 和和 continue#include stdio.hint main(void) char c; int i; for (i = 0; i 10; i+) c = getchar(); if (c = n) break; putchar(c); abc efgh 123 abcabcefgh1continue;4.4 求求1! + 2! + . + 100!for (i = 1; i = 100; i+) item = i ! sum = sum + item;4.4.1 程序解析程序解析調(diào)用函數(shù)調(diào)用函數(shù) fact(i) 計算計算 i
16、的階乘的階乘4.4.2 嵌套循環(huán)嵌套循環(huán)用循環(huán)計算用循環(huán)計算 i 的階乘的階乘#include double fact (int n); int main(void) int i; double sum; sum = 0; for(i = 1; i = 100; i+ ) sum = sum + fact (i); printf(1! + 2! + 3! + + 100! = %en, sum); return 0;double fact (int n) int i; double result = 1; for (i = 1; i = n; i+) result = result * i ;
17、 return result ; 4.4.1 程序解析程序解析 求求1! + 2! + . + 100!4.4.2 嵌套循環(huán)嵌套循環(huán)for (i = 1; i = 100; i+) item = i ! sum = sum + item;for(i = 1; i = 100; i+) item = 1; for (j = 1; j = i; j+) item = item * j; sum = sum + item; 例例4-6 源程序源程序#include int main(void) int i, j;double item, sum; /* item 存放階乘存放階乘 */sum = 0
18、; for(i = 1; i = 100; i+) item = 1; /* 每次求階乘都從每次求階乘都從1開始開始 */ for (j = 1; j = i; j+) /* 內(nèi)層循環(huán)算出內(nèi)層循環(huán)算出 item = i! */ item = item * j; sum = sum + item; printf(1! + 2! + 3! + + 100! = %en, sum);內(nèi)層循環(huán)的初始化內(nèi)層循環(huán)的初始化for(i = 1; i = 100; i+) item = 1; for (j = 1; j = i; j+) item = item * j; sum = sum + item; 求求
19、1! + 2! + . + 100!item = 1;for(i = 1; i = 100; i+) for (j = 1; j = i; j+) item = item * j; sum = sum + item; 求求1! + 1!*2! + + 1!*2!*100! 分析嵌套循環(huán)的執(zhí)行過程分析嵌套循環(huán)的執(zhí)行過程for(i = 1; i = 100; i+) item = 1; for (j = 1; j = i; j+) item = item * j; sum = sum + item; n 外層循環(huán)變量外層循環(huán)變量 i 的每個值的每個值內(nèi)層循環(huán)變量內(nèi)層循環(huán)變量 j 變化一個輪次;變化
20、一個輪次;n 內(nèi)外層循環(huán)變量不能相同內(nèi)外層循環(huán)變量不能相同分別用分別用 i 和和 ji = 1j = 1輸出 1 1 (第1次輸出)j = 1輸出 2 1 (第2次輸出)i = 2j = 2輸出 2 2 (第3次輸出)j = 1輸出 100 1 (第4951次輸出)j = 2輸出 100 2 (第4952次輸出)i = 100j = 100輸出 100 100 (第5050次輸出)for (i = 1; i = 100; i+) for (j = 1; j = i; j+) printf (%d %dn, i, j );4.5 循環(huán)程序設計循環(huán)程序設計n循環(huán)程序的實現(xiàn)要點:循環(huán)程序的實現(xiàn)要點:
21、歸納出歸納出哪些操作需要反復執(zhí)行?哪些操作需要反復執(zhí)行? 循環(huán)體循環(huán)體這些操作在什么情況下重復執(zhí)行這些操作在什么情況下重復執(zhí)行? 循環(huán)條件循環(huán)條件n選用合適的循環(huán)語句選用合適的循環(huán)語句for while do-whilen循環(huán)具體實現(xiàn)時考慮(循環(huán)條件):循環(huán)具體實現(xiàn)時考慮(循環(huán)條件):事先給定循環(huán)次數(shù),首選事先給定循環(huán)次數(shù),首選for通過其他條件控制循環(huán),考慮通過其他條件控制循環(huán),考慮while或或do-while#include int main(void) int i, mark, max, n; printf(Enter n: ); scanf (%d, &n); printf(
22、Enter %d marks: , n); scanf (%d, &mark); /* 讀入第一個成績讀入第一個成績 */ max = mark; /* 假設第一個成績是最高分假設第一個成績是最高分 */ for (i = 1; i n; i+ ) scanf (%d, &mark); if (max mark) max = mark; printf(Max = %dn, max); return 0;例例4-7 輸入一批學生的成績,求最高分輸入一批學生的成績,求最高分(for)mark maxmaxmarkEnter n: 5Enter 5 maks:67 88 73 54
23、82Max = 88Enter n: 0#include int main(void) int mark, max; printf(“Enter marks:); scanf (%d, &mark); /* 讀入第一個成績讀入第一個成績 */ max = mark; /* 假設第一個成績最高分假設第一個成績最高分 */ while (mark = 0) if(max mark) max = mark ; scanf (%d, &mark ); ; printf(Max = %dn, max); return 0;例例4-7 輸入一批學生的成績,求最高分輸入一批學生的成績,求最高
24、分(while)Enter marks:67 88 73 54 82 -1Max = 88Enter marks:-1#include int main(void) int mark, max; max = -1; /* 給給max賦一個小初值賦一個小初值 */ printf(“Enter marks: ); do scanf (%d, &mark ); if (max = 0); printf(Max = %dn, max);例例4-7 輸入一批學生的成績,求最高分輸入一批學生的成績,求最高分(do-while)Enter marks: 67 88 73 54 82 -1Max =
25、88Enter marks: -1例例4-8 將一個正整數(shù)逆序輸出將一個正整數(shù)逆序輸出確定:確定:循環(huán)條件循環(huán)條件和和循環(huán)體循環(huán)體(循環(huán)不變式循環(huán)不變式) 12345 5 4 3 2 112345 % 10 = 5 12345 / 10 = 1234 1234 % 10 = 4 1234 / 10 = 123 123 % 10 = 3 123 / 10 = 12 12 % 10 = 2 12 / 10 = 1 1 % 10 = 1 1 / 10 = 0 結束結束循環(huán)不變式循環(huán)不變式 x%10 x=x/10循環(huán)結束條件循環(huán)結束條件 x=0scanf( “%d”, &x);while (x
26、 != 0) digit = x %10; x = x/10 ; printf( %d , digit);用用do-while實現(xiàn)?實現(xiàn)?例例4-9 求求500以內(nèi)的全部素數(shù),每行輸出以內(nèi)的全部素數(shù),每行輸出10個個for (m = 2; m = 500; m+) if (m是素數(shù)是素數(shù)) printf( %d, m);n = sqrt(m);for(i = 2; i n) printf(yesn)else printf(non”);for (m = 2; m = 500; m+) n=sqrt(m); for(i = 2; i n) printf(%d, m) 例例4-9 源程序源程序#in
27、clude #include int main(void) int count, i, m, n; count = 0; for (m = 2; m = 500; m+) n = sqrt(m); for (i = 2; i n) /* 如果如果m是素數(shù)是素數(shù) */ printf(%6d, m); count+; if (count %10 = 0) printf(“n”); 例例4-10 求求Fibonacci序列:序列:1,1,2,3,5,8,13, 1, 1, 2, 3, 5, 8, 13, x1 x2 x x1 x2 xx1 = x2 = 1;x = x1 + x2;x1 = x2;x
28、2 = x;x1 = 1;x2 = 1;printf (%6d%6d, x1, x2 ); /* 輸出頭兩項輸出頭兩項 */for (i = 1; i = 8; i+) /* 循環(huán)輸出后循環(huán)輸出后8項項 */ x = x1 + x2; /* 計算新項計算新項 */ printf(%6d, x); x1 = x2; /* 更新更新x1和和x2 */ x2 = x; 例例4-11古典算術問題搬磚頭古典算術問題搬磚頭某地需要搬運磚塊,已知男人一人搬某地需要搬運磚塊,已知男人一人搬3塊,女人塊,女人一人搬一人搬2塊,小孩兩人搬一塊。塊,小孩兩人搬一塊。問用問用45人正好搬人正好搬45塊磚,有多少種搬法?塊磚,有多少種搬法?for (men = 0; men = 45; men+) for (women = 0; women = 45; women+) for (child = 0; child =
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 廣東省外語藝術職業(yè)學院《通風空調(diào)A》2023-2024學年第一學期期末試卷
- 廣東女子職業(yè)技術學院《現(xiàn)代設計技術》2023-2024學年第一學期期末試卷
- 七年級上冊《1.2.4絕對值》課件與作業(yè)
- 廣東茂名幼兒師范??茖W?!稖y量學基礎》2023-2024學年第一學期期末試卷
- 廣東茂名健康職業(yè)學院《習思想》2023-2024學年第一學期期末試卷
- 五年級數(shù)學(小數(shù)乘法)計算題專項練習及答案匯編
- 大學生心理健康教育(蘭州大學)學習通測試及答案
- 土木實習總結15篇
- 云南玉溪市2021高考英語優(yōu)生自選練習(8)及答案
- 【紅對勾】2021高考生物(人教版)一輪階段綜合測試5
- 獸醫(yī)學英語詞匯【參考】
- 行政個人年終述職報告
- 第12課《詞四首》課件+2023-2024學年統(tǒng)編版語文九年級下冊
- 《發(fā)電廠電氣部分》考試題庫
- 建筑施工安全生產(chǎn)包保責任實施方案
- 2024年R1快開門式壓力容器操作證考試題庫及答案
- 《數(shù)學物理方法》期末測試卷及答案
- 鐵路工務勞動安全
- 直播電商年終總結
- 滬科版九年級物理下冊教案全冊
- PAS 2050:2011-商品和服務在生命周期內(nèi)的溫室氣體排放評價規(guī)范(英文)
評論
0/150
提交評論