C語(yǔ)言教程基礎(chǔ)篇【全】_第1頁(yè)
C語(yǔ)言教程基礎(chǔ)篇【全】_第2頁(yè)
C語(yǔ)言教程基礎(chǔ)篇【全】_第3頁(yè)
C語(yǔ)言教程基礎(chǔ)篇【全】_第4頁(yè)
C語(yǔ)言教程基礎(chǔ)篇【全】_第5頁(yè)
已閱讀5頁(yè),還剩179頁(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、C語(yǔ)言教程基礎(chǔ)篇【全】C語(yǔ)言教程基礎(chǔ)篇【全】 四、指導(dǎo)思想四、指導(dǎo)思想1. 1. 立足改革,以培養(yǎng)高素質(zhì)有創(chuàng)造精神的人才為這門課的教立足改革,以培養(yǎng)高素質(zhì)有創(chuàng)造精神的人才為這門課的教學(xué)目標(biāo)。學(xué)目標(biāo)。2. 2. 以學(xué)生為中心,采用與現(xiàn)實(shí)生活貼切和具有趣味性的實(shí)例以學(xué)生為中心,采用與現(xiàn)實(shí)生活貼切和具有趣味性的實(shí)例進(jìn)行講解,有利于調(diào)動(dòng)學(xué)生學(xué)習(xí)的積極性,引導(dǎo)學(xué)生主動(dòng)學(xué)進(jìn)行講解,有利于調(diào)動(dòng)學(xué)生學(xué)習(xí)的積極性,引導(dǎo)學(xué)生主動(dòng)學(xué)習(xí)。習(xí)。 3. 3. 強(qiáng)化實(shí)踐,這門課主張程序設(shè)計(jì)是高強(qiáng)度的腦力勞動(dòng),不是聽(tīng)強(qiáng)化實(shí)踐,這門課主張程序設(shè)計(jì)是高強(qiáng)度的腦力勞動(dòng),不是聽(tīng)會(huì)的、也不是看會(huì)的,而是練會(huì)的。引導(dǎo)學(xué)生在解題編程的實(shí)踐

2、會(huì)的、也不是看會(huì)的,而是練會(huì)的。引導(dǎo)學(xué)生在解題編程的實(shí)踐中探索其中帶規(guī)律性的認(rèn)識(shí)。將感性認(rèn)識(shí)升華到理性高度。中探索其中帶規(guī)律性的認(rèn)識(shí)。將感性認(rèn)識(shí)升華到理性高度。五、學(xué)習(xí)方法五、學(xué)習(xí)方法 1.1.動(dòng)手動(dòng)腦,理論指導(dǎo)下的實(shí)踐動(dòng)手動(dòng)腦,理論指導(dǎo)下的實(shí)踐 有條有理的實(shí)踐。有條有理的實(shí)踐。 2.2.在編寫大量程序之后,才能感到運(yùn)用自如。在編寫大量程序之后,才能感到運(yùn)用自如。六、教學(xué)內(nèi)容安排六、教學(xué)內(nèi)容安排 1. 1. 簡(jiǎn)單簡(jiǎn)單C C程序設(shè)計(jì);程序設(shè)計(jì); 2. 2. 分支結(jié)構(gòu)程序設(shè)計(jì);分支結(jié)構(gòu)程序設(shè)計(jì); 3. 3. 循環(huán)結(jié)構(gòu)程序設(shè)計(jì);循環(huán)結(jié)構(gòu)程序設(shè)計(jì); 4. 4. 數(shù)組;數(shù)組; 5. 5. 函數(shù);函數(shù);

3、6. 6. 遞歸及其實(shí)現(xiàn)方法遞歸及其實(shí)現(xiàn)方法 7. 7. 指針;指針; 8. 8. 結(jié)構(gòu)體與鏈表。結(jié)構(gòu)體與鏈表。1.1 1.1 認(rèn)識(shí)認(rèn)識(shí)C C語(yǔ)言程序語(yǔ)言程序 1.1.程序?qū)嵗绦驅(qū)嵗?include /#include /預(yù)編譯命令預(yù)編譯命令, ,將標(biāo)準(zhǔn)輸入輸出函數(shù)將標(biāo)準(zhǔn)輸入輸出函數(shù) /作為頭文件包擴(kuò)到用戶源文件中作為頭文件包擴(kuò)到用戶源文件中 #include /#include /預(yù)編譯命令預(yù)編譯命令, ,將系統(tǒng)提供的數(shù)學(xué)函數(shù)將系統(tǒng)提供的數(shù)學(xué)函數(shù) /作為頭文件包擴(kuò)到用戶源文件中作為頭文件包擴(kuò)到用戶源文件中 main( )main( ) / /主函數(shù),名為主函數(shù),名為mainmain, /

4、/函數(shù)體函數(shù)體. .開(kāi)始開(kāi)始 float a,b,c;float a,b,c; / /聲明部分聲明部分. .定義變量類型定義變量類型 b=30.0;b=30.0; / /執(zhí)行部分執(zhí)行部分. .賦值語(yǔ)句賦值語(yǔ)句 a=sin(ba=sin(b* *3.14159/180); /3.14159/180); /執(zhí)行部分執(zhí)行部分. .賦值語(yǔ)句賦值語(yǔ)句 printf(“%fn”,a);printf(“%fn”,a);/執(zhí)行部分執(zhí)行部分. .輸出語(yǔ)句輸出語(yǔ)句 / /函數(shù)體函數(shù)體. .結(jié)束結(jié)束第一講第一講 簡(jiǎn)單的簡(jiǎn)單的C C程序設(shè)計(jì)程序設(shè)計(jì)1.2 實(shí)例總結(jié)實(shí)例總結(jié) 程序結(jié)構(gòu)程序結(jié)構(gòu)預(yù)編譯命令預(yù)編譯命令主函數(shù)主

5、函數(shù) main( ) 函數(shù)體開(kāi)始函數(shù)體開(kāi)始 聲明部分聲明部分 執(zhí)行部分執(zhí)行部分 函數(shù)體結(jié)束函數(shù)體結(jié)束第一講第一講 簡(jiǎn)單的簡(jiǎn)單的C C程序設(shè)計(jì)程序設(shè)計(jì)2.2.變量的類型變量的類型 整型:整型:int int 長(zhǎng)整型:長(zhǎng)整型:longlong 浮點(diǎn)型:浮點(diǎn)型:floatfloat 雙精度型:雙精度型:doubledouble 字符型:字符型:charchar 用戶自定義類型用戶自定義類型第一講第一講 簡(jiǎn)單的簡(jiǎn)單的C C程序設(shè)計(jì)程序設(shè)計(jì) 3.3.聲明的作用聲明的作用 為變量分配內(nèi)存單元,變量名作為內(nèi)存單元的符號(hào)為變量分配內(nèi)存單元,變量名作為內(nèi)存單元的符號(hào)地址,這件事是在程序編譯鏈接時(shí)完成的。地址,這

6、件事是在程序編譯鏈接時(shí)完成的。 4. 變量變量 其值可以改變的量,是內(nèi)存單元的符號(hào)地址。其值可以改變的量,是內(nèi)存單元的符號(hào)地址。 通過(guò)符號(hào)通過(guò)符號(hào)b可以找到相應(yīng)的存儲(chǔ)單元地址,假設(shè)為可以找到相應(yīng)的存儲(chǔ)單元地址,假設(shè)為1000。 語(yǔ)句語(yǔ)句 ; 是將值存放在地址是將值存放在地址為為1000的的存儲(chǔ)單元存儲(chǔ)單元。第一講第一講 簡(jiǎn)單的簡(jiǎn)單的C C程序設(shè)計(jì)程序設(shè)計(jì)5.5.對(duì)變量的賦值對(duì)變量的賦值 賦值符號(hào)賦值符號(hào)“=” b = 30.0;/ 讀作將表達(dá)式的值賦給變量讀作將表達(dá)式的值賦給變量b a=sin(b*3.14159/180); / 讀作將表達(dá)式(正弦函數(shù))的值賦給變量讀作將表達(dá)式(正弦函數(shù))的值

