C语言进阶——循环语句07
循环语句的基本工作方式:
- 通过条件表达式判定是否执行循环体
- 条件表达式遵循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一个空指针。另外 野指针 ,空指针是由区别的,对于这个概念我会再写一个博客进行补充,毕竟和这一篇博客的主题不符,嘻嘻。这个段代码是do...while和 break结合起来,在做项目工程中会经常使用这种结构。
小结:
- for循环先进行判断后在进入循环体
- for循环适合于循环次数固定的场合
- while循环先进行判断在进入循环体执行
- while循环适用于循环次数不定的场合
- do....while循环先执行循环体然后进行条件判断
- do.....while循环至少进行一次循环体