第5章循环结构 本章学习目标 在程序设计中对a于那些需要重复执行的操作应该采用循环 结构完成。利用循环结构处理各类重复操作既简单又方便,循 环结构又称重复结构。在C语言中有三种可以构成循环的循环语 句,本章将一一进行介绍。通过本章的学习,读者应该掌握以 下内容: while语句和用while语句构成的循环结构 do-while语句和用do-while语句构成的循环结构 for语句和用for语句构成的循环结构 循环结构的嵌套 break和continue语句在循环体中的作用
第5章 循环结构 本章学习目标 在程序设计中对a于那些需要重复执行的操作应该采用循环 结构完成。利用循环结构处理各类重复操作既简单又方便,循 环结构又称重复结构。在C语言中有三种可以构成循环的循环语 句,本章将一一进行介绍。通过本章的学习,读者应该掌握以 下内容: ◼ while语句和用while语句构成的循环结构 ◼ do-while语句和用do-while语句构成的循环结构 ◼ for 语句和用for语句构成的循环结构 ◼ 循环结构的嵌套 ◼ break和continue语句在循环体中的作用
5.1 while语句和用while语句构成的 循环结构 5.1.1相关知识 循环是一种对同一程序段有规律的重复,被重复执行 的部分叫循环体。循环的执行要满足一定的条件(循环条 件),循环的终止要达到一定的条件(终止条件)。在程 序设计中要注意循环不能永远运行,必须能退出循环。循 环结构的特点是:循环体执行与否及其执行次数必须视其 类型与条件而定,且必须能在适当的时机退出循环。 C语言提供了while、do-while、for三种语句实现 循环,其中while循环是当型循环,先判断循环条件,再 根据条件决定是否执行循环体,执行循环体的最少次数为 0
5.1 while语句和用while语句构成的 循环结构 5.1.1 相关知识 循环是一种对同一程序段有规律的重复,被重复执行 的部分叫循环体。循环的执行要满足一定的条件(循环条 件),循环的终止要达到一定的条件(终止条件)。在程 序设计中要注意循环不能永远运行,必须能退出循环。循 环结构的特点是:循环体执行与否及其执行次数必须视其 类型与条件而定,且必须能在适当的时机退出循环。 C语言提供了while 、do-while、for三种语句实现 循环,其中while循环是当型循环,先判断循环条件,再 根据条件决定是否执行循环体,执行循环体的最少次数为 0
5.1.2程序范例 1.范例一 程序5-1:求1+2+3+.+100的值。 这是一个求100个数的累加和问题。加数从1变化到 100,可以看到加数是有规律变化的,后一个加数比前一 个加数增1,第一个加数为1,/小最后一个加数为100:因 此可以在循环体中使用一个整型变量引,每循环一次使增 1,一直循环到1的值超过100,用这个办法就解决了所需 的加数问题;但是要特别注意的是变量需要有一个正确 的初值,这里初值应当设为0。 下一个要解决的是求累加和。设用一个变量sum存放 这100个数的和值,可以先求0+1
5.1.2 程序范例 1.范例一 程序5-1:求1+2+3+.+100的值。 这是一个求100个数的累加和问题。加数从1变化到 100,可以看到加数是有规律变化的,后一个加数比前一 个加数增1,第一个加数为1,最后一个加数为100;因 此可以在循环体中使用一个整型变量i,每循环一次使i增 1,一直循环到i的值超过100,用这个办法就解决了所需 的加数问题;但是要特别注意的是变量i需要有一个正确 的初值,这里初值应当设为0。 下一个要解决的是求累加和。设用一个变量sum存放 这100个数的和值,可以先求0+1
的和并将其放在sum中,然后把sum中的数加上2再存放在 sum中,依次类推,这和人们的心算过程没有什么区别, sum代表着人们脑中累加的那个和数,不同的是心算过程 由人们自己控制。在这里,sum累加的过程要放在循环中 由计算机判断所加的数是否已经超过100,加数则放在变 量中,并在循环过程中每一次增1。 以下就是求累加和的典型算法
的和并将其放在sum 中,然后把sum中的数加上2再存放在 sum中,依次类推,这和人们的心算过程没有什么区别, sum代表着人们脑中累加的那个和数,不同的是心算过程 由人们自己控制。在这里,sum累加的过程要放在循环中, 由计算机判断所加的数是否已经超过100,加数则放在变 量i中,并在循环过程中每一次增1。 以下就是求累加和的典型算法
main( int i,sum i=1; sum=0; /*sum的初值为0*/ while(i<=100) /*当i小于或等于100时 执行循环体*/ {sum=sum+i;i++; /*在循环体中累加 次,增1*/ printf("sum=%d \n",sum);
main( ) { int i,sum ; i=1; sum=0; /*sum的初值为0*/ while(i<=100) /*当i小于或等于100时 执行循环体*/ {sum=sum+i; i++;} /*在循环体中累加 一次,i增1*/ printf("sum=%d\n",sum); }
程序运行后的输出结果: sum=5050 注意: (1)如果在第一次进入循环时,wile后圆括号内 表达式的值为0,循环一次也不执行。在本程序中,如果 的初值大于100,将使表达式100时,循环 结束。如果没有引++这条语句,则的值始终不变,循环 将无限进行
程序运行后的输出结果: sum =5050 注意: (1)如果在第一次进入循环时,while后圆括号内 表达式的值为0,循环一次也不执行。在本程序中,如果i 的初值大于100,将使表达式i100时,循环 结束。如果没有i++这条语句,则i的值始终不变,循环 将无限进行
(3)在循环体中,语句的先后位置必须符合逻辑, 否则将会影响运算结果,例如,若将上例中的while循环 体改写成: while (i<=100) { i++ /*先计算i++,后计 算sum的值*/ sum=sum+i; 运行后,将输出: sum=5150 运行的过程中,少加了第一项的值1,而多加了最后 一项的值101
(3)在循环体中,语句的先后位置必须符合逻辑, 否则将会影响运算结果,例如,若将上例中的while循环 体改写成: while (i<=100) { i++ ; /*先计算i++,后计 算sum的值*/ sum=sum+i; } 运行后,将输出: sum=5150 运行的过程中,少加了第一项的值1,而多加了最后 一项的值101
2.范例二 程序5-2:用n/4=1-1/3+1/5-1/7+1/9-.公式 求n的近似值,直到最后一项的绝对值小于10-4为止。 本题的基本算法也是求累加和,但比例5-1稍为复杂。 与例5-1比较,不同的是: (1)用分母来控制循环次数,若用存放分母的值, 则每累加一次应当增2,每次累加的数不是整数,而是 一个实数,因此n应当定义成loat类型。 (2)可以看成隔一项的加数是负数,若用t来表示相 加的每一项,因此,每加一项之后,t的符号应当改变, 这可用交替乘1和-1来实现
2.范例二 程序5-2:用π/4=1-1/3+1/5-1/7+1/9 -.公式 求π的近似值,直到最后一项的绝对值小于10-4为止。 本题的基本算法也是求累加和,但比例5-1稍为复杂。 与例5-1比较,不同的是: (1)用分母来控制循环次数,若用n存放分母的值, 则每累加一次n应当增2,每次累加的数不是整数,而是 一个实数,因此n应当定义成float类型。 (2)可以看成隔一项的加数是负数,若用t来表示相 加的每一项,因此,每加一项之后,t的符号应当改变, 这可用交替乘1和-1来实现
3)从以上求n的公式来看,不能决定n的最终值应该 是多少;但可以用最后一项t(1/n)的绝对值小于10-4 来作为循环的结束条件。 程序如下: #include "math.h" /*调用fabs函数时 要求包含math.h文件*/ main() int s;
3)从以上求π的公式来看,不能决定n的最终值应该 是多少;但可以用最后一项t(1/n)的绝对值小于10-4 来作为循环的结束条件。 程序如下: #include "math.h" /*调用fabs函数时 要求包含 math.h文件*/ main( ) { int s;
float n,t,pi; t=1.0; /*t中存放每项的 值,初值为1*/ pi=0, pi中存放所求的n的值,初值为0*/ n=1.0; /*n中存放 每项分母*/ s=1.0 /*s中存放每项分 子,其值按公式在1和-1之间变化*/ while fabs(t)>=1e-4) pi=pi+t;
float n, t, pi; t=1.0; /*t中存放每项的 值,初值为1 */ pi=0; /* pi中存放所求的π的值,初值为0*/ n=1.0; /*n中存放 每项分母*/ s=1.0; /*s中存放每项分 子,其值按公式在1和-1之间变化*/ while ( fabs(t)>=1e-4) { pi=pi+t;