7、賦給變量a 第一講第一講 簡(jiǎn)單的簡(jiǎn)單的C C程序設(shè)計(jì)程序設(shè)計(jì)6.6.變量賦值特點(diǎn)變量賦值特點(diǎn) (1)先定義,后使用)先定義,后使用 int d,e,f;定義三個(gè)變量為整數(shù)類型定義三個(gè)變量為整數(shù)類型 如未定義,則在編譯時(shí)被查出,認(rèn)為非法如未定義,則在編譯時(shí)被查出,認(rèn)為非法 (2)變量未被賦值前,值為)變量未被賦值前,值為未知未知 (3)對(duì)變量賦值過(guò)程是)對(duì)變量賦值過(guò)程是“覆蓋覆蓋”過(guò)程,用新值去替換舊過(guò)程,用新值去替換舊(4)讀出變量的值,該變量保持不變)讀出變量的值,該變量保持不變 (5)參與表達(dá)式運(yùn)算的所有變量都保持原來(lái)的值不變)參與表達(dá)式運(yùn)算的所有變量都保持原來(lái)的值不變第一講第一講 簡(jiǎn)單的

8、簡(jiǎn)單的C C程序設(shè)計(jì)程序設(shè)計(jì)變量賦值過(guò)程變量賦值過(guò)程 d e fd e f未賦值前未賦值前執(zhí)行執(zhí)行d=7執(zhí)行執(zhí)行 e=d 執(zhí)行執(zhí)行 f=d+e執(zhí)行執(zhí)行 d=d+1 000-12349723431607234316077077148714第一講第一講 簡(jiǎn)單的簡(jiǎn)單的C C程序設(shè)計(jì)程序設(shè)計(jì)7. 7. 輸出語(yǔ)句輸出語(yǔ)句 printfprintf函數(shù)(格式輸出函數(shù))函數(shù)(格式輸出函數(shù)) 一般形式為一般形式為 printf(printf(參數(shù)參數(shù)1 1,參數(shù),參數(shù)2 2,參數(shù),參數(shù)3 3,參數(shù),參數(shù)n n) 其中參數(shù)其中參數(shù)11格式控制格式控制 參數(shù)參數(shù)2 2,參數(shù),參數(shù)3 3,參數(shù),參數(shù)nn輸出表列輸出

9、表列 舉例:舉例: float a; float a; int b; int b; a = 85.56; a = 85.56; b = 100; b = 100; printf(%f %d, a, b); printf(%f %d, a, b);第一講第一講 簡(jiǎn)單的簡(jiǎn)單的C C程序設(shè)計(jì)程序設(shè)計(jì)格式控制是用雙引號(hào)括起來(lái)的字符串,稱格式控制是用雙引號(hào)括起來(lái)的字符串,稱“轉(zhuǎn)換控制字符串轉(zhuǎn)換控制字符串”%f 第一個(gè)輸出表列的格式說(shuō)明,以小數(shù)形式輸出單、雙精度實(shí)第一個(gè)輸出表列的格式說(shuō)明,以小數(shù)形式輸出單、雙精度實(shí)數(shù),隱含輸出數(shù),隱含輸出6位小數(shù)位小數(shù) %d 第二個(gè)輸出表列的格式說(shuō)明,以帶有符號(hào)的十進(jìn)制形

10、式輸出第二個(gè)輸出表列的格式說(shuō)明,以帶有符號(hào)的十進(jìn)制形式輸出整數(shù)(正數(shù)不輸出符號(hào))整數(shù)(正數(shù)不輸出符號(hào)) 顯然,顯然,%f是控制實(shí)數(shù)是控制實(shí)數(shù)a的;的;%d是控制整數(shù)是控制整數(shù)b的的第一講第一講 簡(jiǎn)單的簡(jiǎn)單的C C程序設(shè)計(jì)程序設(shè)計(jì)為了醒目,格式控制項(xiàng)中除格式說(shuō)明之外可以有為了醒目,格式控制項(xiàng)中除格式說(shuō)明之外可以有普通字符普通字符例例: printf(“a=%f b=%d, a, b);: printf(“a=%f b=%d, a, b); 輸出結(jié)果為:輸出結(jié)果為: a=85.560000 b=100a=85.560000 b=100換行符號(hào)換行符號(hào) 例例: printf(“a=%fnb=%d”,

11、a,b);: printf(“a=%fnb=%d”,a,b);輸出結(jié)果為:輸出結(jié)果為: b=100b=100域?qū)捄途扔驅(qū)捄途壤豪簆rintfprintf(”%5.3f”%5.3f”,a a);第一講第一講 簡(jiǎn)單的簡(jiǎn)單的C C程序設(shè)計(jì)程序設(shè)計(jì)8. 數(shù)學(xué)函數(shù)數(shù)學(xué)函數(shù) sin(x)x x為弧度,為弧度,double xdouble x,double sin(x)double sin(x) cos(x) cos(x)exp(x) exlog(x) logexlog10(x) log10 xfabs(x) xfmod(x,y) 整除整除x/y的余數(shù)的余數(shù)floor(x) 求不大于求不大于x的最大

12、整數(shù)的最大整數(shù)pow(x, y) xysqrt(x) x1/2第一講第一講 簡(jiǎn)單的簡(jiǎn)單的C C程序設(shè)計(jì)程序設(shè)計(jì)9. 算術(shù)運(yùn)算符算術(shù)運(yùn)算符 加加 減減 *乘乘 / 除除 % 模(取余數(shù))模(取余數(shù))第一講第一講 簡(jiǎn)單的簡(jiǎn)單的C C程序設(shè)計(jì)程序設(shè)計(jì)1.3 1.3 作業(yè)作業(yè)第一講第一講 簡(jiǎn)單的簡(jiǎn)單的C C程序設(shè)計(jì)程序設(shè)計(jì) 我們?cè)谌粘I钪薪?jīng)常需要處理具有兩個(gè)分支的問(wèn)題,例我們?cè)谌粘I钪薪?jīng)常需要處理具有兩個(gè)分支的問(wèn)題,例如,如果明天下雨,則在教室內(nèi)組織活動(dòng),否則去野游。如,如果明天下雨,則在教室內(nèi)組織活動(dòng),否則去野游。 在在C C語(yǔ)言中,這類問(wèn)題需要使用語(yǔ)言中,這類問(wèn)題需要使用ifif語(yǔ)句解決,而判

13、斷操語(yǔ)句解決,而判斷操作通常使用關(guān)系運(yùn)算符。作通常使用關(guān)系運(yùn)算符。關(guān)系運(yùn)算符和關(guān)系表達(dá)式關(guān)系運(yùn)算符和關(guān)系表達(dá)式 大于大于 =大于等于大于等于 = = 小于等于小于等于 =等于等于 !=!=不等于不等于第二講第二講 分支結(jié)構(gòu)分支結(jié)構(gòu)2.1 2.1 掌握掌握ifif語(yǔ)句的使用方法語(yǔ)句的使用方法【實(shí)例】編寫程序,判斷輸入的整數(shù)是否為實(shí)例】編寫程序,判斷輸入的整數(shù)是否為6 6,若是,顯示,若是,顯示“RightRight!”和和“Great!”Great!”,否則顯示,否則顯示“WrongWrong!”和和“SorrySorry!”。 1編程思路:編程思路: 要顯示要顯示“RightRight!”和和

