本章教学内容: 6 . 1 概述 6 . 2 goto 语句及用 goto 语句构成循环 6 . 3 用...

25
1 计计计计计计计 计计计 计计计计计计6.1 计计 6.2 goto 计计计计 goto 计计计计计计 6.3 计 while 计计计计计计 6.4 计 do…while 计计计计计计 6.5 计 for 计计计计计计 6.6 计计计计计 6.7 计计计计计计计 6.8 break 计计计 continue 计计 6.9 计计计计 计 6 计 计计计计 计计计计计计 计计计计计 while 计计 for 计计 计计计计

description

第 6 章 循环控制. 本章教学重点 循环的概念 while 语句 for 语句 多重循环. 本章教学内容: 6 . 1 概述 6 . 2 goto 语句及用 goto 语句构成循环 6 . 3 用 while 语句实现循环 6 .4 用 do…while 语句实现循环 6.5 用 for 语句实现循环 6.6 循环的嵌套 6.7 几种循环的比较 6.8 break 语句和 continue 语句 6.9 程序举例. 6.1 概述. 循环是结构化程序设计的基本结构之一,有着非常重要的应用。 问题 1 : - PowerPoint PPT Presentation

Transcript of 本章教学内容: 6 . 1 概述 6 . 2 goto 语句及用 goto 语句构成循环 6 . 3 用...

Page 1: 本章教学内容: 6 . 1   概述 6 . 2 goto 语句及用 goto 语句构成循环 6 . 3   用 while 语句实现循环 6 .4  用 do…while 语句实现循环

1计算机工程学院 伍俊明

本章教学内容:6.1 概述6.2 goto 语句及用 goto 语句构成循环6.3 用 while 语句实现循环6.4 用 do…while 语句实现循环6.5 用 for 语句实现循环6.6 循环的嵌套6.7 几种循环的比较6.8 break 语句和 continue 语句6.9 程序举例

第 6 章 循环控制

本章教学重点 循环的概念 while 语句 for 语句 多重循环

Page 2: 本章教学内容: 6 . 1   概述 6 . 2 goto 语句及用 goto 语句构成循环 6 . 3   用 while 语句实现循环 6 .4  用 do…while 语句实现循环

2

6.1 概述循环是结构化程序设计的基本结构之一,有着非常重要的应用。

问题 1 :

问题 2 :计算班级 80 名同学 C 语言课程的平均成绩

计算机工程学院 伍俊明

100

1n

y n

Page 3: 本章教学内容: 6 . 1   概述 6 . 2 goto 语句及用 goto 语句构成循环 6 . 3   用 while 语句实现循环 6 .4  用 do…while 语句实现循环

3

6.2 goto 语句及用 goto 语句实现循环

一、无条件转向语句—— goto 语句形式: goto 语句标号;

二、标号语句形式: 标号:语句;

三、说明goto 语句常与 if 语句一起构成循环goto 语句可从循环体内跳到循环体外,反之不行。goto 语句因其破坏结构化原则,很少使用。

四、例 6.1 :计算机工程学院 伍俊明

100

1n

y n6-1.CPP

Page 4: 本章教学内容: 6 . 1   概述 6 . 2 goto 语句及用 goto 语句构成循环 6 . 3   用 while 语句实现循环 6 .4  用 do…while 语句实现循环

4

6.2 goto 语句及用 goto 语句实现循环

例:编程计算 6 ! =1*2*3*4*5*6

计算机工程学院 伍俊明

/* 文件名 :jsjc.cpp*//* 计算 6 ! =1*2*3*4*5*6*/#include <stdio.h> void main(){

int t=1, i=1; loop:t=t*i; i++;

if (i<=6) goto loop;printf("%d!=%d\n", i-1, t);

}

Page 5: 本章教学内容: 6 . 1   概述 6 . 2 goto 语句及用 goto 语句构成循环 6 . 3   用 while 语句实现循环 6 .4  用 do…while 语句实现循环

5

6.3 用 while 语句实现循环while 语句的一般形式 while (表达式)

语句;

计算机工程学院 伍俊明

一般为一般为关系关系表达式表达式或或逻辑逻辑表达式,也表达式,也可以是可以是 CC 语言其他语言其他类型的合法表达式类型的合法表达式

用来控制循环体是用来控制循环体是否执行否执行

称为称为内嵌语句内嵌语句或或循循环体环体,可以是基本,可以是基本语句、控制语句,语句、控制语句,必要时用必要时用复合语句复合语句

是循环重复执行的是循环重复执行的部分 部分

Page 6: 本章教学内容: 6 . 1   概述 6 . 2 goto 语句及用 goto 语句构成循环 6 . 3   用 while 语句实现循环 6 .4  用 do…while 语句实现循环

