今天带大家了解一下C语言中的循环语句。顺序结构,选择结构和循环结构是C语言的三大结构,不光程序可以套用这三个结构来顺利运行,在我们生活中的遇见的事情也都科一抽象化为这三种结构。今天我们主要讲循环结构
1.while循环
1.1定义
while循环的通用格式如下
statement可以是以分号结尾的一条语句也可以是被花括号括住的复合语句,总之statement只能是一条语句。while循环又叫做入口条件循环,表达式则是判断是否能进入循环的依据,一般的表达式都使用关系表达式,关系表达式为1则进入循环,为0则退出循环,每次循环都被称作时依次迭代,statement也可以是一条空语句。流程图如下
break和continue命令在后续将会涉及到。
1.2循环的入口
在表达式为真时进入循环体
当input自增为0时将不再进入循环体input初始值为-3所以循环3次
1.3循环的终止
循环最终要被终止,否则我们写出的就是死循环(在不使用其他语句的前提下),要想循环被终止表达式的值就必须有变化,也就是说表达式的值最终要变化为0(表达式不成立即为0)
int a = 1;
while (a < 5)
printf("Good luck for you\n");
return 0;
这就是一个死循环,写出这样的程序是没有意义的,我们要根据自己的需求来写程序,比如我要把1~10这十个数字依次打印在屏幕上
这里要明确一点就是只有在对测试条件求值时才会判断是终止还是继续循环·,就像上面这个例子a=10时进入循环并打印a,a继续自增1,这是a变为11,11<=10显然是不成立的,所以值为0终止循环。
1.4关系运算符和表达式判断
循环表达式离不开真假判断,而真假判断又依赖于关系运算符,这里我们详细讲一下关系运算符
运算符 | 含义 |
< | 小于 |
<= | 小于等于 |
== | 等于 |
> | 大于 |
>= | 大于等于 |
!= | 不等于 |
这里要注意的是关系运算符不能用来比较字符串,也不能直接用来比较浮点数,在比较浮点数的时候要用到fabs()函数。,关系运算符不仅用在while循环中,在其他循环语句中依然很常用。简单的说一下优先级和运算顺序(上次已经涉及过)。关系运算符的优先级要低于算术运算符但高于赋值运算符。当一个表达式中出现不止一个运算符的时候就要考虑运算顺序。关系运算符同算术运算符一样采用从左往右结合的顺序,比如2>1>3这个表达式如何计算真假,它就相当于(2>1)>3,2大于1为真返回值为1,1>3为假,因此整个表达式为假。
运算符 | 结合律 |
() | 从左往右 |
++,--,sizeof | 从右往左 |
*,/,% | 从左往右 |
+,- | 从左往右 |
<,>,<=,>= | 从左往右 |
==,!= | 从左往右 |
= | 从右往左 |
2.for循环
for循环是我们用到的最多的一种循环,也是一种入口条件循环,上面我们讲到的while循环它的初始化,条件语句和更新语句是分散开来的,稍有不慎就容易疏漏。
1.1定义
for循环的格式为
在for循环中表达式1是初始化语句,在循环中只执行一次,表达式2为测试条件,测试条件为真则进入循环否则不进入循环体,循环体被执行一次后表达式3被执行,表达式3也叫做更新语句。虞while循环一样statement部分可以是一条单独的语句也可以是一条复合语句。
在讲while循环的时候我们练习了在屏幕上打印1~10,我们用for循环来实现一下
#include<stdio.h>
int main()
{
int i=1;
for(i=1;i<=10;i++)
printf("%d ",i);
return 0;
}
1.2 for循环的注意事项
1.for循环中的表达式3可以是任意合法的表达式,例如算术表达式
不过我们一般不会在表达式3中使用算术表达式,这会导致代码不清晰,不是一种好的编程风格。
2.for循环中的三个表达式可以是不同的变量,像上面我们举的例子中,for循环的三个表达式都是同一个变量,然而这并不是一成不变的
3.for循环中的三个表达式可以省略一个或者多个表达式,前提是要保证循环可以被终止
4.for循环的第一个表达式可以不是给变量赋初值,无论表达式1是什么它都将被执行一次并且只执行一次
5.逗号运算符
在for循环中的三个表达式语句中都可以使用逗号运算符
逗号运算符不仅可以在for循环中使用,在其他循环中也可以使用,不过在for循环中较为常见。逗号表达式包括左右两个表达式,在计算的时候实现要计算左边的表达式再计算右边的,而整个逗号表达式的值是右边表达式的结果,比如(count=50,000)计算机在遇到这个表达式的时候并不会像我们一样认为数目是50000,它会当作是一个逗号表达式,首先将50赋值给count,整个表达式的值是0。
1.3常见的赋值运算符
赋值运算符不只有=一种,常见的赋值运算符还有+=,-=,*=,/=,%=
a+=2 | a=a+2 |
a-=2 | a=a-2 |
a*=2 | a=a*2 |
a/=2 | a=a/2 |
a%=2 | a=a%2 |
这些运算符可以简化我们的代码,让代码更紧凑。它们的优先级与=运算符相同。
3.do while循环
上面我们讲到的两种循环都是入口条件循环,而do while循环是一种出口条件循环,通俗的来讲入口条件循环就是当条件不满足时就进不去循环,而出口就是当条件不满足时就出不去循环体。
3.1定义
do while循环的格式为
do while循环的特别之处在于它是先执行循环体再进行条件判断,无论条件如何循环体都要被执行一次,执行一次循环后,测试条件为真则继续进入循环体,为假则跳出循环。与前面介绍的两个循环一样,它的statement部分可以是一条单独的语句也可以是一条复合语句,expression是测试语句。
3.2应用实例
我们用do while循环来实现一个密码锁的功能
4.循环的选择
在选择循环的时候首先要明确使用入口循环还是出口循环,一般使用入口循坏较多,因为入口循环要先判断测试条件比较符合我们一般的逻辑。在入口循环中选择的时候我们大多数用for循环,因为for循坏比while循坏要灵活,不过这也取决于个人喜好,while循环和for循坏在一般条件下是可以相互转化的,这就需要具体情况具体分析了。
5.循环的嵌套
在我们写代码的时候通常要用到循环的嵌套,循环的嵌套就是一个循环语句里面又调用了另一个循环
例:打印1!+2!+3!的值
这个程序就用到了两次for循环实现了目标输出,实际上这个程序还可以进行优化,使用一个for循环同样也可以实现,因此在写代码之前要思考问题有没有简单的解决方法,这样写出来的代码将会更高效。