14、“GreatGreat!”,應(yīng)執(zhí)行兩條語(yǔ)句,應(yīng)執(zhí)行兩條語(yǔ)句“printf(”Rightprintf(”Right!n“);”n“);”和和“printf(”Greatprintf(”Great!n“);”n“);”,要顯示要顯示“WrongWrong!”和和“SorrySorry!”,執(zhí)行兩條語(yǔ)句,執(zhí)行兩條語(yǔ)句“printf(”Wrongprintf(”Wrong! n“);”n“);”和和“printf(”Sorryprintf(”Sorry!n“);”n“);”。本題需要根據(jù)所輸入的值(假設(shè)賦給本題需要根據(jù)所輸入的值(假設(shè)賦給a a)是否為)是否為6 6來(lái)選擇執(zhí)行相應(yīng)來(lái)選擇執(zhí)行相應(yīng)的兩條語(yǔ)

15、句。的兩條語(yǔ)句。 在在C C語(yǔ)言中判斷語(yǔ)言中判斷a a中的值是否為中的值是否為6 6,使用,使用“if(a=6)”if(a=6)”形式。形式。 第二講第二講 分支結(jié)構(gòu)分支結(jié)構(gòu)本實(shí)例的流程圖如圖所示 開(kāi)始輸入a值a=6顯示“Right!”顯示“Great!”顯示“Wrong!”顯示“Sorry!”結(jié)束假真第二講第二講 分支結(jié)構(gòu)分支結(jié)構(gòu)本實(shí)例的N-S流程圖如圖所示輸入a的值a=6顯示“Right!” 顯示“Great!” 顯示“Wrong!” 顯示“Sorry! ” 第二講第二講 分支結(jié)構(gòu)分支結(jié)構(gòu)2 2程序代碼:程序代碼:#include #include mainmain三三 int a=0;

16、int a=0; printf(Input a:); scanf(%d,&a); printf(Input a:); scanf(%d,&a); printf(a=%dn,a); printf(a=%dn,a); if(a=6) if(a=6)/ /* * if if語(yǔ)句開(kāi)始語(yǔ)句開(kāi)始 * */ / printf(Rightprintf(Right!n);n); printf(Great printf(Great!n);n); else else printf(Wrongprintf(Wrong!n);n); printf(Sorry printf(Sorry!n); /n);

17、/* * if if語(yǔ)句結(jié)束語(yǔ)句結(jié)束 * */ / 第二講第二講 分支結(jié)構(gòu)分支結(jié)構(gòu)3 3運(yùn)行結(jié)果:運(yùn)行結(jié)果: 第第1 1次運(yùn)行結(jié)果:次運(yùn)行結(jié)果: Input a:6Input a:6 a=6 a=6 Right Right! GreatGreat! 第第2 2次運(yùn)行結(jié)果:次運(yùn)行結(jié)果: Input a:5Input a:5 a=5 a=5 Wrong Wrong! SorrySorry!第二講第二講 分支結(jié)構(gòu)分支結(jié)構(gòu)4 4歸納分析:歸納分析: (1 1)程序中的)程序中的“a=6”a=6”是關(guān)系表達(dá)式。是關(guān)系表達(dá)式。用關(guān)系運(yùn)算符把兩個(gè)用關(guān)系運(yùn)算符把兩個(gè)C C語(yǔ)言表達(dá)式連接起來(lái)的表達(dá)式稱為關(guān)系表達(dá)

18、式。語(yǔ)言表達(dá)式連接起來(lái)的表達(dá)式稱為關(guān)系表達(dá)式。關(guān)系運(yùn)算的判斷結(jié)果只有關(guān)系運(yùn)算的判斷結(jié)果只有“真真”或或“假假”兩種可能,關(guān)系成立時(shí)兩種可能,關(guān)系成立時(shí)為為“真真”,不成立時(shí)為,不成立時(shí)為“假假”。關(guān)系表達(dá)式的值只能是關(guān)系表達(dá)式的值只能是1 1或或0 0,當(dāng)關(guān)系運(yùn)算的判斷結(jié)果為,當(dāng)關(guān)系運(yùn)算的判斷結(jié)果為“真真”時(shí),時(shí),關(guān)系表達(dá)式的值為關(guān)系表達(dá)式的值為 1 1,否則,關(guān)系表達(dá)式的值為,否則,關(guān)系表達(dá)式的值為0 0。例如,當(dāng)。例如,當(dāng)a a的值為的值為6 6時(shí),關(guān)系表達(dá)式時(shí),關(guān)系表達(dá)式“a=6”a=6”的值為的值為1 1,當(dāng),當(dāng)a a的值為的值為5 5時(shí),關(guān)時(shí),關(guān)系表達(dá)式系表達(dá)式“a=6”a=6”的值

19、為的值為0 0。第二講第二講 分支結(jié)構(gòu)分支結(jié)構(gòu)(2 2)程序中的)程序中的“if(a=6)”if(a=6)”是是ifif語(yǔ)句的開(kāi)始部分。語(yǔ)句的開(kāi)始部分。 本例題需要根據(jù)本例題需要根據(jù)“a=6”a=6”是否為是否為“真真”來(lái)選擇執(zhí)行不同的兩個(gè)輸出來(lái)選擇執(zhí)行不同的兩個(gè)輸出語(yǔ)句。處理兩個(gè)分支的問(wèn)題時(shí)常使用語(yǔ)句。處理兩個(gè)分支的問(wèn)題時(shí)常使用ifif語(yǔ)句。語(yǔ)句。ifif語(yǔ)句根據(jù)其后面括號(hào)中語(yǔ)句根據(jù)其后面括號(hào)中表達(dá)式的結(jié)果,選擇執(zhí)行某個(gè)分支程序段。表達(dá)式的結(jié)果,選擇執(zhí)行某個(gè)分支程序段。 ifif語(yǔ)句的一般形式如下:語(yǔ)句的一般形式如下: if(if(表達(dá)式表達(dá)式) ) 語(yǔ)句組語(yǔ)句組1 1 else else

20、語(yǔ)句組語(yǔ)句組2 2 “if” “if”和和“else”else”是關(guān)鍵字。當(dāng)表達(dá)式結(jié)果為是關(guān)鍵字。當(dāng)表達(dá)式結(jié)果為“真真”(即不等于(即不等于0 0)時(shí),執(zhí))時(shí),執(zhí)行語(yǔ)句組行語(yǔ)句組1 1,表達(dá)式結(jié)果為,表達(dá)式結(jié)果為“假假”(即等于(即等于0 0)時(shí),執(zhí)行語(yǔ)句組)時(shí),執(zhí)行語(yǔ)句組2 2。在語(yǔ)句組。在語(yǔ)句組1 1和語(yǔ)句組和語(yǔ)句組2 2中只能選擇執(zhí)行一組,而后執(zhí)行整個(gè)中只能選擇執(zhí)行一組,而后執(zhí)行整個(gè)ifif語(yǔ)句后面的語(yǔ)句。語(yǔ)句后面的語(yǔ)句。 第二講第二講 分支結(jié)構(gòu)分支結(jié)構(gòu)(3) C語(yǔ)言中允許程序中的if語(yǔ)句不帶else部分。省略else的if語(yǔ)句一般形式如下: if(表達(dá)式) 語(yǔ)句組 此if語(yǔ)句的執(zhí)行過(guò)程

