C語言第3章人民郵電出版社張小東.ppt
《C語言第3章人民郵電出版社張小東.ppt》由會員分享,可在線閱讀,更多相關(guān)《C語言第3章人民郵電出版社張小東.ppt(48頁珍藏版)》請在裝配圖網(wǎng)上搜索。
第三章 循環(huán)結(jié)構(gòu)與應(yīng)用,循環(huán)結(jié)構(gòu)是程序中一種很重要的結(jié)構(gòu)。它會根據(jù)條件反復(fù)執(zhí)行某程序段,當(dāng)然不能無限的執(zhí)行下去,在給定條件不成立時,循環(huán)就會停止。給定的條件稱為循環(huán)條件,反復(fù)執(zhí)行的程序段稱為循環(huán)體。,C語言提供了多種循環(huán)語句,可以組成各種不同形式的循環(huán)結(jié)構(gòu): (1) for循環(huán)語句; (2) while循環(huán)語句; (3) do-while循環(huán)語句;,3.1 循環(huán)的概述,for一般形式為:,,for(設(shè)置初始值;循環(huán)條件判斷;設(shè)置循環(huán)增減量) { 語句1; 語句2; …… 語句n; },3.2 for循環(huán),for語句的執(zhí)行流程:,,圖3-1 for語句執(zhí)行流程圖,例3-1 使用for循環(huán)求整數(shù)1加到100的值。,圖3-3 高斯級數(shù)運(yùn)算的流程圖,#include void main(void) { int nSum;/* 用于保存計算和*/ int i; /* 循環(huán)控制變量,也是參與運(yùn)算的操作數(shù)*/ nSum=0; for(i=1;i101;i++){ nSum+=i; } printf(“1+2+3+……+99+100=%d\n“,nSum); },程序清單3-1 progression.c,雙目復(fù)合賦值運(yùn)算符,復(fù)合賦值表達(dá)式的一般形式為: 表達(dá)式1 Op= 表達(dá)式2 Op表示參與構(gòu)成復(fù)合賦值運(yùn)算符的雙目運(yùn)算符,它和下面的賦值表達(dá)式等價: 表達(dá)式1 = (表達(dá)式1) Op (表達(dá)式2) 例如:x+=y-3等價于x=x+(y-3),而不是x=x+y-3。,注意:,++i和i++等價于i=i+1,但是,這兩個表達(dá)式在參與其他運(yùn)算的時候是有區(qū)別的。在和其他運(yùn)算結(jié)合在一起時,++i表示i自增1后再參與其它運(yùn)算,而i++表示i參與運(yùn)算后,i的值再自增1。同理,--i是i自減1后再參與其它運(yùn)算,而i--是i參與運(yùn)算后,i的值再自減1。例如下面的程序段: int x=0,int i=1; x=i++; printf(“x=%d,i=%d”,x,i); 輸出的結(jié)果為x=1,i=2。,例3-2 使用逗號運(yùn)算符在for循環(huán)中初始化變量。,#include void main (void) { int nSum; /* 用于保存計算和*/ int i; /* 循環(huán)控制變量,也是參與運(yùn)算的操作數(shù)*/ /*在循環(huán)開始時,初始化變量nSum*/ for(i=1,nSum=0;i101;i++) nSum+=i; /*求和*/ printf(“1+2+3+……+99+100=%d\n“,nSum); },程序清單3-2 progression-1.c,,例3-3 很多web網(wǎng)站限制登陸次數(shù),如果輸入的密碼在指定次數(shù)內(nèi)錯誤,就拒絕登陸。實(shí)現(xiàn)一個程序,模擬驗(yàn)證密碼的過程,判斷用戶輸入密碼的次數(shù),若3次輸入密碼錯誤,則結(jié)束輸入。,,,,圖3-5 控制密碼輸入次數(shù)程序流程圖,#include “stdio.h“ void main (void) { int nPwd=0; /* 用于保存輸入的密碼*/ int i; /*循環(huán)控制變量*/ int nFlag=1; /*密碼匹配成功的標(biāo)志*/ /* 默認(rèn)設(shè)定密碼為87569,可以根據(jù)需要進(jìn)行設(shè)定*/ for(i=0;((nFlag=(87569 != nPwd)) },程序清單3-3 checklogon.c,#include void main (void){ int i; for(i=0;i10;printf(“%d “,i),i++) /*在“設(shè)置循環(huán)增減量”部分使用逗號運(yùn)算符,調(diào)用printf函數(shù)輸出*/ },例3-4 使用循環(huán)輸出0-9這10個數(shù)字。,程序清單3-4 aotherfor.c,while(條件判斷) { 語句1; 語句2; …… 語句n; },3.3 while循環(huán),while一般形式為:,圖3-8 while循環(huán)執(zhí)行過程,,例3-5 使用while循環(huán)接收鍵盤輸入,若輸入字符為q或者Q,則停止循環(huán)執(zhí)行。,圖3-9 while循環(huán)處理鍵盤輸入的流程圖,#include void main (void) { char cStr; /* 用于保存輸入的字符*/ cStr=\0; while((cStr !=q) },程序清單3-5checkcharactor.c,例3-6 用while循環(huán)實(shí)現(xiàn)從1加到100的計算。,,,#include void main (void) { int nSum; /* 用于保存計算和*/ int i; /* 循環(huán)控制變量,也是參與運(yùn)算的操作數(shù)*/ nSum=0; i=1; /*初始化循環(huán)控制變量*/ while(i101){ nSum+=i; i++; /*改變循環(huán)控制變量的值*/ } printf(“1+2+3+……+99+100=%d\n“,nSum); },程序清單3-6 progression-2.c,,do { 語句1; 語句2;…… 語句n; } while(條件判斷);,,3.4 do while循環(huán),do while一般形式為:,圖3-11 do while循環(huán)執(zhí)行過程,例3-7 使用do while循環(huán)實(shí)現(xiàn)1到100的計算。,圖3-12 do while循環(huán)實(shí)現(xiàn)高斯級數(shù)計算的流程圖,#include void main (void){ int nSum; /* 用于保存計算和*/ int i; /* 循環(huán)控制變量,也是參與運(yùn)算的操作數(shù)*/ nSum=0; i=1; /*初始化循環(huán)控制變量*/ do { nSum+=i; i++; /*改變循環(huán)控制變量的值*/ }while(i101); printf(“1+2+3+……+99+100=%d\n“,nSum); },程序清單3-7 progression-3.c,一個循環(huán)體內(nèi)又包含另一個完整的循環(huán)結(jié)構(gòu),稱為循環(huán)的嵌套。內(nèi)嵌的循環(huán)中還可以嵌套循環(huán),這就是多層循環(huán)。,3.5 循環(huán)的嵌套,(1) for(;;) (2) for(;;) {…… {…… for(;;) while() {……} {……} …… …… } } (3) while() (4) do {…… {…… do while() {…… {……} }while(); …… …… } }while(); (5) while() (6) do {…… { do …… {…… for(;;) }while(); {……} …… …… } }while();,,首先看九九乘法表的內(nèi)容,如下所示: 1*1=1 2*1=2 2*2=4 3*1=3 3*2=6 3*3=9 …… …… …… …… …… …… …… 8*1=8 8*2=16 8*3=24 8*4=32 8*5= 40 8*6=48 8*7=56 8*8=64 9*1=9 9*2=18 9*3=27 9*4=36 9*5=45 9*6=54 9*7=63 9*8=72 9*9=81,例3-8 在屏幕上輸出九九乘法表。,,,圖3-14 九九乘法表的程序流程圖,#include void main (void) { int nRow; /*行數(shù)的循環(huán)控制變量*/ int nCol; /* 列數(shù)循環(huán)控制變量*/ for(nRow=1;nRow10;nRow++) /* 外層循環(huán)控制行數(shù)*/ { for(nCol=1;nCol=nRow;nCol++) /* 內(nèi)層循環(huán)控制列數(shù)*/ { printf(“%d*%d=%d “,nRow,nCol,nRow*nCol); } printf(“\n“); /*輸出一行后換行*/ } },程序清單3-8 multiplication-table.c,當(dāng)確定要使用循環(huán)時,該使用哪個呢? (1)首先確定需要的循環(huán)是先進(jìn)行條件判斷,后執(zhí)行 循環(huán);還是先執(zhí)行循環(huán),然后判斷條件。 (2)在for循環(huán)和while循環(huán)的選擇上,如果涉及到初始 化一些變量或者更新一些操作,那么使用for循環(huán)比較 合適,否則使用while循環(huán)。,3.6 循環(huán)語句的選擇,三種循環(huán)特性列表,beak語句,break語句的一般形式為: break;,例3-11 循環(huán)接收有效的學(xué)生成績數(shù)據(jù),如果數(shù)據(jù)大于100或小于0,則結(jié)束過程,輸出總成績和平均分。,圖3-19 例3-11程序?qū)崿F(xiàn)的流程圖,#include void main (void){ float fScore; /* 用于保存輸入的成績*/ float fMin=0.0f; float fMax=100.0f; float fTotal=0.0f; /* 保存總成績*/ int nCount=0; /* 對輸入的成績個數(shù)進(jìn)行計數(shù)*/ while(scanf(“%f“, } },程序清單3-11 break.c,注意: (1)break語句不能用于循環(huán)語句和switch語句之外的任何其他語句中。 (2)在嵌套循環(huán)中,break語句只能終止它所在的循環(huán)的執(zhí)行。,,,,本例中break語句的作用就是結(jié)束循環(huán)的執(zhí)行,強(qiáng)制退出循環(huán), 程序繼續(xù)執(zhí)行循環(huán)后的程序語句。,continue語句,,,continue的作用與break語句相似,也有結(jié)束循環(huán)的作用,但是continue語句是結(jié)束本次循環(huán),即跳過循環(huán)體中下面尚未執(zhí)行的語句,接著進(jìn)行下一次是否執(zhí)行循環(huán)的判定。,continue語句的一般形式為: continue;,#include void main (void){ float fScore; /* 用于保存輸入的成績*/ float fMin=0.0f,fMax=100.0f; float fTotal=0.0f; /* 保存總成績*/ int nCount=0; /* 對輸入的成績個數(shù)進(jìn)行計數(shù)*/ while(scanf(“%f“, } },程序清單3-12 continue.c,,,將程序清單3-11進(jìn)行一下簡單的修改,將break語句替換成continue語句。請讀者分析程序執(zhí)行的結(jié)果,體會這兩種跳出循環(huán)體語句的作用和對程序流程的影響。,注意: break語句則是結(jié)束整個循環(huán)過程,不再判斷執(zhí)行循環(huán)的條件是否成立。 continue語句只結(jié)束本次循環(huán),而不是終止整個循環(huán)的執(zhí)行。,goto語句,,,goto語句為無條件轉(zhuǎn)向語句,一般形式為: goto 語句標(biāo)號;,語句標(biāo)號用標(biāo)識符表示,即由字母、數(shù)字和下劃線組成,且第一個字符必須為字母或下劃線,不能用整數(shù)來做標(biāo)號。語句標(biāo)號加在跳轉(zhuǎn)的目的語句之前,并用冒號(:)與后面的語句分隔。例如, goto lable_123; 是合法的,而 goto 25; 是不合法的。,3.7 程序舉例,例:下面對計算器做如下功能的擴(kuò)充: (1) 增加菜單循環(huán)執(zhí)行的功能; (2) 實(shí)現(xiàn)三角函數(shù)正弦函數(shù)的功能(sin函數(shù)); (3) 實(shí)現(xiàn)三角函數(shù)余弦函數(shù)的功能(cos函數(shù))。,3.7.1 計算器,,菜單反復(fù)執(zhí)行功能 既然是要菜單反復(fù) 執(zhí)行,它必然是個重復(fù) 性的工作,自然就可以 使用這章講解的循環(huán)語 句來實(shí)現(xiàn)。在此采用 while循環(huán)語句實(shí)現(xiàn)該功 能。,,,圖3-22 重復(fù)使用菜單功能的流程圖,#include #include void main() { int nFun=1; while(nFun!=9){ system(“cls“);//clrscr(); printf(“ --------------------------\n“); /* 構(gòu)造功能菜單 */ printf(“ 加法運(yùn)算--------1\n“); printf(“ 減法運(yùn)算--------2\n“); printf(“ 除法運(yùn)算--------3\n“); printf(“ 乘法運(yùn)算--------4\n“); printf(“ 退出------------9\n“); printf(“ --------------------------\n“); printf(“ 請輸入功能選擇: “); /* 在屏幕上顯示提示信息 */ scanf(“%d“,} } },程序清單3-13 AppCalc.c,,(2) 三角函數(shù)sin函數(shù)和cos函數(shù)的實(shí)現(xiàn) 在高等數(shù)學(xué)中實(shí)現(xiàn)sin函數(shù)和cos函數(shù)的方法不止一種。 在這里,采用的是泰勒(Taylor)公式進(jìn)行實(shí)現(xiàn)。 首先分別看下它們的泰勒展開式的形式:,,,,圖3-23 sin函數(shù)的實(shí)現(xiàn)流程圖,#include #include #include void main(void){ int nFun=1; double dSin=0.0,dCos=0.0, dTemp=1.0, dArc=0.0; /*變量聲明初始化*/ int k=0; double pi=3.1415926,dMin=0.000001,dDegree=0.0; while(nFun!=9){ system(“cls“); //clrscr(); printf(“ --------------------------\n“);/* 構(gòu)造功能菜單 */ printf(“ 加法運(yùn)算--------1\n“); printf(“ 減法運(yùn)算--------2\n“); printf(“ 除法運(yùn)算--------3\n“); printf(“ 乘法運(yùn)算--------4\n“); printf(“ sinx運(yùn)算--------5\n“); printf(“ cosx運(yùn)算--------6\n“); printf(“ 退出------------9\n“); printf(“ --------------------------\n“); printf(“ 請輸入功能選擇: “); /* 在屏幕上顯示提示信息 */ scanf(“%d“, switch(nFun){,這里只給出sin函數(shù)和cos函數(shù)實(shí)現(xiàn)的程序片段,如程序清單3-15 AppCalc.c所 。,case 1 /*省略加法運(yùn)算過程 */ break; case 2: /*省略減法運(yùn)算過程 */ break; case 3: /*省略乘法運(yùn)算過程 */ break; case 4: /*省略除法運(yùn)算過程 */ break; case 5: /*sinx運(yùn)算過程 */ dSin=0.0; dTemp=1.0; dArc=0.0; k=0; dDegree=0; printf(“ 請輸入弧度:“); scanf(“%lf“,,case 6: /*cosx運(yùn)算過程 */ dCos=0.0; /*變量初始化*/ dTemp=1.0; /*變量初始化*/ dArc=0.0; /*變量初始化*/ k=0; dDegree=0; printf(“ 請輸入弧度:“); scanf(“%lf“, } } },在第1章,學(xué)生成績檔案管理系統(tǒng)已經(jīng)具備了數(shù)據(jù)的輸入和成績分類分析的功能。不過,它只能進(jìn)行單獨(dú)的一次數(shù)據(jù)處理。學(xué)習(xí)過循環(huán)結(jié)構(gòu)以后,結(jié)合本章的知識點(diǎn),增加系統(tǒng)重復(fù)處理數(shù)據(jù)的能力,既檢驗(yàn)對知識的實(shí)際應(yīng)用能力,又把系統(tǒng)的功能進(jìn)一步充實(shí)。下面對學(xué)生成績檔案管理系統(tǒng)做如下功能的擴(kuò)充: (1) 實(shí)現(xiàn)可控的數(shù)據(jù)處理; (2) 對多次輸入的三門成績(C語言、英語和高數(shù))進(jìn)行 分類求和。,3.7.2 學(xué)生成績檔案管理系統(tǒng),,圖3-25 循環(huán)統(tǒng)計學(xué)生總成績的流程圖,#include void main(void){ float fMin=0.0f, fMax=100.0f; /* 保存總成績*/ float fTotalc=0.0f,fTotale=0.0f,fTotalm=0.0f; float fClanguege=0.0,fEnglish=0.0,fMath=0.0; int nCount=0; /*對輸入的成績個數(shù)進(jìn)行計數(shù)*/ do { printf(“ ----------------------------------\n“); fClanguege=0.0; fEnglish=0.0; fMath=0.0; printf(“ 請輸入C 語言、英語和高數(shù)成績,用逗號分隔:“); scanf(“%f,%f,%f“, /* 若輸入的成績不是合法數(shù)字,則結(jié)束本次循環(huán)*/ },程序清單3-16 AppStud.c,if (fMath fMax || fMath 0){ printf(“ C 語言的總成績?yōu)?%0.1f\n“,fTotalc); printf(“ 英語的總成績?yōu)?%0.1f\n“,fTotale); printf(“ 高數(shù)的總成績?yōu)?%0.1f\n“,fTotalm); } else{ printf(“ 無效的成績數(shù)據(jù)輸入\n!“); } },(1) 三種循環(huán)語句的基本語法 : for語句、while語句和do while語句 (2) 復(fù)合賦值運(yùn)算符 (3) 邏輯運(yùn)算的“短路”現(xiàn)象 (1) 如何跳離循環(huán)結(jié)構(gòu): break語句、continue語句和goto語句 (2) 無限循環(huán)的用途 (3) 循環(huán)語句的選擇,3.8 本章小結(jié),- 1.請仔細(xì)閱讀文檔,確保文檔完整性,對于不預(yù)覽、不比對內(nèi)容而直接下載帶來的問題本站不予受理。
- 2.下載的文檔,不會出現(xiàn)我們的網(wǎng)址水印。
- 3、該文檔所得收入(下載+內(nèi)容+預(yù)覽)歸上傳者、原創(chuàng)作者;如果您是本文檔原作者,請點(diǎn)此認(rèn)領(lǐng)!既往收益都?xì)w您。
下載文檔到電腦,查找使用更方便
9.9 積分
下載 |
- 配套講稿:
如PPT文件的首頁顯示word圖標(biāo),表示該P(yáng)PT已包含配套word講稿。雙擊word圖標(biāo)可打開word文檔。
- 特殊限制:
部分文檔作品中含有的國旗、國徽等圖片,僅作為作品整體效果示例展示,禁止商用。設(shè)計者僅對作品中獨(dú)創(chuàng)性部分享有著作權(quán)。
- 關(guān) 鍵 詞:
- 語言 人民郵電 出版社 張小東
鏈接地址:http://www.hcyjhs8.com/p-3107220.html