傳智播客C語言入門4課件_第1頁
傳智播客C語言入門4課件_第2頁
傳智播客C語言入門4課件_第3頁
傳智播客C語言入門4課件_第4頁
傳智播客C語言入門4課件_第5頁
已閱讀5頁,還剩69頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

傳智播客C語言入門教程(4)講師:尹成QQ:77025077博客:/yincheng01微博:/yincheng8848Mail:yinc13@網(wǎng)址:C語言C++語言傳智播客高薪就業(yè)傳智播客C語言入門教程(4)講師:尹成C語言C++語言2.結(jié)構(gòu)化程序設(shè)計(jì)的三種結(jié)構(gòu)3.順序結(jié)構(gòu)4.選擇結(jié)構(gòu)5.循環(huán)結(jié)構(gòu)傳智播客C語言入門教程(4)大綱1.程序的最小單元-語句C語言課程概述6.初學(xué)者答疑2.結(jié)構(gòu)化程序設(shè)計(jì)的三種結(jié)構(gòu)34.1程序的最小獨(dú)立單元—語句如果把寫程序和寫小說類比,變量常量等可以看成是字和詞,函數(shù)可以看成是一個(gè)段落,運(yùn)算符等可以看作是字詞的組合方式(規(guī)則),那么,字詞組成的句子就是小說的最小獨(dú)立單元,表達(dá)了一定的意思,同樣,程序的最小獨(dú)立單元是“語句”,每個(gè)語句表達(dá)出完整的意義。

數(shù)據(jù)說明

數(shù)據(jù)的描述(數(shù)據(jù)的名稱、類型和初值等)為解決某一問題而設(shè)計(jì)的一系列有序指令的集合。程序語句