21、: 當(dāng)表達(dá)式結(jié)果為“真”時(shí),執(zhí)行語(yǔ)句組,表達(dá)式結(jié)果為“假”時(shí),不處理。 第二講第二講 分支結(jié)構(gòu)分支結(jié)構(gòu)學(xué)會(huì)使用邏輯運(yùn)算符 處理問(wèn)題時(shí)經(jīng)常需要同時(shí)判斷多個(gè)條件。例如,在某學(xué)生數(shù)學(xué)和英語(yǔ)成績(jī)中判斷是否至少有一門課程是不及格。這時(shí)使用邏輯運(yùn)算符。邏輯運(yùn)算符共有三種: & 邏輯與 | 邏輯或 ! 邏輯非這3個(gè)運(yùn)算符按高到低的優(yōu)先級(jí)順序是“!”、“&”、“|” 一般而言,單目運(yùn)算符優(yōu)先級(jí)較高,賦值運(yùn)算符優(yōu)先級(jí)低。 算術(shù)運(yùn)算符優(yōu)先級(jí)較高,關(guān)系和邏輯運(yùn)算符優(yōu)先級(jí)較低。 第二講第二講 分支結(jié)構(gòu)分支結(jié)構(gòu)【實(shí)例】編寫程序,判斷某人的體重是否在50公斤至55公斤之間,若在此范圍之內(nèi),顯示“Ok”,否

22、則顯示“No”。1編程思路: 先將體重存放在變量w中,要使w的值在50至55范圍內(nèi),應(yīng)同時(shí)滿足“w=50”和“w=50 & w=50”和“w=50 & w=50 & w=55顯示“Ok”顯示“No”第二講第二講 分支結(jié)構(gòu)分支結(jié)構(gòu)2 2程序代碼:程序代碼: #include #include mainmain三三 float w=0.0; float w=0.0; printf(Input w:); printf(Input w:); scanf(%f,&w); scanf(%f,&w); printf(w=%.1fn,w); printf(w=%.1fn

23、,w); if(w=50&w=50&w=55) printf(Okn); printf(Okn); else else printf(Non); printf(Non); 第二講第二講 分支結(jié)構(gòu)分支結(jié)構(gòu)3.運(yùn)行結(jié)果:第1次運(yùn)行結(jié)果:Input w:53.5Ok第2次運(yùn)行結(jié)果:Input w:60.7No第二講第二講 分支結(jié)構(gòu)分支結(jié)構(gòu)4 4歸納分析歸納分析: 程序中的“w=50 & w0且w0 & w0 & w=50 w=50 w=55) / /* * 內(nèi)嵌內(nèi)嵌ifif語(yǔ)句開(kāi)始語(yǔ)句開(kāi)始 * */ /printf(“Okn);printf(“Okn);els

24、eelseprintf(Non);/printf(Non);/* * 內(nèi)嵌內(nèi)嵌ifif語(yǔ)句結(jié)束語(yǔ)句結(jié)束 * */ / else elseprintf(Data over!n);/printf(Data over!n);/* * 外嵌外嵌ifif語(yǔ)句結(jié)束語(yǔ)句結(jié)束 * */ / 第二講第二講 分支結(jié)構(gòu)分支結(jié)構(gòu)3 3運(yùn)行結(jié)果運(yùn)行結(jié)果:第第1 1次運(yùn)行結(jié)果:次運(yùn)行結(jié)果:Input w:Input w:53.553.5 OkOk第第2 2次運(yùn)行結(jié)果:次運(yùn)行結(jié)果:Input w:Input w:60.760.7 NoNo第第3 3次運(yùn)行結(jié)果:次運(yùn)行結(jié)果:Input w:Input w:201.7201.7

25、 Data over!Data over!第二講第二講 分支結(jié)構(gòu)分支結(jié)構(gòu)4歸納分析:(1)本程序在一個(gè)if語(yǔ)句中包含了另一個(gè)if語(yǔ)句。在if語(yǔ)句的語(yǔ)句組1或語(yǔ)句組2中又包含另一個(gè)分支結(jié)構(gòu)的if語(yǔ)句稱為嵌套的if語(yǔ)句。(2)本程序中出現(xiàn)了兩次else。 C語(yǔ)法規(guī)定,在if語(yǔ)句中,若多次出現(xiàn)else,則每一個(gè)else總是與前面最近的if配對(duì),所以本例題中第一個(gè)else與內(nèi)嵌的if配對(duì),第二個(gè)else與最上面的if配對(duì)。程序中由于采用了縮進(jìn)格式,if與else的配對(duì)關(guān)系一目了然。 第二講第二講 分支結(jié)構(gòu)分支結(jié)構(gòu)學(xué)會(huì)使用學(xué)會(huì)使用if-else ifif-else if形式的嵌套形式的嵌套ifif語(yǔ)句語(yǔ)

26、句 【實(shí)例】編寫程序,求下面分段函數(shù)的值,要求【實(shí)例】編寫程序,求下面分段函數(shù)的值,要求x x的值從鍵盤輸入。的值從鍵盤輸入。 x+2 (0 x5)y=0 (x0)x2-3 (5x10)10 (x10)第二講第二講 分支結(jié)構(gòu)分支結(jié)構(gòu)1 1編程思路:編程思路: 開(kāi)始開(kāi)始輸入輸入x值值x00結(jié)束結(jié)束假假真真真真假假顯示顯示x x和和y y的值的值x55真真假假x1010y=x+2y=10y=x2-3y=0第二講第二講 分支結(jié)構(gòu)分支結(jié)構(gòu)2 2程序代碼:程序代碼:#include #include mainmain三三 float x=0,y=0;float x=0,y=0;printf(Input

27、x:);printf(Input x:); scanf(%f,&x); scanf(%f,&x); if(x0) if(x0)y=0;y=0; else else if(x5) y=x+2; if(x5) y=x+2; else else if(x10) y=x if(x10) y=x* *x-3;x-3; else y=10; else y=10; printf(x=%f,y=%fn,x,y); printf(x=%f,y=%fn,x,y); 第二講第二講 分支結(jié)構(gòu)分支結(jié)構(gòu)2.5 switch語(yǔ)句 在日常生活中經(jīng)常遇到菜單選擇操作,例如,用ATM自動(dòng)取款機(jī)取錢時(shí),從菜單中可以

28、選擇語(yǔ)種、取款額;用自動(dòng)服務(wù)系統(tǒng)給手機(jī)充值時(shí),可以選擇查余額還是充值,對(duì)本機(jī)充值還是對(duì)其他號(hào)碼充值等。這些問(wèn)題一般使用switch語(yǔ)句解決。 總之,這些問(wèn)題都是多分支情況。第二講第二講 分支結(jié)構(gòu)分支結(jié)構(gòu)【實(shí)例】編寫程序,在如下菜單中選擇一個(gè)運(yùn)算類型,并進(jìn)【實(shí)例】編寫程序,在如下菜單中選擇一個(gè)運(yùn)算類型,并進(jìn)行相應(yīng)的運(yùn)算。如選擇了加法,則進(jìn)行求和運(yùn)算。行相應(yīng)的運(yùn)算。如選擇了加法,則進(jìn)行求和運(yùn)算。Please choose Please choose + : addition+ : addition- : subtraction- : subtraction* * : multiplication

29、: multiplication/ : division/ : division第二講第二講 分支結(jié)構(gòu)分支結(jié)構(gòu)1 1程序代碼:程序代碼:#include #include mainmain三三float a=5.0,b=2.0,c=0.0;float a=5.0,b=2.0,c=0.0;char sym=0;char sym=0;printf(Please choosen);printf(Please choosen);printf(+ : additionn);printf(+ : additionn);printf(- : subtractionn);printf(- : subtract

30、ionn);printf(printf(* * : multiplicationn); : multiplicationn);printf(/ : divisionn);printf(/ : divisionn);sym=getcharsym=getchar三三; ;printf(%f%c%f=,a,sym,b); printf(%f%c%f=,a,sym,b); / /* * 顯示算式顯示算式 * */ /第二講第二講 分支結(jié)構(gòu)分支結(jié)構(gòu)switch(sym) switch(sym) / /* * 計(jì)算算式計(jì)算算式 * */ / case +: c=a+b; break; case +: c=