6

6.3 用 while 语句实现循环while 语句的执行过程

计算机工程学院 伍俊明

假假

真真

表达式 ?

内嵌语句

循环控制条件循环控制条件

循环体循环体

Page 7: 本章教学内容: 6 . 1   概述 6 . 2 goto 语句及用 goto 语句构成循环 6 . 3   用 while 语句实现循环 6 .4  用 do…while 语句实现循环

7

6.3 用 while 语句实现循环例 6.2 编程计算 sum=1+2+3+ … +100

思路:寻找加数(通项)与累加和 sum 的规律 一般累加和形式: sum = sum + 通项; 通项 ai = i ,不同题目差异较大

计算机工程学院 伍俊明

累加和——存于变量 sumsum 中 ,累加形式: sum=sum+isum=sum+i , 非通项部分作为 sumsum 初值,故 sumsum 的初值初值设为 1— 初始初始

化化。通项 ai—— 加数 ii ,,通项 ai=i 从 1 变到 100 , 每循环一次,使 i 增 1 ,直到 i 的值超过 100 。 ii 的初值初值设为 1— 初始化初始化。程序: 6-2.CPP

Page 8: 本章教学内容: 6 . 1   概述 6 . 2 goto 语句及用 goto 语句构成循环 6 . 3   用 while 语句实现循环 6 .4  用 do…while 语句实现循环

8

6.3 用 while 语句实现循环说明: while 语句是循环语句,循环的初始化工作必须放

在 while 语句之前完成,切不可放在循环体的开头 while 语句是“先判断、后执行”,如果条件一开

始就不满足,循环体则一次都不执行; while 语句中的条件是循环执行的条件,即条件为

假时循环就停止; 循环体中至少有一条语句能够影响循环条件,防止

产生死循环; while 语句适用于循环次数无法预知的情形。

一计算机工程学院 伍俊明

Page 9: 本章教学内容: 6 . 1   概述 6 . 2 goto 语句及用 goto 语句构成循环 6 . 3   用 while 语句实现循环 6 .4  用 do…while 语句实现循环

9

6.4 用 do…while 语句实现循环

do…while 语句的一般形式 do

语句;语句; while (表达式表达式);

执行过程:

计算机工程学院 伍俊明

循环体

表达式

例例 6.36.3 计算计算

程序:程序:

100

1n

y n

6-3.CPP

Page 10: 本章教学内容: 6 . 1   概述 6 . 2 goto 语句及用 goto 语句构成循环 6 . 3   用 while 语句实现循环 6 .4  用 do…while 语句实现循环

10

6.4 用 do…while 语句实现循环

说明 do…while 语句能够实现循环控制,可与 while

语句等价转换; do…while 语句的循环初始化工作也必须安排在

do…while 语句之前,不可设置在循环体内; do…while 语句是“先执行、后判断”,所以,

循环体至少执行一次,这与 while 语句不同。 循环体同样必须能够影响和控制循环条件,避免

发生死循环。 do…while 语句适用于循环次数无法预知的情形

。计算机工程学院 伍俊明

Page 11: 本章教学内容: 6 . 1   概述 6 . 2 goto 语句及用 goto 语句构成循环 6 . 3   用 while 语句实现循环 6 .4  用 do…while 语句实现循环

11

6.4 用 do…while 语句实现循环

例编程利用台劳公式计算 sinx ,误差 <10-6 :

计算机工程学院 伍俊明

sin(x) = x - x3

3!+ x5

5!- x7

7!+ …… + (-1)i x(2i+1)

(2i+1)!

#include <stdio.h>#include <math.h>void main() { int i; float s, t, x; printf(“x=”); scanf(“%f”, &x); i=1; s=x; t=x; do { t=t*(-1)*x*x/(2*i*(2*i+1)); s=s+t; i++; } while (fabs(t)>1e-6); printf(“sin(%f)=%f\n”, x, s)}

思路:连乘 + 累加T0=x

Ti=Ti-1* , i>0

Si =Si-1 +Ti

注意初始化与循环体的

设置

(-1)* x2

2i*(2i+1)

Page 12: 本章教学内容: 6 . 1   概述 6 . 2 goto 语句及用 goto 语句构成循环 6 . 3   用 while 语句实现循环 6 .4  用 do…while 语句实现循环

12

6.5 用 for 语句实现循环for 语句的一般形式

for ( 表达式 1 ;表达式 2 ;表达式 3)

语句;执行过程

计算机工程学院 伍俊明

循环初始条件循环初始条件 循环控制条件循环控制条件 条件修正式条件修正式

