C语言循环语句工程用法
-循环语句分析
循环语句的基本工作方式
- 通过条件表达式判断是否执行循环体
- 条件表达式循环if语句表达式的原则
do、while、for的区别
- do语句先执行后判断,循环体至少循环一次
- while语句先判断后执行,循环体可能不执行
- for语句先判断后执行,相比while更简洁
三者在使用上的区别:
1 #include <stdio.h> 2 3 int f1(int n) 4 { 5 int ret = 0; 6 7 if( n > 0 ) 8 { 9 do 10 { 11 ret += n; 12 n--; 13 } 14 while( n > 0 ); 15 } 16 17 return ret; 18 } 19 20 int f2(int n) 21 { 22 int ret = 0; 23 24 while( n > 0 ) 25 { 26 ret += n; 27 n--; 28 } 29 30 return ret; 31 } 32 33 int f3(int n) 34 { 35 int ret = 0; 36 int i = 0; 37 38 for(i=1; i<=n; i++) 39 { 40 ret += i; 41 } 42 43 return ret; 44 } 45 46 int main() 47 { 48 printf("%d\n", f1(100)); 49 printf("%d\n", f2(100)); 50 printf("%d\n", f3(100)); 51 52 return 0; 53 }
-循环语句分析
break和continue的区别
- break表示终止循环的执行
- continue表示终止本次循环,进入下一次循环
思考:
switch能否用continue关键字?为什么?
答:不行,因为continue是用于循环的,而switch语句根本不是循环。
1 #include <stdio.h> 2 3 void f1(int n) 4 { 5 int i = 0; 6 7 for(i=1; i<=n; i++) 8 { 9 if( (i % 2) == 0 ) 10 { 11 break; 12 } 13 14 printf("%d ", i); 15 } 16 17 printf("\n"); 18 } 19 20 void f2(int n) 21 { 22 int i = 0; 23 24 for(i=1; i<=n; i++) 25 { 26 if( (i % 2) == 0 ) 27 { 28 continue; 29 } 30 31 printf("%d ", i); 32 } 33 34 printf("\n"); 35 } 36 37 int main() 38 { 39 f1(10); 40 f2(10); 41 42 return 0; 43 }
do和while 结合的妙用
实例三:下面的例子为了执行强制free();来防止内存泄漏。
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 }
小结:
for循环先进入循环再进入循环体
for循环适合于循环次数固定的场合
while循环先进行判断再进入循环体执行
while循环适合于循环次数不定的场合
do ... while 循环先执行循环体再进行条件判断
do ... while 循环体至少执行一次循环体