31、a+b; break; case -: c=a-b; break; case -: c=a-b; break; case case * *: c=a: c=a* *b; break;b; break; case /: c=a/b; break; case /: c=a/b; break; printf(%fn,c); printf(%fn,c); / /* * 顯示結(jié)果顯示結(jié)果 * */ / 第二講第二講 分支結(jié)構(gòu)分支結(jié)構(gòu)2 2運(yùn)行結(jié)果:運(yùn)行結(jié)果:Please choosePlease choose+ : addition+ : addition- : subtraction- : subtr

32、action* * : multiplication : multiplication/ : division/ : division/ 第二講第二講 分支結(jié)構(gòu)分支結(jié)構(gòu)3 3歸納分析歸納分析:switchswitch語(yǔ)句的一般形式為:語(yǔ)句的一般形式為:switch(switch(表達(dá)式表達(dá)式) ) case case 表達(dá)式表達(dá)式1: 1: 語(yǔ)句組語(yǔ)句組1 break;1 break; case case 表達(dá)式表達(dá)式2: 2: 語(yǔ)句組語(yǔ)句組2 break;2 break; case case 表達(dá)式表達(dá)式n: n: 語(yǔ)句組語(yǔ)句組n break;n break; default: defaul

33、t: 語(yǔ)句組語(yǔ)句組n+1 break;n+1 break; 其中其中switchswitch、casecase、defaultdefault和和breakbreak是關(guān)鍵字,所有表達(dá)式均為整型或字是關(guān)鍵字,所有表達(dá)式均為整型或字符型。在表達(dá)式符型。在表達(dá)式1 1、表達(dá)式、表達(dá)式2 2、表達(dá)式、表達(dá)式n n中只能出現(xiàn)常量和運(yùn)算符,中只能出現(xiàn)常量和運(yùn)算符,而且每個(gè)表達(dá)式的值不能相等。而且每個(gè)表達(dá)式的值不能相等。 第二講第二講 分支結(jié)構(gòu)分支結(jié)構(gòu)2.6 2.6 條件運(yùn)算符及其表達(dá)式條件運(yùn)算符及其表達(dá)式 C C語(yǔ)言中條件運(yùn)算符由語(yǔ)言中條件運(yùn)算符由“?”?”和和“:”:”組成,例如組成,例如“ab ? a

34、 : b”ab ? a : b”。條件表達(dá)式的一般形式為:條件表達(dá)式的一般形式為:表達(dá)式表達(dá)式1 1 ?表達(dá)式?表達(dá)式2 2 :表達(dá)式:表達(dá)式3 3當(dāng)表達(dá)式當(dāng)表達(dá)式1 1的值為非的值為非0 0時(shí),以表達(dá)式時(shí),以表達(dá)式2 2的值作為條件表達(dá)式的值,否則,的值作為條件表達(dá)式的值,否則,以表達(dá)式以表達(dá)式3 3的值作為條件表達(dá)式的值。例如,當(dāng)?shù)闹底鳛闂l件表達(dá)式的值。例如,當(dāng)abab成立時(shí),條件表成立時(shí),條件表達(dá)式達(dá)式“ab ? a : b”ab ? a : b”的值為的值為a a中的值,否則為中的值,否則為b b中的值。中的值。 使用條件表達(dá)式也可以實(shí)現(xiàn)分支結(jié)構(gòu)。使用條件表達(dá)式也可以實(shí)現(xiàn)分支結(jié)構(gòu)。 第

35、二講第二講 分支結(jié)構(gòu)分支結(jié)構(gòu)課堂討論:誰(shuí)做的好事?課堂討論:誰(shuí)做的好事?忻州師院有四位同學(xué)中的一位做了好事,不留名,表?yè)P(yáng)信來(lái)了之后,忻州師院有四位同學(xué)中的一位做了好事,不留名,表?yè)P(yáng)信來(lái)了之后,校長(zhǎng)問(wèn)這四位是誰(shuí)做的好事。校長(zhǎng)問(wèn)這四位是誰(shuí)做的好事。 A說(shuō):不是我。說(shuō):不是我。 B說(shuō):是說(shuō):是C。 C說(shuō):是說(shuō):是D。 D說(shuō):說(shuō):C胡說(shuō)。胡說(shuō)。 已知三個(gè)人說(shuō)的是真話,一個(gè)人說(shuō)的是假話?,F(xiàn)已知三個(gè)人說(shuō)的是真話,一個(gè)人說(shuō)的是假話?,F(xiàn)在要根據(jù)這些信息,找出做了好事的人。畫出在要根據(jù)這些信息,找出做了好事的人。畫出N-S流程圖并寫出程序。流程圖并寫出程序。第二講第二講 分支結(jié)構(gòu)分支結(jié)構(gòu)第二講第二講 分支結(jié)構(gòu)分

36、支結(jié)構(gòu)第二講第二講 分支結(jié)構(gòu)分支結(jié)構(gòu)第二講第二講 分支結(jié)構(gòu)分支結(jié)構(gòu) 循環(huán)結(jié)構(gòu)是程序中一種很重要的結(jié)構(gòu)。其特點(diǎn)是,循環(huán)結(jié)構(gòu)是程序中一種很重要的結(jié)構(gòu)。其特點(diǎn)是, 在給定條件成立時(shí),反復(fù)執(zhí)行某程序段,直到條件不成立在給定條件成立時(shí),反復(fù)執(zhí)行某程序段,直到條件不成立為止。為止。 給定的條件稱為循環(huán)條件,反復(fù)執(zhí)行的程序段稱給定的條件稱為循環(huán)條件,反復(fù)執(zhí)行的程序段稱為循環(huán)體。為循環(huán)體。 語(yǔ)言提供了三種循環(huán)語(yǔ)句,可以組成各種語(yǔ)言提供了三種循環(huán)語(yǔ)句,可以組成各種不同形式的循環(huán)結(jié)構(gòu)不同形式的循環(huán)結(jié)構(gòu), ,它們是它們是: : 語(yǔ)句語(yǔ)句 語(yǔ)句語(yǔ)句 語(yǔ)句語(yǔ)句第三講第三講 循環(huán)結(jié)構(gòu)循環(huán)結(jié)構(gòu)3.1 3.1 簡(jiǎn)單循環(huán)簡(jiǎn)單循

37、環(huán)【實(shí)例】古典問(wèn)題:有一對(duì)兔子,從出生后第【實(shí)例】古典問(wèn)題:有一對(duì)兔子,從出生后第3 3個(gè)月起每個(gè)月都生一對(duì)兔子,個(gè)月起每個(gè)月都生一對(duì)兔子,小兔子長(zhǎng)到第三個(gè)月后每個(gè)月又生一對(duì)兔子,假如兔子都不死,問(wèn)每個(gè)小兔子長(zhǎng)到第三個(gè)月后每個(gè)月又生一對(duì)兔子,假如兔子都不死,問(wèn)每個(gè)月的兔子總數(shù)為多少?月的兔子總數(shù)為多少?1.1.程序分析:兔子的規(guī)律為數(shù)列程序分析:兔子的規(guī)律為數(shù)列1,1,2,3,5,8,13,21.1,1,2,3,5,8,13,21.該數(shù)列的規(guī)律為該數(shù)列的規(guī)律為 a a1 1=1=1 a a2 2=1=1 a an n=a=an-1n-1+a+an-2n-2 這里求前這里求前2020項(xiàng)項(xiàng)第三講第