Page 13: 本章教学内容: 6 . 1   概述 6 . 2 goto 语句及用 goto 语句构成循环 6 . 3   用 while 语句实现循环 6 .4  用 do…while 语句实现循环

13

6.5 用 for 语句实现循环执行过程

计算机工程学院 伍俊明

计算表达式 1

语句

计算表达式 3

表达式 2为真 ?

例:计算 1+2+…+100

sum=0; for ( i=1; i<=100; i++) for ( i=1; i<=100; i++) sum=sum+i;sum=sum+i;

for 语句等价于下列语句:表达式 1 ;while (表达式 2 ){ 语句; 表达式 3 ;}

Page 14: 本章教学内容: 6 . 1   概述 6 . 2 goto 语句及用 goto 语句构成循环 6 . 3   用 while 语句实现循环 6 .4  用 do…while 语句实现循环

14

6.5 用 for 语句实现循环例:输入 10 个数,找出其中最大者和最小者

#include <stdio.h>void main( ) { int i, min, max, n; printf(“ 请输入 10 个整数 :”); scanf(“%d”,&n); max=min=n; for (i=2; i<=10; i++) { scanf ("%d",&n); if (n<min) min=n; if (n>max) max=n; } printf(“ 最大数 =%d ,最小数 =%d\n",max, min) ;}

计算机工程学院 伍俊明

Page 15: 本章教学内容: 6 . 1   概述 6 . 2 goto 语句及用 goto 语句构成循环 6 . 3   用 while 语句实现循环 6 .4  用 do…while 语句实现循环

15

6.5 用 for 语句实现循环说明 表达式 1 中可以完成初始化工作,如果缺省,则初始化工

作必须在 for 语句之前完成。 表达式 2 实际上是循环控制条件,应通过循环体或表达式

3 中必须能改变其值,防止出现死循环。如要实现无限循环,可以缺省。

表达式 3 常设置有影响循环条件的语句,如果缺省,必须在循环体中进行设置。

for 语句特别适用于可预知或事先计算出循环次数的情形 表达式 1 、表达式 2 和表达式 3 均可采用逗号表达式,实

现较为复杂的功能。

计算机工程学院 伍俊明

Page 16: 本章教学内容: 6 . 1   概述 6 . 2 goto 语句及用 goto 语句构成循环 6 . 3   用 while 语句实现循环 6 .4  用 do…while 语句实现循环

16

6.5 用 for 语句实现循环for 语句的应用方式 for ( ; i<=100; i++) sum+=i; for (i=1; ; i++) sum+=i; for (i=1; i<=100; ) {sum+=i; i++; } for ( ; i<=100; ) {sum+=i; i++; } for (sum=0, i=1; i<=100; i++) sum+=i; For ( ; ; ) 语句 ; /* 可能出现死循环 */

计算机工程学院 伍俊明

Page 17: 本章教学内容: 6 . 1   概述 6 . 2 goto 语句及用 goto 语句构成循环 6 . 3   用 while 语句实现循环 6 .4  用 do…while 语句实现循环

17

6.6 循环的嵌套循环嵌套:在一个循环语句的循环体中包含了其他的循环语句。内循环中还可以嵌套循环,构成多层循环。while 语句、 do…while 语句、 for 语句可以相互嵌套。while 语句、 for 语句嵌套其他循环语句:

计算机工程学院 伍俊明

while (…){ … while (…) {…} …}

while (…){ … do while (…) {…} …}

while (…){ … for(…; …; …) {…} …}

for (…; …; …){ … while (…) {…} …}

for (…; …; …){ … do while (…) {…} …}

for (…; …; …){ … for(…; …; …) {…} …}

Page 18: 本章教学内容: 6 . 1   概述 6 . 2 goto 语句及用 goto 语句构成循环 6 . 3   用 while 语句实现循环 6 .4  用 do…while 语句实现循环

18

6.6 循环的嵌套循环嵌套应用举例 s=1!+2!+…+20!

#include <stdio.h>

void main() {

int i, j; long sum, factor;

for (sum=0, i=1; i<=20; i++) {

factor=1;

for (j=1; j<=i; j++)

factor=factor*j;

sum=sum+factor;

}

printf(“sum=%ld\n”, sum);

}计算机工程学院 伍俊明

Page 19: 本章教学内容: 6 . 1   概述 6 . 2 goto 语句及用 goto 语句构成循环 6 . 3   用 while 语句实现循环 6 .4  用 do…while 语句实现循环

19

6.8 break 语句和 continue 语句

计算机工程学院 伍俊明

#include <stdio.h>void main(){ int n,i; for(n=2; n<=100; n++){   for(i=2; i<n; i++)    if(n % i==0) break;    if(i>=n) printf("\t%d", n); } /*for n*/} /*main*/

