C语言学习第9篇---C语言三大结构之二循环结构剖析
知识来源主要是陈正冲老师的《C语言深度解剖》及Delphi Tang老师的《C语言剖析》,有兴趣的朋友可以看我置顶文章获取
循环结构的基本工作方式:
通过条件表达式判断是否执行循环体
条件表达式遵循if语句表达式的原则
do ,while ,for 的区别
do:语句先执行后判断,循环体至少执行一次
while:先判断后执行,循环体可能不执行
for:先判断后执行,相比while更简洁一些
for(;;)和while(true)的区别:
在编程中,我们常常需要用到无限循环,常用的两种方法是while (1) 和 for (;;)。这两种方法效果完全一样,但那一种更好呢?让我们看看它们编译后的代码:
编译前 编译后
while (1); mov eax,1
test eax,eax
je foo+23h
jmp foo+18h
编译前 编译后
for (;;); jmp foo+23h
一目了然,for (;;)指令少,不占用寄存器,而且没有判断跳转,比while (1)好。
do ... while语句的循环方式示意图
while的循环方式示意图
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\n", f1(100));
-
printf("%d\n", f2(100));
-
printf("%d\n", f3(100));
-
-
return 0;
-
}
break和continue的区别:
break表示终止循环的执行
continue便是终止本次循环,进入下次循环执行
这个也是为什么switch不用continue的原因
实验2: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("\n");
-
}
-
void f2(int n)
-
{
-
int i = 0;
-
-
for(i=1; i<=n; i++)
-
{
-
if( (i % 2) == 0 )
-
{
-
continue;
-
}
-
-
printf("%d ", i);
-
}
-
-
printf("\n");
-
}
-
int main()
-
{
-
f1(10);
-
f2(10);
-
-
return 0;
-
}
实验3:do和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\n", p[i]);
-
}
-
-
ret = 1;
-
}while( 0 );
-
-
printf("free(p)\n");
-
-
free(p);
-
-
return ret;
-
}
-
int main()
-
{
-
if( func(10) )
-
{
-
printf("OK\n");
-
}
-
else
-
{
-
printf("ERROR\n");
-
}
-
return 0;
-
}
小结:
for循环先判断再进入循环体
for循环适合循环测试固定的场合
while循环先进判断再进入循环体执行
while循环适合与循环次数不定的场合
do ... while 循环先执行循环体再进行条件判断
do ... while 循环至少执行一次循环体
文章来源: allen5g.blog.csdn.net,作者:CodeAllen的博客,版权归原作者所有,如需转载,请联系作者。
原文链接:allen5g.blog.csdn.net/article/details/78848685
- 点赞
- 收藏
- 关注作者
评论(0)