C语言学习----06 循环结构程序设计

      在实际问题中,常常需要进行大量的重复处理,而循环结构可以让计算机反复执行同一段代码,从而完成大量雷同的计算。利用循环结构进行程序设计,一方面降低了问题的复杂性,减少了程序设计的难度;另一方面也充分发挥了计算机自动执行程序、运算速度快的特点。                            实际应用中的许多问题都会涉及重复执行的一些操作,如级数求和、穷举或迭代求解等。若需要重复处理的次数是已知的,则为计数控制循环。若重复处理的次数是未知的,是由给定条件控制的,称为条件控制循环。                                                                                                                           循环结构通常有两种类型:一种是当型循环,另一种是直到型循环。C语言提供了for、while、do…while 3种循环语句来实现循环结构。

while 语句

由while语句构成的循环称为while循环,while循环是当型循环。它的一般格式如下:                                      while (表达式)                                                                                                                                   {循环体语句}                                                                                                                             执行过程:首先计算控制表达式的值。如果值不为“0”(即真值),那么执行循环体,接着再次判定表达式的值。这个过程(先判定控制表达式的值,在执行循环体)持续进行,直到控制表达式的值为“0”才停止。

   (1)while后一对圆括号中的表达式称为循环条件,由它控制循环是否执行,它可以是C语言中任意合法的表达式。                                                                                                                                (2)循环体语句可以是一条语句,也可以是由“{ }”括起来的多条语句。

do...while 语句

       由do…while语句构成的循环称为do...while 循环,这是一种直到型循环。do...while语句的特点是先执行循环体,后判断循环条件是否成立。其一般格式如下:                                                                              do                                                                                                                                                             {                                                                                                                                                               循环体语句                                                                                                                                      }while(表达式)                                                                                                              do...while循环结构执行的过程:先执行循环体语句一次,然后判断条件表达式是否成立,若为“真”(非0),则表示循环条件满足,继续执行循环体语句块。如此重复循环,直至表达式的值为“假”(0),退出循环,在执行后继语句。

        (1)do是C语言的关键字,必须与while联合使用。                                                                          (2)与while语句不同,do...while语句从do开始,到while结束。因此,while(表达式)后的分号(;)不能缺少。而while语句中while(表达式)后若加分号,则表示循环体语句。

for语句

       由for语句构成的循环通常称为for循环,它是一种当型循环。C语言中的for语句是使用最灵活的,不仅可以用于循环次数已经确定的情况,还可以用于循环次数不确定只给出循环结束条件的情况。它完全可以代替while语句。for循环语句的一般格式如下:                                                                                for(表达式1;表达式2;表达式3)                                                                                                        {                                                                                                                                                                 循环体语句                                                                                                                                   }                                                                                                                                           其中,for是C语言的关键字,其后圆括号内通常有3个表达式,主要用于for循环控制。表达式之间用分号隔开,表达式是C语言中任何合法的表达式。一般情况下,表达式1为循环变量赋初值;表达式2是循环条件;表达式3用于修该循环变量值。for下面的语句为循环体。循环体多于一个语句时,要用复合语句表示。                                                                                                                   for循环执行过程如下:                                                                                                                         (1)计算表达式1的值。                                                                                                                   (2)计算表达式2的值。若表达式2的值为“真”(非0),则执行步骤(3);若表达式2的值为“假”(0),则执行步骤(5)。                                                                                                                   (3)执行循环体语句。                                                                                                                     (4)执行表达式3,然后返回步骤(2)。                                                                                         (5)for循环结束,执行循环结构后面的语句。

说明:                                                                                                                                                      (1)for循环中的表达式1、表达式2和表达式3都是可选项,可以省略,但“;”不能省略,例如for(;;)。                                                                                                                                            (2)省略表达式1,表示不对循环变量赋初值,例如:                                                                                 i=1;                                                                                                                                                   for( ;i<=n;i++)                                                                                                                                 sum=sum+i;                                                                                                                           (3)若省略表达式2,则取消了结束循环的条件。此时,如果循环体中没有终结循环的处理,便形成了死循环,例如:                                                                                                                                       for(i=1; ;i++)                                                                                                                                       sum=sum+i;                                                                                                                           (4)若省略表达式3,则不对循环控制变量进行操作,这是可在循环体语句中加入修改控制变量的语句,例如:                                                                                                                                              for(i=1;i<=n; )                                                                                                                                      {                                                                                                                                                                 sum=sum+i;                                                                                                                                       i++;                                                                                                                                                }                                                                                                                                                  (5)表达式1可以是设置循环变量初值的赋值表达式,也可以是其他表达式,例如:                               i=1;                                                                                                                                                     for(sum=0;i<=n;i++)                                                                                                                                sum=sum+i;                                                                                                                           (6)表达式1和表达式3可以是逗号表达式,例如:                                                                                   for(i=1,sum=0;i<=n;sum=sum+i,i++);                                                                                       (7)表达式2也可以是数值表达式或字符表达式,只要其值非零,就可以执行循环体,例如:               for( ;(c=getcher())!='\n';)                                                                                                                         printf("%c",c);

