日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

C值循环语句(七)

發布時間:2025/3/17 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C值循环语句(七) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

????????在 C 語言中,我們會經常遇到循環的情況,那么這時候我們就得用循環的語句了。常見的循環結構有三種:do循環、while 循環以及 for 循環。循環語句的基本工作方式有:a> 通過條件表達式判定是否執行循環體;b> 條件表達式遵循 if 語句表達式的原則。

????????我們先來看看這三種循環有何區別:a> do 語句是先執行后判斷,循環體至少執行一次; b> while 語句是先判斷后執行,循環體可能不執行; c> for 語句是先判斷后執行,相比于 while 更簡潔。

????????A、do ... while 語句的循環方式,結構如下:

????????B、 while 語句的循環方式,結構如下:

????????C、for 語句的循環方式,結構如下:

????????我們下來就做個累加和的示例代碼,看看三種循環的區別,代碼如下:

#include?<stdio.h>int?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; }

????????編譯運行后得到結果如圖所示:

????????我們看到程序正常運行,結果輸出跟我們預想的一樣。那么通過對比我們也可以看出三種循環語句的用法區別,如果就實現累加和的這種情況來看,顯然 for 循環更加有優勢。

????????下來我們來分析下 break continue 的區別。break 表示終止循環的執行,continue 表示終止本次循環,進入下次循環執行。那么我們來思考下:switch 語句是否可以使用 continue 關鍵字?答案當然是不能的,因為 switch 語句不是循環語句,它只是選擇分支語句。

????????下來我們來看個例子,看這個示例代碼會輸出什么?

#include?<stdio.h>void?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) 函數輸出一個 1 就終止循環了,因為是 break 跳出循環體本身了。f2(int n) 函數會打印出 1 3 5 7 9,換句話說,這個函數實現的功能是輸出奇數。因為如果被 2 能整除的話,就 跳過本次循環繼續下一次循環。 那么編譯運行后結果如下,證實了我們的分析是對的。

????????那么 do ... while 循環還有這種 while(0) 的這種玩法,我們來看下面這個示例代碼:

#include?<stdio.h> #include?<malloc.h>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<n;?i++){p[i]?=?i;printf("%d\n",?p[i]);}ret?=?1;}while(?0?);printf("free(p)\n");free(p);return?ret; }int?main() {if(?func(7)?){printf("OK\n");}else{printf("ERROR\n");}return?0; }

????????為什么要使用 while(0) 的這種用法呢?在本例中是為了避免由于不釋放 p 指針而造成的內存泄漏。如果直接使用 return,那么會造成內存泄漏。我們來看看運行效果

????????那么如果 main 函數中輸入的是 2 呢?我們來看看效果

????????我們看到不管輸入的是幾,程序依然會執行到 free(p) 那句,去釋放掉申請的內存。這樣就不會造成內存的泄漏問題了。關于循環語句的總結就是:1、for 循環是先進行判斷再進入循環體,并且它適合于循環次數固定的場合;2、while 循環是先進行判斷再進入循環體執行,它適合于循環次數不定的場合;3、do ... while 循環是先執行循環體再進行條件判斷,它至少執行一次循環體。后面我們會繼續對 C 語言的學習。


?????????歡迎大家一起來學習 C 語言,可以加我QQ:243343083

轉載于:https://blog.51cto.com/12810168/2095217

總結

以上是生活随笔為你收集整理的C值循环语句(七)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。