程序結(jié)構(gòu)設(shè)計(jì)(下).ppt_第1頁(yè)
程序結(jié)構(gòu)設(shè)計(jì)(下).ppt_第2頁(yè)
程序結(jié)構(gòu)設(shè)計(jì)(下).ppt_第3頁(yè)
程序結(jié)構(gòu)設(shè)計(jì)(下).ppt_第4頁(yè)
程序結(jié)構(gòu)設(shè)計(jì)(下).ppt_第5頁(yè)
已閱讀5頁(yè),還剩55頁(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ǔ)言語(yǔ)句與程序的三種基本結(jié)構(gòu)(下)(參考教材的第7章),主要內(nèi)容,循環(huán)程序設(shè)計(jì):3種循環(huán)控制語(yǔ)句 應(yīng)用舉例,3.4 循環(huán)程序設(shè)計(jì)-基本概念,3.4 循環(huán)程序設(shè)計(jì),循環(huán)語(yǔ)句用來(lái)解決現(xiàn)實(shí)生活中的循環(huán)問(wèn)題。 C語(yǔ)言中提供了三種循環(huán)語(yǔ)句: (1)while語(yǔ)句 (2)do-while語(yǔ)句 (3)for 語(yǔ)句,3.4.1 while 語(yǔ)句,while語(yǔ)句的一般格式為: while ( ) 循環(huán)體語(yǔ)句 while語(yǔ)句的執(zhí)行流程如圖所示:(圖3.7),分析: 如果n不是很大,例如n=3,則如何編程? 如果n很大,或者不知道n多大,則如何編程? 若使用循環(huán),循環(huán)條件和循環(huán)體如何構(gòu)造? 計(jì)數(shù)器和累加

