第6章循环结构程序设计 6.1循环语句概述 62for语句和whle语句 63直到型循环 do-while语句 64 break语句与 continue语句 65应用举例 良好的源程序书写习惯—注释(续) IReturn
第6章 循环结构程序设计 6.1 循环语句概述 6.2 for语句和while语句 6.3 直到型循环do-while语句 6.4 break语句与continue语句 6.5 应用举例 良好的源程序书写习惯──注释(续) [Return]
61循环语句概述 求1~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的累计 和。 其中(2)是重复的。由于需要经常使用这种重复计算结构(称为 循环结构),C语言提供了3条循环语句来实现,以简化、并规范循环 结构程序设计 在C语言中,可用以下语句实现循环: (1)用for语句。 (2)用 do-while语句 (3)用 while语句
6.1 循环语句概述 求1~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的累计 和。 其中(2)是重复的。由于需要经常使用这种重复计算结构(称为 循环结构),C语言提供了3条循环语句来实现,以简化、并规范循环 结构程序设计。 在C语言中,可用以下语句实现循环: (1)用for语句。 (2)用do-while语句。 (3)用while语句
(4)用goto语句和语句构成循环。使用goto语句实现求解1~100累计和 的程序可以如下 maIr f int n=l, sum=0; loop: sum +=n;n++ if(n<=100)goto loop printf(" sum=%odn, sum) 其中“loop”为语句标号(格式:标号:语句行),其命名遵循标识 符命名规则。goto语句格式:goto标号,功能为:使系统转向标号所在 的语句行执行。 注意:结构化程序设计方法,主张限制使用goto语句。因为滥用 goto语句,将会导致程序结构无规律、可读性差 Return
(4)用goto语句和if语句构成循环。使用goto语句实现求解1~100累计和 的程序可以如下: main() { int n=1, sum=0; loop: sum += n; n++; if (n<=100) goto loop; printf(“sum=%d\n”, sum); } 其中“loop:”为语句标号(格式:标号: 语句行),其命名遵循标识 符命名规则。goto语句格式:goto 标号,功能为:使系统转向标号所在 的语句行执行。 注意:结构化程序设计方法,主张限制使用goto语句。因为滥用 goto语句,将会导致程序结构无规律、可读性差。 [Return]
62for语句和 while语句 在3条循环语句中,for语句最为灵活,不仅 可用于循环次数薮已经确定的情况,也可用于循环 次数虽不确定、但给出了循环继续条件的情况 [案例61求1~100的累计和 /*程序功能:求1~100的累计和* maino Int lsum=0;/将累加器sum初始化为0*/ for(i=1;j<=100;计+)sum+=i;/实现累加* printf("sum=%d\n",Sum) [程序演示]
6.2 for语句和while语句 在3条循环语句中,for语句最为灵活,不仅 可用于循环次数已经确定的情况,也可用于循环 次数虽不确定、但给出了循环继续条件的情况。 [案例6.1] 求1~100的累计和。 /*案例代码文件名:AL6_1.C*/ /*程序功能:求1~100的累计和*/ main() { int i,sum=0; /*将累加器sum初始化为0*/ for(i=1; i<=100; i++) sum += i; /*实现累加*/ printf("sum=%d\n",sum); } [程序演示]
案例62]求n的阶乘n!(n=1*2**n)。 *程序功能:求n!* maind i int i, long fact=1;/将累乘器fact初始化为1*/ printf(" Input n: ) scanf(%d,&n) for(i1; K=n; i++) fact *=i /*实现 累乘* printf("od!=%ldn",n, fact 「程序演示
[案例6.2] 求n的阶乘n!(n!=1*2*……*n)。 /*案例代码文件名:AL6_2.C*/ /*程序功能:求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); } [程序演示]
变量赋初值 1.for语句的一般格式 for(变量赋初值};[循环继续条 件];[循环变量增值 循环表达 循环体语句组 2.fo语句的执行过程 (1)求解“变量赋初值”表达 循环体语句组 式 (2)求解“循环继续条件”表 变量增值 达式。如果其值非0,执行(3); 否则,转至(4) (3)执行循环体语句组,并求 解“循环变量增值”表达式,然后 For语句的 转向(2)。 下一条语句 (4)执行for语句的下一条语句
1.for语句的一般格式 for([变量赋初值];[循环继续条 件];[循环变量增值]) { 循环体语句组;} 2.for语句的执行过程 (1)求解“变量赋初值”表达 式。 (2)求解“循环继续条件”表 达式。如果其值非0,执行(3); 否则,转至(4)。 (3)执行循环体语句组,并求 解“循环变量增值”表达式,然后 转向(2)。 (4)执行for语句的下一条语句。 变量赋初值 循环表达式 循环体语句组 变量增值 For语句的 下一条语句
3.说明 (1)“变量赋初值”、“循环继续条件”和“循环 变量增值”部分均可缺省,甚至全部缺省,但其间的分 号不能省略 (2)当循环体语句组仅由一条语句构成时,可以不 使用复合语句形式,如上例所示 (3)“循环变量赋初值”表达式,既可以是给循环 变量赋初值的赋值表达式,也可以是与此无关的其它表 达式(如逗号表达式) 例如,for(Sum-0:=100;++)sum+=i; for(sum-0,i=1;i<=100;计++)um+=i; 4)“循环继续条件”部分是一个逻辑量,除一般 的关系(或逻辑)表达式外,也允许是数值(或字符) 表达式
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)执行过程 )求解“循环继续条件”表达 式。如果其值为非0,转2);否则 循环体语句组 转3)。 2)执行循环体语句组,然后转 3)执行whle语句的下一条 While的 条语句 显然, while循环是for循环的一 种简化形式(缺省“变量赋初值 和“循环变量增值”表达式)
4.while语句 (1)一般格式 while(循环继续条件) { 循环体语句组;} (2)执行过程 1)求解“循环继续条件”表达 式。如果其值为非0,转2);否则 转3)。 2)执行循环体语句组,然后转 1)。 3)执行while语句的下一条。 显然,while循环是for循环的一 种简化形式(缺省“变量赋初值” 和“循环变量增值”表达式)。 循环条件表达式 循环体语句组 While的 下一条语句 Y N
案例63]用 whilei语句求1~100的累计和 *案例代码文件名:AL63.C*/ *程序功能:求1~100的累计和* maino inti-l,sum=0;/*初始化循环控制变量i和累计器 sum* */ while( K<=100) i sum +=1 /*实现累加* 1+十 泮*循环控制变量i增1*/ printf( sum=%odn, sum) 「程序演示
[案例6.3] 用while语句求1~100的累计和。 /*案例代码文件名:AL6_3.C*/ /*程序功能:求1~100的累计和*/ main() { int i=1,sum=0; /*初始化循环控制变量i和累计器 sum*/ while( i<=100 ) { sum += i; /*实现累加*/ i++; /*循环控制变量i增1*/ } printf(“sum=%d\n”,sum); } [程序演示]
6.3直到型循环do-whie语句 1.一般格式 do (循环体语句组;} while(循环继续条件)/*本行的分号不能缺省* 当循环体语句组仅由一条语句构成时,可以不使用复合语句形式 执行过程 (1)执行循环体语句组。 (2)计算“循环继续条件”表达式。如果“循环继续条件”表 达式的值为非0(真),则转向(1)继续执行;否则,转向(3)。 (3)执行 do-while的下一条语句。 do- while循环语句的特点是:先执行循环体语句组,然后再判断 循环条件
6.3 直到型循环do-while语句 1.一般格式 do { 循环体语句组; } while(循环继续条件); /*本行的分号不能缺省*/ 当循环体语句组仅由一条语句构成时,可以不使用复合语句形式。 2.执行过程 (1)执行循环体语句组。 (2)计算“循环继续条件”表达式。如果“循环继续条件”表 达式的值为非 0(真),则转向(1)继续执行;否则,转向(3)。 (3)执行do-while的下一条语句。 do-while循环语句的特点是:先执行循环体语句组,然后再判断 循环条件