- 1
- 0
- 约4.87千字
- 约 22页
- 2019-08-02 发布于天津
- 举报
第 6 章 循环结构 基本的程序结构之一 – 顺序、选择、循环 最能发挥计算机程序运算特征的功能 具有最广泛的应用价值 6.1 概述 问题的提出: 求1~100的累计和。 根据已有的知识,可以用“1+2+……+100”来求解,但显然很繁琐。现在换个思路来考虑: 首先设置一个累计器sum,其初值为0,利用sum += n来计算(n依次取1、2、……、100),只要解决以下3个问题即可: (1)将n的初值置为1; (2)每执行1次“sum += n”后,n增1; (3)当n增到101时,停止计算。此时,sum的值就是1~100的累计和。 根据已有的知识,单独实现每一步都不难。但是,由于需要经常使用这种重复计算结构(称为循环结构),C语言提供了3条循环语句来实现,以简化、并规范循环结构程序设计。 在C语言中,可用以下语句实现循环: (1)用for语句。 (2)用do-while语句。 (3)用while语句。 问题的描述(循环程序框图) 循环中止的方法: 计数循环,通过判断循环的次数决定是否中止循环。 非计数循环,通过逻辑条件决定是否中止循环。 循环程序的基本内容: 循环变量 循环终止条件 循环体 6.2 for语句和while语句 在3条循环语句中,for语句最为灵活,不仅可用于循环次数已经确定的情况,也可用于循环次数虽不确定、但给出了循环继续条件的情况。[例6.1] 求1~100的累计和。/*程序功能:求1~100的累计和*/main( ) { int I; /*定义循环控制变量 */ sum=0; /*将累加器sum初始化为0 */ for(i=1; i=100; i++) sum += i; /*实现累加*/ printf(sum=%d\n,sum); } 程序运行情况如下: sum=5050 [例6.2] 求n的阶乘n!(n!=1*2*……*n)。 /*程序功能:求n!*/main() { int i, n; long fact=1; /*将累乘器fact初始化为1*/ printf(“Input n: ”); scanf(“%d”, n); for(i=1; i=n; i++) fact *= i; /*实现累乘*/ printf(%d ! = %ld\n, n, fact); } 程序运行情况如下:Input n: 5↙5 ! = 120 1.for语句的一般格式 for([变量赋初值];[循环继续条件];[循环变量增值]) { 循环体语句组;} 2.for语句的执行过程 执行过程: (1)求解“变量赋初值”表达式。 (2)求解“循环继续条件”表达式。如果其值非0,执行(3);否则,转至(4)。 (3)执行循环体语句组,并求解“循环变量增值”表达式,然后转向(2)。 (4)执行for语句的下一条语句。 3.说明 (1)“变量赋初值”、“循环继续条件”和“循环变量增值”部分均可缺省,甚至全部缺省,但其间的分号不能省略。 (2)当循环体语句组仅由一条语句构成时,可以不使用复合语句形式,如上例所示。 (3)“循环变量赋初值”表达式,既可以是给循环变量赋初值的赋值表达式,也可以是与此无关的其它表达式(如逗号表达式)。 例如,for(sum=0;i=100;i++) sum += i; for(sum=0,i=1;i=100;i++) sum += i; (4)“循环继续条件”部分是一个逻辑量,除一般的关系(或逻辑)表达式外,也允许是数值(或字符)表达式。 4.while语句 (1)一般格式 while(循环继续条件) { 循环体语句组;} (2)执行过程 1)求解“循环继续条件”表达式。如果其值为非0,转2);否则转3)。 2)执行循环体语句组,然后转1)。 3)执行while语句的下一条。 显然,while循环是for循环的一种简化形式(缺省“变量赋初值”和“循环变量增值”表达式)。 [例6.3] 用while语句求1~100的累计和。 /*程序功能:求1~100的累计和*/main() { int i=1,sum=0; /*初始化
原创力文档

文档评论(0)