循环语句的基本工作方式:
通过条件表达式判定是否执行循环体;
条件表达式遵循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);
对于防止内存泄漏,有很好的作用。