当前位置:首页 >> 其它课程 >>

第06章循环结构(1)


第6章 循环控制
循环结构:反复执行一个程序段 的程序。
1.

2.
3.

4.

goto语句和if语句构成循环 while语句 do-while语句 for语句
1

goto语句
格式:goto 语句标号 功能:无条件的转移到“语句标号”

处。

2

说明:语句标号用标识符表示,不 能只是数字。

abc: scanf(“%d,%d,%d”,&a,&b,&c);
if (a= =0) goto abc ;

3

while语句(当型循环语句)
WHILE(表达式) 循环体语句 流程图:
0

表达式
非 0

语句

4

功能
?先判断表达式的值,若为非

0执行“语句”;
?执行后再判断表达式的值,

直至为0,退出循环。
5

例1:求s=1+2+3…100的值。 main( )

{int i=1,s=0;
while (——) (i<=100)

{ ———

printf(“s=%d\n”,s);
}
6

s=s+i; ——— i++ ;

}

说明:
①循环体若是复合语句,应用{ } 括起来。 ②循环体中应有使循环趋向结束 的语句,如:i++

7

do-while语句
格式:
do 循环体语句 while(表达式);





非0

表达式

0

8

功能:先执行循环体(语句), 然后判断表达式,若其值为 非0,重新执行循环体,直到 表达式的值为0。

9

例:求S=1+2+3+4+…100

main( ) { int i=1,s=0; do {s=s+i;

i++;
} while (i<=100); printf(“s=%d”,s); }

累加

问:如何求1~100奇数的和,以及奇

数的个数。

计数

10

求S=1+3+5+……100,和为s,个数为j。

main( ) {int i=1,s=0,j=0; do while (i<=100) { s=s+i; {s=s+i; i=i+2; i=i+2; j=j+1;} j=j+1; } while (i<=100); printf(“s=%d\n”,s); printf(“j=%d”,j); }
11

比较while与do while
while先循环后判断 ,while先判 断后循环 ? 循环体基本相同 ? 循环变量初始化都在循环体外进行。
? do

while(表达式) 循环体语句 do 循环体语句 while(表达式);
12

练习:求任意整数的阶乘,j=n!

分析:j=1*2*3*4*……n是累乘.
初值:i=1, j=1,

循环体:j=j*i, i=i+1,
循环条件: i<=n 用while或do-while循环求解。
13

main( ) {int n,i,j; scanf(“%d”,&n); while: i=1; j=1; do { while (i<=n) j=j*i; { j=j*i; i++;} i=i+1; } while (i<=n); printf(“%d!=%d”,n,j);}
14

for语句
格式:

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

功能: ①求表达式1的值 ②求表达式2的值,若为真执行循环体 (语句)。 ③求表达式3的值,并继续判断表达式2 的值,直至其值为假(0)退出循环。
15

表达式1

表达式2 真



语句

表达式3

for语句的下面语句

16

for语句常用的简单形式

for
(循环变量赋初值;循环条件;循环变量增值) 循环体语句;

表达式2

表达式3 循环体语句
17

求:S=1+2+3+4+……100 for( i=1; i<=100; i++) s=s+i;
相当于:

i=1 ; while (i<=100) { s=s+i ; i++; }
18

求j= n! for (i=1; i<=n; i++) j=j*i;

19

说明:
(1) 可省表达式1 如:i=1; for (; i<=100; i++) s+=i;

(2) 可省表达式3,将循环条件放循环 体中 for(i=1;i<=100; ) {s=s+i;i++;}
20

(3) 表达式2 一般是关系(i<=100)或 逻辑表达式(a<b && a!=0);
? 也可是数值和字符表达式,只要其

值为非0则执行循环体。

21

(4)可无循环体,将其放在表达式 3中。 for (i=1;i<= 100; s=s+i,i++) ;

22

(5) 表达式1和表达式3可没有:

for(;(c=getchar( ))!=?\n?;)
printf(“%c”,c);

运行:abcdef
abcdef
23

main() { int i, s; s=0; for (i=1;i<=4; s=s+i, i++) ; printf("s=%d",s); } 结果:s=10
24

main() 如果i=0,输出结果 { int i, s; 是什么? s=0; for (i=1;i<=4; s=s+i, i++) printf("s=%d",s); }
结果:s=0s=1s=3s=6 结果:s=0s=0s=1s=3s=6
25

求:e=1+1/1!+1/2!+…1/n!, n取10。 分析: 初值e=1, n=1, 阶乘p=1, 循环条件:n<=10, 循环变量增值: n++ 循环体:p=p*n ,e=e+1/p;
26