38、三講 循環(huán)結(jié)構(gòu)循環(huán)結(jié)構(gòu)i=20a1=1;a2=1; i=3an=a1+a2輸出ani=i+1;a1=a2;a2=an;YendbeginN第三講第三講 循環(huán)結(jié)構(gòu)循環(huán)結(jié)構(gòu)該題目的該題目的N-SN-S流程圖流程圖a1=1;a2=1;an=0;i=20an=a1+a2輸出ani=i+1a1=a2a2=an第三講第三講 循環(huán)結(jié)構(gòu)循環(huán)結(jié)構(gòu)2.程序源代碼:方法一:for循環(huán)語(yǔ)句#include #include main( )main( ) long a1,a2,an;long a1,a2,an; int i;int i; a1=a2=1;a1=a2=1; for(i=3;i=20;i+)for(i=3;

39、i=20;i+) an=a1+a2;an=a1+a2; printf(“a%d=%ld”,i,an); printf(“a%d=%ld”,i,an); a1=a2; a1=a2; a2=an; a2=an; 可否調(diào)換?第三講第三講 循環(huán)結(jié)構(gòu)循環(huán)結(jié)構(gòu)方法二:while循環(huán)語(yǔ)句#include #include main( )main( ) long a1,a2,an;long a1,a2,an; int i;int i; a1=a2=1;i=3a1=a2=1;i=3; whilewhile(i=20i=20) an=a1+a2;an=a1+a2; printf(“a%d=%ld”,i,an);

40、printf(“a%d=%ld”,i,an); a1=a2; a1=a2; a2=an; a2=an; i+; i+; 第三講第三講 循環(huán)結(jié)構(gòu)循環(huán)結(jié)構(gòu)方法三:do-while循環(huán)語(yǔ)句#include #include main( )main( ) long a1,a2,an;long a1,a2,an; int i;int i; a1=a2=1;i=3a1=a2=1;i=3; dodo an=a1+a2;an=a1+a2; printf(“a%d=%ld”,i,an); printf(“a%d=%ld”,i,an); a1=a2; a1=a2; a2=an; a2=an; i+; i+; wh

41、ilewhile(i=20);i=20); 第三講第三講 循環(huán)結(jié)構(gòu)循環(huán)結(jié)構(gòu)3.3.歸納分析歸納分析(1 1)forfor語(yǔ)句格式:語(yǔ)句格式: for ( for ( 表達(dá)式表達(dá)式1 ; 1 ; 表達(dá)式表達(dá)式2 ; 2 ; 表達(dá)式表達(dá)式3 ) 3 ) 語(yǔ)句語(yǔ)句 即:即: for (for (循環(huán)變量賦初值循環(huán)變量賦初值 , , 循環(huán)結(jié)束條件循環(huán)結(jié)束條件 , , 循環(huán)變量增值循環(huán)變量增值 ) ) 語(yǔ)句語(yǔ)句 第三講第三講 循環(huán)結(jié)構(gòu)循環(huán)結(jié)構(gòu)ForFor語(yǔ)句執(zhí)行過(guò)程語(yǔ)句執(zhí)行過(guò)程表達(dá)式1 表達(dá)式2 表達(dá)式3 語(yǔ) 句 YN第三講第三講 循環(huán)結(jié)構(gòu)循環(huán)結(jié)構(gòu)表達(dá)式可以省略,但分號(hào)不能省略表達(dá)式可以省略,但分號(hào)不能

42、省略a) a) 省略表達(dá)式省略表達(dá)式1 1 i=1 i=1 for ( for ( ;i=50 i=50 ;i+ ) sum=sum+2i+ ) sum=sum+2* *i ib) b) 省略表達(dá)式省略表達(dá)式22產(chǎn)生死循環(huán)產(chǎn)生死循環(huán) for ( i=1for ( i=1; ;i+ ) sum=sum+2i+ ) sum=sum+2* *i ic) c) 省略表達(dá)式省略表達(dá)式3 3 for ( i=1 for ( i=1;i=50 i=50 ;) ) sum=sum+2 sum=sum+2* *i; i+;i; i+;d) d) 省略表達(dá)式省略表達(dá)式1 , 1 , 省略表達(dá)式省略表達(dá)式3 3 i

43、=1 i=1 for ( for ( ;i=50 i=50 ;) ) sum=sum+2 sum=sum+2* *i; i+; i; i+; 第三講第三講 循環(huán)結(jié)構(gòu)循環(huán)結(jié)構(gòu)表達(dá)式表達(dá)式1 1,表達(dá)式,表達(dá)式3 3可以是:可以是: a) a) 簡(jiǎn)單的表達(dá)式簡(jiǎn)單的表達(dá)式 b)b)逗號(hào)表達(dá)式逗號(hào)表達(dá)式表達(dá)式表達(dá)式2 2 一般是關(guān)系表達(dá)式或邏輯表達(dá)式一般是關(guān)系表達(dá)式或邏輯表達(dá)式例:例:for ( sum=0 , i=1 ; i=50 ; i+,i+ )for ( sum=0 , i=1 ; i=50 ; i+,i+ ) sum=sum+2 sum=sum+2* *i;i;或:或:for ( sum=0

44、 , i=1 ; i=50 ; i=i+2 )for ( sum=0 , i=1 ; i=50 ; i=i+2 ) sum=sum+2 sum=sum+2* *i i第三講第三講 循環(huán)結(jié)構(gòu)循環(huán)結(jié)構(gòu)(2) while(2) while語(yǔ)句的一般形式為:語(yǔ)句的一般形式為: while(while(表達(dá)式表達(dá)式) ) 語(yǔ)句;語(yǔ)句; 其中表達(dá)式是循環(huán)條件,語(yǔ)句為循環(huán)體。其中表達(dá)式是循環(huán)條件,語(yǔ)句為循環(huán)體。whilewhile語(yǔ)句的語(yǔ)義是:語(yǔ)句的語(yǔ)義是: 計(jì)算表達(dá)式的值,當(dāng)值為真計(jì)算表達(dá)式的值,當(dāng)值為真( (非非0)0)時(shí),執(zhí)行循環(huán)體語(yǔ)句。時(shí),執(zhí)行循環(huán)體語(yǔ)句。第三講第三講 循環(huán)結(jié)構(gòu)循環(huán)結(jié)構(gòu)使用使用whi

45、lewhile語(yǔ)句應(yīng)注意以下幾點(diǎn):語(yǔ)句應(yīng)注意以下幾點(diǎn):語(yǔ)句中的表達(dá)式一般是關(guān)系表達(dá)或邏輯表達(dá)式,只要表達(dá)式的值為真語(yǔ)句中的表達(dá)式一般是關(guān)系表達(dá)或邏輯表達(dá)式,只要表達(dá)式的值為真( (非非0)0)即可繼續(xù)循環(huán)。即可繼續(xù)循環(huán)。2.2.循環(huán)體如包括有一個(gè)以上的語(yǔ)句,則必須用循環(huán)體如包括有一個(gè)以上的語(yǔ)句,則必須用括起來(lái),括起來(lái), 組成復(fù)合組成復(fù)合語(yǔ)句。語(yǔ)句。3.3.應(yīng)注意循環(huán)條件的選擇以避免死循環(huán)應(yīng)注意循環(huán)條件的選擇以避免死循環(huán), ,一般需要在循環(huán)體中動(dòng)態(tài)一般需要在循環(huán)體中動(dòng)態(tài)改變循環(huán)條件的值。改變循環(huán)條件的值。第三講第三講 循環(huán)結(jié)構(gòu)循環(huán)結(jié)構(gòu)(3) do-while(3) do-while語(yǔ)句的一般形式

