C語言PPT課件4_第1頁
C語言PPT課件4_第2頁
C語言PPT課件4_第3頁
C語言PPT課件4_第4頁
C語言PPT課件4_第5頁
已閱讀5頁,還剩33頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、第第 四四 章章 循環(huán)結(jié)構(gòu)循環(huán)結(jié)構(gòu)4.1 用格里高利公式求用格里高利公式求的近似值的近似值 (while語句語句)4.2 統(tǒng)計(jì)一個(gè)整數(shù)的位數(shù)統(tǒng)計(jì)一個(gè)整數(shù)的位數(shù) (do-while語句語句)4.3 判斷素?cái)?shù)判斷素?cái)?shù) (break 和和 continue 語句語句)4.4 求求1!+2!+.+100! (循環(huán)嵌套循環(huán)嵌套)4.5 循環(huán)結(jié)構(gòu)程序設(shè)計(jì)循環(huán)結(jié)構(gòu)程序設(shè)計(jì)本資料由-大學(xué)生創(chuàng)業(yè)|創(chuàng)業(yè)|創(chuàng)業(yè)網(wǎng)http:/ 減肥藥排行榜|淘寶最好的減肥藥|什么減肥藥效果最好|減肥瘦身藥|http:/本章要點(diǎn)本章要點(diǎn)n什么是循環(huán)什么是循環(huán)? 為什么要使用循環(huán)為什么要使用循環(huán)? 如何實(shí)現(xiàn)循環(huán)如何實(shí)現(xiàn)循環(huán)?n實(shí)現(xiàn)循環(huán)時(shí)

2、,如何確定循環(huán)條件和循環(huán)體實(shí)現(xiàn)循環(huán)時(shí),如何確定循環(huán)條件和循環(huán)體?n怎樣使用怎樣使用while 和和do-while語句實(shí)現(xiàn)次數(shù)不確定的語句實(shí)現(xiàn)次數(shù)不確定的循環(huán)循環(huán)?nwhile 和和do-while語句有什么不同語句有什么不同?n如何使用如何使用break語句處理多循環(huán)條件語句處理多循環(huán)條件?n如何實(shí)現(xiàn)多重循環(huán)如何實(shí)現(xiàn)多重循環(huán)?4.1 用格里高利公式求用格里高利公式求的近似值的近似值使用格里高利公式求使用格里高利公式求的近似值,要求精的近似值,要求精確到最后一項(xiàng)的絕對(duì)值小于確到最后一項(xiàng)的絕對(duì)值小于104。4.1.1 程序解析程序解析4.1.2 while語句語句 4.1.3 輸入一批學(xué)生的成績

3、,統(tǒng)計(jì)平均分輸入一批學(xué)生的成績,統(tǒng)計(jì)平均分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下一條語句下一條語句表達(dá)式表達(dá)式循環(huán)體語句循環(huán)體語句循環(huán)條件循環(huán)條件循環(huán)體循環(huán)體一條語句一條語句while 語句和語句和for語句語句都是在循環(huán)前先判斷條件都是在循環(huán)前先判斷條件while 語句說明語句說明表達(dá)式表達(dá)式1;while (表達(dá)式表達(dá)式2) for的循環(huán)體語句的循環(huán)體語句; 表達(dá)式表達(dá)式3;把把for語句改寫成語句改寫成while語句語