3种循环语句的比较     

       while、do...while、for3种循环语句都可以实现循环结构程序设计,这3种语句有哪些区别呢?我们在设计循环结构程序时应该怎样选择恰当的循环语句呢?                                                                   (1)3种循环语句都可以用于处理同一个问题,一般情况下它们可以互相代替。                                 (2)当使用while和do...while循环语句时,循环变量初始化的操作应该在while和do...while语句之前完成,而for循环语句可以在表达式1中实现循环变量的初始化。                                                       (3)while和do...while循环语句只在while后面指定循环条件,在循环体中应包含使循环结束的语句。                                                                                                                                                           (4)do...while循环语句和while循环语句的区别在于:do...while是先执行后判断,因此do...while至少要执行一次循环体;而while是先判断后执行,如果条件不满足,则可能一次循环体语句也不执行。                                                                                                                                                        (5)for循环语句可以在表达式3中包含使循环趋于结束的语句,甚至可以将循环体中的操作放到表达式3中。因此,for语句的功能最强,凡用while和do...while循环语句完成的操作,均可以用for循环语句实现。

循环的嵌套 

一个循环体内又包含另一个完整的循环结构,称为循环的嵌套。所谓“包含”是指一个循环结构完全在另一个循环结构的里面。通常把里面的循环称为“内循环”,外面的循环称为“外循环”。3种循环结构可以互相嵌套,但是层次要清楚,不能出现交叉。例如,以下几种都是合法的形式:

流程的转移控制

C语言提供的转移控制语句,除了前面介绍的if...else语句、switch语句、while语句、do…while语句、for语句外,还有goto语句、break语句和continue语句,它们主要用于控制程序的转向。在结构化程序设计中,要限制goto语句的使用。对于break语句和continue语句要深刻理解他们在循环语句中的应用。

   goto语句

      goto语句为无条件转向语句,它使系统转向标号所在的语句行执行。其一般格式如下:                               goto 语句标号;                                                                                                                         语句标号用标识符表示,它的命名规则与变量的命名规则相同,即由字母、数字和下划线组成。其第一个字符必须为字母或下划线,不能用整数来作标号。                                                                 结构化程序设计方法主张限制使用goto语句,因为滥用goto语句将使程序流程无规律、可读性差。但是,也不会绝对禁止使用goto语句。一般来说,goto语句有以下两种用途。                                (1)与if语句一起使用,构成循环结构。                                                                                           (2)从循环体中跳转到循环体外,但在C语言中break语句和continue语句跳出本层循环和结束本次循环。goto语句的使用机会已大大减少,只有需要从多层循环的内层循环直接跳出时才用到goto语句。但是这种用法不符合结构化规则,一般不宜采用。

   break语句

        break语句可以跳出switch结构,继续执行switch语句下面的一个语句。实际上,break语句还可以用于从循环体内跳出循环体,即提前结束循环,然后继续执行循环体后面的语句。                           break语句的一般格式如下:                                                                                                                  break;                                                                                                                                           break语句在循环结构中的功能是终止当前的循环,转向后续语句执行。下面给出各种循环语句中break语句的执行流程:   

 break语句不能用于循环语句和switch语句之外的任何其他语句中。       

   continue语句

    continue语句的一般格式如下:            continue;                                                                            continue语句只能用在循环结构中,其作用是结束本次循环,即不再执行循环体中continue语句之后的语句,而是立即转入对循环条件的判断和执行。                                                                        continue语句和break语句的区别:continue语句只能结束本次循环,而不是终止整个循环的执行;而break语句则是结束整个循环过程,不再判断执行循环的条件是否成立。下面给出了continue语句用于各种循环结构的情况及执行流程,       注   break语句与continue语句的区别:                                                                                                      (1)break语句终止当前循环,执行循环体外的第一条语句;而continue语句是终止本次循环,继续执行下一次循环。                                                                                                                        (2)break语句可以用于switch语句,而continue语句不可以。

   exit函数

除了goto、break、continue流程控制语句外,C语言中的标准库函数也可以用于控制程序的流程。为了在程序中调用该函数,需要在程序开头包含头文件<stdlib.h>。exit函数的一般调用格式如下:                          exit(int state);                                                                                                    exit函数的作用是终止程序的执行,强制返回操作系统,并将int型参数state的值传送给调用进程(一般为操作系统)。当state值为0或宏常量EXIT_SUCCESS时,表示程序正常退出;当state值为非0值或为宏常量EXIT_FAILURE时,表示程序出现某种错误后退出。

  • 6
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值