46、為:語(yǔ)句的一般形式為: dodo語(yǔ)句;語(yǔ)句; while(while(表達(dá)式表達(dá)式) ); 其中語(yǔ)句是循環(huán)體,表達(dá)式是循環(huán)條件。其中語(yǔ)句是循環(huán)體,表達(dá)式是循環(huán)條件。do-whiledo-while語(yǔ)句的語(yǔ)義是:語(yǔ)句的語(yǔ)義是:先執(zhí)行循環(huán)體語(yǔ)句一次,先執(zhí)行循環(huán)體語(yǔ)句一次, 再判別表達(dá)式的值,若為真再判別表達(dá)式的值,若為真( (非非0)0)則繼則繼續(xù)循環(huán),否則終止循環(huán)。續(xù)循環(huán),否則終止循環(huán)。do-whiledo-while語(yǔ)句和語(yǔ)句和whilewhile語(yǔ)句的區(qū)別在于語(yǔ)句的區(qū)別在于do-whiledo-while是先執(zhí)行后判斷,是先執(zhí)行后判斷,因此因此do-whiledo-while至少要執(zhí)行一次循

47、環(huán)體。而至少要執(zhí)行一次循環(huán)體。而whilewhile是先判斷后執(zhí)行,是先判斷后執(zhí)行,如果條件不滿足,則一次循環(huán)體語(yǔ)句也不執(zhí)行。如果條件不滿足,則一次循環(huán)體語(yǔ)句也不執(zhí)行。第三講第三講 循環(huán)結(jié)構(gòu)循環(huán)結(jié)構(gòu)(4)(4)循環(huán)體語(yǔ)句可使用breakbreak 和continuecontinue語(yǔ)句breakbreak:可以用來(lái)從循環(huán)體內(nèi)跳出循環(huán)體(提前結(jié)束循環(huán))continuecontinue:用于跳過(guò)循環(huán)體中下面尚未執(zhí)行的語(yǔ)句,接著重新執(zhí)行循環(huán)的判斷例:輸出100以內(nèi)能被7整除的數(shù)。 int n;int n;for(n=7;n=100;n+)for(n=7;n=100;n+) if (n%7!=0)if

48、 (n%7!=0)continue;continue;printf(%d ,n);printf(%d ,n); 第三講第三講 循環(huán)結(jié)構(gòu)循環(huán)結(jié)構(gòu)練習(xí):練習(xí):1.1.有一分?jǐn)?shù)序列:有一分?jǐn)?shù)序列:2/12/1,3/23/2,5/35/3,8/58/5,13/813/8,21/13.21/13.求出這求出這個(gè)數(shù)列的前個(gè)數(shù)列的前2020項(xiàng)之和。項(xiàng)之和。2.2.求求1+2!+3!+.+20!1+2!+3!+.+20!的和。的和。3.3.用牛頓切線法求用牛頓切線法求x-sin(x)=0 x-sin(x)=0在區(qū)間(在區(qū)間(0 0,)之間的解。)之間的解。4.4.任意輸入兩個(gè)數(shù),求這兩個(gè)數(shù)的最大公約數(shù)。任意輸

49、入兩個(gè)數(shù),求這兩個(gè)數(shù)的最大公約數(shù)。5.5.從鍵盤輸入一個(gè)數(shù)判斷其是否為素?cái)?shù)。從鍵盤輸入一個(gè)數(shù)判斷其是否為素?cái)?shù)。第三講第三講 循環(huán)結(jié)構(gòu)循環(huán)結(jié)構(gòu)作業(yè):作業(yè):求求s=a+aa+aaa+aaaa+aa.as=a+aa+aaa+aaaa+aa.a的值,其中的值,其中a a是一個(gè)數(shù)字。例如是一個(gè)數(shù)字。例如2+22+222+2222+22222(2+22+222+2222+22222(此時(shí)共有此時(shí)共有5 5個(gè)數(shù)相加個(gè)數(shù)相加) ),幾個(gè)數(shù)相加由鍵盤輸入,幾個(gè)數(shù)相加由鍵盤輸入控制??刂?。一球從一球從100100米高度自由落下,每次落地后反跳回原高度的一半;再米高度自由落下,每次落地后反跳回原高度的一半;再落下,

50、求它在第落下,求它在第1010次落地時(shí),共經(jīng)過(guò)多少米?第次落地時(shí),共經(jīng)過(guò)多少米?第1010次反彈多高?次反彈多高?求求1+2!+3!+.+20!1+2!+3!+.+20!的和的和1.1.猴子吃桃問(wèn)題:猴子第一天摘下若干個(gè)桃子,當(dāng)即吃了一半,猴子吃桃問(wèn)題:猴子第一天摘下若干個(gè)桃子,當(dāng)即吃了一半,還不癮,又多吃了一個(gè)。第二天早上又將剩下的桃子吃掉一還不癮,又多吃了一個(gè)。第二天早上又將剩下的桃子吃掉一半,又多吃了一個(gè)。以后每天早上都吃了前一天剩下的一半半,又多吃了一個(gè)。以后每天早上都吃了前一天剩下的一半零一個(gè)。到第零一個(gè)。到第1010天早上想再吃時(shí),見(jiàn)只剩下一個(gè)桃子了。求天早上想再吃時(shí),見(jiàn)只剩下一個(gè)

51、桃子了。求第一天共摘了多少?第一天共摘了多少?第三講第三講 循環(huán)結(jié)構(gòu)循環(huán)結(jié)構(gòu)循環(huán)的嵌套使用循環(huán)的嵌套使用【實(shí)例】【實(shí)例】 搬磚問(wèn)題。搬磚問(wèn)題。3636塊磚,塊磚,3636人搬,男搬人搬,男搬4 4,女搬,女搬3 3,兩個(gè)小,兩個(gè)小孩抬一磚,要求一次全搬完,問(wèn)男、女、小孩各若干?孩抬一磚,要求一次全搬完,問(wèn)男、女、小孩各若干?1.1.分析分析: : 列方程列方程, ,得出問(wèn)題條件得出問(wèn)題條件: : w+m+c=36 w+m+c=36 4 4* *m+3m+3* *w+c/2=36w+c/2=36 可以用枚舉的方法,讓變量可以用枚舉的方法,讓變量w w在在09 09 、m m在在012 012 、

52、c c在在036036的偶數(shù)中取的偶數(shù)中取值,形成滿足上述條件的值,形成滿足上述條件的w w 、m m、c c的組合的組合第三講第三講 循環(huán)結(jié)構(gòu)循環(huán)結(jié)構(gòu)N-SN-S流程圖流程圖m9w12c=36-m-w且c%2=04*m+3*w+c/2=36輸出m、w、cTrueFalsew=0w=w+1;m=m+1;m=0第三講第三講 循環(huán)結(jié)構(gòu)循環(huán)結(jié)構(gòu)2.2.程序程序mainmain講義講義int m,w,c;int m,w,c; for(m=0;m9;m+) for(m=0;m9;m+) for(w=0;w12;w+) for(w=0;w12;w+) c=36-w-m; c=36-w-m; if(c%2!

53、=0)continue; if(c%2!=0)continue; if(4 if(4* *m+3m+3* *w+c/2=36)w+c/2=36) printf(“m=%d,w=%d,c=%d”,m,w,c); printf(“m=%d,w=%d,c=%d”,m,w,c); 第三講第三講 循環(huán)結(jié)構(gòu)循環(huán)結(jié)構(gòu)練習(xí):練習(xí):1.1.輸出輸出9 9* *9 9口訣。口訣。2.2.判斷判斷101-200101-200之間有多少個(gè)素?cái)?shù),并輸出所有素?cái)?shù)。之間有多少個(gè)素?cái)?shù),并輸出所有素?cái)?shù)。3.3.打印出所有的打印出所有的“水仙花數(shù)水仙花數(shù)”,所謂,所謂“水仙花數(shù)水仙花數(shù)”是指是指一個(gè)三位數(shù),其各位數(shù)字立方和等于該

