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

第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


相关文章:
循环结构练习一
第4章 循环结构 33页 免费 第5章循环结构 94页 免费 第06章循环结构(1) 57页 免费 ]第5章 循环结构 57页 免费 第五章循环结构 44页 2财富值 1循环结构...
PASCAL08-循环结构1
第06章循环结构(1) 57页 免费 循环结构1 6页 1下载券 1.1.3循环结构 22...[例一] 二、FOR 语句的含义(执行顺序): 1、先将初值赋给赋值号左边的变量(...
循环结构
循环结构第二讲 12页 2财富值 第四章 循环结构 45页 2财富值 第4章 循环结构 33页 免费 第5章循环结构 94页 免费 第06章循环结构(1) 57页 免费喜欢...
循环结构
循环结构第二讲 12页 2财富值 第四章 循环结构 45页 2财富值 第4章 循环结构 33页 免费 第5章循环结构 94页 免费 第06章循环结构(1) 57页 免费喜欢...
c语言第六章 循环结构程序设计(习题册答案)
c语言第六章 循环结构程序设计(习题册答案)_电脑基础知识_IT/计算机_专业资料。第六章 循环结构程序设计基础练习(A) 、选择题 1、C 语言中 while 和 do-...
循环结构
第五章循环结构 56页 2财富值 第4章 循环结构 33页 免费 第5章循环结构 94页 免费 第06章循环结构(1) 57页 免费 ]第5章 循环结构 57页 免费 循环结构...
循环结构
45页 2财富值 第4章 循环结构 33页 免费 第5章循环结构 94页 免费 第06章循环结构(1) 57页 免费喜欢此文档的还喜欢 循环结构 2页 5财富值 103条件结构与...
循环结构
循环结构第二讲 12页 2财富值 第四章 循环结构 45页 2财富值 第4章 循环结构 33页 免费 第5章循环结构 94页 免费 第06章循环结构(1) 57页 免费喜欢...
循环结构
循环结构第二讲 12页 2财富值 第四章 循环结构 45页 2财富值 第4章 循环结构 33页 免费 第5章循环结构 94页 免费 第06章循环结构(1) 57页 免费喜欢...
循环结构
33页 免费 第5章循环结构 94页 免费 第06章循环结构(1) 57页 免费如要投诉违规内容,请到百度文库投诉中心;如要提出功能问题或意见建议,请点击此处进行反馈。 ...
更多相关标签: