赞
踩
软件设计有两种方式:一种方式是,使软件过于简单,明显没有缺陷;另一种方式是,使软件
过于复杂,没有明显的缺陷。 ——C.A.R. Hoare
我们知道程序在运行时可以通过判断、检验条件做出选择
但在有需求的条件下,我们还要让程序能够重复,即反复执行一段指令,知道满足某个条件为止
这种重复的过程我们就将其称为循环。C语言中有3种循环语句,即while,do...while和for循环
语句。循环语句是结构化程序设计的基本结构之一,熟练掌握循环语句是程序设计的基本要求
废话不多说,先上图
rwhile语句首先会检验一个条件,也就是括号中的表达式。当条件判断为真的时,就执行后面的语句或者是语句块。每执行一次循环,程序都将回到while语句处,重新检验条件是否满足。如果一开始的条件就不满足,则跳过循环体中的语句,直接执行后面的程序代码。如果第一次检验时满足条件,那么在第一次或其后的循环过程种,必须得到有使条件为假的操作,否则循环无法终止,通俗来讲就是陷入死循环>例如下面的代码:
while(Sum < 50)
{
Sum += 1;
}
可以看到,在while的语句块中,我们对其中的变量进行了+1的运算,这里的+1的运算就是循环结构中使条件为假的操作,也就是使得Sum不小于100,否则程序就会一直循环下去。
在某些特定情况下,无论条件是否满足,循环过程必须至少执行一次,这时可以采用do…while语句。do…whil语句的特点就是先执行循环体语句的内容,然后判断循环条件是否成立,一般形式如下
do
{
//循环体语句
...
}(表达式);
执行流程图如下:
do…while语句首先执行一次循环体语句中的内容,然后判断表达式,当表达式的值为真时,返回重新执行循环体语句。执行循环,直到表达式的判断为假时为止,此时循环结束。例如下面的代码:
do
{
age++;
}while(age < 60);
在上面的代码中,程序首先执行age++的操作,也就是说,无论age的值是否小于60,都会执行一次循环体中的内容。然后判断while后括号中的内容,如果age小于60,则再次执行循环语句块中的内容,条件为假时,执行下面的程序操作
C语言中,使用for语句也可以控制一个循环,并且在每一次循环时修改循环变量。在循环语句中,for语句的应用最为灵活,也是使用频率最高的一种循环语句,不仅可以用于循环次数已经确定的情况,也可以用于循环次数不确定二只给出循环结束条件的情况。
for语句的一般形式如下
for(表达式1;表达式2;表达式3)
每条for语句包含3个用分号隔开的表达式。这三个表达式用一对圆括号括起来,后面紧跟这的就是循环语句或者语句块。当执行到for语句时,并计算第3个表达式,然后检验第二个表达式,执行循环,如此往复,直到第二个表达式的值为假,退出循环。
执行流程图如下:
举一个简单的循环操作例子:
for(i = 1; i < 10; i++)
{
printf("i的值是:%d", i);
}
在上面的代码中,表达式1是对循环变量i进行赋值操作,表达式2是判断循环条件是否为真。因为i的初始值为1,小于10,所以执行语句块中的内容。表达式3用于每次循环结束后。对循环变量进行自增操作,然后继续判断表达式2的状态。为真时,继续执行语句块;为假时,循环结束,执行后面的程序代码。
通过上面的讲解我们可以得知,for语句的一般形式中有3个表达式。在实际程序的编写过程中,这3个表达式可以根据情况进行省略,接下来我会对不同情况进行讲解:
1.for语句中省略表达式1
for语句中的第一个表达式的作用时对循环变量设置初值。所以,如果省略了表达式1,就会跳过这一操作步骤,则我们应该在for语句之前给循环变量赋值。
2.for语句中省略表达式2
如果表达式2省略,则无法判断循环条件,也就是默认了表达式2始终为真,因此循环将无休止地进行下去。
3.for语句中省略表达式3
理论上来说表达式3也可以省略,但此时程序设计人员应该另外设法保证循环能够正常结束,否则同样会无休止的执行循环。
4.for语句中的3个表达式都省略
这种情况下没有初值没有判断条件,也没有改变循环变量的操作,因此会无休止地执行循环体。
在for语句中,表达式1和表达式3除了可以使用简单的表达式外,还可以使用逗号表达式,也就是包含一个以上的简单表达式,中间用逗号隔开,例如:
for(count = 1; count <= 100; count++, count++)
{
sum = sum + count;
}
这里的表达式3就是括号表达式,在逗号表达式内按照从左到右的顺序求解,整个括号表达式的值为其最右边的表达式的值。
一个循环体内又包含另一个完整的循环结构,称之为循环的嵌套。内嵌的循环种还可以再嵌套循环,这就是多层循环。
while循环、do…while循环和for循环之间可以相互嵌套,例如:
while(表达式)
{
//语句
...
while(表达式)
{
//语句
...
}
}
其余不同组合的嵌套基本都是大同小异,大家可以自己尝试写出来运行一下
我们只想将每种循环结构的方式掌握好,就可以正确写出循环嵌套。
为了让大家更直观的感受循环嵌套的作用,我们这里可以利用循环嵌套的方式把九九乘法表打印出来:
#include <stdio.h>
int main()
{
int n = 0;
int m = 0;
for(n = 1; n <= 9; n++)
{
for(m = 1; m <= n; m++)
{
printf("%d * %d=%2d", n, m, n*m);
}
printf("\n");
}
return 0;
}
本次实例就用到了两次for循环,第一个for循环可以看成九九乘法表的行数,同时也是每行进行乘法运算的第一个数字,第二个for循环范围的确定建立在第一个for循环的基础上,即第二个for循环的最大取值时第一个for循环中变量的值
转移语句包括goto语句,break语句以及continue语句,通过这三种语句,程序的执行流程会发生一定的转移。
goto语句为无条件转移语句,可以使程序立即跳转到函数内部的任意一条可执行语句。goto语句的关键词后面带一个标识符,该标识符使同一个函数内某条语句的标号。标号可以出现在任何可执行语句的前面,并且以一个冒号“:”作为后缀,goto语句的一般形式:
goto 标识符:
goto后面的标识符就是要跳转的目标,当然这个标识符要在程序的其他位置给出,并且其标识符要位于函数内部。(函数的内容会在后续博客进行讲解,在这里简单直到一下即可)
例如:
goto Wild;
printf("the animal before Wildlife")
Wild:
printf("Wildlife");
在上述代码中,goto后面的Wild为跳转的标识符,而其后的“wild:”代码表示goto语句要跳转的位置,这样在上面的语句中的第一个printf函数将不会被执行,而会执行第二个printf函数。
注:跳转的方向既可以向前也可以向后;可以跳出一个循环,也可以跳入一个循环
有时候我们会遇到这样的情况:无论表达式检验的结果如何,都需要强行终止循环,这时候我们就可以使用break语句,跳出循环执行后面的代码。例如:
while(1)
{
printf("CSDN");
break;
}
在上述代码中,while语句是一个条件永远为真的循环,但由于在其中使用了break语句,是的程序流程跳出循环。
这里要额外提一句,break语句不能用于除循环语句和switch语句之外任何其他语句中。
在某些情况下,程序需要返回循环头部继续执行,而不是跳出循环,这时候我们就需要用到continue语句。其作用就是结束本次循环,即跳过循环体中尚未执行的部分,直接执行下一次的循环操作,例如:
#include <stdio.h> int main() { int i = 0; int count = 0; for(count = 0; count <= 20; count++) { if(count == 10) { printf("Hello CSDN\n"); continue; } printf("the counter is: %d\n", count); } return 0; }
大家运行这段代码的结果会显示,在count等于5时,调用continue语句使得本次的循环结束,但是循环本事并没有停止,因此程序会继续执行。
本篇博客介绍了有关循环语句的内容,其中包括了while结构、do…while结构以及for结构
了解这些结构使用方法,可以在程序功能上节约很多时间,希望大家可以通过对比3种循环,了解他们在使用上的区别以及共同之处,做到灵活运用融会贯通。
最后期待大家的一键三连哦!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。