如何處理數(shù)據(jù)的描述4.1程序的最小獨(dú)立單元—語句如果4.1.1主要的語句類型4.1.1主要的語句類型4.1.2C語言語句總結(jié)表達(dá)式語句。C語言中,操作或者動(dòng)作被稱為表達(dá)式。以分號(hào)結(jié)尾的表達(dá)式稱為表達(dá)式語句。例如以下示例都是表達(dá)式語句:intx;printf("\nHelloWorld");只有一個(gè)“;”的空語句。.表達(dá)式語句如if-else,for循環(huán)語句,while循環(huán)語句,do-while循環(huán)語句,continue結(jié)束本次循環(huán)語句,break跳出循環(huán)語句,switch多路分支選擇語句,goto轉(zhuǎn)向語句,return返回語句。.流程控制語句函數(shù)調(diào)用構(gòu)成函數(shù)調(diào)用語句.函數(shù)調(diào)用語句用“{}”包括起來的語句。.復(fù)合語句4.1.2C語言語句總結(jié)表達(dá)式語句4.2結(jié)構(gòu)化程序設(shè)計(jì)結(jié)構(gòu)化程序設(shè)計(jì)的思想是:把一個(gè)需要解決的復(fù)雜問題分解成若干模塊來處理,每個(gè)模塊解決解決一個(gè)小問題,這種分而治之的方法大大降低了程序設(shè)計(jì)的難度。結(jié)構(gòu)化程序設(shè)計(jì)的核心問題是算法和控制結(jié)構(gòu)。4.2結(jié)構(gòu)化程序設(shè)計(jì)結(jié)構(gòu)化程序設(shè)計(jì)4.2.1算法是啥玩意所謂算法,指的是解決問題時(shí)的一系列方法和步驟。算法的思維充溢著生活的各個(gè)方面,比如我們要去北京旅游,會(huì)問一些問題:“坐什么交通工具”,“在哪里中轉(zhuǎn)”,“是否要去奧運(yùn)現(xiàn)場(chǎng)”等等,這都包含著算法,可見,算法步驟間有一定的邏輯順序,按這些順序執(zhí)行步驟便可以解決問題,達(dá)到目的。這種邏輯順序,在C語言中體現(xiàn)為控制結(jié)構(gòu)。4.2.1算法是啥玩意所謂算法,指4.2.2算法的表示拋開那些厚厚的算法教科書,不去談那些深?yuàn)W無比的屬性,本節(jié)討論與算法使用最為相關(guān)的問題:算法如何表示,原則上,自然語言也可用于算法表示,但由于自然語言的多義性,不同的人對(duì)同一個(gè)版本的描述可能有不同的理解,因此,一般不采用自然語言來描述算法,要求采用一種精確的,無歧義的機(jī)制。有兩種廣泛使用的算法表示方法,一是偽代碼法,二是流程圖法。4.2.2算法的表示拋開那些厚厚的4.2.3算法的偽代碼表示偽代碼是對(duì)自然語言表示的改進(jìn),給自然語言加上了形式化的框架,以一種簡(jiǎn)單、容易理解的方式描述算法的邏輯過程,用偽代碼表示的算法無二義性,易于理解。使用偽代碼表示算法無需遵守嚴(yán)格的語法規(guī)則,只要完整表達(dá)了意思,書寫清晰,容易閱讀和讀懂即可,舉例來說:用戶輸入如果(用戶輸入的是字符Y)執(zhí)行B操作否則執(zhí)行C操作上述代碼便采用了偽代碼表示方式,完成了一種簡(jiǎn)單的分支選擇結(jié)構(gòu)。4.2.3算法的偽代碼表示偽代碼是4.2.4算法的流程圖表示流程圖法是種有效、直觀的算法表示方法,利用不同的框代表不同的操作,利用有向線段表示算法的執(zhí)行方向,現(xiàn)在通用的流程圖符號(hào)畫法采納的是ANSI(美國(guó)國(guó)家標(biāo)準(zhǔn)化協(xié)會(huì))的標(biāo)準(zhǔn),如所示。4.2.4算法的流程圖表示流程圖法4.2.5---3種控制結(jié)構(gòu)結(jié)構(gòu)化程序設(shè)計(jì)提供了3種控制結(jié)構(gòu),分別是順序結(jié)構(gòu)、分支結(jié)構(gòu)和循環(huán)結(jié)構(gòu),早在1966年,牛人Bohm和Jacopini便證明了,用此3種基本結(jié)構(gòu)可以構(gòu)成任意復(fù)雜的算法。3種基本控制結(jié)構(gòu)如所示。4.2.5---3種控制結(jié)構(gòu)結(jié)構(gòu)化4.2.6取三個(gè)數(shù)種的最小數(shù)4.2.6取三個(gè)數(shù)種的最小數(shù)4.3順序結(jié)構(gòu)設(shè)計(jì)4.3順序結(jié)構(gòu)設(shè)計(jì)4.3.1順序結(jié)構(gòu)案例實(shí)踐從1加到5,分步順序執(zhí)行inti=0;i+=1;i+=2;i+=3;i+=4;i+=5;4.3.1順序結(jié)構(gòu)案例實(shí)踐從1加到4.4分支結(jié)構(gòu)3種基本控制結(jié)構(gòu)中,順序結(jié)構(gòu)是最簡(jiǎn)單的一個(gè),只要沿著指定的語句序列一路向下即可,無須選擇、拐彎或者折回,而分支結(jié)構(gòu)和循環(huán)結(jié)構(gòu)相對(duì)要復(fù)雜一點(diǎn),分支結(jié)構(gòu)涉及從多條岔路中選擇合適的語句執(zhí)行,而循環(huán)結(jié)構(gòu)則會(huì)重復(fù)執(zhí)行某塊語句,也就是說,在執(zhí)行完后還要折回,再次執(zhí)行.4.4分支結(jié)構(gòu)3種基本控制結(jié)構(gòu)中,4.4.1分支結(jié)構(gòu)123實(shí)現(xiàn)單分支選擇的形式實(shí)現(xiàn)雙分支選擇的形式實(shí)現(xiàn)多分支選擇的形式4.4.1分支結(jié)構(gòu)123實(shí)現(xiàn)單分支4.4.2if語句之單分支選擇結(jié)構(gòu)

if(表達(dá)式)語句17一般形式:說明:

當(dāng)表達(dá)式的結(jié)果為非0時(shí),執(zhí)行后面的語句,否則不執(zhí)行。4.4.2if語句之單分支選擇結(jié)構(gòu)4.4.3單分支選擇應(yīng)用舉例將輸入的三個(gè)數(shù)按照從小到大的順序輸出。例#include<stdio.h>void

