高級程序語言設(shè)計循環(huán)結(jié)構(gòu)程序設(shè)計.ppt

上傳人:max****ui 文檔編號:14538915 上傳時間:2020-07-23 格式:PPT 頁數(shù):38 大?。?28KB
收藏 版權(quán)申訴 舉報 下載
高級程序語言設(shè)計循環(huán)結(jié)構(gòu)程序設(shè)計.ppt_第1頁
第1頁 / 共38頁
高級程序語言設(shè)計循環(huán)結(jié)構(gòu)程序設(shè)計.ppt_第2頁
第2頁 / 共38頁
高級程序語言設(shè)計循環(huán)結(jié)構(gòu)程序設(shè)計.ppt_第3頁
第3頁 / 共38頁

下載文檔到電腦,查找使用更方便

9.9 積分

下載資源

還剩頁未讀,繼續(xù)閱讀

資源描述:

《高級程序語言設(shè)計循環(huán)結(jié)構(gòu)程序設(shè)計.ppt》由會員分享,可在線閱讀,更多相關(guān)《高級程序語言設(shè)計循環(huán)結(jié)構(gòu)程序設(shè)計.ppt(38頁珍藏版)》請在裝配圖網(wǎng)上搜索。

1、第6章:循環(huán)結(jié)構(gòu)程序設(shè)計,學(xué)習(xí)的意義,許多實(shí)際問題中往往需要有規(guī)律地重復(fù)某些操作,如菜譜中可以有:“打雞蛋直到泡沫狀”這樣的步驟,也就是說,在雞蛋沒有打成泡沫狀時要反復(fù)地打。相應(yīng)的操作在計算機(jī)程序中就體現(xiàn)為某些語句的重復(fù)執(zhí)行,這就時所謂的循環(huán)。,下面來思考一個問題:如何編程來計算1 + 2 + 3 + + 100?,程序如下:int s = 0; s = s + 1; s = s + 2; s = s + 3; s = s + 100; printf (“s = %d”, s);,,重復(fù)100次,暈?。。?有沒有更好的方法來計算呢?,

2、有!就是用循環(huán)來編程。,While、do-while、for語句 循環(huán)嵌套 Break、continue、goto語句 exit()函數(shù) 循環(huán)結(jié)構(gòu)類型的選擇及轉(zhuǎn)換 循環(huán)結(jié)構(gòu)程序設(shè)計舉例 本章小結(jié),學(xué)習(xí)目標(biāo),理解循環(huán)結(jié)構(gòu)的含義; 掌握C語言三種循環(huán)結(jié)構(gòu)的特點(diǎn); 掌握while、do-while、for、goto、break、continue語句的使用方法; 掌握不同循環(huán)結(jié)構(gòu)的選擇及其轉(zhuǎn)換方法; 掌握混合控制結(jié)構(gòu)程序設(shè)計的方法。,學(xué)習(xí)內(nèi)容,6.1 循環(huán)結(jié)構(gòu)的程序設(shè)計,1. while語句,一般形式:,while (表達(dá)式) 循環(huán)體語句;,執(zhí)行流程:,其中: while后面的括號( )不能省。 w

3、hile后面的表達(dá)式可以是任意類型的表達(dá)式,但一般是條件表達(dá)式或邏輯表達(dá)式。 表達(dá)式的值是是循環(huán)的控制條件。 語句部分稱為循環(huán)體,當(dāng)需要執(zhí)行多條語句時,應(yīng)使用復(fù)合語句。,特點(diǎn):先判斷表達(dá)式,再執(zhí)行循環(huán)體,【例】 用while語句求1100的累計和。,#include void main ( ) int i = 1, sum = 0; while ( i <= 100 ) sum += i; i++; printf (sum = %dn, sum); ,,循環(huán)初值,,循環(huán)終值,,循環(huán)條件,,循環(huán)體,,循環(huán)變量增值,運(yùn)行結(jié)果: sum = 5050,【例】顯示110的平方,#i