2、器的概念。,例:從鍵盤(pán)輸入n(n0)個(gè)數(shù),求其和。,假設(shè)n=3,則采用如下程序即可。 main( ) int a,b,c; printf(“please input a,b,c:”); scanf(“%d,%d,%d”, ,圖 求n個(gè)數(shù)的和,main() int i, n, k, sum; i=1; sum=0; printf(Input n: ); scanf(%d, 運(yùn)行結(jié)果: Input n: 6 12 34 2 11 9 5 sum is: 73,例 2 從鍵盤(pán)連續(xù)輸入字符,直到輸入“回車(chē)”符為止, 統(tǒng)計(jì)輸入的字符個(gè)數(shù)。,圖2 統(tǒng)計(jì)輸入字符的個(gè)數(shù),include main( ) cha

3、r ch; int len=0; puts(Type in a sentence, then press n); while (ch=getchar()!=n) /*ch=getch()!=r*/ len+; printf(n Sentence is %d characters long.n, len); 運(yùn)行結(jié)果: Type in a sentence, then press this is a sentence. Sentence is 19 characters long.,3.4.1 while 語(yǔ)句,while語(yǔ)句一般用于事先不知道循環(huán)次數(shù), 在循環(huán)執(zhí)行的過(guò)程中, 根據(jù)條件來(lái)決定循環(huán)

4、是否結(jié)束。說(shuō)明: (1)在循環(huán)體中如果包含一個(gè)以上的語(yǔ)句時(shí), 則應(yīng)該用花括號(hào)括起, 構(gòu)成復(fù)合語(yǔ)句。 (2)在循環(huán)體語(yǔ)句中, 一定要有改變循環(huán)條件的語(yǔ)句, 使循環(huán)能夠終止。,3.4.1 while 語(yǔ)句,例: 用while語(yǔ)句來(lái)實(shí)現(xiàn)100個(gè)6相加。 程序如下: main( ) int i = 1, sum = 0 ; while ( i = 100 ) sum = sum + 6 ; printf ( The sum is: %d, sum ) ; 是否正確?,3.4.2 do-while 語(yǔ)句,do-while語(yǔ)句的一般格式為: do 循環(huán)體語(yǔ)句 while ( ); do-while語(yǔ)句的執(zhí)

5、行流程如圖所示:(圖3.8),3.4.2 do-while 語(yǔ)句,例 用do-while語(yǔ)句來(lái)實(shí)現(xiàn)100個(gè)6相加。程序如下: main( ) int i = 1, sum = 0 ; do sum += 6 ; i + ; while ( i = 100 ) ; printf ( The sum is: %d, sum ) ; ,3.4.2 do-while 語(yǔ)句,do-while語(yǔ)句與while語(yǔ)句的區(qū)別: do-while語(yǔ)句是在判斷條件是否成立之前, 先執(zhí)行循環(huán)體語(yǔ)句一次; while語(yǔ)句則是先判斷條件是否成立, 如果條件成立才執(zhí)行循環(huán)體; 因此, while語(yǔ)句的循環(huán)體可能一次都不執(zhí)行

6、;而do-while語(yǔ)句的循環(huán)體至少被執(zhí)行一次, 這是while語(yǔ)句和do-while語(yǔ)句的根本區(qū)別。 當(dāng)型循環(huán)和直到型循環(huán)(?)。,例 利用dowhile語(yǔ)句重做:從鍵盤(pán)輸入n(n0)個(gè)數(shù),求其和,圖 5.5 求n個(gè)數(shù)的和,main() int i, n, k, sum; i=1; sum=0; printf(Input n: ); scanf(%d, 運(yùn)行結(jié)果: Input n: 6/0(?) 12 3 7 11 23 34 sum is: 90,編程技巧-關(guān)于吃回車(chē)問(wèn)題P133,main( ) int i=0; char c; while(i6) scanf(“%c”, ,main( )

7、 int i=0; char c; scanf(“%d”, ,編程技巧,方法1: scanf(“%c”,/吃掉buffer中的所有字符,3.4.3 for 語(yǔ)句,for 循環(huán)用于循環(huán)次數(shù)已知的情況。 其一般格式為:for ( ;) 循環(huán)體語(yǔ)句 for循環(huán)的執(zhí)行流程如圖所示:(圖3.8),3.4.3 for 語(yǔ)句,例:用for循環(huán)語(yǔ)句編寫(xiě)計(jì)算100個(gè)6相加的程序 main( ) int i, sum = 0 ; for ( i = 1 ;i = 100 ;i +) sum = sum + 6 ; printf ( The sum is: %d, sum ) ; ,main( ) int i =

8、1, sum = 0 ; while ( i = 100 ) sum = sum + 6 ; i+; printf ( The sum is: %d, sum ) ; ,3.4.3 for語(yǔ)句,for語(yǔ)句的功能可用while語(yǔ)句描述如下: 表達(dá)式1; while (表達(dá)式2) 語(yǔ)句; 表達(dá)式3; for語(yǔ)句最簡(jiǎn)單的應(yīng)用形式, 也是最容易理解的形式: for (循環(huán)變量賦初值; 循環(huán)條件; 循環(huán)變量增值) 語(yǔ)句 例如, for (i=1; i=50; i+) sum=sum+i;,3.4.3 for 語(yǔ)句,說(shuō)明: (1)在for語(yǔ)句中, 、和 都可以缺省。 (2)缺省,系統(tǒng)會(huì)認(rèn)為此處的值永遠(yuǎn)為1

9、, 將形成死循環(huán)。因此,在循環(huán)體中要有退出循環(huán)體的語(yǔ)句。因?yàn)橐粋€(gè)空表達(dá)式的值是非0。 (3)for語(yǔ)句的三個(gè)表達(dá)式可以是任何類型的表達(dá)式, 最常用的是逗號(hào)表達(dá)式, 這樣, 可以同時(shí)對(duì)多個(gè)變量賦初值。 如何理解這些說(shuō)明呢?下面舉例說(shuō)明:,3.4.3 for 語(yǔ)句,1.缺省的情況; int i, sum = 0 ; i=1; for ( ;i 的情況; int i, sum = 0 ; i=1; for ( ;i = 100 ;) sum = sum + 6 ; i + ; ,3.4.3 for 語(yǔ)句,3.缺省的情況; int i, sum = 0 ; for (i=1 ; ;i +) if(i1

10、00) break; sum = sum + 6 ; 4. 都 缺省的情況; int i =1, sum = 0 ; for ( ; ;) if(i100) break; sum = sum + 6 ; i =i+1 ; ,3.4.3 for 語(yǔ)句,例1、for(sum=0;i=100;i+) sum = sum + i; 例2、for(sum=0,i=1;i=100;i+) sum = sum + i; 例3、for(i=0,j=100;i=j;i+,j-) k = i + j; 例4、for(i=0;(c=getchar()!= n;i += c);,例 計(jì)算1至50中是7的倍數(shù)的數(shù)值之和

11、。,main() int i, sum=0; for (i=1; i=50; i+) if (i%7=0) sum+=i; printf(sum=%dn, sum); 運(yùn)行結(jié)果: sum=196,循環(huán)編程實(shí)例,【例1】輸入任意一個(gè)大于2的整數(shù),判斷該數(shù)是否素?cái)?shù)并輸出相應(yīng)結(jié)果。 分析:根據(jù)定義,一個(gè)大于2的整數(shù)n,如果除1和n外不能被任何數(shù)整除(即n不含1和n以外的任何因子),則n是素?cái)?shù);并規(guī)定2是最小素?cái)?shù)。為了確定n是否含有因子,只需用2到n(也可以用2至n-1或2至sqrt(n)作除數(shù),如果均不能整除n,則n是素?cái)?shù),否則n不要素?cái)?shù)。 算法: (1) 輸入n。 (2)如果n等于2,則輸出“2是