main(){floata,b,c,t;scanf("%f%f%f",&a,&b,&c);if(a>b){t=a;a=b;b=t;} /*得到a、b之間的較小值,存入a*/if(a>c){t=a;a=c;c=t;}if(b>c){t=b;b=c;c=t;}printf("%5.2f,%5.2f,%5.2f\n",a,b,c);}4.4.3單分支選擇應(yīng)用舉例將輸入4.4.4大括號(hào)與if語句if結(jié)構(gòu)后的花括號(hào)并非必須,if結(jié)構(gòu)后的花括號(hào)實(shí)際上是個(gè)“塊語句”,如果沒有花括號(hào),則此時(shí)默認(rèn)的“塊語句”只包含緊跟在if后的一條語句,試比較:if(表達(dá)式){語句1;語句2;語句3;}if(表達(dá)式)語句1;語句2;語句3;4.4.4大括號(hào)與if語句if結(jié)構(gòu)4.4.5if語句——之雙分支選擇結(jié)構(gòu)if(表達(dá)式)語句1else語句2一般形式:說明:當(dāng)表達(dá)式的值為非0時(shí),執(zhí)行語句1,否則執(zhí)行語句2。

4.4.5if語句——之雙分支選擇4.4.6雙分支選擇應(yīng)用舉例顯示從終端輸入的兩個(gè)整數(shù)中絕對(duì)值較大的一個(gè)。例#include<stdio.h>void

main(){intx1,y1,x2,y2;scanf("%d,%d",&x1,&y1);if(x1<0)x2=-x1;elsex2=x1;if(y1<0)y2=-y1;elsey2=y1;printf("%d\n",(x2>y2?x1:y1));}運(yùn)行情況:-23,34↙34

條件表達(dá)式不能取代一般的if語句,只有在if語句中內(nèi)嵌的語句為表達(dá)式語句時(shí)才能代替if語句。注意x2=x1<0?-x1:x1;4.4.6雙分支選擇應(yīng)用舉例顯示從4.4.7if語句——之多分支選擇結(jié)構(gòu)if(表達(dá)式1)語句1elseif(表達(dá)式2)語句2elseif(表達(dá)式3)語句3

……elseif(表達(dá)式n)語句nelse語句n+1一般形式:說明:各個(gè)表達(dá)式按順序求值,如果某個(gè)表達(dá)式的值為非0,則執(zhí)行與其相關(guān)的那條語句,并由此結(jié)束整個(gè)if語句。4.4.7if語句——之多分支選擇4.4.8多分支選擇結(jié)構(gòu)4.4.8多分支選擇結(jié)構(gòu)4.4.9多分支選擇應(yīng)用舉例判斷輸入的字符是數(shù)字、大寫字母、小寫字母或其他字符。例#include<stdio.h>voidmain(){charc;printf("Enteracharacter:");c=getchar();if(c>='0'&&c<='9')printf("Digit!\n");elseif(c>='A'&&c<='Z')printf("Uppercase!\n");elseif(c>='a'&&c<='z')printf("Lowercase!\n");elseprintf("Othercharater!\n");}4.4.9多分支選擇應(yīng)用舉例判斷輸4.4.10if語句的嵌套在if語句中又包含一個(gè)或多個(gè)if語句稱為if語句的嵌套。格式1格式2if()if()語句1else語句2elseif()語句3else語句4if(){if()語句1}elseif()語句2else語句3注意if與else

的配對(duì)關(guān)系。4.4.10if語句的嵌套4.4.11switch語句switch(表達(dá)式){case常量表達(dá)式1:語句1case常量表達(dá)式2:語句2

……

case常量表達(dá)式n:語句ndefault:語句n+1}一般形式:4.4.11switch語句s4.4.12Switch語句說明:

switch語句中的“表達(dá)式”和case后面的“常量表達(dá)式”的結(jié)果值的類型應(yīng)該一致。其類型可以是除實(shí)型以外的任何類型(如整型、字符型、枚舉類型)。每一個(gè)case后的常量表達(dá)式的值必須互不相同。執(zhí)行完一個(gè)case后面的語句后,流程控制到下一個(gè)case繼續(xù)執(zhí)行。因此,多個(gè)case可共用一組語句。如:

