哈工大蘇小紅版_C語(yǔ)言_課件_chart6_loop_structure_第1頁(yè)
哈工大蘇小紅版_C語(yǔ)言_課件_chart6_loop_structure_第2頁(yè)
哈工大蘇小紅版_C語(yǔ)言_課件_chart6_loop_structure_第3頁(yè)
哈工大蘇小紅版_C語(yǔ)言_課件_chart6_loop_structure_第4頁(yè)
哈工大蘇小紅版_C語(yǔ)言_課件_chart6_loop_structure_第5頁(yè)
已閱讀5頁(yè),還剩64頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、第6章 循環(huán)控制結(jié)構(gòu)于水 本章主要內(nèi)容 循環(huán)的類型 while語(yǔ)句和do while語(yǔ)句 for語(yǔ)句 嵌套循環(huán) goto、 break 、continue語(yǔ)句2循環(huán)的類型問(wèn)題的提出問(wèn)題輸入5個(gè)數(shù),求其和接受用戶輸入,并從屏幕輸出,直到用戶主動(dòng)退出某些程序段需要重復(fù)屢次執(zhí)行3循環(huán)的類型問(wèn)題的提出輸入5個(gè)數(shù),求其和(不使用循環(huán))4循環(huán)的類型問(wèn)題的提出輸入5個(gè)數(shù),求其和(使用循環(huán))5循環(huán)的類型循環(huán)的類型計(jì)數(shù)控制循環(huán)條件控制循環(huán)當(dāng)型循環(huán)直到型循環(huán)6循環(huán)的類型當(dāng)型循環(huán)和直到型循環(huán)A條 件P直到型循環(huán)假真A當(dāng)型循環(huán)真假假條 件P7本章主要內(nèi)容 循環(huán)的類型 while語(yǔ)句和do while語(yǔ)句 for語(yǔ)句

2、嵌套循環(huán) goto、 break 、continue語(yǔ)句8while語(yǔ)句語(yǔ)句形式while(循環(huán)控制表達(dá)式P) 語(yǔ)句序列A 當(dāng)型循環(huán)循環(huán)體9while語(yǔ)句執(zhí)行過(guò)程1) 計(jì)算循環(huán)控制表達(dá)式的值2) 如果表達(dá)式為真,那么執(zhí)行循環(huán)體的語(yǔ)句,并返回1)3) 如果表達(dá)式值為假,那么退出循環(huán),執(zhí)行循環(huán)體后面的語(yǔ)句10while語(yǔ)句程序?qū)嵗齣nt i = 0;int sum=0;while(i 2) sum += i; i+;printf(“sum=%d,sum)第一次循環(huán)1、i = 0 2 結(jié)果為真2、sum = sum + i = 03、i = i +1 = 1第二次循環(huán)1、i = 1 2 結(jié)果為真2、

3、sum = sum + i = 13、i = i +1 =2第三次循環(huán)1、i = 2 = 2 結(jié)果為假2、退出循環(huán)3、執(zhí)行printf語(yǔ)句11while語(yǔ)句程序的另外兩種寫法int i = 0;int sum=0;while(i 2) sum += i; i+;int i = 0;int sum=0;while (i+ 2) sum += i;int i = 0;int sum=0;while(i 2) sum += i+; 三種寫法結(jié)果是否一樣?12do-while語(yǔ)句語(yǔ)句形式do 語(yǔ)句序列A while(循環(huán)控制表達(dá)式P); 直到型循環(huán)13do-while語(yǔ)句執(zhí)行過(guò)程1) 執(zhí)行循環(huán)體的語(yǔ)句

