- C語言程序設計實例教程(第3版)
- 李紅 陸建友主編
- 2790字
- 2021-12-17 17:35:21
3.3 循環結構程序設計
學習目標
1)掌握循環結構的內涵。
2)掌握while循環語句的結構和應用。
3)掌握循環結構程序中break和continue語句的用法。
4)掌握for循環語句結構的內涵。
5)掌握for循環語句的結構和執行過程。
6)掌握do-while循環語句結構的內涵。
7)掌握do-while循環語句的結構和執行過程。
8)掌握循環結構程序中break和continue語句的用法。

實例15
實例15 while循環語句——求1+2+…+100的值
實例任務
用while語句求1+2+3+…+100的值。程序運行結果如圖3-14所示。

圖3-14 程序運行結果
程序代碼


相關知識
1.循環結構程序設計
循環結構是結構程序的3種基本結構之一,它和順序結構、選擇結構共同作為各種復雜程序的基本構造單元。循環結構的特點是:在給定條件成立時,反復執行某程序段,直到條件不成立為止。給定的條件稱為循環條件,反復執行的程序段稱為循環體。C語言的循環體語句有while語句、do-while語句、for語句。
2.while語句
while語句用于實現“當”型循環結構。其一般形式如下:

其執行過程是當表達式為非0值時,執行循環體。循環體內語句可以是空語句,可以是一條語句,可以是多條語句。如果為空語句或一條語句,可略去{}。
循環執行過程中,如果參與表達式判斷的變量值不能改變,則循環不會結束,稱為死循環。
課堂精練
1)統計從鍵盤輸入的一系列字符的個數。程序運行結果如圖3-15所示。

圖3-15 程序運行結果(1)
根據程序運行結果,請將下面的程序補充完整并調試。

2)求n!的值。程序運行結果如圖3-16所示。

圖3-16 程序運行結果(2)
根據程序運行結果,請將下面的程序補充完整并調試。


實例16
實例16 for循環語句——統計大寫字母和小寫字母的個數
實例任務
編寫一個程序,用于接收用戶輸入的10個字符,統計其中大寫字母和小寫字母的個數,并比較大寫字母與小寫字母的個數,顯示相應的消息。程序運行結果如圖3-17所示。

圖3-17 程序運行結果
程序代碼


相關知識
1.for語句
for語句是C語言中最靈活、功能最強的循環語句。它不僅可以用于循環次數已經確定的情況,而且可以用于循環次數不確定而只給出循環結束條件的情況。for語句完全可以代替while語句。for語句的一般形式為:

for語句的執行過程是:運行之初先求解表達式1,然后進行表達式2的條件判斷,如果條件成立,則執行循環體,如果條件不成立,則退出循環。在執行循環體后,再計算表達式3,之后轉去執行表達式2的條件判斷,如果成立,繼續執行循環體,否則退出循環。首次執行循環體后,按計算表達式3、判斷表達式2的順序循環執行,直到條件不成立為止,結束循環。
2.表達式說明
表達式1通常用來給循環變量賦初值,一般是賦值表達式。也可以在for語句外給循環變量賦初值,此時可以省略該表達式。表達式1在整個循環過程中只執行一次。
表達式2通常是循環條件,一般為關系表達式或邏輯表達式。
表達式3通常可以用來修改循環變量的值,一般是賦值語句。如果想省略表達式3,可以把相應語句放到循環體中完成。
這3個表達式都可以是逗號表達式,即每個表達式都可以由多個表達式組成。3個表達式都是任選項,都可以省略。但要注意,在省略表達式的同時,兩個分號必須保留,因為語句要求用兩個分號將3個表達式分開。如以下語句:


3.for語句中的逗號表達式
逗號運算符的主要應用就在for語句中。表達式1和表達式3常為逗號表達式,求解它們時可完成多個表達式(往往為賦值表達式、自增自減表達式)的一次求值。如下列表示方式:

