7_循环语句
2018-03-02 本文已影响0人
编程半岛
关键词:循环语句分析、do...while
循环、while
循环、for
循环
1. 循环语句分析
- 循环语句的基本工作方式
通过条件表达式判定是否执行循环体
条件表达式遵循if
语句表达式原则 -
do
,while
,for
的区别
do
语句先执行后判断,循环体至少执行一次
while
语句先判断后执行,循环体可能不执行
for
语句先判断后执行,相比while
更简洁
2. do...while
循环
do...while循环
3. while
循环
while循环
4. for
循环
for循环
5. 三种循环的使用对比
#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;
for(int 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;
}
6. break
和continue
的区别
-
break
表示终止循环的执行 -
continue
表示终止本次循环,进入下次循环执行
思考:switch
能否用continue
关键字?为什么?
不能。因为continue
关键字是为循环语句设计,与分支语句switch
没有任何关系。
#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;
}
输出结果:
1
1 3 5 7 9
7. do
和break
的妙用
一般写法:
#include <stdio.h>
#include <malloc.h>
int func(int n)
{
int ret = 0;
int* p = (int*)malloc(sizeof(int) * n);
if(NULL == p)
{
return ret;
}
if(n < 5)
{
return ret;
}
if(n > 100)
{
return ret;
}
for(int i=0; i<n; i++)
{
p[i] = i;
printf("%d\n", p[i]);
}
ret = 1;
printf("free(p)");
free(p);
return ret;
}
int main()
{
if( func(4) )
{
printf("OK\n");
}
else
{
printf("ERROR\n");
}
return 0;
}
输出结果:
ERROR
总结:这种写法当满足if
条件时,函数直接return
,而没有free(p)
,因此会导致内存泄漏。可以使用do
和break
结合使用。修改代码如下:
#include <stdio.h>
#include <malloc.h>
int func(int n)
{
int ret = 0;
int* p = (int*)malloc(sizeof(int) * n);
// 使用 do 和 break,保证free(p)一定可以执行
do
{
if(NULL == p) break;
if(n < 5) break;
if(n > 100) break;
for(int 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(4) )
{
printf("OK\n");
}
else
{
printf("ERROR\n");
}
return 0;
}
输出结果:
free(p)
ERROR
8. 小结
-
for
循环先进行判断再进行循环体 -
for
循环适合用于循环次数固定的场合 -
while
循环先进行判断再进行循环体执行 -
while
循环适合用于循环次数不定的场合 -
do...while
循环先执行循环体再进行条件判断 -
do...while
循环至少执行一次循环体
声明:此文章为本人在学习狄泰软件学院《C语言深度解析》所做的笔记,文章中包含狄泰软件资料内容一切版权归狄泰软件所有!