54、數(shù)本身。例如:一個(gè)三位數(shù),其各位數(shù)字立方和等于該數(shù)本身。例如:153153是一個(gè)是一個(gè)“水仙花數(shù)水仙花數(shù)”,因?yàn)?,因?yàn)?53=1153=1的三次方的三次方5 5的的三次方三次方3 3的三次方。的三次方。第三講第三講 循環(huán)結(jié)構(gòu)循環(huán)結(jié)構(gòu)作業(yè):作業(yè):1.1.將一個(gè)正整數(shù)分解質(zhì)因數(shù)。例如:輸入將一個(gè)正整數(shù)分解質(zhì)因數(shù)。例如:輸入90,90,打印出打印出90=290=2* *3 3* *3 3* *5 5。程序分析:對(duì)程序分析:對(duì)n n進(jìn)行分解質(zhì)因數(shù),應(yīng)先找到一個(gè)最小的質(zhì)數(shù)進(jìn)行分解質(zhì)因數(shù),應(yīng)先找到一個(gè)最小的質(zhì)數(shù)k k,然后,然后按下述步驟完成:按下述步驟完成: (1)(1)如果這個(gè)質(zhì)數(shù)恰等于如果這個(gè)質(zhì)數(shù)恰

55、等于n n,則說(shuō)明分解質(zhì)因數(shù)的過(guò)程已經(jīng)結(jié)束,則說(shuō)明分解質(zhì)因數(shù)的過(guò)程已經(jīng)結(jié)束,打印出即可。打印出即可。(2)(2)如果如果nknk,但,但n n能被能被k k整除,則應(yīng)打印出整除,則應(yīng)打印出k k的值,并用的值,并用n n除以除以k k的的商商, ,作為新的正整數(shù)你作為新的正整數(shù)你n,n,重復(fù)執(zhí)行第一步。重復(fù)執(zhí)行第一步。(3)(3)如果如果n n不能被不能被k k整除,則用整除,則用k+1k+1作為作為k k的值的值, ,重復(fù)執(zhí)行第一步。重復(fù)執(zhí)行第一步。2.2.一個(gè)數(shù)如果恰好等于它的因子之和,這個(gè)數(shù)就稱為一個(gè)數(shù)如果恰好等于它的因子之和,這個(gè)數(shù)就稱為“完數(shù)完數(shù)”。例如。例如6=16=12 23.3

56、.編程找出編程找出10001000以內(nèi)的所有完數(shù)。以內(nèi)的所有完數(shù)。第三講第三講 循環(huán)結(jié)構(gòu)循環(huán)結(jié)構(gòu)課堂討論:課堂討論:五位跳水高手將參加十米高臺(tái)跳水決賽,有好事者讓五個(gè)人五位跳水高手將參加十米高臺(tái)跳水決賽,有好事者讓五個(gè)人據(jù)實(shí)力預(yù)測(cè)比賽結(jié)果。據(jù)實(shí)力預(yù)測(cè)比賽結(jié)果。 A A選手說(shuō):選手說(shuō):B B第二,我第三;第二,我第三;B B選手說(shuō):我第二,選手說(shuō):我第二,E E第四;第四;C C選手說(shuō):我第一,選手說(shuō):我第一,D D第二;第二;D D選手說(shuō):選手說(shuō):C C最后,我第三;最后,我第三;E E選手說(shuō):我第四,選手說(shuō):我第四,A A第一;第一; 決賽成績(jī)公布之后,每位選手的預(yù)測(cè)都只說(shuō)對(duì)了一半,決賽成績(jī)

57、公布之后,每位選手的預(yù)測(cè)都只說(shuō)對(duì)了一半,即一對(duì)一錯(cuò),請(qǐng)編程解出比賽的實(shí)際名次。即一對(duì)一錯(cuò),請(qǐng)編程解出比賽的實(shí)際名次。第三講第三講 循環(huán)結(jié)構(gòu)循環(huán)結(jié)構(gòu)1 1 首先是將五個(gè)人的預(yù)測(cè)寫成邏輯表達(dá)式:首先是將五個(gè)人的預(yù)測(cè)寫成邏輯表達(dá)式:讓關(guān)系運(yùn)算符讓關(guān)系運(yùn)算符“=”=”的含義是的含義是“是是”。讓數(shù)字讓數(shù)字1 1、2 2、3 3、4 4、5 5分別表示名次第一、第二,分別表示名次第一、第二,第五。,第五。 讓整型變量讓整型變量A A、B B、C C、D D、E E分別表示每個(gè)選手所得名次。分別表示每個(gè)選手所得名次。 A A選手說(shuō):選手說(shuō):B=2B=2,A=3A=3;B B選手說(shuō):選手說(shuō):B=2B=2,E

58、=4E=4;C C選手說(shuō):選手說(shuō):C=1C=1,D=2D=2;D D選手說(shuō):選手說(shuō):C=5C=5,D=3D=3;E E選手說(shuō):選手說(shuō):E=4E=4,A=1A=1;第三講第三講 循環(huán)結(jié)構(gòu)循環(huán)結(jié)構(gòu)2 2 考慮到每個(gè)人說(shuō)的話是一對(duì)一錯(cuò),即一真一假,比如考慮到每個(gè)人說(shuō)的話是一對(duì)一錯(cuò),即一真一假,比如A A說(shuō)的,若說(shuō)的,若B=2B=2為真,則為真,則A=3A=3為假,為真取值為為假,為真取值為1 1,為假取值為,為假取值為0 0,則兩個(gè)關(guān)系表達(dá),則兩個(gè)關(guān)系表達(dá)式之和必為式之和必為1 1。即即(B=2)+(A=3)(B=2)+(A=3)應(yīng)該是應(yīng)該是1 1 我們可以歸納出要同時(shí)滿足五個(gè)人所說(shuō)的話都符合一半對(duì)

59、一半錯(cuò)的條件我們可以歸納出要同時(shí)滿足五個(gè)人所說(shuō)的話都符合一半對(duì)一半錯(cuò)的條件是是ta=(B=2)+(A=3)=1; ta=(B=2)+(A=3)=1; 符合符合A A選手的話,則選手的話,則tata為為1 1tb=(B=2)+(E=4)=1; tb=(B=2)+(E=4)=1; 符合符合B B選手的話,則選手的話,則tbtb為為1 1tc=(C=1)+(D=2)=1; tc=(C=1)+(D=2)=1; 符合符合C C選手的話,則選手的話,則tctc為為1 1td=(C=5)+(D=3)=1; td=(C=5)+(D=3)=1; 符合符合D D選手的話,則選手的話,則tdtd為為1 1te=(E

60、=4)+(A=1)=1; te=(E=4)+(A=1)=1; 符合符合E E選手的話,則選手的話,則tete為為1 1第三講第三講 循環(huán)結(jié)構(gòu)循環(huán)結(jié)構(gòu)3.3.仍然可以用枚舉的方法,讓變量仍然可以用枚舉的方法,讓變量A A、B B、C C、D D、E E在在1515中取值,形成滿足中取值,形成滿足上述條件且上述條件且A A、B B、C C、D D、E E取值均不同的取值均不同的AEAE的組合,即是所求。的組合,即是所求。可以考慮可以考慮A A、B B、C C、D D、E E取值均不同的條件為取值均不同的條件為 A A * *B B* *C C* *D D* *E=120E=120第三講第三講 循環(huán)結(jié)構(gòu)循環(huán)結(jié)構(gòu)第三講第三講 循環(huán)結(jié)構(gòu)循環(huán)結(jié)構(gòu)For(A=1;A=5;A+)For(B=1;B=5;B+)For(C=1;C=5;C

溫馨提示

  • 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)論