第7课 - 循环语句
第7课 - 循环语句
1. 循环语句分析
(1)循环语句的基本工作方式
- 通过条件表达式判定是否执行循环体
- 条件表达式遵循 if 语句表达式的原则
(2)do、while、for的区别
- do 语句先执行后判断,循环体至少执行一次
- while 语句先判断后执行,循环体可能不被执行
- for 语句先判断后执行,相比while更简洁
2. 循环的回顾
【三种循环语句使用对比】
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)); // 5050 49 printf("%d\n", f2(100)); // 5050 50 printf("%d\n", f3(100)); // 5050 51 52 return 0; 53 }
3. break和continue的区别
(1)break表示终止循环的执行,跳出整个循环
(2)continue表示终止本次循环,进入下次循环
【break和continue的区别】
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); // 1 40 f2(10); // 1 3 5 7 9 41 42 return 0; 43 }
【do...while(0)和break的妙用】
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; // 注意这里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); // 在任何情况下,free(p)都会被执行,不会泄露内存 30 31 return ret; 32 } 33 34 int main() 35 { 36 if( func(4) ) 37 { 38 printf("OK\n"); 39 } 40 else 41 { 42 printf("ERROR\n"); 43 } 44 45 return 0; 46 }