C语言循环

一、程序结构

在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)
作者:码农有道

如果文章有错别字,或者内容有错误,或其他的建议和意见,请您留言指正,非常感谢!!!

posted @ 2020-03-15 18:03  码农有道  阅读(1634)  评论(0编辑  收藏  举报