-循环语句分析
循环语句的基本工作方式
- 通过条件表达式判断是否执行循环体
- 条件表达式循环if语句表达式的原则
do、while、for的区别
- do语句先执行后判断,循环体至少循环一次
- while语句先判断后执行,循环体可能不执行
- for语句先判断后执行,相比while更简洁
三者在使用上的区别:
#include <stdio.h> int f1(int n)
{
int ret = ; if( n > )
{
do
{
ret += n;
n--;
}
while( n > );
} return ret;
} int f2(int n)
{
int ret = ; while( n > )
{
ret += n;
n--;
} return ret;
} int f3(int n)
{
int ret = ;
int i = ; for(i=; i<=n; i++)
{
ret += i;
} return ret;
} int main()
{
printf("%d\n", f1());
printf("%d\n", f2());
printf("%d\n", f3()); return ;
}
-循环语句分析
break和continue的区别
- break表示终止循环的执行
- continue表示终止本次循环,进入下一次循环
思考:
switch能否用continue关键字?为什么?
答:不行,因为continue是用于循环的,而switch语句根本不是循环。
#include <stdio.h> void f1(int n)
{
int i = ; for(i=; i<=n; i++)
{
if( (i % ) == )
{
break;
} printf("%d ", i);
} printf("\n");
} void f2(int n)
{
int i = ; for(i=; i<=n; i++)
{
if( (i % ) == )
{
continue;
} printf("%d ", i);
} printf("\n");
} int main()
{
f1();
f2(); return ;
}
do和while 结合的妙用
实例三:下面的例子为了执行强制free();来防止内存泄漏。
#include <stdio.h>
#include <malloc.h> int func(int n)
{
int i = ;
int ret = ;
int* p = (int*)malloc(sizeof(int) * n); do
{
if( NULL == p ) break; if( n < ) break; if( n > ) break; for(i=; i<n; i++)
{
p[i] = i;
printf("%d\n", p[i]);
} ret = ;
}while( ); printf("free(p)\n"); free(p); return ret;
} int main()
{
if( func() )
{
printf("OK\n");
}
else
{
printf("ERROR\n");
} return ;
}
小结:
for循环先进入循环再进入循环体
for循环适合于循环次数固定的场合
while循环先进行判断再进入循环体执行
while循环适合于循环次数不定的场合
do ... while 循环先执行循环体再进行条件判断
do ... while 循环体至少执行一次循环体