第5章-循环结构程序设计_第1页
第5章-循环结构程序设计_第2页
第5章-循环结构程序设计_第3页
第5章-循环结构程序设计_第4页
第5章-循环结构程序设计_第5页
已阅读5页,还剩74页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第5章循环结构程序设计

循环结构是结构化程序设计中的第3种基本结构。循环结构是在一定条件下重复地执行一组语句的一种程序结构。这种结构在程序设计中,应用非常广泛。实现循环结构程序的手段是循环语句。

C语言有3种循环语句:

for语句;

while语句;

do_while语句。在C语言中还提供一个goto语句,叫做无条件转移语句。

在if语句的配合下,它可以用于构造循环程序。在结构化的程序设计中,不建议使用goto语句或尽量不用。在本章对它在构造循环结构中的应用,只作非常简单的介绍。

在开始学习循环语句之前,先学习C语言中的逗号运算符,它在循环结构程序得到应用。本章重点是学习上述3种循环语句和它们在循环结构设计中的应用。

逗号运算符和逗号表达式5.1

goto语句5.2循环语句5.3多重循环——循环的嵌套5.4

break语句和continue语句5.5小结5.65.1逗号运算符和逗号表达式逗号运算符“,”是对若干个表达式进行运算,其格式为:表达式1,表达式2,表达式3,…

其运算规则是,依次计算逗号分开的表达式,运算的结果即整个表达式的值为最右边表达式的值。

逗号运算的结合性是自左向右。逗号运算符的优先级,在所有运算中,是最低的。逗号表达式常用在循环语句中。5.2goto语句

无条件转移语句goto能够实现函数范围内的任意跳转,即从含数的任何一位置跳转到另一任意位置继续执行。

goto语句的这种无条件的转移,破坏了程序的结构化,使得程序的结构混乱不清。不仅给阅读程序带来困难,也使程序的维护变得不容易。

C语言虽然保留了goto语句,但不建议使用。C语言提供有专门用于构造循环结构程序的语句。本节对goto语句只作简单介绍。

goto语句的一般形式为:goto

语句标号;…C语句;…

语句标号:语句;

其中语句标号,是任何合法的C语言标识符。goto语句的功能是,中断执行本语句之后的语句,使程序的执行转移至语句标号指定的语句行,从这里继续序执行程序。

利用goto语句的跳转功能,与if语句的配合,可以构成具有循环结构的程序。利用goto语句可以跳出循环体,跳出if语句。但后果必定破坏程序的结构化,一般不用这种办法。

此程序中通过if和goto构成的两个循环过程:一个是loop_1的循环,实现计数器counter_1的计数,一个是loop_2的循环,实现计数器counter_2的计数。loop_1的循环是被包在loop_2的循环之中的。这叫做循环的嵌套。5.3循环语句

5.3.1for循环语句for循环语句是计数型循环语句,它的一般格式是:for(表达式1;表达式2;表达式3)语句或语句块;

其中表达式1可以是任何类型的,它的作用主要是设置循环控制变量的初始值;表达式2可以是任何类型的,它描述控制循环的条件,用于决定循环是否继续执行;

表达式3可以是任何类型的,每次循环后,由它控制循环控制变量的增值,增值既可以是正数,也可以是负数。for()后面的语句或语句块称为循环体,是需要循环执行的一组语句。

语句的功能和执行过程是,首先,按表达式1设置循环控制变量的初始值。然后,测试循环条件(表达式2)是否成立。表达式2的值为真,就执行循环体一次。

接着按表达式3修改控制变量的值(增加一个量或减少一个量)。然后,再次测试循环条件(计算表达式2),如此循环下去。一旦表达式2的值为假,循环终止,退出for语句,转去执行for后面的语句。上述for语句的工作流程如图5-1所示。

图5-1for语句流程图

以上讨论了for语句的一般格式和用法。其实for语句的3个表达式的使用是非常灵活的。这些灵活性给程序设计带来很大方便。下面介绍几种常见的情况。(1)在一个for语句中使用一个以上的循环控制变量

使用两个或更多的循环控制变量,联合控制程序的循环次数的情况。

【例5-3】输出1~100中偶数的程序。输出形式是,每一行输出10个数据。

程序如下:#include<stdio.h><main(){

int

a,b;

for(a=1,b=1;a+b<=100;a++,b++){

printf("%d",a+b);if(!(a+b)%10))printf("\n");}}

图5-2是例5-3程序的流程图。

图5-2例5-3程序的流程图

(2)for语句中的表达式2可以不含循环控制变量一般情况下,循环次数的控制,是通过表达式2对循环控制变量的测试来实现的。这样的例子我们已经看到了一些。然而,对于for语句来说,这不是绝对必要的。表达式2不一定要测试循环控制变量,实际上,表达式2可以是任何合法的C表达式。

(3)for后面的圆括号内可以不含表达式1,表达式2和表达式3

这时,for语句有如下的形式:

for(;;)

这样的for语句也是合法的。由于for没有表达式2对循环的控制,需要在循环体中有相应的语句控制循环的结束。否则,程序将无休止地进行循环。无休止的循环在软件技术中称为死循环。死循环的程序是没有实用价值的。