switch(c){case‘A’:case‘B’:語句;

………;}4.4.12Switch語句說4.4.13break語句一般形式:功能:終止switch語句的執(zhí)行。為了執(zhí)行完某個(gè)分支后跳出switch結(jié)構(gòu),應(yīng)在其后加上break語句。例如,前例中的邏輯錯(cuò)誤可修改如下:switch(e<0){ case1:printf(“e<0”);break; case0:printf(“e>=0”);}

break;4.4.13break語句一般形4.4.14switch語句break語句練習(xí)運(yùn)輸公司對(duì)用戶計(jì)算運(yùn)費(fèi)。路程(s)越遠(yuǎn),每公里運(yùn)費(fèi)越低。標(biāo)準(zhǔn)如下:s<250km 沒有折扣250≤s<500 2%折扣500≤s<1000 5%折扣1000≤s<20008%折扣2000≤s<300010%折扣3000≤s15%折扣設(shè)每公里每噸貨物的基本運(yùn)費(fèi)為p,貨物重為w,距離為s,折扣為d,則總運(yùn)費(fèi)f的計(jì)算公式為: f=p*w*s*(1-d)4.4.14switch語句bre4.4.15分支語句嵌套當(dāng)if(或ifelse)結(jié)構(gòu)中的執(zhí)行語句又是if(或ifelse)結(jié)構(gòu)時(shí),稱為分支語句嵌套。分支語句嵌套的樣式有萬千種,不可能一一列舉,舉個(gè)簡(jiǎn)單例子來看:if(表達(dá)式1)if(表達(dá)式2){代碼段1}else{代碼段2}上述代碼的是在if結(jié)構(gòu)內(nèi)嵌套了ifelse結(jié)構(gòu),首先計(jì)算表達(dá)式1的值,如果其值為假(0),直接跳出該結(jié)構(gòu),代碼段1和代碼段2都不會(huì)被執(zhí)行,如果其值為真(非0),則執(zhí)行內(nèi)部的ifelse結(jié)構(gòu),計(jì)算表達(dá)式2的值,如果其值為真,執(zhí)行代碼段1,否則,執(zhí)行代碼段2。4.4.15分支語句嵌套當(dāng)if(或4.4.16分支語句嵌套31解一元二次方程ax2+bx+c=0。例分析一元二次方程的解的情況有下列幾種可能:a=0,不是二次方程;b2-4ac=0,有兩個(gè)相等實(shí)根:b2-4ac>0,有兩個(gè)不等實(shí)根:

b2-4ac<0,有兩個(gè)共軛虛根。4.4.16分支語句嵌套31解一元4.4.17分支語句嵌套a=0?輸出“非二次方程”b2-4ac=0?輸出兩個(gè)相等實(shí)根:ab2-b2-4ac>0?復(fù)根的實(shí)部p和虛部q:輸出兩個(gè)虛根:p+qi,p-qi輸出兩個(gè)實(shí)根:x1,x2aacbbx2422---=aacbbx2412-+-=abp2-=aacbq2)4(2--=真真真假假假4.4.17分支語句嵌套a=04.4.18-Switch開關(guān)語句用多分支if結(jié)構(gòu)和if結(jié)構(gòu)嵌套都可實(shí)現(xiàn)“多選1”,但帶來的負(fù)面影響是程序的可讀性,面對(duì)一大推的if和ifelse攪和在一起,很多讀代碼的人都會(huì)覺得頭皮發(fā)麻,要耐心地去“脫殼”,實(shí)際上,C語言還提供了另一種更簡(jiǎn)潔的多分支結(jié)構(gòu),即switch結(jié)構(gòu)。4.4.18-Switch開關(guān)語句4.4.19-break的怪事把代碼中的break都刪除或注釋掉后,編譯鏈接并不會(huì)出錯(cuò),只是執(zhí)行時(shí),結(jié)果不太一樣。我們親自動(dòng)手實(shí)踐一下。這就是說,如果不使用break語句,那么從與表達(dá)式的值匹配的那個(gè)case語句開始后的所有代碼段都會(huì)被執(zhí)行,每個(gè)case語句相當(dāng)于入口、開關(guān)或者說是進(jìn)入的鑰匙,這便是開關(guān)語句這個(gè)名稱的由來。4.4.19-break的怪事把代4.4.20-Switch開關(guān)語句用多分支if結(jié)構(gòu)和if結(jié)構(gòu)嵌套都可實(shí)現(xiàn)“多選1”,但帶來的負(fù)面影響是程序的可讀性,面對(duì)一大推的if和ifelse攪和在一起,很多讀代碼的人都會(huì)覺得頭皮發(fā)麻,要耐心地去“脫殼”,實(shí)際上,C語言還提供了另一種更簡(jiǎn)潔的多分支結(jié)構(gòu),即switch結(jié)構(gòu)。4.4.20-Switch開關(guān)語句4.4.21-Switch語句說明:

switch語句中的“表達(dá)式”和case后面的“常量表達(dá)式”的結(jié)果值的類型應(yīng)該一致。其類型可以是除實(shí)型以外的任何類型(如整型、字符型、枚舉類型)。每一個(gè)case后的常量表達(dá)式的值必須互不相同。執(zhí)行完一個(gè)case后面的語句后,流程控制到下一個(gè)case繼續(xù)執(zhí)行。因此,多個(gè)case可共用一組語句。如:

switch(c){case‘A’:case‘B’:語句;

………;}switch語句中可以不含default分支;default分支并不限定在最后,幾個(gè)case分支也沒有順序區(qū)別,但必須做適當(dāng)處理,否則會(huì)影響執(zhí)行結(jié)果。4.4.21-Switch語句說明4.4.22default語句當(dāng)所有case常量表達(dá)式與switch后表達(dá)式的值都不匹配時(shí),default語句被執(zhí)行,實(shí)際上,default語句也不是必須的,當(dāng)default語句省略時(shí),表示“缺省情況下什么也不做”。某些編譯器可能會(huì)對(duì)default語句的缺失給出警告,從防錯(cuò)意義上說,即使什么也不做,最好也把default語句寫上,采用下述形式:default:;/*(空語句。不要忘記分號(hào))*/default語句并不一定放在switch結(jié)構(gòu)的最后,default語句和各個(gè)case語句的順序完全可互換而不影響結(jié)果,當(dāng)default語句不在switch結(jié)構(gòu)的最后時(shí),不要忘記使用break。4.4.22default語4.4.23if與Switch語句進(jìn)行比較switch結(jié)構(gòu)只進(jìn)行相等與否的判斷,而if…else…結(jié)構(gòu)還可以進(jìn)行大于小于等范圍上的判斷。此外,switch無法處理浮點(diǎn)數(shù),只進(jìn)行整數(shù)的判斷,而且,case標(biāo)簽值必須是常量,如果涉及到浮點(diǎn)數(shù)和變量的判斷,應(yīng)當(dāng)使用if…else…結(jié)構(gòu)。應(yīng)當(dāng)從可讀性和程序效率多方面綜合考慮,適當(dāng)搭配兩種結(jié)構(gòu),方能寫出高質(zhì)量的代碼。4.4.23if與Switch語4.5一遍又一遍——循環(huán)結(jié)構(gòu)所謂“循環(huán)”,就是對(duì)某塊代碼段重復(fù)多次地執(zhí)行,循環(huán)結(jié)構(gòu)是C語言程序書寫中常用的一種重要控制結(jié)構(gòu),C語言提供了3種循環(huán)結(jié)構(gòu),分別是while結(jié)構(gòu)、dowhile結(jié)構(gòu)和for結(jié)構(gòu).循環(huán)結(jié)構(gòu)有兩大要素:循環(huán)條件和循環(huán)體,當(dāng)滿足某個(gè)條件時(shí),重復(fù)執(zhí)行某些動(dòng)作,直到該條件不再滿足,這個(gè)表述很好地體現(xiàn)了循環(huán)條件和循環(huán)體的關(guān)系。構(gòu)造循環(huán)時(shí),首先要明白要做什么,即“循環(huán)體是什么”,這是和程序的目的相關(guān)的,知道要干什么了還不夠,還要明白什么時(shí)候開始做,什么時(shí)候停,如果沒有合理設(shè)定循環(huán)條件,很容易造成程序死循環(huán),甚至是資源耗盡導(dǎo)致電腦死機(jī)4.5一遍又一遍——循環(huán)結(jié)構(gòu)所謂“4.5.1循環(huán)結(jié)構(gòu)劃分不成立成立當(dāng)型循環(huán)直到型循環(huán)4.5.1循環(huán)結(jié)構(gòu)劃分不成立成立當(dāng)4.5.2循環(huán)語句簡(jiǎn)介C語言中的三種循環(huán)語句:while語句(當(dāng)型)do-while語句(直到型)for語句(當(dāng)型)循環(huán)體中的輔助控制語句:break語句continue語句goto語句4.5.2循環(huán)語句簡(jiǎn)介C語言中的三4.5.3while語句——“當(dāng)型”循環(huán)結(jié)構(gòu)

while(表達(dá)式)語句42一般形式:說明:

“表達(dá)式”為循環(huán)條件;

“語句”為循環(huán)體。特點(diǎn):

先判斷表達(dá)式,后執(zhí)行語句。表達(dá)式語句(循環(huán)體)=0≠04.5.3while語句——“當(dāng)4.5.4While語句while語句中的“表達(dá)式”(即循環(huán)條件)可以是任意的表達(dá)式,但一般為關(guān)系表達(dá)式或邏輯表達(dá)式。循環(huán)體如果包含一個(gè)以上的語句,應(yīng)該用花括弧括起來,以復(fù)合語句形式出現(xiàn)。在循環(huán)體中應(yīng)有使循環(huán)趨向于結(jié)束的語句,以免形成死(無限)循環(huán)。允許循環(huán)體以空語句形式出現(xiàn)。4.5.4While語句whil4.5.5while語句代碼塊while結(jié)構(gòu)和dowhile結(jié)構(gòu)中的循環(huán)體是“塊語句”,要么是單條語句,要么是用花括號(hào)包裹起來的多條語句,這if結(jié)構(gòu)中的情況有些類似。從字面上看,dowhile結(jié)構(gòu)中,do和while似乎已經(jīng)把循環(huán)限定住了,再加花括號(hào)似乎顯得多余,但C語言的規(guī)則規(guī)定此處必須是“塊語句”,如果是多條語句,卻沒有用花括號(hào)包裹起來,編譯器會(huì)提示出錯(cuò)。如果因?yàn)椴恍⌒模趙hile結(jié)構(gòu)的“while(表達(dá)式)”后敲上了一個(gè)分號(hào),將會(huì)造成死循環(huán),也就是說,表達(dá)式的值得不到修改,程序一直重復(fù)、停留在該循環(huán)處不會(huì)跳出,此時(shí):while(表達(dá)式); /*此處誤敲了一個(gè)分號(hào)*/{…… /*循環(huán)體*/}4.5.5while語句代碼塊w4.5.6while語句應(yīng)用舉例求2n。例#include<stdio.h>void

