一、程序结构
在C语言程序中,一共有三种程序结构:顺序结构、选择结构(if和switch分支结构)、循环结构;
1)顺序结构
从头到尾一句接着一句的执行下去,直到执行完最后一句;
2)选择结构
执行到某个节点时,根据判断条件的结果来决定执行分支的方向,由if和switch实现。
3)循环结构
循环结构有一个循环体,循环体里是一段代码。对于循环结构来说,判断循环的条件,来决定是否继续执行循环体,由while、do while和for来实现。
二、while循环
while循环的一般形式为:
while (表达式)
{
语句块
}
意思是,先计算表达式的值,当值为真时(非0即是真),执行语句块,执行完语句块后,回到循环首部再次计算表达式的值,如果为真,又执行一次语句块……,这个过程会一直重复,直到表达式的值为假,就不再执行语句块。
循环也常常出现在我们的生活中,以超女选秀为例。
// 超女已准备出场
while (是否有未出场的超女)
{
// 判断超女的年龄
// 判断超女的身材
// 判断超女的颜值
// 送往后宫
}
超女选秀就是一个循环,是否有未出场的超女是循环首部要判断的条件,它的取值会随着循环次数的增加而改变,判断超女的年龄、判断超女的身材、判断超女的颜值、送往后宫是循环体,随着循环次数的增加,全部的超女已出场,循环体不再执行。
三、do while循环
do while循环的一般形式为:
do
{
语句块
} while (表达式)
do while先执行一次循环,然后再判断表达式的值,如果为真,再执行一次循环体,如此重复下去。
在实际开发中,几乎不用 do while,所以就不讲它了。
四、循环的跳转
continue和break两个关键字用在循环体中,用于控制循环体代码的执行流程。
continue跳转到循环的首部。
break跳出循环。
以超女选秀为例:
// 超女已准备出场
while (是否有未出场的超女)
{
// 判断超女的年龄
if (年龄小于16岁) continue;
// 判断超女的身材
if (身材不火辣) continue;
// 判断超女的颜值
if (颜值不漂亮) continue;
// 判断已选出的超女数量,如果已经有10位了,就不要再选了
if (已选出的超女数量等于10) break;
}
// 送往后宫
超女出场后,先看看身份证上的年龄,如果不够16岁,没到法定年龄,评委就会说直接下一个,即continue,这个不够16岁的小姑娘直接回家。
如果本次选秀的任务是选出10位超女,如果选出的超女已经有10位了,活动结束,即break,没选上的和没出场的直接回家。
五、while循环的应用
利用一个循环,把用户每次从键盘输入的数据累加起来,如果总和超过了5000,循环结束。
示例(book31.c)
/*
* 程序名:book31.c,此程序用于演示while循环
* 作者:C语言技术网(www.freecplus.net) 日期:20190525
*/
#include <stdio.h>
int main()
{
int times=0; // 记录用户输入数据的次数
int value=0; // 用户每次从键盘输入的数据
int sum=0; // 记录用户输入数据的和
while (sum<5000) // 如果sum的值小于5000,进入循环
{
printf("请输入数字:"); // 提示用户输入
scanf("%d",&value); // 接受用户从键盘输入的数据
times++; // 用户输入数据的次数自增1
sum=sum+value; // 记录用户输入数据的和
}
printf("您一共输入了%d个数据,和为%d。\n",times,sum);
}
运行效果
六、for循环
for循环的一般形式为:
for (语句1;表达式;语句2)
{
语句块
}
1)for循环开始时,会先执行语句1,而且在整个循环过程中只执行一次语句1。
2)接着判断表达式的条件,如果条件成立,就执行一次循环体中的语句块。
3)语句块执行完后,接下来会执行语句2。
4)重复第2)步和第3),直到表达式的条件不成立才结束for循环。
注意:
1)在for循环中,语句1、表达式和语句2都可以为空,for (;;)等同于while (1)。
2)continue和break两个关键字也可以用在for循环体中。
for循环一般与计数器一起使用。例如:把1到100之间的数值累加起来。
示例(book33.c)
/*
* 程序名:book33.c,此程序用于演示for循环
* 作者:C语言技术网(www.freecplus.net) 日期:20190525
*/
#include <stdio.h>
int main()
{
int ii=1; // 用于for循环的计数器
int sum=0; // 记录1到100的累积值
for (ii=1;ii<=100;ii++)
{
sum=sum+ii;
}
printf("1到100的累积值为%d。\n",sum);
}
运行效果
七、for循环嵌套
我们再来看超女选秀例子,超女共分为3组,每组有4位超女,主持人利用for循环嵌套来安排超女们出场。
示例(book35.c)
/*
* 程序名:book35.c,此程序用于演示for循环的嵌套
* 作者:C语言技术网(www.freecplus.net) 日期:20190525
*/
#include <stdio.h>
int main()
{
int ii=0; // 超女分组编号的计数器
int jj=0; // 每组超女序号的计数器
for (ii=1;ii<=3;ii++)
{
for (jj=1;jj<=4;jj++)
{
printf("第%d组的第%d位超女出场。\n",ii,jj);
}
}
}
运行效果
八、循环的选择
for循环可以实现while循环的功能,while循环也可以实现for循环的功能,没有那个更好的说法,要看应用场景。
for循环更合适事先知道循环总次数的场景,一般与计数器或数组结合一起使用,数组的知识我们在后面介绍。
while循环更合适事先不知道循环总次数的场景,以达到某个目标为目,例如超女选秀,报名有多少人没关系,已选够10位或没人可选是循环的结束。
九、死循环
死循环是指循环的条件永远为真。
while(1)
{
// 循环体
}
出现死循环的情况有两种:1)程序的逻辑错误;2)程序员故意为之。第一种情况就不说了,程序员自己去解决,第二种是程序功能的需要,但是程序员仍有其它的办法让程序中止,这么说可能难以理解,没关系,在以后的课程中将会介绍。
如果您的程序不小心进入了死循环,可以用Ctrl+c中止。
十、应用技巧
1)for循环的计数器,习惯的写法是for (ii=0;ii<=10;ii++),表示从0、1……到10,从小到大的方式计数,但是在某些应用场景中,可能需要从大到小的方式计数,for (ii=10;ii>=0;ii–),也是可以的。
2)for循环的计数器,习惯的写法是for (ii=0;ii<=10;ii++),表示从0、1……到10,从小到大一次增加1的方式,但是在某些应用场景中,计数器不一定是增加ii++,ii=ii+2也是可以的。
十一、课后作业
1)采用一个while循环,把1到100之间的数值累加起来,实现book33.c程序的功能。
2)采用一个for循环,把用户每次从键盘输入的数值累加起来,如果总和超过了5000,循环结束,实现book31.c程序的功能。
3)采用您认为更合适的循环,输出九九乘法表,如下:
4)采用一个while循环,接受键盘输入的整数,如果输入的整数大于100,丢弃;如果输入的整数小于等100,把每次输入值累加起来,如果输入的整数值为0,跳出循环。最后显示输入了的有效的数据(大于0小于等于100的数)的个数,并显示有效数据的总和。
5)采用一个循环,输出0到100之间的偶数。
6)采用一个循环,输出0到100之间的能整除5的数字。
7)一共有5名超女,采用一个循环,在界面上输入超女数据,按下列要求选出妃子、宫女和杂役。循环结束后,显示选秀结果(妃子、宫女、杂役的人数)。
妃子:(1)年龄18-25岁;(2)身高165-178cm;(3)身材火辣;(4)颜值漂亮。
宫女:(1)年龄18-30岁;(2)身高160-165cm;(3)身材火辣或者普通;(4)颜值一般。
嬷嬷:(1)年龄35-40岁;(2)身高155-165cm;(3)身材普通或者飞机场;(4)颜值一般。
十二、版权声明
C语言技术网原创文章,转载请说明文章的来源、作者和原文的链接。
来源:C语言技术网(www.freecplus.net)
作者:码农有道
如果文章有错别字,或者内容有错误,或其他的建议和意见,请您留言指正,非常感谢!!!