4、2)計(jì)算循環(huán)控制表達(dá)式的值,如果表達(dá)式為真,那么返回1)3) 如果表達(dá)式值為假,那么退出循環(huán),執(zhí)行循環(huán)體后面的語(yǔ)句 do-while語(yǔ)句的循環(huán)體至少被執(zhí)行一次14do-while語(yǔ)句用do-while改寫上一個(gè)程序int i = 0;int sum=0;do sum += i; i+; while(i 2);int i = 0;int sum=0;do sum += i; while(i+ 2);int i = 0;int sum=0;do sum += i+; while(i 2); 三種寫法結(jié)果是否一樣?15本章主要內(nèi)容 循環(huán)的類型 while語(yǔ)句和do while語(yǔ)句 for語(yǔ)句嵌套循環(huán)

5、 goto、 break 、continue語(yǔ)句16for語(yǔ)句語(yǔ)句形式for(初始化表達(dá)式;循環(huán)控制表達(dá)式;增值表達(dá)式) 語(yǔ)句序列;循環(huán)變量賦初值循環(huán)結(jié)束條件改變循環(huán)變量for(i = 0;i 2;i+) sum = sum + i;17for語(yǔ)句執(zhí)行過(guò)程1) 循環(huán)變量賦初值2) 計(jì)算循環(huán)控制表達(dá)式的值,如果表達(dá)式為真, 執(zhí)行循環(huán)體,然后執(zhí)行循環(huán)變量增值表達(dá)式,返回2)如果表達(dá)式值為假,那么退出循環(huán),執(zhí)行循環(huán)體后面的語(yǔ)句18for語(yǔ)句用for語(yǔ)句重寫實(shí)例int sum=0; for(int i = 0;i 2;i+) sum = sum + i;第一次循環(huán)1、i = 0 2 結(jié)果為真2、sum

6、 = sum + i = 03、i = i +1 = 1第二次循環(huán)1、i = 1 2 結(jié)果為真2、sum = sum + i = 13、i = i +1 =2第三次循環(huán)1、i = 2 = 2 結(jié)果為假2、退出循環(huán)3、執(zhí)行printf語(yǔ)句19for語(yǔ)句使用for語(yǔ)句的本卷須知三個(gè)表達(dá)式之間有且僅有兩個(gè)分號(hào),不可省略三個(gè)表達(dá)式可以省略,但必須符合一定的條件增值表達(dá)式不僅僅是增20for語(yǔ)句三個(gè)表達(dá)式的省略如果已為循環(huán)變量賦初值,初始化表達(dá)式可以省略int i = 0;int sum=0; for (;i 2;i+) sum = sum + i;21for語(yǔ)句三個(gè)表達(dá)式的省略如果省略循環(huán)控制表達(dá)式,

7、那么表示循環(huán)條件永遠(yuǎn)為真int sum=0; int i;for (i = 0;i+) sum = sum + i;死循環(huán)22for語(yǔ)句三個(gè)表達(dá)式的省略如果已在循環(huán)體內(nèi)改變了循環(huán)控制變量,那么增值表達(dá)式可以省略int sum=0; int i;for (i = 0;i 0;i-)for ( i = 10;i 0;i = i/2) sum += i;25編程小貼士變量的初值未賦初值的變量其初始值為隨機(jī)值int i = 0 ,sum;sum = 0;for (int i = 0;i 0;i-) sum += i,sum = sum + 1;27空語(yǔ)句僅由一個(gè)分號(hào)構(gòu)成的語(yǔ)句什么也不做通常用于延時(shí)程序

8、for ( i = 0;i 100;i+) ;for ( i = 0;i 100;i+) ;for ( i = 0;i 100;i+) 28for中的空語(yǔ)句int sum=0; int i;for (; ;) ;printf(“hello world);死循環(huán),重復(fù)執(zhí)行這一句永遠(yuǎn)都沒(méi)有執(zhí)行時(shí)機(jī)空語(yǔ)句29空語(yǔ)句while中的空語(yǔ)句正常情況下while語(yǔ)句后沒(méi)有分號(hào),for也一樣錯(cuò)誤的使用分號(hào)會(huì)導(dǎo)致程序錯(cuò)誤i = 1;while (i 10) ; sum = sum + i;i = 1;while (i 10) ; sum = sum + i;30想一個(gè)1100之間的數(shù)猜對(duì): right!猜錯(cuò):w