main(){inti=1,n;longintp=1;scanf("%d",&n);while(i<=n){p*=2;i++;}printf("%ld\n",p);}i=1,p=1

輸出p輸入n當(dāng)i<=npp*2ii+1==4.5.6while語句應(yīng)用舉例4.5.7do-while語句“直到型”循環(huán)結(jié)構(gòu)do語句while(表達(dá)式);一般形式:特點(diǎn):

先執(zhí)行一次指定的循環(huán)內(nèi)嵌語句,然后判斷條件表達(dá)式,非0時(shí),循環(huán);為0時(shí),退出循環(huán)。4.5.7do-while語句“直4.5.847do-while語句應(yīng)用舉例將鍵盤輸入字符中所有大寫字母轉(zhuǎn)換為小寫字母,其他字符不變。例#include<stdio.h>voidmain(){charc;do{c=getchar();if(c>='A'&&c<='Z‘)c+=32;putchar(c);}while(c!='\n');}4.5.847do-while語4.5.9for語句——“當(dāng)型”循環(huán)結(jié)構(gòu)for(表達(dá)式1;表達(dá)式2;表達(dá)式3)語句一般形式:說明:

表達(dá)式1:循環(huán)變量賦初始值表達(dá)式2:循環(huán)條件

表達(dá)式3:循環(huán)變量增值