從上面幾種表達方式可以看出,C語言中的for語句功能強大。可以把循環體和一些與循環控制無關的操作也作為表達式1或表達式3出現,這樣程序可以短小簡潔。但過分地利用這一特點會使for語句顯得雜亂,可讀性降低,建議不要把與循環控制無關的內容放到for語句中。
課堂精練
1)把100~200之間的整數中不能被3整除的數輸出,要求每行輸出5個,最后1行除外。程序運行結果如圖3-18所示。

圖3-18 程序運行結果(1)
根據程序運行結果,請將下面的程序補充完整并調試。


2)判斷一個整數是否為素數(素數是指只能被1和它本身整除的數)。判斷方法是看m能否被之間的整數整除,即如果m不能被
中的任何一個整數整除,則m是素數;只要m能被
中的某一個整數整除,則m為非素數。程序運行結果如圖3-19所示。

圖3-19 程序運行結果(2)
根據程序的運行結果,請將下面程序補充完整并調試。


實例17
實例17 do-while循環語句——求1+2+…+100和12+22+…+302的值
實例任務
用do-while語句求s1=1+2+3+…+100和s2=12+22+32+…+302的值。程序運行結果如圖3-20所示。

圖3-20 程序運行結果
程序代碼


相關知識
1.do-while語句
do-while語句的特點是先執行循環體,然后判斷循環條件是否成立。其一般形式為:

其執行過程是先執行一次指定的循環體語句,然后進行條件判斷,也就是先計算表達式的值,當表達式的值為非零(“真”)時,返回重新執行循環體語句。如此反復,直到表達式的值等于0為止,此時循環結束。
2.while語句和do-while語句的區別
while語句執行時,先進行條件判斷,條件成立的情況下才執行循環體。do-while語句是先執行一次循環體,再進行條件判斷,直到表達式不成立時終止循環。
3.break語句和continue語句
在switch語句中,可用break語句終止switch語句的執行以跳出該switch語句。同樣,在3種循環語句中可用break語句終止該循環語句的執行而跳出,它的一般形式是:

continue語句用于結束本次循環,即跳過循環體中在continue語句后面的尚未執行的其他語句,而執行下一次循環,它的一般形式是:

課堂精練
1)求s=1+2+3+…+100的值。程序運行結果如圖3-21所示。

圖3-21 程序運行結果(1)
根據程序運行結果,請將下面的程序補充完整并調試。

2)求s=1+1/2+1/4+…+1/50的值。程序運行結果如圖3-22所示。

圖3-22 程序運行結果(2)
根據程序運行結果,請將下面的程序補充完整并調試。


實例18
實例18 循環的嵌套結構——百錢買百雞問題
實例任務
中國古代數學家張丘建在他的《算經》中提出了著名的“百錢百雞問題”:雞翁一,值錢五;雞母一,值錢三;雞雛三,值錢一;百錢買百雞,翁、母、雛各幾何?編寫程序解決此問題,程序運行結果如圖3-23所示。

圖3-23 程序運行結果
程序代碼

相關知識
1.循環嵌套
在一個循環體內又完整地包含了另一個循環,稱為循環嵌套。前面介紹的3種類型的循環都可以互相嵌套,循環的嵌套可以是多層的,但每一層循環在邏輯上必須是完整的。在編寫程序時,循環嵌套的書寫要采用縮進的形式,如本實例程序中所示,內循環中的語句應該比外循環中的語句有規律地向右縮進2~4列,這樣編寫的程序層次分明,易于閱讀。
2.百錢買百雞問題解析
百錢買百雞是一道用C語言程序解決數學方程運算問題的典型試題,用到了程序中的典型方法——窮舉法。假設x、y、z分別為雞翁、雞母、雞雛的只數,依題意可得出聯立方程組如下:

3個未知數,只有兩個方程式,所以x、y、z可能有多組解,因此,可用“窮舉法”列舉x、y、z可能滿足要求的組合,最后把符合上述兩個方程的x、y、z的值輸出。
課堂精練
1)輸出一個空心菱形圖案,程序運行結果如圖3-24所示。
根據程序運行結果,請將下面的程序補充完整并調試。

圖3-24 程序運行結果(1)


2)輸出九九乘法表,程序運行結果如圖3-25所示。

圖3-25 程序運行結果(2)
根據程序運行結果,請將下面的程序補充完整并調試。