9、rong!并提示大小循序漸進(jìn)式編程例6.6:猜數(shù)游戲31只猜1次直到猜對(duì)為止最多猜10次猜多個(gè)數(shù)10次猜不對(duì)就猜下一個(gè)數(shù)循序漸進(jìn)式編程例6.6:猜數(shù)游戲32怎樣模擬計(jì)算機(jī)“想一個(gè)數(shù)呢?隨機(jī)函數(shù)rand()產(chǎn)生0,RAND_MAX 之間的隨機(jī)數(shù)magic = rand(); #include RAND_MAX在stdlib.h中定義,不大于雙字節(jié)整數(shù)的最大值32767 循序漸進(jìn)式編程例6.6:猜數(shù)游戲33產(chǎn)生0,b-1 之間的隨機(jī)數(shù)magic = rand()%b;產(chǎn)生a,a+b-1 之間的隨機(jī)數(shù)magic = rand()%b + a; 循序漸進(jìn)式編程例6.6:猜數(shù)游戲34#include #

10、include main() int magic; /*計(jì)算機(jī)想的數(shù)*/int guess; /*人猜的數(shù)*/magic = rand()%100 + 1; /*“想一個(gè)1,100之間的數(shù)magic*/printf(Please guess a magic number:);scanf(%d, &guess); if (guess magic) printf(Wrong! Too high!n); else if (guess magic) printf(Wrong! Too low!n); else printf(Right! n); printf(The number is:%d n, m

11、agic); 例5.4只猜1次35#include #include main() int magic; int guess; int counter; /*記錄人猜次數(shù)的計(jì)數(shù)器變量*/magic = rand() % 100 + 1; counter = 0; /*計(jì)數(shù)器變量count初始化為0*/doprintf(Please guess a magic number:);scanf(%d, &guess); counter +; /*計(jì)數(shù)器變量count加1*/if (guess magic) printf(Wrong! Too high!n);else if (guess magic)

12、 printf(Wrong! Too low!n); else printf(Right!n);while (guess != magic); printf(counter = %d n, counter); 直到猜對(duì)為止例6.636每次運(yùn)行程序時(shí)計(jì)算機(jī)所“想的數(shù)都是一樣的,這是什么原因呢?函數(shù)rand()產(chǎn)生的只是偽隨機(jī)數(shù)隨機(jī)函數(shù)srand為函數(shù)rand()設(shè)置隨機(jī)數(shù)種子來(lái)實(shí)現(xiàn)對(duì)函數(shù)rand所產(chǎn)生的偽隨機(jī)數(shù)的 “隨機(jī)化 通過(guò)輸入隨機(jī)數(shù)種子,產(chǎn)生1,100之間的隨機(jī)數(shù)scanf(%u, &seed); srand(seed); magic = rand() % 100 + 1; 循序漸進(jìn)式編程

13、例6.6:猜數(shù)游戲37#include #include main() int magic; int guess; int counter; /*記錄人猜次數(shù)的計(jì)數(shù)器變量*/ unsigned int seed; printf(Please enter seed:);scanf(%u, &seed);srand(seed);magic = rand() % 100 + 1; counter = 0; /*計(jì)數(shù)器變量count初始化為0*/doprintf(Please guess a magic number:);scanf(%d, &guess); counter +; /*計(jì)數(shù)器變量cou