4、nclude void main ( ) int i = 1; while ( i <= 10 ) printf (%d*%d=%dn, i, i, i*i); i++; ,運(yùn)行結(jié)果: 1*1=1 2*2=4 3*3=9 4*4=16 5*5=25 6*6=36 7*7=49 8*8=64 9*9=81 10*10=100,(1) 如果while后的表達(dá)式的值一開始就為假,循環(huán)體將一次也不執(zhí)行。 (2) 循環(huán)體中的語句可為任意類型的C語句。 (3) 遇到下列情況,退出while循環(huán): 表達(dá)式為假(為0)。 循環(huán)體內(nèi)遇到break、return或goto語句(b

5、reak和goto語句將在隨后介紹)。,while語句注意事項:,int a = 0, b = 0; while (a 0) //a 0為假,b++不可能執(zhí)行 b++;,int num = 0; //字符計數(shù) while ( 1 ) if (getche ( ) == n) //如果輸入的字符是回車符,則返回 return; num++; ,(4) 在執(zhí)行while語句之前,循環(huán)控制變量必須初始化,否則執(zhí)行的結(jié)果將是不可預(yù)知的。 (5) 要在while語句的某處(表達(dá)式或循環(huán)體內(nèi))改變循環(huán)控制變量,否則極易構(gòu)成死循環(huán)。 (6) 允許while語句的循環(huán)體又是while語句,從而形成

6、雙重循環(huán)。,while語句注意事項:,例:計算10! #include void main ( ) int i; // i應(yīng)賦初始值10 long s = 1; while (i = 1) s *= i--; printf (10! = %ldn, s); ,i = 1; while (i < 100) //死循環(huán),因?yàn)閕的值沒變化,永遠(yuǎn)小于100 sum += i; printf (sum = %dn, sum);,i = 1; while (i <= 9) j = 1; while (j <= 9) printf (%d * %d = %dn, i, j, i

7、 * j); j++; i++; ,【例】求兩個正整數(shù)的最大公因子。 我們采用Euclid(歐幾里德)算法來求最大公因子,其算法是: (1) 輸入兩個正整數(shù)m和n。 (2) 用m除以n,余數(shù)為r,如果r等于0,則n是最大公因子,算法結(jié)束,否則(3)。 (3) 把n賦給m,把r賦給n,轉(zhuǎn)(2)。,#include void main ( ) int m, n, r; printf (Please input two positive integer: ); scanf (%d%d, ,運(yùn)行結(jié)果: Please input two positive integer: 24 56 Th

8、eir greatest common divisor is 8,,2. do_while語句,一般形式:,do 循環(huán)體語句; while(表達(dá)式);,執(zhí)行流程:,其中: while后面的括號( )不能省。 while最后面的分號;不能省。 while后面的表達(dá)式可以是任意類型的表達(dá)式,但一般是條件表達(dá)式或邏輯表達(dá)式。 表達(dá)式的值是是循環(huán)的控制條件。 語句部分稱為循環(huán)體,當(dāng)需要執(zhí)行多條語句時,應(yīng)使用復(fù)合語句。,特點(diǎn):先執(zhí)行循環(huán)體,再判斷表達(dá)式,【例】 用do_while語句求1100的累計和。,#include void main ( ) int i = 1, sum = 0; do

9、 sum += i; i++; while ( i <= 100 ); printf (sum = %dn, sum); ,運(yùn)行結(jié)果: sum = 5050,,do_while語句注意事項:,int a = 0, b = 0; do b++; while (a 0) ;,(1) 如果do-while后的表達(dá)式的值一開始就為假,循環(huán)體還是要執(zhí)行一次。 (2)在if語句、while語句中,表達(dá)式后面都不能加分號,而在do-while語句的表達(dá)式后面則必須加分號,否則將產(chǎn)生語法錯誤。 (3) 循環(huán)體中的語句可為任意類型的C語句。 (4) 和while語句一樣,在使用do-while語句

10、時,不要忘記初始化循環(huán)控制變量,否則執(zhí)行的結(jié)果將是不可預(yù)知的。 (5) 要在do-while語句的某處(表達(dá)式或循環(huán)體內(nèi))改變循環(huán)控制變量的值,否則極易構(gòu)成死循環(huán)。 (6) do-while語句也可以組成多重循環(huán),而且也可以和while語句相互嵌套。,3. for語句,一般形式:,for (表達(dá)式1;表達(dá)式2;表達(dá)式3) 循環(huán)體語句;,執(zhí)行流程:,其中: for后面的括號( )不能省。 表達(dá)式1:一般為賦值表達(dá)式,給控制變量賦初值。 表達(dá)式2:關(guān)系表達(dá)式或邏輯表達(dá)式,循環(huán)控制條件。 表達(dá)式3:一般為賦值表達(dá)式,給控制變量增量或減量。 表達(dá)式之間用分號分隔。 語句部分稱為循環(huán)體,當(dāng)需要執(zhí)行

