主要介绍while循环和其他两种循环:for和do while。
入口条件循环
即在执行循环体之前就决定了是否执行循环,因此,for循环和while循环可能一次都不执行。
while语句
通用形式
while (expression)
statement
statement部分可以是以分号结尾的简单语句,也可以是用花括号括起来的复合语句。
expression可以用任何表达式,如果为真,执行statement部分一次,然后再次判断expression。在为假之前,循环的判断和执行一直重复进行。每次循环都被称为一次迭代。
for语句
通用形式
for (initialize; test; update)
statement
for后面的圆括号内有三个表达式,分别用分号隔开。第一个表达式是初始化,只会在循环开始时执行一次,第二个是测试条件,在执行循环之前对表达式求值,若为假,则循环结束。第三个表达式为更新,在每次循环结束时求值。
利用for的灵活性
1.可以使用递减计数器
#include<stdio.h>
int main(void)
{
int i;
for (i = 5; i > 0; --i)
{
printf("...\n");
}
return 0;
}
2.使计数器递增其他数
#include<stdio.h>
int main(void)
{
int i;
for (i = 0; i < 50; i = i + 3)
{
printf("...\n");
}
return 0;
}
3.可以用字符代替数字计数
#include<stdio.h>
int main(void)
{
char ch;
for (ch = 'a'; ch < 'z'; ++ch)
{
printf("...\n");
}
return 0;
}
4.可测试其他条件
for (int num = 1; num <= 6; ++num)
//替换成
for (int num = 1; num*num*num<= 216; ++num)
5.可以让递增的量几何式增长
#include<stdio.h>
int main(void)
{
double debt = 0.0;
for (debt = 100.0; debt < 150; debt *= 1.1)
{
printf("...\n");
}
return 0;
}
6.可以省略一个或多个表达式(但是不能省略分号),只要在循环中包含能结束循环的语句即可。
#include<stdio.h>
int main(void)
{
int i = 0, num = 1;
for (i = 2; num <= 30;)
{
num = num * i;
printf("...\n");
}
return 0;
}
省略第二个表达式则视为真,所以for ( ; ; )会无限循环
#include<stdio.h>
int main(void)
{
int i = 0;
for (; ;)
{
printf("%3d", ++i);
}
return 0;
}
运行结果
7.第一个表达式不一定是给变量赋初值,也可以使用printf()。
#include<stdio.h>
int main(void)
{
int num = 0;
for (printf("Please input data:\n"); num != 6;)
{
scanf_s("%d", &num);
}
return 0;
}
出口条件循环
即在循环的每次迭代之后检查测试条件,这保证了至少执行循环体中的内容一次。
do while
通用形式
do
statement
while ( expression);
注意do while循环以分号结尾
嵌套循环
指在一个循环中包含领一个循环
示例:
#include<stdio.h>
#define ROW 6
#define COL 6
int main(void)
{
int i = 0, j = 0;
for (i = 0; i < ROW; ++i)
{
for (j = 0; j < COL; ++j)
{
printf("%4d", j);
}
printf("\n");
}
return 0;
}
运行结果