語句:循環(huán)體表達(dá)式1表達(dá)式2=0語句表達(dá)式3≠04.5.9for語句——“當(dāng)型4.5.10for語句說明與案例表達(dá)式1、表達(dá)式2、表達(dá)式3、語句都可以為空,但不能省略“;”。若省去表達(dá)式2,則為無限循環(huán);若省去表達(dá)式1、表達(dá)式3,即僅有條件判斷,則完全等同于while語句。表達(dá)式1、表達(dá)式3可以是逗號(hào)表達(dá)式。#include<stdio.h>void

main(){ ints=0,n; for(n=1;n<=100;n+=2)s+=n*(n+1); printf(“s=%d”,s);}求100以內(nèi)所有相鄰奇偶數(shù)之積的和。4.5.10for語句說明與案4.5.11三種循環(huán)的比較三種循環(huán)都可以用來處理同一問題,一般情況下它們可以互相代替。用while和do-while循環(huán)時(shí),循環(huán)變量初始化的操作應(yīng)在while和do-while語句前完成;for語句可以在表達(dá)式1中完成。while和do-while循環(huán)只在while后面指定循環(huán)條件,且在循環(huán)體中應(yīng)包含使循環(huán)趨于結(jié)束的語句;for循環(huán)可以在表達(dá)式3中包含使循環(huán)趨于結(jié)束的操作,甚至可以將循環(huán)體中的操作全部放到表達(dá)式3中,功能更強(qiáng)。while和for循環(huán)先判斷表達(dá)式,后執(zhí)行語句;do-while循環(huán)先執(zhí)行語句后判斷表達(dá)式4.5.11三種循環(huán)的比較三種循4.5.12表達(dá)式的省略for循環(huán)結(jié)構(gòu)中的初始化表達(dá)式,判斷表達(dá)式和修正表達(dá)式都是可選項(xiàng),也就是說,可以省略,但每個(gè)表達(dá)式后的分號(hào)不能省略,最極端的情況是:3個(gè)表達(dá)式都省略,形式如下:for(;;) /*兩個(gè)分號(hào)不能省略*/{…… /*循環(huán)體*/}這相當(dāng)于;while(1){…… /*循環(huán)體*/}4.5.12表達(dá)式的省略for循環(huán)4.5.13循環(huán)的嵌套定義:一個(gè)循環(huán)體中又包含一個(gè)完整的循環(huán)結(jié)構(gòu),稱為循環(huán)的嵌套。說明:while循環(huán)、do-while循環(huán)和for循環(huán)都可以進(jìn)行嵌套,而且可以相互嵌套。