14、nt加1*/if (guess magic) printf(Wrong! Too high!n);else if (guess magic) printf(Wrong! Too low!n); else printf(Right!n);while (guess != magic); printf(counter = %d n, counter); 直到猜對(duì)為止例6.638使用計(jì)算機(jī)讀取其時(shí)鐘值并把該值自動(dòng)設(shè)置為隨機(jī)數(shù)種子,產(chǎn)生1,100之間的隨機(jī)數(shù)函數(shù)time()返回以秒計(jì)算的當(dāng)前時(shí)間值,該值被轉(zhuǎn)換為無(wú)符號(hào)整數(shù)并用作隨機(jī)數(shù)發(fā)生器的種子 #include srand(time(NULL); ma

15、gic = rand() % 100 + 1; 函數(shù)time()能為程序員提供代表時(shí)間的字符串,使用NULL作為函數(shù)參數(shù),使其不具備此功能循序漸進(jìn)式編程例6.6:猜數(shù)游戲39#include #include #include main() int magic; int guess; int counter; /*記錄人猜次數(shù)的計(jì)數(shù)器變量*/ srand(time(NULL);magic = rand() % 100 + 1; counter = 0; /*計(jì)數(shù)器變量count初始化為0*/doprintf(Please guess a magic number:);scanf(%d, &gu

16、ess); counter +; /*計(jì)數(shù)器變量count加1*/if (guess magic) printf(Wrong! Too high!n);else if (guess magic) printf(Wrong! Too high!n);else if (guess magic) printf(Wrong! Too low!n); else printf(Right!n);while (guess != magic & counter 10); printf(counter = %d n, counter); 例6.7最多猜10次41本章主要內(nèi)容 循環(huán)的類型 while語(yǔ)句和do w

17、hile語(yǔ)句 for語(yǔ)句 嵌套循環(huán) goto、 break 、continue語(yǔ)句42嵌套循環(huán)將一個(gè)循環(huán)語(yǔ)句放在另一個(gè)循環(huán)語(yǔ)句的循環(huán)體中構(gòu)成的循環(huán)for 、while、do-while語(yǔ)句均可以嵌套循環(huán)先由外層循環(huán)進(jìn)行內(nèi)層循環(huán),執(zhí)行完內(nèi)層循環(huán)后返回外層,并再次進(jìn)入內(nèi)層,直至外層循環(huán)執(zhí)行完畢43嵌套循環(huán)嵌套循環(huán)的實(shí)例總循環(huán)次數(shù)10 * 8 = 80在每次循環(huán)全部執(zhí)行完成的前提下,即為內(nèi)外層循環(huán)次數(shù)的乘積int i, j, sum =0;for (i = 0;i 10; i+ ) for (j = 0;j magic) printf(Wrong!Too high!n);else if (guess

18、 magic) printf(Wrong!Too low!n);else printf(Right!n);while (guess != magic & counter magic) printf(Wrong!Too high!n);else if (guess magic) printf(Wrong!Too low!n);else printf(Right!n);while (guess != magic & counter 10);printf(counter = %dn, counter); printf(Do you want to continue(Y/N or y/n)?);sca

19、nf( %c, &reply);while (reply = Y) | (reply = y); 6.4嵌套循環(huán)例6.12防止非法字符輸入47本章主要內(nèi)容 循環(huán)的類型 while語(yǔ)句和do while語(yǔ)句 for語(yǔ)句 嵌套循環(huán) goto、break、continue語(yǔ)句48流程的轉(zhuǎn)移控制goto語(yǔ)句break語(yǔ)句continue語(yǔ)句exit()函數(shù)49goto語(yǔ)句一般形式50goto語(yǔ)句作用使程序無(wú)條件跳轉(zhuǎn)到語(yǔ)句標(biāo)號(hào)所標(biāo)識(shí)的語(yǔ)句執(zhí)行int i, sum =0;for (i = 0;i 10) goto err;err: printf(“ok);51goto語(yǔ)句優(yōu)點(diǎn)跳轉(zhuǎn)方便缺點(diǎn)過(guò)多的goto語(yǔ)句

