1、第 6章 循环结构程序设计6.1 循环语句概述6.2 for语句和 while语句6.3 直到型循环 do-while语句6.4 break语句与 continue语句6.5循环型程序设计举例良好的源程序书写习惯 注释 (续)* 第六章循环结构程序设计 16.1 循环语句概述求 1 100的累计和。根据已有的知识,可以用 “1+2+100” 来求解,但显然很繁琐。现在换个思路来考虑:首先设置一个累计器 sum,其初值为 0,利用 sum += n来计算( n依次取 1、 2、 、 100),只要解决以下 3个问题即可:( 1)将 n的初值置为 1;( 2)每执行 1次 “sum += n”后,
2、 n增 1;( 3)当 n增到 101时,停止计算。此时, sum的值就是 1 100的累计和。根据已有的知识,单独实现每一步都不难。但是,由于需要经常使用这种重复计算结构(称为循环结构), C语言提供了 3条循环语句来实现,以简化、并规范循环结构程序设计。* 第六章循环结构程序设计 2在语言中,可用以下语句实现循环:( 1)用 for语句。( 2)用 do-while语句。( 3)用 while语句。( 4)用 goto语句和 if语句构成循环。使用 goto语句实现求解 1 100累计和的程序可以如下:* 第六章循环结构程序设计 3main() int n=1, sum=0;loop: s
3、um += n; n+;if (n=100) goto loop;printf(“sum=%dn”, sum);其中 “loop:”为语句标号(格式:标号 : 语句行),其命名遵循标识符命名规则。 goto语句格式: goto 标号,功能为:使系统转向标号所在的语句行执行。注意 :结构化程序设计方法,主张限制使用 goto语句。因为滥用 goto语句,将会导致程序结构无规律、可读性差。另外,从功能上说, for语句可完全代替当型循环语句while,所以该语句也不是必需的。* 第六章循环结构程序设计 46.2 for语句和 while语句在 3条循环语句中, for语句最为灵活,不仅可用于循环次
4、数已经确定的情况,也可用于循环次数虽不确定、但给出了循环继续条件的情况。例 6.1 求 1 100的累计和。main() int i,sum=0; /*将累加器 sum初始化为 0*/for(i=1; i=100; i+) sum += i; /*实现累加 */printf(“sum=%dn“,sum); 程序运行情况如下:sum=5050* 第六章循环结构程序设计 5例 6.2 求 n的阶乘 n!( n!=1*2*n )。* 第六章循环结构程序设计 6main() int i, n;long fact=1; /*将累乘器 fact初始化为 1*/printf(“Input n: ”); sc
5、anf(“%d”, for(i=1; i=n; i+) fact *= i; /*实现累乘 */printf(“%d ! = %ldn“, n, fact); 程序运行情况如下:Input n: 55 ! = 1201 for语句的一般格式for(变量赋初值 ; 循环继续条件 ; 循环变量增值 ) 循环体语句组; 2 for语句的执行过程( 1)求解 “变量赋初值 ”表达式。( 2)求解 “循环继续条件 ”表达式。如果其值非 0,执行( 3);否则,转至( 4)。( 3)执行循环体语句组,并求解 “循环变量增值 ”表达式,然后转向( 2)。( 4)执行 for语句的下一条语句。3说明( 1)
6、“变量赋初值 ”、 “循环继续条件 ”和 “循环变量增值 ”部分均可缺省,甚至全部缺省,但其间的分号不能省略。* 第六章循环结构程序设计 7( 2)当循环体语句组仅由一条语句构成时,可以不使用复合语句形式,如上例所示。( 3) “循环变量赋初值 ”表达式,既可以是给循环变量赋初值的赋值表达式,也可以是与此无关的其它表达式(如逗号表达式)。例如, for(sum=0;i=100;i+) sum += i; for(sum=0,i=1;i=100;i+)sum += i; ( 4) “循环继续条件 ”部分是一个逻辑量,除一般的关系(或逻辑)表达式外,也允许是数值(或字符)表达式。* 第六章循环结构
7、程序设计 84 while语句( 1)一般格式while(循环继续条件 ) 循环体语句组; ( 2)执行过程1)求解 “循环继续条件 ”表达式。如果其值为非 0,转 2);否则转 3)。2)执行循环体语句组,然后转 1)。3)执行 while语句的下一条。显然, while循环是 for循环的一种简化形式(缺省 “变量赋初值 ”和 “循环变量增值 ”表达式)。* 第六章循环结构程序设计 9例 6.3 用 while语句求 1 100的累计和。main() int i=1,sum=0; /*初始化循环控制变量 i和累计器 sum*/while( i=100 ) sum += i; /*实现累加 */i+; /*循环控制变量 i增 1*/printf(“sum=%dn”,sum); 程序运行情况如下:sum=5050* 第六章循环结构程序设计 10