- 基本工作方式:通过条件表达式判定是否运行循环体。
- Do,while,for的区别:
- do先执行后判断,循环体至少执行一次;
- while先判断后执行,可能一次都不执行。
- for先判断后执行,比while更简洁
- 各种循环回顾:
(1)do——while:
格式:(先do在判断条件,至少使用一次)
do { //loop } while(condition) |
(2)while
while(condition) { //loop } |
(3)for
for(i=0;condition;i++) { //loop } |
4.分别用三个办法实现累加从0到n的功能
考虑问题的全面性!!!!!
考虑正负问题:正数正常操作,负数输出
(1)do-while
#include<stdio.h> int f1(int n) { int ret=0; if(n>0)//n大于0才执行 { do { ret=ret+n; n--; } while(n>=0);//注意为小括号,非大括号 } return ret; }
int main() { printf("%d",f1(-2)); getchar(); return 0; } |
结果:-2输入, ,也正确
发现,在do外还需要添加if语句,较为复杂
(2)while
int f1(int n) { int ret=0; while(n>0) { ret=ret+n; n--; } return ret; } |
无需插入if语句,while相对于do-while更合适
(3)for循环
int f1(int n) { int ret,i; for(ret=0,i=0;i<=n;i++) { ret=ret+i; } return ret; } |
5.break和continue的区别
1)Break表示终止循环的执行
Continu表示终止本次循环,进入下一次循环
Switch能否用continue?:不可以!!只能用在循环语句中
2)实例分析:do与break的妙用,工程中重要作用
#include<stdio.h> #include<malloc.h>//malloc,向系统申请分配指定size个字节的内存空间
int func(int n) { int i=0; int ret=0; int *p=(int*)malloc(sizeof(int)*n);//指针p动态的指向一堆空间,堆空间大小为传进来的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\n",p[i]); } ret=1; }while(0);//循环条件为0,表示只执行一次循环体!do-while循环的作用:有些break之后,强制执行free,释放空间
free(p);//break后进入,释放p指针 return ret; }
int main() { if(func(10)) { printf("ok"); } else { printf("error"); } getchar(); return 0; } |
与下一代码进行比较!!
#include<stdio.h> #include<malloc.h>//malloc,向系统申请分配指定size个字节的内存空间
int func(int n) { int i=0; int ret=0; int *p=(int*)malloc(sizeof(int)*n);//指针p动态的指向一堆空间,堆空间大小为传进来的n
//do //{ if(NULL==p) ret; if(n<5) return ret; if(n>100) return ret; for(i=0;i<n;i++) { p[i]=i; printf("%d\n",p[i]); } ret=1; //}while(0);//循环条件为0,表示只执行一次循环体!do-while循环的作用:有些break之后,强制执行free,释放空间 printf("free p"); free(p);//break后进入,释放p指针 return ret; }
int main() { if(func(1)) { printf("ok"); } else { printf("error"); } getchar(); return 0; } |
输入1,结果:
发现没有printf(“free p”),没有释放指针空间,造成内存的泄露!!!
所以说:do-while是很好的防止内存泄露的方法。
小结:
- for循环先进行判断,在进行循环
- for适用于循环次数固定的场景
- while先进行判断在进入循环体执行。
- while适用于循环次数不固定的场合
- do-while先执行后判断,至少执行一次
- do-while(0),break结构,运用于防止内存泄露!!!!!