1. 循环语句分析
- 循环语句的基本工作方式
- ①通过条件表达式判定是否执行循环体
- ②条件表达式遵循if语句表达式的原则
- do、while、for的区别
- ①do语句先执行后判断,循环体至少执行一次
- ②while语句先判断后执行,循环体可能不被执行
- ③for语句先判断后执行,相比while更简洁
2. 循环的回顾
- do…while语句的循环方式
- while语句的循环方式
- for语句的循环方式
- 注意上图字体颜色与for语句各部分的对应关系。for(初始区;条件;终止区)。初始区只执行1次,其次判断条件,再次执行循环体,最后执行终止区并返回到条件判断进行循环。
3.编程实验
- 三种循环语句使用对比
#include <stdio.h>
#include <stdlib.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));
system("pause");
return 0;
}
4. 终止循环语句的分析
- break和continue的区别
- break表示终止循环的执行,跳出整个循环体
- continue表示终止本次循环,进入下次循环
- switch能否用continue关键字?为什么?
- switch是分支语句,没有循环的概念。而continue是中止本次循环,进入下次循环,只能为循环语句所用,不能用在其他场合。
5.编程实验
- continue和break的区别
#include <stdio.h>
#include <stdlib.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); // 1
f2(10); // 1 3 5 7 9
system("pause");
return 0;
}
- do…while(0)和break的妙用
#include <stdio.h>
#include <stdlib.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 ", p[i]);
}
ret = 1;
} while (0); //do...while(0),表示循环体只执行一次,加break可以在适当时候强制跳出!
printf("\nfree(p)\n");
free(p); // 因为用了do.while(0)与break的组合,可以保证在任何时候,内存都可以被正确释放!
return ret;
}
int main()
{
if (func(10))
{
printf("OK\n");
}
else
{
printf("ERROR\n");
}
system("pause");
return 0;
}
- 运行结果:
6.小结
- for循环先进入循环再进入循环体
- for循环适合于循环次数固定的场合
- while循环先进行判断再进入循环体执行
- while循环适合于循环次数不定的场合
- do ... while 循环先执行循环体再进行条件判断
- do ... while 循环体至少执行一次循环体