5、句for(表達(dá)式表達(dá)式1; 表達(dá)式表達(dá)式2; 表達(dá)式表達(dá)式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 從鍵盤輸入一批學(xué)生的成績,計(jì)算平均從鍵盤輸入一批學(xué)生的成績,計(jì)算平均分。分。分析:分析:求累加和求累加和確定循環(huán)條件確定循環(huán)條件n不知道輸入數(shù)據(jù)的個(gè)數(shù),無法事先確定循環(huán)次數(shù)不知道輸入數(shù)據(jù)的個(gè)數(shù),無法事先確定循環(huán)次數(shù)n用一

6、個(gè)用一個(gè)特殊的數(shù)據(jù)特殊的數(shù)據(jù)作為正常輸入數(shù)據(jù)的結(jié)束標(biāo)志,作為正常輸入數(shù)據(jù)的結(jié)束標(biāo)志,比如選用一個(gè)負(fù)數(shù)作為結(jié)束標(biāo)志比如選用一個(gè)負(fù)數(shù)作為結(jié)束標(biāo)志。4.1.3 統(tǒng)計(jì)輸入的一批學(xué)生的平均成績統(tǒng)計(jì)輸入的一批學(xué)生的平均成績#include Int main(void) int num; double grade, total; num = 0; total = 0;printf(“Enter grades: n); scanf(%lf, &grade); /* 輸入第輸入第1個(gè)數(shù)個(gè)數(shù)*/while (mark = 0) /* 輸入負(fù)數(shù),循環(huán)結(jié)束輸入負(fù)數(shù),循環(huán)結(jié)束 */ 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)計(jì)一個(gè)整數(shù)的位數(shù)統(tǒng)計(jì)一個(gè)整數(shù)的位數(shù)從鍵盤讀入一個(gè)整數(shù),統(tǒng)計(jì)該數(shù)的位數(shù)。從鍵盤讀入一個(gè)整數(shù),統(tǒng)計(jì)該數(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、計(jì)一個(gè)整數(shù)的位數(shù)程序解析統(tǒng)計(jì)一個(gè)整數(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 (表達(dá)式表達(dá)式)先循環(huán)先循環(huán)后判斷后判斷真真假假表達(dá)表達(dá)式式循環(huán)體語句循環(huán)體語句do-while的下一條語句的下一條語句n while

10、是先判別條件,再?zèng)Q定是否循環(huán);是先判別條件,再?zèng)Q定是否循環(huán);n do-while 是先至少循環(huán)一次,然后再根據(jù)是先至少循環(huán)一次,然后再根據(jù)循環(huán)的結(jié)果決定是否繼續(xù)循環(huán)。循環(huán)的結(jié)果決定是否繼續(xù)循環(huán)。while 和和 do-while 的比較的比較真真假假表達(dá)式表達(dá)式循環(huán)體語句循環(huán)體語句do-while的下一條語句的下一條語句真真假假while的下一條語句的下一條語句表達(dá)式表達(dá)式循環(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)條件在進(jìn)入循環(huán)時(shí)明確循環(huán)條件在進(jìn)入循環(huán)時(shí)明確)使

11、用使用while語句語句else /* 循環(huán)條件需要在循環(huán)體中明確循環(huán)條件需要在循環(huán)體中明確 */使用使用do-while語句語句4.3 判斷素?cái)?shù)判斷素?cái)?shù)輸入一個(gè)正整數(shù)輸入一個(gè)正整數(shù)m,判斷它是否為素?cái)?shù)。判斷它是否為素?cái)?shù)。4.3.1 程序解析程序解析4.3.2 break語句語句 和和continue語句語句4.3.1 程序解析判斷素?cái)?shù)程序解析判斷素?cái)?shù)算法:除了算法:除了1和和m,不能被其它數(shù)整除。,不能被其它數(shù)整除。設(shè)設(shè) i 取值取值 2, m-1 n如果如果m不能被該區(qū)間上的任何一個(gè)數(shù)整除,即對(duì)不能被該區(qū)間上的任何一個(gè)數(shù)整除,即對(duì)每個(gè)每個(gè)i,m%i 都不為都不為0,則,則m是素?cái)?shù)是素?cái)?shù)n只

12、要找到一個(gè)只要找到一個(gè)i,使使m%i為為0,則,則m肯定不是素?cái)?shù)肯定不是素?cái)?shù)m %2 %3 %4 %5 %(m-1)不是素?cái)?shù)不是素?cái)?shù) | =0 =0是素?cái)?shù)是素?cái)?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源程序判斷素?cái)?shù)源程序判斷素?cái)?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)的結(jié)束條件循環(huán)的結(jié)束條件?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); 當(dāng)循環(huán)有多個(gè)出口時(shí):當(dāng)循環(huán)有多個(gè)出口時(shí): 表示循環(huán)條件表示循環(huán)條件 區(qū)分結(jié)束條件區(qū)分結(jié)束條件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) 計(jì)算計(jì)算 i

