一、入口条件循环:while 循环
需要重复计算是使用计算机的主要原因,C提供多种方法做重复计算。
while循环是使用入口条件的有条件循环。所谓“有条件”指的是语句部分的执行取决于测试表达式描述的条件,如(index < 5)。该表达式是一个入口条件(entry condition),因为必须满足条件才能进入循环体。因此,循环有可能不被执行。循环体可以是简单语句,也可以是复合语句。while语句创建了一个循环,重复执行直到测试表达式为假或0。
形式:
while ( expression )
{
statement;
}
在expression部分为假或0之前,重复执行statement部分。
下面举个例子,实现在屏幕上打印1~10的数字
#include<stdio.h>
int main()
{
int n = 1;
while (n <= 10)
{
printf("%d ", n);
n = n + 1;
}
return 0;
}
![](https://img-blog.csdnimg.cn/img_convert/922e90b0ba4ac8505e085f44e20d3ec0.png)
TIP:
while循环在实际应用中常起到的作用
可以起到多组输入数据的作用
int n = 0;
while(scanf("%d",&n)!=EOF)
{
循环语句;
}
每次在进入循环时,都会输入一次数据,可以达到多组输入数据的目的。
可以起到清理缓冲区的作用
while(getchar() != '\n')
{
;
}
getchar中文意思是获取字符,getchar函数从标准输入输出里读取下一个字符,返回类型为int整形,返回用户输入的ASCII码值,如果到达文件末尾或者出错返回EOF。
二、入口条件循环:for 循环
首先,来看看for循环的语法:
for(表达式 1;表达式 2;表达式 3)
{
循环语句;
}
表达式1:为初始化部分,用于初始化循环变量的。
表达式2:为条件判断部分,用于判断循环时候终止。
表达式3:为调整部分,用于循环条件的调整。
for( initialize; test; update)
statement
for语句使用3个表达式控制循环过程,分别用分号隔开。initialize表达式在执行for语句之前只执行一次;然后对test表达式求值,如果表达式为真(或非零),执行循环一次;接着对update表达式求值,并再次检查test表达式。for语句使一种入口条件循环,即在执行循环之前就决定了是否执行循环。因此,for循环可能一次都不执行。statement部分可以是一条简单语句或复合语句。
同样,用for循环来解决打印1~10的数字。
#include<stdio.h>
int main()
{
int n = 0;
for (n = 1; n <= 10 ; n++)
{
printf("%d ", n);
}
return 0;
}
可以发现在while循环中依然存在循环的三个必须条件,但是由于风格的问题使得三个部分很可能偏离较远,这样查找修改就不够集中和方便。所以,for循环使用的频率也最高。
//代码1
for(int i = 0;i < 3; i++)
{
for(int j = 0; j < 3; j++)
{
printf("hehe\n");
}
}
//代码2
int main()
{
int i = 0;
int j = 0;
for ( ; i < 3; i++)
{
for ( ; j < 3; j++)
{
printf("hehe\n");
}
}
return 0;
}
上面是for的嵌套循环。嵌套循环常用于按行和列显示数据,也就是说,一个循环处理一行中的所有列,另一个循环处理所有的行。
![](https://img-blog.csdnimg.cn/img_convert/fd2fdf55a80d9a76581a1ee27fa74f4f.png)
很显然,代码1打印了9个hehe
![](https://img-blog.csdnimg.cn/img_convert/07da77b8aaf516f3f2d38842158bd3f5.png)
而代码2打印则是3个hehe,这是为什么呢?
两个代码的差别就在于代码2省略了初始化部分,由于在内部循环中没有初始化j为0,当外部循环一次结束后,第二次进行循环时,j没有重新初始化,还是3,于是并没有进入内部循环。所有,最终打印了3次hehe。
TIP:
for循环中的初始化部分和调整部分是可以省略的。但是,如果把判断部分省略了,就意味着判断恒为真,那就是一个死循环的程序了。
三、出口条件循环:do while
C语言还有出口条件循环,即在循环的每次迭代之后检查测试条件,这保证了至少执行循环体中的内容一次。这种循环被称为do while循环。
下面是do while循环的通用形式:
do
statement
while(expression);
与前面两个循环有区别的点就在于在执行循环体后才根据测试条件决定是否再次执行循环。
如何选择循环
如何选择使用哪一种循环?首先,确定是需要入口条件循环还是出口条件循环。通常,入口条件循环用的比较多,有几个原因。其一,一般原则是在执行循环之前测试条件比较好。其二,测试放在循环的开头,程序的可读性更高。另外,在许多应用中,要求在一开始不满足测试条件时就直接跳过整个循环。
四、什么是真?
所有循环中条件判断部分,那么对于C来说,到底什么才是真值呢?
这是一个古老的问题,但是对C而言还不算难。在C中,表达式一定有一个值,关系表达式也不例外。对C而言,表达式为真的值是1,表达式为假的值是0。一般而言,所有的非零值都视为真,只有0被视为假。在C中,真的概念还真宽!
要牢记:关系表达式为真,求值得1;关系表达式为假,求值得0。因此,这些表达式实际上相当于数值。