20、使流程隨意跳轉(zhuǎn)而導(dǎo)致程序流程混亂不建議在程序中使用goto語(yǔ)句52break語(yǔ)句作用退出switch結(jié)構(gòu)和循環(huán)結(jié)構(gòu)的循環(huán)體當(dāng)程序執(zhí)行到break語(yǔ)句時(shí),循環(huán)立即終止,從循環(huán)語(yǔ)句后的第一條語(yǔ)句開始繼續(xù)執(zhí)行Break?退出一層循環(huán)或switch53break實(shí)例break語(yǔ)句n?10Please enter n:10n = 10Please enter n: -10Program is over!-10#include main() int i, n; for (i=1; i=5; i+) printf(Please enter n:); scanf(%d, &n); if (n 0) break

21、; printf(n = %dn, n); printf(Program is over!n);54continue語(yǔ)句作用當(dāng)程序執(zhí)行到continue語(yǔ)句時(shí),程序?qū)⑻^(guò)continue語(yǔ)句后面尚未執(zhí)行的語(yǔ)句,開始下一次循環(huán)Continue?中斷此次循環(huán),開始下一次55#include main() int i, n; for (i=1; i=5; i+) printf(Please enter n:); scanf(%d, &n); if (n 0) continue; printf(n = %dn, n); printf(Program is over!n);continue實(shí)例conti

22、nue語(yǔ)句n?10Please enter n:10n = 10Please enter n: -10Please enter n:20n = 20Please enter n: -20Please enter n:30n = 30Program is over!-1020-203056在嵌套循環(huán)中,continue和break只對(duì)包含它們的最內(nèi)層循環(huán)起作用跳出多重循環(huán)的方法使用goto語(yǔ)句使用break層層跳出Goto語(yǔ)句的適用場(chǎng)合快速跳出多重循環(huán)跳向共同的出口位置,進(jìn)行退出前的錯(cuò)誤處理工作goto、continue和break語(yǔ)句57用goto語(yǔ)句跳向共同的出口位置void Init(vo

23、id) char *p1 = NULL;char *p2 = NULL;char *p3 = NULL;p1 = (char*)malloc(256); if (p1 = NULL) goto Exit; p2 = (char*)malloc(256); if (p2 = NULL) goto Exit; p3 = (char*)malloc(256); if (p3 = NULL) goto Exit; /*正常處理的代碼*/Exit: if (p1 != NULL) free(p1); if (p2 != NULL) free(p2); if (p3 != NULL) free(p3);

24、return;58exit()函數(shù)作用終止整個(gè)程序的運(yùn)行,強(qiáng)制返回到操作系統(tǒng),將int型參數(shù)code返回到調(diào)用進(jìn)程Code = 0或EXIT_SUCCESS:正常退出Code非0或EXIT_FAILURE:程序異常退出用法 exit(0);59exit()函數(shù)exit?退出整個(gè)程序程序結(jié)束exit60exit()函數(shù)exit實(shí)例int i, sum =0;for (i = 0;i 10; i+ ) if ( i = 5) exit(0); sum = sum + i;printf(“sum = %d,sum);int i, j, sum =0;for (i = 0;i 10; i+ ) for (j = 0;j 10; j+ ) if ( j = 5) exit(0); sum = sum + j; sum = sum + i;printf(“sum = %d,sum);61韓信有一隊(duì)兵,他想知道有多少人,便讓士兵排隊(duì)報(bào)數(shù)。按從1至5報(bào)數(shù),最末一個(gè)士兵報(bào)的數(shù)為1;按從1至6報(bào)數(shù),最末一個(gè)士兵報(bào)的數(shù)為5;按從1至7報(bào)數(shù),最末一個(gè)士兵報(bào)的數(shù)為4;最后再按從1至11報(bào)數(shù),最末一個(gè)士兵報(bào)的數(shù)為10。你知道韓信至少有多少兵嗎?設(shè)兵數(shù)為x,那么x應(yīng)滿足:x%5=1 & x%6=5 & x%7=4 & x%11

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(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)論