循环语句的基本工作方式:
通过条件表达式判定是否执行循环体;
条件表达式遵循if语句表达式的原则;
do、while、for语句的区别:
do语句先执行再判断,循环体至少执行一次;
while语句先判断后执行,循环体可能不执行;
for语句先判断再执行,相比while更加简洁。
do...while的循环方式:
do { //loop } while(condition);
while语句的循环方式:
while() { //loop }
for语句的循环方式:
for(i=0; condition; i++) { //loop }
观察下面示例代码,体会三种不同的循环:
int f1(int n)
{
int i=1;
int s=0;
if(n>0) //注意要先进行判断
{
do
{
s += i;
i++;
}while(i <= n);
}
return s;
}
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=0; i<=100; i++)
{
ret += i;
}
return ret;
}
划重点:break和continue的区别:
break表示终止循环的执行;
continue表示终止本次循环,进入下次循环执行。
问题:switch语句中能否使用continue关键字?为什么?
不能。continue,为循环而生。
判断下面示例代码会输出什么?
#include <stdio.h> void f1(int n) { int i=0; for(i=1; i<=n; i++) { if( i%2 == 0) { break; //符合条件,直接跳出循环 } printf("%d\n", i); } printf("\n"); } void f2(int n) { int i=0; for(i=1; i<=n; i++) { if( i%2 == 0) { continue; //符合条件,跳出此次循环,进入下一次循环,不符合条件,打印 } printf("%d\n", i); } printf("\n"); } int main() { f1(10); f2(10); return 0; }
在Linux下使用Gcc编译运行结果为:
delphi@delphi-vm:~/will$ gcc test.c delphi@delphi-vm:~/will$ ./a.out 1 delphi@delphi-vm:~/will$ gcc test.c delphi@delphi-vm:~/will$ ./a.out 1 3 5 7 9
do...break语句:暴力结束循环体,并且不会造成内存泄漏。
观察下面示例代码,体会do...break的作用:
do { break; }while(0);
#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(p ==NULL) break; //直接return是错误的,因为申请的内存没有释放 if( n<5) break; //return 内存泄漏 if( n>100) break; //return 直接结束函数 for(i=1; i<n; i++) { p[i] = i; printf("%d\n", p[i]); } ret = 1; } while(0); free(p); print("Free(p)\n"); return ret; }
在上述代码的循环体中,只要符合条件,则退出循环,并且可以释放内存空间,不会造成内存泄漏。
如果直接使用return,则函数直接结束,内存泄漏。
if(p ==NULL) return ret; //直接return是错误的,因为申请的内存没有释放 if( n<5) return ret; //return 内存泄漏 if( n>100) return ret; //return 直接结束函数 for(i=1; i<n; i++) { p[i] = i; printf("%d\n", p[i]); } ret = 1;
使用do...break语句可以避开某些语句,并且不会造成内存泄漏。
小结:
for循环先进性判断再进入循环体,适用于循环次数固定的场合;
while循环也是先判断再进入循环体,适用于循环次数不固定的场合;
do...while循环先执行循环体再进行条件循环,至少执行一次循环体,并且
do { break; }while(0);对于防止内存泄漏,有很好的作用。