在 C 語言中,我們會經常遇到循環(huán)的情況,那么這時候我們就得用循環(huán)的語句了。常見的循環(huán)結構有三種:do循環(huán)、while 循環(huán)以及 for 循環(huán)。循環(huán)語句的基本工作方式有:a> 通過條件表達式判定是否執(zhí)行循環(huán)體;b> 條件表達式遵循 if 語句表達式的原則。
成都創(chuàng)新互聯(lián)公司專業(yè)為企業(yè)提供資中網站建設、資中做網站、資中網站設計、資中網站制作等企業(yè)網站建設、網頁設計與制作、資中企業(yè)網站模板建站服務,十年資中做網站經驗,不只是建網站,更提供有價值的思路和整體網絡服務。我們先來看看這三種循環(huán)有何區(qū)別:a> do 語句是先執(zhí)行后判斷,循環(huán)體至少執(zhí)行一次; b> while 語句是先判斷后執(zhí)行,循環(huán)體可能不執(zhí)行; c> for 語句是先判斷后執(zhí)行,相比于 while 更簡潔。
A、do ... while 語句的循環(huán)方式,結構如下:
B、 while 語句的循環(huán)方式,結構如下:
C、for 語句的循環(huán)方式,結構如下:
我們下來就做個累加和的示例代碼,看看三種循環(huán)的區(qū)別,代碼如下:
#includeint f1(int n) { int ret = 0; if( n > 0 ) { do { ret += n; n--; } while( n > 0 ); } return ret; } int f2(int n) { int ret = 0; while( n > 0 ) { ret += n; n--; } return ret; } int f3(int n) { int ret = 0; int i = 0; for(i=1; i<=n; i++) { ret += i; } return ret; } int main() { printf("f1 : %d\n", f1(10)); printf("f2 : %d\n", f2(10)); printf("f3 : %d\n", f3(10)); return 0; }
編譯運行后得到結果如圖所示:
我們看到程序正常運行,結果輸出跟我們預想的一樣。那么通過對比我們也可以看出三種循環(huán)語句的用法區(qū)別,如果就實現(xiàn)累加和的這種情況來看,顯然 for 循環(huán)更加有優(yōu)勢。
下來我們來分析下 break 和 continue 的區(qū)別。break 表示終止循環(huán)的執(zhí)行,continue 表示終止本次循環(huán),進入下次循環(huán)執(zhí)行。那么我們來思考下:switch 語句是否可以使用 continue 關鍵字?答案當然是不能的,因為 switch 語句不是循環(huán)語句,它只是選擇分支語句。
下來我們來看個例子,看這個示例代碼會輸出什么?
#includevoid f1(int n) { int i = 0; for(i=1; i<=n; i++) { if( (i % 2) == 0 ) { break; } printf("%d ", i); } printf("\n"); } void f2(int n) { int i = 0; for(i=1; i<=n; i++) { if( (i % 2) == 0 ) { continue; } printf("%d ", i); } printf("\n"); } int main() { f1(10); f2(10); return 0; }
我們先來分析下,f1(int n) 函數(shù)輸出一個 1 就終止循環(huán)了,因為是 break 跳出循環(huán)體本身了。f2(int n) 函數(shù)會打印出 1 3 5 7 9,換句話說,這個函數(shù)實現(xiàn)的功能是輸出奇數(shù)。因為如果被 2 能整除的話,就 跳過本次循環(huán)繼續(xù)下一次循環(huán)。 那么編譯運行后結果如下,證實了我們的分析是對的。
那么 do ... while 循環(huán)還有這種 while(0) 的這種玩法,我們來看下面這個示例代碼:
#include#include int func(int n) { int i = 0; int ret = 0; int* p = (int*)malloc(sizeof(int) * n); do { if( NULL == p ) break; if( n < 5 ) break; if( n > 100) break; for(i=0; i 為什么要使用 while(0) 的這種用法呢?在本例中是為了避免由于不釋放 p 指針而造成的內存泄漏。如果直接使用 return,那么會造成內存泄漏。我們來看看運行效果
那么如果 main 函數(shù)中輸入的是 2 呢?我們來看看效果
我們看到不管輸入的是幾,程序依然會執(zhí)行到 free(p) 那句,去釋放掉申請的內存。這樣就不會造成內存的泄漏問題了。關于循環(huán)語句的總結就是:1、for 循環(huán)是先進行判斷再進入循環(huán)體,并且它適合于循環(huán)次數(shù)固定的場合;2、while 循環(huán)是先進行判斷再進入循環(huán)體執(zhí)行,它適合于循環(huán)次數(shù)不定的場合;3、do ... while 循環(huán)是先執(zhí)行循環(huán)體再進行條件判斷,它至少執(zhí)行一次循環(huán)體。后面我們會繼續(xù)對 C 語言的學習。
歡迎大家一起來學習 C 語言,可以加我QQ:243343083。
另外有需要云服務器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。
本文題目:C值循環(huán)語句(七)-創(chuàng)新互聯(lián)
URL標題:http://weahome.cn/article/dsheds.html