12、一個(gè)素?cái)?shù)”;否則,如果n2則找n是否有因子; i從2開(kāi)始,用i除n,若余數(shù)非0且in,則用下一個(gè)i重復(fù)該過(guò)程。當(dāng)余數(shù)為0或i大于等于n時(shí),結(jié)束找因子的過(guò)程(結(jié)束循環(huán))。 (3)如果結(jié)束循環(huán)時(shí)余數(shù)為0,則輸出n“不是一個(gè)素?cái)?shù)“,否則輸出n”是一個(gè)素?cái)?shù)“。,程序.1: #include #include void main(void) int n,i,k,r; printf(input n:n); scanf(%d, ,【例2】 求n!,n從終端輸入。 分析:根據(jù)階乘的定義,n為0的整數(shù),n!=1*2*3*n??紤]到n較大是n!是一個(gè)相當(dāng)大的數(shù),為避免溢出,應(yīng)將存放結(jié)果的變量說(shuō)明為long或dou

13、ble。 算法: (1)輸入 n (2)計(jì)算n!: (2)-1 將累乘器fac置 初值1。 (2)-2 i從至n,對(duì)每一個(gè)I,計(jì)算fac=fac*i. (3)輸出fac.,程序.2 #include void main(void) int n,i; long fac; printf(input n: ); scanf(%d,%n); fac =1; for(i=1;i=n;i+) fac *=i; printf(%d!=%ldn,n,fac); 輸入 9 輸出 9!=362880,【例3】輸入一批整數(shù),以0為結(jié)束,輸出其中最大值。 分析:從若干數(shù)中找出最大的一個(gè)數(shù)最簡(jiǎn)單方法是“打擂臺(tái)“的方法。

14、即兩兩相比,大者留下,當(dāng)所有數(shù)比完時(shí)留下的那個(gè)數(shù)為最大。程序中用一個(gè)變量max保存(留下)每?jī)蓚€(gè)數(shù)相比中大的一個(gè)數(shù)。 算法: (1)輸入一個(gè)數(shù)x。 (2)置最大數(shù)max初值為x。 (3)檢查x是否等于0,如果x不等于0,則 (3)-1輸入下一個(gè)數(shù)x。 (3)-2如果maxx,則將max修改為x。 (3)-3轉(zhuǎn)步驟(3)(循環(huán))。 如果x等于0,則結(jié)束循環(huán),轉(zhuǎn)步驟(4)。 (4)輸出max。,程序.3: #include void main(void) int x,max; printf(input numbers,lastoneis 0:n); scanf(%d, 執(zhí)行輸出input numb