Page 20: 本章教学内容: 6 . 1   概述 6 . 2 goto 语句及用 goto 语句构成循环 6 . 3   用 while 语句实现循环 6 .4  用 do…while 语句实现循环

20

6.8 break 语句和 continue 语句

6.8.2 continue 语句——循环的短路形式 continue;

功能:结束循环体的执行,直接进入下一轮循环例 6.5 输出 100~200 之间不能被 3 整除的数

计算机工程学院 伍俊明

#include <stdio.h>void main(){ int n; for(n=100; n<=200; n++){   if (n % 3 == 0)    continue;   printf(“%5d”, n); } /*for n*/} /*main*/

Page 21: 本章教学内容: 6 . 1   概述 6 . 2 goto 语句及用 goto 语句构成循环 6 . 3   用 while 语句实现循环 6 .4  用 do…while 语句实现循环

21

6.9 程序举例例 6.6 计算 π 的值,要求误差小于 10-6 。

π/4≈1-1/3+1/5-1/7+…

解题思路 累加和形式: pi=pi+ 通项 通项:( -1 ) i+1/(2*i-1)—— 正负相间! 公式只计算了 π/4 ,所得和需乘以 4 !

程序:

计算机工程学院 伍俊明

6-6.CPP

Page 22: 本章教学内容: 6 . 1   概述 6 . 2 goto 语句及用 goto 语句构成循环 6 . 3   用 while 语句实现循环 6 .4  用 do…while 语句实现循环

22

6.9 程序举例例 6.7 求 Fibonacci 数列的前 40 项——迭代法 F1=F2=1

Fn=Fn-2+Fn-1 , n≥2

解题思路 前两项直接赋值,以后各项为前两项之和 一行输出 4 个数 if ( 个数 % 4 == 0) printf(“\

n”);

程序:

计算机工程学院 伍俊明

6-7.CPP

Page 23: 本章教学内容: 6 . 1   概述 6 . 2 goto 语句及用 goto 语句构成循环 6 . 3   用 while 语句实现循环 6 .4  用 do…while 语句实现循环

23

6.9 程序举例例 6.10 字母加密:输入 一行明文,输出其密文。 密码方案: A 变成 E , a 变成 e ,以后每个字母变成其

后的第 4 个字母,但W 、 X 、 Y 、 Z 分别变成A 、 B 、 C 、 D , w 、 x 、 y 、 z 、分别变成a 、 b 、 c 、 d

解题思路 对于明文字母 c :‘ A’~‘Z’ 以及‘ a’~‘z’ ,将其 ASCII码加

4 加 4 后若 ASCII码在‘ Z’~‘Z’+4 以及‘ z’~‘z’+4 之间,将 c减去 26

程序

计算机工程学院 伍俊明

6-10.CPP

Page 24: 本章教学内容: 6 . 1   概述 6 . 2 goto 语句及用 goto 语句构成循环 6 . 3   用 while 语句实现循环 6 .4  用 do…while 语句实现循环

24

6.9 程序举例例:输出几何图形

ABCDEFGHIJKLM*NOPQRSTUVWXYZ BCDEFGHIJKLM*NOPQRSTUVWXY CDEFGHIJKLM*NOPQRSTUVWX DEFGHIJKLM*NOPQRSTUVW EFGHIJKLM*NOPQRSTUV FGHIJKLM*NOPQRSTU GHIJKLM*NOPQRST HIJKLM*NOPQRS IJKLM*NOPQR JKLM*NOPQ KLM*NOP LM*NO M*N *

计算机工程学院 伍俊明

解题思路 英文字母共 26 个,图形

中字母共 26/2 行 第 i 行:

左边从第 i 个字母开始一直到 M

中间一个 *

右边从 N 到 27-i 个字母

#include <stdio.h>void main(){ char c; int i; for(i=0;i<13;i++) { for(c=i; c<13; c++) printf(“%c”, c+65); /* 每行左半部分 */ printf(“*”); /* 中间的星号 */ for(; c<26-i; c++) printf(“%c”, c+65); /* 每行右半部分 */ printf(“\n”); /* 一行结束后换行 */ } /*for i*/ printf(“*\n”); /* 最后一行星号 */}

Page 25: 本章教学内容: 6 . 1   概述 6 . 2 goto 语句及用 goto 语句构成循环 6 . 3   用 while 语句实现循环 6 .4  用 do…while 语句实现循环

25

第 6 章 循环控制作业( P129 ) 6.1 6.5 6.6 (上机) 6.7 6.8 (上机) 6.11 6.14 (上机)

计算机工程学院 伍俊明