11、多條語句時,應(yīng)使用復(fù)合語句。,for語句很好地體現(xiàn)了正確表達(dá)循環(huán)結(jié)構(gòu)應(yīng)注意的三個問題: 控制變量的初始化。 循環(huán)的條件。 循環(huán)控制變量的更新。,【例】 用for語句求1100的累計和。,#include void main ( ) int i , sum = 0; for (i = 1; i <= 100; i++) sum += i; printf (sum = %dn, sum); ,運(yùn)行結(jié)果: sum = 5050,,for語句注意事項:,例:計算1*2+3*4+5*6++99*100。 int i, j; long sum = 0; for ( i =1, j = 2; i

12、<= 99; i = i + 2, j = j + 2 ) sum += i *j; printf (sum = %ldn, sum);,(1) 表達(dá)式1、表達(dá)式2、和表達(dá)式3可以是任何類型的表達(dá)式。比方說,這三個表達(dá)式都可以是逗號表達(dá)式,即每個表達(dá)式都可由多個表達(dá)式組成。,,,逗號表達(dá)式,逗號表達(dá)式,#include void main ( ) int i, sum = 0; i = 1; for ( ; i <= 100; i++) sum += i; printf(sum = %dn, sum); ,#include void main ( ) int i, sum = 0;

13、 i = 1; for ( ; i <= 100; ) sum += i++; printf(sum = %dn, sum); ,for語句注意事項:,省掉表達(dá)式1,3,,省掉表達(dá)式1,,(2) 表達(dá)式1、表達(dá)式2、和表達(dá)式3都是任選項,可以省掉其中的一個、兩個或全部,但其用于間隔的分號是一個也不能省的。,#include void main ( ) int i, sum = 0; i = 1; for ( ; ; ) if (i 100) break; sum += i++; printf(sum = %dn, sum); ,省掉表達(dá)式1,2,3,,for語句注意事

14、項:,for (a = 1; ; a++) printf (,(3) 表達(dá)式2如果為空則相當(dāng)于表達(dá)式2的值是真 。,死循環(huán)!,(4) 循環(huán)體中的語句可為任意類型的C語句。 (5) for語句也可以組成多重循環(huán),而且也可以和while語句和do-while語句相互嵌套。 (6) 循環(huán)體可以是空語句。,例:計算用戶輸入的字符數(shù)(當(dāng)輸入是回車符時統(tǒng)計結(jié)束)。 #include void main ( ) int n = 0; printf (input a string:n); for ( ; getchar( ) != n; n++) ; printf (%d,n); ,表示循環(huán)體為空語

15、句,并非表示for語句結(jié)束,三種循環(huán)可互相嵌套,層數(shù)不限 外層循環(huán)可包含兩個以上內(nèi)循環(huán),但不能相互交叉 嵌套循環(huán)的執(zhí)行流程,(1) while() while() ... ,(2) do do while( ); ... while( );,(3) while() do while( ); . ,嵌套循環(huán)的跳轉(zhuǎn) 禁止: 從外層跳入內(nèi)層 跳入同層的另一循環(huán) 向上跳轉(zhuǎn),4. 循環(huán)嵌套,【例】循環(huán)嵌套,輸出九九表,#include void main ( ) int i, j; for (i =

16、1; i < 10; i++) printf (%4d, i); printf (n---------------------------------------n); for (i = 1; i < 10; i++) for (j = 1; j < 10; j++) printf((j==9) ? %4dn : %4d, i * j); ,for(i=1;i<10;i++) for(j=1;j<10;j++) printf((j==9)?%4dn:%4d,i*j);,5. break與continue語句,break語句 功能:在循環(huán)語句和switch語句中,終止并跳出循環(huán)體或開關(guān)

17、體 說明: (1) break不能用于循環(huán)語句和switch語句之外的任何其它語句之中。 (2) break只能終止并跳出最近一層的結(jié)構(gòu)。,while (表達(dá)式1) if (表達(dá)式2) break; 語句,do if (表達(dá)式2) break; while (表達(dá)式1); 語句,for (; 表達(dá)式1; ) if (表達(dá)式2) break; 語句,【例】 將用戶輸入的小寫字母轉(zhuǎn)換成大寫字母,直到輸入非小寫字母字符。,#include void main ( ) char c; while ( 1 ) c = getchar ( ); //讀取一個字

