1. 循环语句分析
(1)循环语句的基本工作方式
①通过条件表达式判定是否执行循环体
②条件表达式遵循if语句表达式的原则
(2)do、while、for的区别
①do语句先执行后判断,循环体至少执行一次
②while语句先判断后执行,循环体可能不被执行
③for语句先判断后执行,相比while更简洁
2. 循环的回顾
(1)do…while语句的循环方式
(2)while语句的循环方式
(3)for语句的循环方式
▲注意上图字体颜色与for语句各部分的对应关系。for(初始区;条件;终止区)。初始区只执行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 ", f1(100)); printf("%d ", f2(100)); printf("%d ", f3(100)); return 0; }
3. 终止循环语句的分析
(1)break和continue的区别
①break表示终止循环的执行,跳出整个循环体
②continue表示终止本次循环,进入下次循环
【思考】switch能否用continue关键字?为什么?
switch是分支语句,没有循环的概念。而continue是中止本次循环,进入下次循环,只能为循环语句所用,不能用在其他场合。
【实例分析】continue和break的区别
#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(" "); } void f2(int n) { int i = 0; for(i=1; i<=n; i++) { if( (i % 2) == 0 ) { continue; } printf("%d ", i); } printf(" "); } int main() { f1(10); f2(10); return 0; }
【实例分析】do…while(0)和break的妙用
#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 ", p[i]); } ret = 1; }while( 0 ); //do...while(0),表示循环体只执行一次,加break可以在适当时候强制跳出! printf("free(p) "); free(p); //因为用了do.while(0)与break的组合,可以保证在任何时候,内存都可以被正确释放! return ret; } int main() { if( func(10) ) { printf("OK "); } else { printf("ERROR "); } return 0; }
4. 小结
for语句 |
while语句 |
do…while语句 |
①for循环先进行判断再进入循环体 ②for循环适合于循环次数固定的场合 |
①while循环先进行判断再进入循环体执行 ②while循环适合于循环次数不定的场合 |
①do…while循环先执行循环体再进行条件判断 ②do…while循环体至少执行一次循环体 |