(4)没有循环体的for语句在语法上for循环语句没有循环体也是合法的。它有如下的语句形式:for(表达式1;表达式2;表达式3);这个语句将会完全根据3个表达式的内容进行循环,直至循环条件不成立,停止循环。

5.3.2while循环语句

while循环也叫做当型循环。while语句的一般格式为:

while(循环条件表达式)循环体;

其中循环体是需要循环执行的语句。

它可以是一个语句或语句块或者是空语句。括号中的执行循环的条件,可以是任何合法的表达式。当循环条件表达式为真时,执行循环体的语句;为假时,退出循环,程序应执行转到循环语句之后的语句。while语句的流程如图5-3所示。

【例5-6】用while循环语句实现下面的计算。

图5-3while语句流程图

程序如下:#include"stdio.h"main(){

intsum=0,i=1; /*变量初始化*/

while(i<=100)

/*循环条件表达式i<=100*/{ /*循环体开始*/

sum+=i;

/*自然数累加*/i++;

/*形成下一个加数*/} /*循环体结束*/printf("1+2+3+...+100=%d\n",sum); /*输出结果*/}

图5-4是例5-6程序的流程图。

5.3.3do_while

循环语句

for循环语句和while循环语句,在控制流程上有一个共同之处,就是它们都是在循环的开始之前先测试是否满足循环条件。

满足循环条件,则执行循环体;否则,不进行循环。与它们不同,do_while循环语句是先执行循环体,每执行完一次循环体后检查一次循环条件是否满足。

这意味着,用这种循环语句构成的循环的结构,不管循环条件是否满足,其循环体至少要被执行一遍。do_while循环也叫“直到型”循环。

do_while循环语句的一般格式为:

do{

循环体

}while(循环条件);

控制循环的条件可以是任何类型的表达式。当循环条件表达式为真时,继续执行循环体的语句,直到循环条件表达式的值为假时,退出循环,转去执行循环语句后面的语句。

do_while语句的执行过程如图5-5所示。

图5-5dowhile语句的流程图

【例5-8】用do_while语句实现例5-6的程序。#include"stdio.h"main(){

intsum=0,i=1;do{sum=sum+i;i=i+1;

}while(i<=100);

printf("sum=%d\n",sum);}

为了很好地掌握流程图的画法和应用,图5-6给出例5-8程序的流程图。

图5-6例5-8程序的流程图5.4多重循环——循环的嵌套

一个循环包含在另一个循环之中,形成循环套循环的程序结构,称为多重循环结构。多重循环中的各循环必须保持嵌套的结构。嵌套的概念在分支结构一章中介绍过。

循环结构的嵌套的概念与分支结构的嵌套的概念是一致的。图5-7所示为以for循环语句为例,表示出多重循环结构的嵌套关系。对于while和do_while循环语句也是一样。

图5-7多重循环的嵌套结构

对于多重循环的嵌套结构,要注意的是:第一,各循环之间在结构上不能有“交叉”,只能是“包含”或“嵌套”。如果在书写程序时,能够用缩进的格式,清楚地划分出各个循环的嵌套关系,多重循环结构程序是不会发生“交叉”性质的错误的。

第二,要清楚地了解多重循环结构程序的执行过程。也就是,各层循环是怎样工作的,它们之间是怎样的关系。

【例5-10】展示多重循环程序工作过程的例子。

#include<stdio.h>main(){

inti,j,k;

loop1:

for(i=0;i<2;i++) /*外循环开始*/{

printf("loop1i=%d\n",i);/*输出I*/loop2:

for(j=0;j<3;j++) /*中循环开始*/{

printf("loop2j=%d\n",j);/*输出j*/loop3:

for(k=0;k<2;k++)

/*内循环开始*/{

printf("loop3k=%d\n",k);/*输出k*/} /*内循环结束*/}/*中循环结束*/

} /*外循环结束*/}

为了更清楚地展示嵌套循环的过程,图5-8所示给出了例5-10的程序流程图。

图5-8例5-10程序的流程图5.5break语句和continue语句

5.5.1break语句break;

它在循环语句中的作用是,强制中断当前循环体的执行,退出该循环,继续执行循环语句后面的语句。

break语句在循环语句中,通常是与if语句配合使用。例如,在例5-5中,曾经应用break语句强制退出循环:

for(;;){

printf("%d",++x);if(!(x%10))

printf("\n");

if(x=100)break;}

这样,break语句实际上为循环语句构成了第二个出口,如图5-9(a)所示。

图5-9break语句和continue语句在循环语句中的应用

5.5.2continue语句

continue是专门用于循环体中的一个语句,它的格式为:

continue。

其功能是,不继续执行循环体中本语句后面部分的循环体语句,而是从循环体头开始执行新的一次循环(如果循环条件满足的话)。与break语句一样,continue语句也是要与if选择语句配合使用才有实际意义,否则,continue语句后面那部分循环体永远不会有机会执行。

特别注意

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论