18、符 if ( c = a //循環(huán)退出 ,運(yùn)行結(jié)果: howareyou HOWAREYOU,方法:通過設(shè)置一標(biāo)志變量tag,然后在每層循環(huán)后加上一條語句:if (tag) break; 其值為1表示跳出循環(huán)體,為0則不跳出。,for () while () if () break; while循環(huán)后的第一條語句 ,int tag = 0; for () while () if () tag = 1; break; if ( tag ) break; for循環(huán)后的第一條語句,多重循環(huán)中,break的使用,問:在嵌套循環(huán)的情況下,如何讓br

19、eak語句跳出最外層的的循環(huán)體?,,continue語句 功能:結(jié)束本次循環(huán),跳過循環(huán)體中尚未執(zhí)行的語句,進(jìn)行下一次是否執(zhí)行循環(huán)體的判斷。 說明: (1) 僅用于循環(huán)語句中。 (2) 在嵌套循環(huán)的情況下,continue語句只對包含它的最內(nèi)層的循環(huán)體語句起作用。,for () while () if () continue; while循環(huán)后的第一條語句 ,,【例】求輸入的十個整數(shù)中正數(shù)的個數(shù)及其平均值。,#include void main ( ) int i, a, num = 0; float sum = 0; for (i = 0; i < 10; i++)

20、 scanf (%d, ,運(yùn)行結(jié)果: 8 plus integers sum: 45 average value: 5.63,假設(shè)輸入的10個整數(shù)為: 2 3 4 5 6 7 8 9 10,5. goto語句,一般形式:,goto 語句標(biāo)號; 語句標(biāo)號: ,語句標(biāo)號: goto 語句標(biāo)號;,或,說明:,語句標(biāo)號是按標(biāo)識符規(guī)定書寫的符號,放在某一語句行的前面,標(biāo)號后加冒號(:)。語句標(biāo)號起標(biāo)識語句的作用,與goto 語句配合使用。,作用:,goto語句的作用是在不需要任何條件的情況下直接使程序跳轉(zhuǎn)到該語句標(biāo)號所標(biāo)識的語句去執(zhí)行。,goto語句的應(yīng)用:,例:求110

21、0的累計和 #include void main ( ) int i = 1, sum = 0; loop: sum += i++; if (i <= 100) //如果i小于或等于100 goto loop; //轉(zhuǎn)到標(biāo)號為loop的語句去執(zhí)行 printf (sum = %dn, sum); ,(1) goto語句可與條件語句配合使用來實(shí)現(xiàn)條件轉(zhuǎn)移,構(gòu)成循環(huán)。 (2) 在嵌套循環(huán)的情況下,利用goto語句可以直接從最內(nèi)層的循環(huán)體跳出最外層的循環(huán)體。,int tag = 0; for () while () if () goto stop; stop: for循環(huán)

22、后的第一條語句,,注意: 在結(jié)構(gòu)化程序設(shè)計中一般不主張使用goto語句,以免造成程序流程的混亂,使理解和調(diào)試程序都產(chǎn)生困難。,6. exit( )函數(shù),功能:,說明:,參數(shù)status為int型,status的值傳給調(diào)用進(jìn)程(一般為操作系統(tǒng))。按照慣例,當(dāng)status的值為0或?yàn)楹瓿A縀XIT_SUCCESS時,表示程序正常退出;當(dāng)status的值為非0或?yàn)楹瓿A縀XIT_FAILURE時,表示程序出現(xiàn)某種錯誤后退出。,終止整個程序的執(zhí)行,強(qiáng)制返回操作系統(tǒng)。,調(diào)用形式:,void exit( int status ); 頭文件 ,程序設(shè)計分析: 由數(shù)學(xué)知識可知,求三角形面積的公式是:

23、其中,a、b、c是三角形的三個邊長,s = (a + b + c) / 2。 因此,程序中應(yīng)該有三個float型變量用來存放a、b、c的值,為了方便起見,還應(yīng)有一個變量存放s,最后有必要設(shè)置一個變量來存放三角形的面積值。公式中存在求平方根的操作,這要用到C語言數(shù)學(xué)庫函數(shù)sqrt。sqrt函數(shù)帶有一個參數(shù),它的功能是返回參數(shù)的平方根。程序在開始接受用戶輸入的三角形的三個邊長后,首先要對這三邊作合法性檢查,如三邊中有某一邊長度小于或等于0,則終止程序的執(zhí)行,同樣如果s*(s-a)*(s-b)*(s-c)為負(fù),也要終止程序的執(zhí)行。,【例】 輸入三角形的邊長,求三角形面積。,,#include #in

24、clude #include void main ( ) float a, b, c; float s, area; printf (input the length of three edges of triangle: ); scanf (%f%f%f, ,s = (a + b + c) / 2; s = s * (s - a) * (s - b) * (s - c); if (s < 0) printf (the length of three edges of triangle is error!n); exit (-1); area = (float)sqrt (s); p

25、rintf (area = %.2fn, area); ,運(yùn)行結(jié)果: input the length of three edges of triangle: 3 4 5 area = 6.00 input the length of three edges of triangle: 3 -4 5 the length of three edges of triangle is error!,6.2 循環(huán)結(jié)構(gòu)類型的選擇及轉(zhuǎn)換,1. 循環(huán)結(jié)構(gòu)類型的選擇原則,如果循環(huán)次數(shù)在執(zhí)行循環(huán)體之前就已確定,一般用for循環(huán);如果循環(huán)次數(shù)是由循環(huán)體的執(zhí)行情況確定的,一般用while循環(huán)或者do-while循環(huán)

26、。 當(dāng)循環(huán)體至少執(zhí)行一次時,用do-while循環(huán),反之,如果循環(huán)體可能一次也不執(zhí)行,選用while循環(huán)。,2. 循環(huán)結(jié)構(gòu)類型之間的相互轉(zhuǎn)換,盡管上面對于循環(huán)結(jié)構(gòu)的選擇給出了原則性指導(dǎo)意見,但是我們應(yīng)注意到其實(shí)這三種循環(huán)結(jié)構(gòu)彼此之間可以相互轉(zhuǎn)換,象前面我們分別用while循環(huán)、do-while循環(huán)、for循環(huán)來求1100的累計和的例子就說明了這一點(diǎn)。,【例】求1100之間的所有素數(shù),,問題分析: 素數(shù)是指除了能被1和它本身整除外,不能被其它任何整數(shù)整除的數(shù)。例如,17就是一個素數(shù),除了1和17之外,它不能被216之間的任何整數(shù)整除。根據(jù)素數(shù)的這個定義,可得到判斷素數(shù)的方法: 把m作為被除數(shù)

27、,把i = 2 (m-1)依次作為除數(shù),判斷被除數(shù)m與除數(shù)i相除的結(jié)果,若都除不盡,即余數(shù)都不為0,則說明m是素數(shù),反之,只要有一次能除盡(余數(shù)為0),則說明m存在一個1和它本身以外的另一個因子,它不是素數(shù)。 事實(shí)上,根本用不著除那么多次,用數(shù)學(xué)的方法可以證明:只需用2 之間(取整數(shù))數(shù)去除m,即可得到正確的判定結(jié)果。,這一思路的算法如下: 從鍵盤輸入一正整數(shù)m。 計算k = i從2變化到k,依次檢查m % i是否為0。 若m % i為0,則判定m不是素數(shù),并終止對其余i值的檢驗(yàn);否則,令i = i + 1;并繼續(xù)對其余i值進(jìn)行檢驗(yàn),直到全部檢驗(yàn)完畢為止,這時判定m是素數(shù)。,,6.3 循環(huán)結(jié)

28、構(gòu)程序設(shè)計舉例,【例1】驗(yàn)證哥德巴赫猜想:任一充分大的偶數(shù),可以用兩個素數(shù)之和表示。例如:4 = 2 + 2,6 = 3 + 3,98 = 19 + 79,這一思路的算法如下: 讀入大于3的偶數(shù)n。 p = 1 do p = p + 1; q = n - p; p是素數(shù)嗎? q是素數(shù)嗎? while p、q有一個不是素數(shù)。 輸出n = p + q。,問題分析: 讀入一個偶數(shù)n,將它分成p和q,使n = p + q。怎樣分呢?可以令p從2開始,每次加1,而令q = n - p,如果p、q均為素數(shù),則正為所求,否則令p = p + 1再試。,,,,flagp = 1; for (j = 2; j

29、 <= (int)sqrt(p); j++) if (p除以j的余數(shù) = 0) flagp = 0; break; ,flagq = 1; for (j = 2; j <= (int)sqrt(q); j++) if (q除以j的余數(shù) = 0) flagq = 0; break; ,設(shè)置兩個標(biāo)志量flagp和flagq,0是素數(shù),1不是素數(shù) while (flagp * flagq == 0);,#include #include #include void main ( ) int i, n, p, q, flagp, flagq; printf (please input n: )