15、ers ,last one is 0: 輸入 56 34 791 0 輸出 max=791,例4:輸入一串字符,將其轉(zhuǎn)換為一個(gè)十進(jìn)制整數(shù)(模擬scanf(“%d, printf(input a stringdigits:n); for(c=getchar( );isspace(c);c=getchar( ); sign=(c=-)?-1:1; if(c=+|c=-) c=getchar();/* skip sign*/ for(result=0;isdigit(c);c=getchar( ) result=10*result+c-0; result*=sign; printf(result=%

16、dn,result);,輸入7025 輸出result=7025 isdigit(c)和isspace(c)是標(biāo)準(zhǔn)函數(shù)調(diào)用,相應(yīng)的頭文件為。isdigit(c )測(cè)試字符c是否一個(gè)數(shù)字,如果c是數(shù)字則函數(shù)返回值非0,否則返回值0,等價(jià)于表達(dá)式: c=0 for(t=0;t100;t+) printf(“%3d”,t); if(t = 10)break; 程序運(yùn)行結(jié)果 : 0 1 2 3 4 5 6 7 8 9 10,3.4.6 break語(yǔ)句的進(jìn)一步說(shuō)明,main( ) int t=0; while(printf(*) t+; if(t3) break; printf(“%d”,t); ,結(jié)果

17、,提問(wèn):程序中while(printf(*)有問(wèn)題嗎?,3.4.7 循環(huán)程序設(shè)計(jì),用循環(huán)語(yǔ)句構(gòu)成的程序稱為循環(huán)程序,設(shè)計(jì)循環(huán)程序的過(guò)程稱為循環(huán)程序設(shè)計(jì)。 例6:拼數(shù)。模擬編譯程序, 將以字符形式讀入的數(shù)字序列轉(zhuǎn)換成對(duì)應(yīng)的實(shí)數(shù)。例如, 由鍵盤(pán)輸入1、2、3、.、4、5, 轉(zhuǎn)換成對(duì)應(yīng)的實(shí)數(shù)123.45。 解題的基本思想: 輸入字符1,轉(zhuǎn)換成對(duì)應(yīng)數(shù)字1的公式是:result=1 - 0 再輸入字符2,轉(zhuǎn)換成對(duì)應(yīng)的數(shù)字為:result= result * 10 + 2 - 0; 依次類推.遇到小數(shù)點(diǎn)后,開(kāi)始計(jì)小數(shù)部分的位數(shù),仍按整數(shù)處理,即按12345處理,最后除以小數(shù)部分的最高冪,本例中是除以102

18、,相當(dāng)于小數(shù)點(diǎn)向前移動(dòng)兩位 ,即12345/100=123.45 。,3.4.7 循環(huán)程序設(shè)計(jì),main( ) char ch ; float result, scale ; result = 0.0; scanf ( %c , /* 長(zhǎng)整型數(shù) */ int i; f1 = 1; f2 = 1; /* 已知數(shù)列的前兩個(gè)初值 */ for (i=1; i=20; i+) printf(%12ld %12ld ,f1,f2); /* 輸出長(zhǎng)整型數(shù) */ if (i%2 = 0) printf(n); /* 控制輸出格式 */ f1 = f2 + f1; f2 = f1 + f2; ,3.4.7 循環(huán)程序設(shè)計(jì),例.8 求100200間的全部素?cái)?shù)。 #include math.h main() int m,k,i,n=0;/* n用于累計(jì)素?cái)?shù)的個(gè)數(shù) */ for(m=101; m= k+1) printf(%d ,m); n = n+1; ,3.4.7 循環(huán)程序設(shè)計(jì),例9:譯密碼。為使報(bào)文保密,往往按一定規(guī)律將其轉(zhuǎn)換為密碼,收?qǐng)?bào)人再按約定的規(guī)律將其譯為原文。設(shè)加密規(guī)律為:將字母變成其后的第四個(gè)字母,如,A變?yōu)镋,a變?yōu)閑。 輸入一行字符,要求將其變?yōu)槊艽a

溫馨提示

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