C語言進階——循環語句07
阿新 • • 發佈:2018-06-23
tin 主題 sizeof -- 初始化 cas 通過 程序 erro
循環語句的基本工作方式:
- 通過條件表達式判定是否執行循環體
- 條件表達式遵循if語句表達式的原則
do,while,for的區別:
- do語句先執行後判斷,循環體至少執行一次
- while語句先判斷後執行,循環體可能不執行
- for語句先判斷後執行,相比while更簡潔
do.....while語句的循環方式:
do { //loop } while(condition)
while 語句的循環方式:
while(condition) { //loop }
for語句的循環方式:
for(初始化;condition;對條件值的改變) { //loop }
程序示例1:
#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("%d\n", f1(100)); printf("%d\n", f2(100)); printf("%d\n", f3(100)); return 0; }
這段代碼很簡潔,可以自己稍微看一下,就當作復習
break 和 continue 的區別:
- break表示終止整個循環的執行
- continue表示終止本次循環進入下一次循環
在循環中可以使用continue 和 break兩種語句,聯想到switch,裏面的每一種case後面都要有一個break語句,那麽我們可以在裏面使用continue 語句嗎?答案是不可以,編譯會報錯。
程序示例2:
#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; }
這段代碼也很簡潔,可以看看權當作復習一下
程序示例3:
1 #include <stdio.h> 2 #include <malloc.h> 3 4 int func(int n) 5 { 6 int i = 0; 7 int ret = 0; 8 int* p = (int*)malloc(sizeof(int) * n); 9 10 do 11 { 12 if( NULL == p ) break; 13 14 if( n < 5 ) break; 15 16 if( n > 100) break; 17 18 for(i=0; i<n; i++) 19 { 20 p[i] = i; 21 printf("%d\n", p[i]); 22 } 23 24 ret = 1; 25 }while( 0 ); 26 27 printf("free(p)\n"); 28 29 free(p); 30 31 return ret; 32 } 33 34 int main() 35 { 36 if( func(10) ) 37 { 38 printf("OK\n"); 39 } 40 else 41 { 42 printf("ERROR\n"); 43 } 44 45 return 0; 46 }
通過29行代碼我向擴展一下,可以free一個空指針。另外 野指針 ,空指針是由區別的,對於這個概念我會再寫一個博客進行補充,畢竟和這一篇博客的主題不符,嘻嘻。
小結:
- for循環先進行判斷後在進入循環體
- for循環適合於循環次數固定的場合
- while循環先進行判斷在進入循環體執行
- while循環適用於循環次數不定的場合
- do....while循環先執行循環體然後進行條件判斷
- do.....while循環至少進行一次循環體
C語言進階——循環語句07