main( ) e=1+1/1!+1/2!+…1/n! { int n; float e, p; e=1.0; p=1.0; for (n=1;n<=10;n++) { p*=n; e=e+1/p; } printf(“e=%10.7f\n”,e); }
27

运行:e=_2.7182810

28

练习:

求: p=1+1/3+1/5+1/7… 某项小于 10-4为止。 分析:

初值:n=1, t=1, p=0; 循环条件:t>= 10-4 增量 n=n+2; 循环体:t=1/n ; p=p+t;
29

p=1+1/3+1/5+1/7…

main() { float t, p, n; n=1; t=1; p=0; while (t>=1.0e-4) { t=1/n; p=p+t; n=n+2; } printf("%f",p); }
30

for循环:
p=0;
for (t=1,n=1; t>=1.0e-4 ;n=n+2)

{ t=1/n; p=p+t; }
31

求π
π/4≈1-1/3+1/5-1/7+…… 最后一项
的绝对值小于10-6为止。 分析: 初值:t=1, n=1, s=1 循环条件:t>= 10-6 循环体:n=n+2; t=s/n, s=-s ; pi=pi+t;
32

#include “math.h” main( ) π/4≈1-1/3+1/5-1/7+…… { int s=1; float n, t, pi; t=1.0, pi=0; n=1.0; while (fabs(t)>=1.0e-6) { t=s/n; pi=pi+t; n=n+2; s=-s; } pi=pi*4; printf(“pi=%10.6f\n”,pi); }
33

用for作循环: for (; fabs(t)>=1.0e-6 ;n=n+2)

{pi=pi+t; s=-s; t=s/n;}

34

说出下列程序的功能
main( ) { int i=1,n,a,b,c; a=0;b=0;c=0; while (i<=10) {scanf(“%d”,&n); if (n>0) a++; else if (n==0) b++; else c++; i=i+1; } printf(“a=%d,b=%d,c=%d”,a,b,c); } 统计10个整数中,正数, 负数, 0的个数
35

上机作业
?P12

1 ?P13 3、4、5、7

36

37

38

break语句
形式:break;
功能:跳出循环体,提前终止循 环

39

例:将1~100间偶数依次相加,求其和刚超过 1000时的偶数值及相应的和。

main( ) { int n,s=0; for (n=0;n<=100;n=n+2) { s=s+n; if (s>=1000) break; } printf(“n=%d,s=%d\n”,n,s); }
运行结果:n=64,s=1056
40

continue语句
形式:continue;
说明:只能用于循环体中,不能用 于switch中。 功能:终止本次循环,进行下次循 环的判定。
41

例:求1~100间既能被3整除又能被5整除 的整数的和并输出这些数。 分析:

i%3==0 && i%5==0

循环初值:i=1;终值:i=100; 循环体:判断是否满足条件:_______, 满足累加并输出,不满足终止本次循环, 进行下次循环判定。
42

条件改为:

if (i%3!=0 || i%5!= 0) main( ) { int i,s=0; for (i=1;i<=100;i++) { if (i%3==0 && i%5== 0) { s=s+i; printf(“i=%d\n”,i); } else continue ; } printf(“s=%d\n”,s); }
43

main( ) { int i,s=0; for (i=1;i<=100;i++) { if (i%3!=0 || i%5!= 0) continue; else { s=s+i; printf("i=%d\n",i); } } printf("s=%d\n",s); }
44

使用continue语句,把100~200之间不 能被3整除的数输出。 main() { int n; for(n=100;n<=200;n++) { if(n%3==0) continue; printf(“%d ”,n); } }
45

循环的嵌套
嵌套:循环中包含一个完整的循环。 可以多层嵌套,内层为内循环,外 层为外循环。
说明: 1.各种循环语句可以互相嵌套。 交叉 2. 循环嵌套不能交叉

46

例:打印九九乘法表 1*1=1 1*2=2 1*3=3 …… 1*9=9 2*1=2 2*2=4 2*3=6……. 2*9=18 : : : : : 9*1=1 9*2=18 9*3=27 ……. 9*9=81 分析:外循环:i --- 1~9 内循环:j --- 1~9 内循环体:m=i*j, 输出i*j=m的形式 printf (“ %d*%d=%2d”,i,j,m);
47

main( ) { int i , j,m; for (i=1;i<=9; i++) /*外循环*/ { for (j=1;j<=9;j++) 去掉重复,循环条件改为? { m=i*j; j<=i printf (“ %d*%d=%2d”,i,j,m); } printf(“\n”); } }

问题:内外循环都改用while语句应如 何写?
48

1*1=1 2*1=2 3*1=1 …… 9*1=9