16、的階乘的階乘4.4.2 嵌套循環(huán)嵌套循環(huán)用循環(huán)計(jì)算用循環(huán)計(jì)算 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 的每個(gè)值的每個(gè)值內(nèi)層循環(huán)變量內(nèi)層循環(huán)變量 j 變化一個(gè)輪次;變化

20、一個(gè)輪次;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)程序設(shè)計(jì)循環(huán)程序設(shè)計(jì)n循環(huán)程序的實(shí)現(xiàn)要點(diǎn):循環(huán)程序的實(shí)現(xiàn)要點(diǎn):

21、歸納出歸納出哪些操作需要反復(fù)執(zhí)行?哪些操作需要反復(fù)執(zhí)行? 循環(huán)體循環(huán)體這些操作在什么情況下重復(fù)執(zhí)行這些操作在什么情況下重復(fù)執(zhí)行? 循環(huán)條件循環(huán)條件n選用合適的循環(huán)語句選用合適的循環(huán)語句for while do-whilen循環(huán)具體實(shí)現(xiàn)時(shí)考慮(循環(huán)條件):循環(huán)具體實(shí)現(xiàn)時(shí)考慮(循環(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); /* 讀入第一個(gè)成績讀入第一個(gè)成績 */ max = mark; /* 假設(shè)第一個(gè)成績是最高分假設(shè)第一個(gè)成績是最高分 */ for (i = 1; i n; i+ ) scanf (%d, &mark); if (max mark) max = mark; printf(Max = %dn, max); return 0;例例4-7 輸入一批學(xué)生的成績,求最高分輸入一批學(xué)生的成績,求最高分(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); /* 讀入第一個(gè)成績讀入第一個(gè)成績 */ max = mark; /* 假設(shè)第一個(gè)成績最高分假設(shè)第一個(gè)成績最高分 */ while (mark = 0) if(max mark) max = mark ; scanf (%d, &mark ); ; printf(Max = %dn, max); return 0;例例4-7 輸入一批學(xué)生的成績,求最高分輸入一批學(xué)生的成績,求最高

24、分(while)Enter marks:67 88 73 54 82 -1Max = 88Enter marks:-1#include int main(void) int mark, max; max = -1; /* 給給max賦一個(gè)小初值賦一個(gè)小初值 */ printf(“Enter marks: ); do scanf (%d, &mark ); if (max = 0); printf(Max = %dn, max);例例4-7 輸入一批學(xué)生的成績,求最高分輸入一批學(xué)生的成績,求最高分(do-while)Enter marks: 67 88 73 54 82 -1Max =

25、88Enter marks: -1例例4-8 將一個(gè)正整數(shù)逆序輸出將一個(gè)正整數(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 結(jié)束結(jié)束循環(huán)不變式循環(huán)不變式 x%10 x=x/10循環(huán)結(jié)束條件循環(huán)結(jié)束條件 x=0scanf( “%d”, &x);while (x

26、 != 0) digit = x %10; x = x/10 ; printf( %d , digit);用用do-while實(shí)現(xiàn)?實(shí)現(xiàn)?例例4-9 求求500以內(nèi)的全部素?cái)?shù),每行輸出以內(nèi)的全部素?cái)?shù),每行輸出10個(gè)個(gè)for (m = 2; m = 500; m+) if (m是素?cái)?shù)是素?cái)?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是素?cái)?shù)是素?cái)?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 ); /* 輸出頭兩項(xiàng)輸出頭兩項(xiàng) */for (i = 1; i = 8; i+) /* 循環(huán)輸出后循環(huán)輸出后8項(xiàng)項(xiàng) */ x = x1 + x2; /* 計(jì)算新項(xiàng)計(jì)算新項(xiàng) */ printf(%6d, x); x1 = x2; /* 更新更新x1和和x2 */ x2 = x; 例例4-11古典算術(shù)問題搬磚頭古典算術(shù)問題搬磚頭某地需要搬運(yùn)磚塊,已知男人一人搬某地需要搬運(yùn)磚塊,已知男人一人搬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等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(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ǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論