30、; scanf (%d, //程序結(jié)束 ,p = 1; do p++; q = n - p; flagp = 1; for (i = 2; i <= (int) sqrt(p); i++) if (p % i == 0) flagp = 0; break; flagq = 1; for (i = 2; i <= (int)sqrt (q); i++) if (q % i == 0) flagq = 0; break ; while (flagp * flagq == 0); printf (%d = %d + %dn, n, p, q); ,,,判斷p

31、是否為素數(shù),判斷q是否為素數(shù),運(yùn)行結(jié)果: please input n: 98 98 = 19 + 79 please input n: 9 input data error!,【例】利用下面的公式求的近似值,要求累加到最后一項小于10-6為止。,問題分析: 這是一個累加求和的問題,但這里的循環(huán)次數(shù)是預(yù)先未知的,而且累加項以正負(fù)交替的規(guī)律出現(xiàn),如何解決這類問題呢? 在本例中,累加項的構(gòu)成規(guī)律可用尋找累加項通式的方法得到,具體表示為t = s / n;即累加項由分子和分母兩部分組成,分子s按+1,-1,+1,-1,交替變化,可用賦值語句s = -s;實(shí)現(xiàn),s的初始值取為1,分母n按1,3,5

32、,7,變化,用n = n +2;語句實(shí)現(xiàn)即可,n的初始值取為1.0。,#include #include void main ( ) int s = 1; float n = 1.0, t = 1, pi = 0; while (fabs(t) = 1e-6) pi += t; n += 2; s = -s; t = s / n; pi *= 4; printf (pi = %.6fn, pi); ,運(yùn)行結(jié)果: pi = 3.141594,【例】打印大小可變的菱形圖案(下面菱形的大小是7)。, ,問題分析: 菱形的大小size其實(shí)就是中間行中*號的個數(shù),也

33、是整個菱形的行數(shù),其值必須是奇數(shù)。 問題的關(guān)鍵之一是如何確定每行中*號的個數(shù)。經(jīng)過分析得知:當(dāng)行數(shù)i(假設(shè)最上面的一行為第1行) (size+1)/2時,該行上的*號個數(shù)為n = 2*i-1,否則n = 2*( size-i+1)-1。 問題的關(guān)鍵之二是如何確定每行顯示的第一個*號的位置,也就是顯示第一個*號之前應(yīng)顯示多少個空格。經(jīng)過分析得知:每行應(yīng)顯示的空格數(shù)為m = (size - n) / 2個。,#include #include void main ( ) int i, j, k, m, n, size; printf (input size: ); //輸入大小提示 scan

34、f (“%d”, //程序結(jié)束 ,for (i = 1; i <= size; i++) //控制行數(shù) n = (i <= (size+1)/2) ? i : size-i+1; //每行中*號的個數(shù) n = 2 * n - 1; m = (size - n) / 2 + 15; //每行打印*之前應(yīng)打印的空格數(shù) for (k = 1; k <= m; k++) //打印每行前面的空格 printf ( ); for (j = 1; j <= n; j++) //打印每行的* printf (*); printf (n); //打印一行后,回車換行 ,

35、【例】計算用戶輸入的兩正整數(shù)之間的所有整數(shù)中0,1,2,,9數(shù)碼的個數(shù)。例如,101104之間總共包含四個整數(shù)101,102,103,104,其中0的個數(shù)為4,1的個數(shù)為5,2、3、4的個數(shù)都為1,其余數(shù)碼沒出現(xiàn)都為0。,問題分析: 問題的關(guān)鍵是要計算某整數(shù)中包含的各個數(shù)碼的個數(shù),必須對該整數(shù)進(jìn)行分解,求得所包含的各個數(shù)碼,其方法可以通過每次除以10取余數(shù)得到,然后再對商進(jìn)行同樣的處理,直到商為0時為止。對所得到的數(shù)碼進(jìn)行計數(shù),可采用switch語句來實(shí)現(xiàn)。,#include #include void main ( ) int num1, num2; int n, s, r; int

36、 count0 = 0, count1 = 0, count2 = 0, count3 = 0, count4 = 0; int count5 = 0, count6 = 0, count7 = 0, count8 = 0, count9 = 0; printf (input two integer: ); scanf (%d%d, ,for (n = num1; n <= num2; n++) s = n; do r = s % 10; switch ( r ) case 0: count0++; break; case 1: count1++; break;

37、 case 2: count2++; break; case 3: count3++; break; case 4: count4++; break; case 5: count5++; break; case 6: count6++; break; case 7: count7++; break; case 8: count8++; break; case 9: count9++; break; s = s / 10; while ( s != 0 ); //for,printf (0 -- %-4d 1 -- %-4d 2 -- %-4d 3 --

38、 %-4dn, count0, count1, count2, count3); printf (4 -- %-4d 5 -- %-4d 6 -- %-4d 7 -- %-4dn, count4, count5, count6, count7); printf (8 -- %-4d 9 -- %-4dn, count8, count9); ,運(yùn)行結(jié)果: input two integer: 1500 3000 0 403 1 900 2 1400 3 401 4 400 5 500 6 500 7 500 8 500 9 500,本章小結(jié),本章主要討論了循環(huán)結(jié)構(gòu)程序設(shè)計的有關(guān)方法,

39、重點(diǎn)介紹了與C語言三種循環(huán)控制結(jié)構(gòu)有關(guān)的while語句、do-while語句及for語句。 本章所涉及到的主要關(guān)鍵字有:while、do、for、goto、break、continue。 語言提供了三種循環(huán)語句。 for語句主要適用于循環(huán)次數(shù)確定的循環(huán)結(jié)構(gòu)。 循環(huán)次數(shù)及控制條件要在循環(huán)過程中才能確定的循環(huán)可用 while或do-while語句。 三種循環(huán)語句可以相互嵌套組成多重循環(huán),循環(huán)之間可以并列但不能交叉。 三種循環(huán)結(jié)構(gòu)可以相互轉(zhuǎn)換。 可用轉(zhuǎn)移語句把流程轉(zhuǎn)出循環(huán)體外,但不能從外面轉(zhuǎn)向循環(huán)體內(nèi)。 在循環(huán)程序中應(yīng)避免出現(xiàn)死循環(huán),即應(yīng)保證循環(huán)控制變量的值在運(yùn)行過程中可以得到修改,并使循環(huán)條件逐步變?yōu)榧?,從而結(jié)束循環(huán)。 break、continue和goto語句都可用于流程控制。其中,break語句用于退出switch或一層循環(huán)結(jié)構(gòu),continue語句用于結(jié)束本次循環(huán),繼續(xù)執(zhí)行下一次循環(huán),goto語句無條件轉(zhuǎn)移到標(biāo)號所標(biāo)識的語句處去執(zhí)行。當(dāng)程序需要退出多重循環(huán)時,用goto語句比用break語句更直接方便;當(dāng)需要結(jié)束程序運(yùn)行時,可以調(diào)用exit( )函數(shù)來實(shí)現(xiàn)。,習(xí)題:P167P173 1、2、3、4(1、3、4、6、8、12),

展開閱讀全文
溫馨提示:
1: 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
5. 裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

相關(guān)資源

更多
正為您匹配相似的精品文檔
關(guān)于我們 - 網(wǎng)站聲明 - 網(wǎng)站地圖 - 資源地圖 - 友情鏈接 - 網(wǎng)站客服 - 聯(lián)系我們

copyright@ 2023-2025  zhuangpeitu.com 裝配圖網(wǎng)版權(quán)所有   聯(lián)系電話:18123376007

備案號:ICP2024067431-1 川公網(wǎng)安備51140202000466號


本站為文檔C2C交易模式,即用戶上傳的文檔直接被用戶下載,本站只是中間服務(wù)平臺,本站所有文檔下載所得的收益歸上傳人(含作者)所有。裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對上載內(nèi)容本身不做任何修改或編輯。若文檔所含內(nèi)容侵犯了您的版權(quán)或隱私,請立即通知裝配圖網(wǎng),我們立即給予刪除!