1*2=2 2*2=4 3*2=6 9*2=18

1*3=3 2*3=6 3*3=9

1*4=4 …… 1*9=9 2*4=8 … … 2*9=9

9*3=27 9*4=36 …… 9*9=81

49

main( ) { int i , j,m; i=1; while (i<=9) { j=1; while (j<=9) { m=i*j; printf (" %d*%d=%2d",i,j,m); j++; } printf("\n"); i++; } }
50

判断m是否为素数。 只能被1和本身整除的数是素数。 数学证明:m不能被2~m的平方根间的数整 除即可。 循环:i 从2~ k (k是m的平方根) 循环体:判断:m%i ==0 不是素数,判断 下一个。 循环结束:i>k,是素数,输出。 m=16 k=4 i -> 2 m%i ==0 ,不是素数 m=17 k=4 i -> 2,3,4, 都不能使m%i ==0
51

#include "math.h" main( ) {int m,k,i; scanf(“%d”,&m); k=sqrt(m); i<m for (i=2;i<=k;i++) if (m%i==0) break; if (i>k) printf(”%d是素数\n",m); else printf(”%d不是素数\n",m); } i==m

如何用素数的定义作?

52

main( ) { int m,k,i; scanf("%d",&m); for (i=2;i<=m-1;i++) { if (m%i==0) break; } if (i=m) printf(“%d 是素数 \n",m); else printf(“%d不是素数\n",m); }

53

求100~200间的素数。 分析: ? m从101循环到200 ? m=m+2

54

?

求两个正整数的最大公约数和最 小公倍数。(m,n)

分析: ? i从1循环到m,若最后一个同时 能被n,m整除的i就是最大公约数。
?最小公倍数=(m*n)/最大公约数
55

main( ) {int i,m,n,t,k; scanf("%d,%d",&n,&m);

for (i=1;i<=m;i++) { if (n%i==0 && m%i==0) k=i; } printf("k=%d\n",k); t=m*n/k; printf("t=%d\n",t); }
56

上机作业
?P14

2 、4 、7

57


相关文章:
第六章 循环结构程序设计学习重点
第六章 循环结构程序设计学习重点 1、三种循环结构的基本语法 ? While 语句 ? ? 先判断,再执行循环体,所以有可能一次循环体都不执行。 使用 while 循环是要...
第六章循环控制1
教学步骤及内容 : 旁批栏: 第六章 循环控制 6.1 概述 在很多实际应用中需要用到循环控制。 C 语言中的循环结构1)用 goto 语句和 if 语句构成循环; 2)...
第六章循环结构练习题
第六章循环结构练习题 隐藏>> 第六章【题 6.1】设有程序段 int k=10; while(k=10) k=k-1; 则下面描述中正确的是 A)while 循环执行 10 次 C)循环...
第六章 循环结构程序设计
第六章 循环结构程序设计第六章 循环结构程序设计隐藏>> 《C 程序设计》 第六章 循环结构程序设计§6.1 概述许多问题的求解归结为重复执行的操作, 比如数值计算...
第六章 循环结构程序设计
C 程序设计 备课笔记 第六章 循环结构程序设计许多问题的求解归结为重复执行的...1)先计算 while 后面的表达式的值,如果其值为“真”则执行循环体, 2)在执行...
第06章循环控制版书
第​0​6​章​循​环​控​制​版​书 暂无评价|0人阅读|0次下载第06 章 循环结构 1. 什么时候使用循环结构:如果程序要求的问题中含有相似...
第六章 循环控制
第六章 循环控制_教育学_高等教育_教育专区。第六章 循环控制教学目的及要求:...掌握循环语句的用法 教学内容: §6.1 概述循环结构是程序中一种很重要的结构...
第五部分:循环结构
33页 免费 第5章循环结构 94页 免费 第06章循环结构(1) 57页 免费如要投诉违规内容,请到百度文库投诉中心;如要提出功能问题或意见建议,请点击此处进行反馈。 ...
C语言第六章循环结构复习题
C语言第六章循环结构复习题 隐藏>> 循环结构程序设计复习题 循环结构程序设计复习题一.选择题 1. 以下 while 循环中,循环体执行的次数是: ). 循环中,循环体执...
循环结构练习一
第4章 循环结构 33页 免费 第5章循环结构 94页 免费 第06章循环结构(1) 57页 免费 ]第5章 循环结构 57页 免费 第五章循环结构 44页 2财富值 1循环结构...
更多相关标签:
程序输出循环结构1 | 斩首循环06 | 循环结构 | 循环结构程序设计 | vb循环结构 | labview定时循环结构 | 流程图 循环结构 | 循环结构ppt |