4.5.13循環(huán)的嵌套定義:4.5.14幾種合法的嵌套結(jié)構(gòu)53while(){…while(){…}}do{

…do{…}while();}while();for(;;){

…for(;;){…}}while(){…do{…}while();

…}for(;;){…while(){…}…}do{…for(;;){…}

…}while();4.5.14幾種合法的嵌套結(jié)構(gòu)534.5.15循環(huán)嵌套時(shí)注意要保證嵌套的每一層循環(huán)在邏輯上都是完整的,避免嵌套交叉使用。要保證循環(huán)到最后有一個(gè)跳出循環(huán)的條件,否則會(huì)產(chǎn)生死(無限)循環(huán)(嵌套循環(huán)中檢查死循環(huán)錯(cuò)誤,相對(duì)來說比較困難)。在編程時(shí),注意循環(huán)嵌套的書寫最好用階梯縮進(jìn)的形式,可使程序?qū)哟畏置鳌?.5.15循環(huán)嵌套時(shí)注意要保證嵌4.5.16循環(huán)嵌套案例輸出九九表。例#include<stdio.h>void

main(){inti,j;printf("\n");for(i=1;i<=9;i++)printf(“%4d",i);printf("\n----------------------------");for(i=1;i<=9;i++){printf("\n%4d",i);for(j=1;j<=i;j++)printf("%4d",i*j);}}123456789-------------------------------------112243369448121655101520256612182430367714212835424988162432404856649918273645546372814.5.16循環(huán)嵌套案例輸出九九表4.5.17break語句無條件轉(zhuǎn)移語句break;一般形式:功能:用在switch語句中使流程跳出switch結(jié)構(gòu),繼續(xù)執(zhí)行switch語句后面的語句。用在循環(huán)體內(nèi),迫使所在循環(huán)立即終止(跳出當(dāng)前循環(huán)體),繼續(xù)執(zhí)行循環(huán)體后面的第一條語句。說明:break語句不能用于循環(huán)語句和switch語句之外的任何其他語句。564.5.17break語句無條件轉(zhuǎn)4.5.18break案例57把數(shù)316分為兩個(gè)數(shù)之和,其中一個(gè)為13的倍數(shù),一個(gè)為11的倍數(shù)。例#include<stdio.h>void

main(){inti=0,j;for(;;i++){j=316-i*13)%11;if(!j)break;printf("13*%d+11*%d=316\n“,i,j);}4.5.18break案例57把數(shù)4.5.19continue語句無條件轉(zhuǎn)移語句continue;一般形式:功能:結(jié)束本次循環(huán)(跳過循環(huán)體中尚未執(zhí)行的語句),接著進(jìn)行是否執(zhí)行下一次循環(huán)的判定。4.5.19continue語句無4.5.20continue和break的區(qū)別continue只結(jié)束本次循環(huán),而非終止整個(gè)循環(huán)。break則是結(jié)束所在循環(huán),不再進(jìn)行條件判斷。continue增加循環(huán)入口,break增加循環(huán)或switch語句的出口。

do{……do{……if(e1)continue;if(e1)break;…………}while(e2);}while(e2);594.5.20continue和br4.5.21continue語句應(yīng)用舉例輸出100~200之間所有不能被3整除的數(shù)。例

分析:i從100~200,如果不能被3整除則i自加,繼續(xù)循環(huán),直到i>200為止。

#include<stdio.h>void

main(){intn,count=0;for(n=100;n<=200;n++){if(n%3==0)continue;printf("%6d",n);count++;if(count%10==0)printf("\n");}}4.5.21continue語句應(yīng)4.5.22goto語句無條件轉(zhuǎn)移語句goto語句標(biāo)號(hào);一般形式:說明:“語句標(biāo)號(hào)”必須是合法的標(biāo)識(shí)符。不能用整數(shù)作標(biāo)號(hào)。用途:與if語句一起構(gòu)成循環(huán)結(jié)構(gòu);從多層循環(huán)體的內(nèi)層循環(huán)跳到外層循環(huán)。注意:結(jié)構(gòu)化程序設(shè)計(jì)方法主張限制使用goto語句,濫用該語句將使程序流程無規(guī)律、可讀性差。614.5.22goto語句無條件轉(zhuǎn)移4.5.23goto語句應(yīng)用舉例用if和goto語句構(gòu)成循環(huán),求。例#include<stdio.h>void

main(){inti=1,sum=0;loop:if(i<=100){sum=sum+i; i++; gotoloop;}printf("Sum=%d",sum);}4.5.23goto語句應(yīng)用舉例用4.5.24小案例實(shí)踐63窮舉法通過循環(huán)對(duì)問題的所有可能狀態(tài)一一測(cè)試,直到找到解或?qū)⑷靠赡軤顟B(tài)都測(cè)試過為止。求100~150之間的全部素?cái)?shù)。例#include<stdio.h>#include<math.h>main(){intn,i,k;for(n=101;n<150;n=n+2){k=sqrt(n);for(i=3;i<=k;i=i+2)if(n%i==0)break;if(i>k)printf("%d",n);}}4.5.24小案例實(shí)踐63窮舉法

死循環(huán)

可以無限嵌套嗎C語言如此靈活,是不是每種都要掌握呢死循環(huán)例如等待的時(shí)候,用得著為了高薪,就必須面對(duì)世界五百強(qiáng)的面試,筆試,你應(yīng)該每種都掌握C語言理論上可以無限嵌套4.6初學(xué)者答疑死循環(huán)可以無限嵌套嗎C語言如4.6.1算法講解-數(shù)據(jù)分離數(shù)據(jù)的分離例:求水仙花數(shù)(一個(gè)三位數(shù),其各位數(shù)字的立方和等于該數(shù)本身)分析:分離三位數(shù)的百位:a=s/100;分離三位數(shù)的十位:b=s/10%10;分離三位數(shù)的各位:c=s%10;if(s==a*a*a+b*b*b+c*c*c)輸出s的值程序如下:4.6.1算法講解-數(shù)據(jù)分離數(shù)據(jù)的4.6.1算法講解-數(shù)據(jù)分離main(){ints,a,b,c;for(s=100;s<=999;s++){a=s/100;(百位)

b=

溫馨提示

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