五章循环控制.ppt课件_第1页
五章循环控制.ppt课件_第2页
五章循环控制.ppt课件_第3页
五章循环控制.ppt课件_第4页
五章循环控制.ppt课件_第5页
已阅读5页,还剩33页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、语语言言程程序序设设计计第第五五章章 第五章 循环控制概述概述goto语句以及用语句以及用goto语句构成循环语句构成循环 while 语句语句do while 语句语句for 语句语句循环嵌套循环嵌套几种循环的比较几种循环的比较break 与与continue语句语句程序举例程序举例语语言言程程序序设设计计第第五五章章第五章第五章 循环控制循环控制本章要点本章要点:建立循环程序设计的根本概念和逻辑思建立循环程序设计的根本概念和逻辑思想想 掌握掌握C言语循环程序设计的方法言语循环程序设计的方法语语言言程程序序设设计计第第五五章章 第五章第五章 循环控制循环控制5.1 5.1 概述概述1.1.引

2、入循环控制语句的作用引入循环控制语句的作用 当满足一定条件时当满足一定条件时, ,反复执行一段程序。反复执行一段程序。2.2.设置循环需求思索的问题设置循环需求思索的问题 循环初值;循环条件的设置;循环体应包括循环初值;循环条件的设置;循环体应包括的语句;循环条件的修正。的语句;循环条件的修正。3.C3.C言语中可用以下语句实现循环言语中可用以下语句实现循环 循环构造主要有:循环构造主要有:1 1用用gotogoto语句和语句和ifif语句构成循环;语句构成循环;2 2用用whilewhile语句;语句;3 3用用do-whiledo-while语句;语句;4 4用用forfor语句。语句。语

3、语言言程程序序设设计计第第五五章章用用if语句和语句和goto语句构成循环,语句构成循环, 第五章第五章 循环控制循环控制5.2 goto5.2 goto语句以及用语句以及用gotogoto语句构成循环语句构成循环 普通方式:普通方式: goto goto 标号;标号; 标号:语句标号:语句其中:标号用标识符表示,即由字母、数字和下划线其中:标号用标识符表示,即由字母、数字和下划线组成,且首字符必需为字母或下划线。组成,且首字符必需为字母或下划线。留意:不能用整数来作标号。留意:不能用整数来作标号。用途:用途:1.1.与与ifif语句一同构成循环构造。语句一同构成循环构造。 2. 2.从循环体

4、中跳到循环体外从循环体中跳到循环体外( (常指最深层。常指最深层。 3. 3.改动程序自上而下的执行顺序。改动程序自上而下的执行顺序。缺陷:滥用缺陷:滥用gotogoto语句,可使程序无规律、可读性差。语句,可使程序无规律、可读性差。 用用if语句和语句和goto语句构成循环,语句构成循环, main( ) int i,sum=0; i=1; loop: if(i=100) sum=sum+i; i+; goto loop; printf(“%d,sum);例例 5.1 语语言言程程序序设设计计第第五五章章用用if语句和语句和goto语句构成循环,语句构成循环, 第五章第五章 循环控制循环控制

5、5.2 goto5.2 goto语句以及用语句以及用gotogoto语句构成循环语句构成循环 普通方式:普通方式: goto goto 标号;标号; 标号:语句标号:语句其中:标号用标识符表示,即由字母、数字和下划线其中:标号用标识符表示,即由字母、数字和下划线组成,且首字符必需为字母或下划线。组成,且首字符必需为字母或下划线。留意:不能用整数来作标号。留意:不能用整数来作标号。用途:用途:1.1.与与ifif语句一同构成循环构造。语句一同构成循环构造。 2. 2.从循环体中跳到循环体外从循环体中跳到循环体外( (常指最深层。常指最深层。 3. 3.改动程序自上而下的执行顺序。改动程序自上而下

6、的执行顺序。缺陷:滥用缺陷:滥用gotogoto语句,可使程序无规律、可读性差。语句,可使程序无规律、可读性差。例例 5.1 语语言言程程序序设设计计第第五五章章例例 5.2 用用while 循环求循环求sum=1+2+ +100 。第五章第五章 循环控制循环控制5.3 while 语句语句普通格式普通格式: while (表达式表达式) 语句语句 特点特点: 先判别,后执行。先判别,后执行。 表达式为非表达式为非 0 值时,执行语句,值时,执行语句,反之那么不执行。反之那么不执行。 属属 “当型当型 循环构造。循环构造。当当P P为真为真 A A表达式语句语句非非0 00NS 流图流图 传统

7、流程图传统流程图 用用 while 循环计算循环计算sum=1+2+ +100 main ( ) int i , sum = 0 ; i = 1 ; while ( i = 100 ) sum = sum + i ; i + + ; printf ( “%d , sum ) ; 语语言言程程序序设设计计第第五五章章例例 5.2 用用while 循环求循环求sum=1+2+ +100 。第五章第五章 循环控制循环控制5.3 while 语句语句普通格式普通格式: while (表达式表达式) 语句语句 特点特点: 先判别,后执行。先判别,后执行。 表达式为非表达式为非 0 值时,执行语句,值时,

8、执行语句,反之那么不执行。反之那么不执行。 属属 “当型当型 循环构造。循环构造。当当P P为真为真 A A表达式语句语句非非0 00NS 流图流图 传统流程图传统流程图 用用 while 循环计算循环计算sum=1+2+ +100 main ( ) int i , sum = 0 ; i = 1 ; while ( i = 100 ) sum = sum + i ; i + + ; printf ( “%d , sum ) ; 语语言言程程序序设设计计第第五五章章例如例如 反例反例 阐明: (1) 循环体可以是一条语句或是复合语句。 后者应有 号。 (2) 在循环体中应有使循环趋于终了的语句

9、。 如上述程 序中的 i+ 。 (3) 留意表达式可以是各种类型的表达式或数 值类型。 如: while(1)、while( 2) 、 while(a) 等。 (4) 留心“边境值,留意循环次数。 (5) 留意 while(表达式)后不要加分号。 留心留心“边境值边境值 留意循环次数留意循环次数main ( ) int n = 0 ; while ( n+ = 1 ) printf (“ %d n , n ) ; printf (“ %d n , n ) ; 运转结果运转结果: 123留意留意 while(表达式表达式)后不要加分号后不要加分号main ( ) int i ,sum = 0 ;

10、 i = 1 ; while ( i = 100 ); sum = sum + i ; i+ ; printf ( “%d , sum ); 程序将进入程序将进入“死死 循环,无法得到循环,无法得到正确结果。正确结果。语语言言程程序序设设计计第第五五章章 阐明: (1) 循环体可以是一条语句或是复合语句。 后者应有 号。 (2) 在循环体中应有使循环趋于终了的语句。 如上述程 序中的 i+ 。 (3) 留意表达式可以是各种类型的表达式或数 值类型。 如: while(1)、while( 2) 、 while(a) 等。 (4) 留心“边境值,留意循环次数。 (5) 留意 while(表达式)后

11、不要加分号。 例如例如 反例反例语语言言程程序序设设计计第第五五章章 5.4 do while 语句 普通格式: do 语句 while ( 表达式 ) ; 特点: 先执行,后判别。 属典型的 “直到型 循环构造。 用do while循环求sum=1+2+ +100 A直到直到P为假为假NS 流图流图 用用 do while循环循环求求sum=1+2+ +100 main ( ) int i , sum = 0 ; i = 1; do sum = sum + i ; i + + ; while ( i = 100 ) ; printf ( “ %d , sum ) ; 例例 5.3 语语言言程

12、程序序设设计计第第五五章章 5.4 do while 语句 普通格式: do 语句 while ( 表达式 ) ; 特点: 先执行,后判别。 属典型的 “直到型 循环构造。 用do while循环求sum=1+2+ +100 A直到直到P为假为假NS 流图流图 例例 5.3 语语言言程程序序设设计计第第五五章章阐明阐明: 普通情况下,用普通情况下,用 while 和和 do while 处置同一问处置同一问题时假设二者的循环体一样,那么它们的结果题时假设二者的循环体一样,那么它们的结果一样。一样。但如但如while后面的表达式一开场就为后面的表达式一开场就为0时,两种循时,两种循环体的结果是不

13、同的。环体的结果是不同的。 while循环例如循环例如main ( ) int sum=0,i ; scanf(“%d,&i); while ( i = 10 ) sum=sum+i; i+; printf ( “ %d , sum ) ; 2while循环例如循环例如 用用 do while循环循环求求sum=1+2+ +100 main ( ) int i , sum = 0 ; i = 1; do sum = sum + i ; i + + ; while ( i = 100 ) ; printf ( “ %d , sum ) ; 1do while循环例如循环例如while循环

14、结果循环结果while循环结果循环结果假设输入假设输入 1 那么结果那么结果为为 55 假设输入假设输入 11 那么结果那么结果为为 0do while循环结果循环结果do while循环结果循环结果假设输入假设输入 1 那么结果那么结果为为 55 假设输入假设输入 11 那么结果那么结果为为 11 语语言言程程序序设设计计第第五五章章阐明阐明: 普通情况下,用普通情况下,用 while 和和 do while 处置同一问处置同一问题时假设二者的循环体一样,那么它们的结果题时假设二者的循环体一样,那么它们的结果一样。一样。但如但如while后面的表达式一开场就为后面的表达式一开场就为0时,两种

15、循时,两种循环体的结果是不同的。环体的结果是不同的。 1while循环例如循环例如2do while循环例如循环例如while循环结果循环结果do while循环结果循环结果语语言言程程序序设设计计第第五五章章 例例:以下以下while循环执行的循环执行的 次次,输出结果为输出结果为 main ( ) int k = 2 ; while ( k ) printf ( “%d , , k ) , k ; printf ( “ n ) ; A)无限次无限次 B)0 次次 C)1次次 D)2 次次 E)程序有错程序有错答案:答案:D输出为输出为: 2 , 1 ,语语言言程程序序设设计计第第五五章章

16、求解表达式求解表达式 1 1求解表达式求解表达式 3 3表达式表达式 2 2语句语句for 语句下语句下的其它语句的其它语句真真假假5.5 for 语句语句 普通格式:普通格式:for (表达式表达式1 ; 表达式表达式2 ; 表达表达式式3 ) 语句语句 语语言言程程序序设设计计第第五五章章最简单格式最简单格式: : for ( for ( 循环变量赋初值循环变量赋初值 ; ; 循环条件循环条件 ; ; 循环变量增循环变量增值值 ) ) 语句语句 1100 求求 n例例5.2 用用for 循环实现循环实现 main ( ) int i , sum = 0 ; for(i = 1; i = 1

17、00; i+) sum = sum + i ; printf(“%d, sum );语语言言程程序序设设计计第第五五章章(3) 可把循环体中完成的内容放在表达式中来完可把循环体中完成的内容放在表达式中来完 成,但应留意成,但应留意 “ ; (2) for 语句中的表达式可以部分或全部省略,语句中的表达式可以部分或全部省略, 但但 “ ; 不能省略。不能省略。 阐明:阐明: for for 语句中的表达式可以是任何有效的语句中的表达式可以是任何有效的 C C言语言语表达式。表达式。 for 语句中的表达式语句中的表达式main( ) int i,sum; for(i=0,sum=0;i=100;

18、i+,sum+=i ); printf(“%d,sum);例如例如 for 语句中的表达式语句中的表达式省略表达式省略表达式1main( ) int i,sum; i=0; sum=0; for( ; i 100) break; sum += i; printf(“%d,sum); for 语句中的表达式语句中的表达式省略表达式省略表达式3main( ) int i,sum; sum=0; for(i=0; i = 100; ) sum += i; i+; printf(“%d,sum); for 语句中省略表达式语句中省略表达式1和和3main( ) int i,sum; sum=0; i=

19、0; for (; i 100) break;sum += i; i+; printf(“%d,sum); 用用while实现实现main( ) int i,sum; sum=0; i=0; while( i = 100) sum += i; i+; printf(“%d,sum);可把循环体中完成的内容可把循环体中完成的内容放在表达式中来完成放在表达式中来完成 但应留意但应留意 “ ; 如如: for ( i = 0 ; c != n ; i + = c ) c = getchar ( ) ; printf ( “%d , c ) ; for (i= 0;(c = getchar( )!=

20、n ;i+=c) ;printf ( “%c , c ) ; 省省e1 省省e2 省省e3 省省e1和和e3 省省e1 e2 e3 用用while循环实现循环实现循环体置于表达式中循环体置于表达式中 语语言言程程序序设设计计第第五五章章阐明:阐明: for for 语句中的表达式可以是任何有效的语句中的表达式可以是任何有效的 C C言语言语表达式。表达式。(2) for 语句中的表达式可以部分或全部省略,语句中的表达式可以部分或全部省略, 但但 “ ; 不能省略。不能省略。 (3) 可把循环体中完成的内容放在表达式中来完可把循环体中完成的内容放在表达式中来完 成,但应留意成,但应留意 “ ;

21、例如例如 省省e1 省省e2 省省e3 省省e1和和e3 省省e1 e2 e3 用用while循环实现循环实现循环体置于表达式中循环体置于表达式中 语语言言程程序序设设计计第第五五章章 例: 以下 for 循环最多执行 次。 main ( ) int i , x ; for ( i = 0, x = 0; i = 9 & x != 876 ; i+ ) scanf ( “ %d , &x) ; A) 9次 B) 10 次 C) 无限循环 D)一次也不循环 分析: 次数由( i 9 或x = 876 时终了循环。 假设不断未输入876 ,那么 i 自加当 i 9 时终了。 答案为

22、: B语语言言程程序序设设计计第第五五章章 5.6 循环的嵌套 1. while ( ) 2. do while ( do . . while ( ) ; . . while ( ) ; 3. for ( ; ; ) 4. while ( ) . . for ( ; ; ) do while ( ) ; 语语言言程程序序设设计计第第五五章章 5. for ( ; ; ) 6. do . . while ( ) for ( ; ; ) . . while ( ) ; 对循环嵌套要留意内外循环变量的变化规律: 在循环嵌套中,外循环变量每变化一次,那么内循 环变量将从其初值变化至终值。语语言言程程序

23、序设设计计第第五五章章main ( ) int i , j , x = 0 ; for ( i = 0; i 2;i+ ) x + + ; for ( j=0;j=3;j+) x+ ; x+; printf ( “ %d n , x ); 5.7 几种循环的比较几种循环的比较 当外循环变量当外循环变量 i 为为 0 时,内循环变量时,内循环变量 j 将从将从 0 变化到变化到 3。 当外循环变量当外循环变量 i 为为 1 时,内循环变量时,内循环变量 j 又将又将从从 0 变化到变化到 3。故:故:x 合计累加合计累加 12 次。次。分析语语言言程程序序设设计计第第五五章章 5.8 break

24、 和 continue 语句 一、 break 语句 格式: break ; 用途: 1. 在switch语句中用来使流程跳出switch构, 继续执行 switch 语句后面的其它语句。 2. 用在循环体内,使所在循环立刻终止。即跳出 循环体,继续执行循环体后面的其它语句。 留意留意: break 语句不能用于循环和语句不能用于循环和switch语句语句之外之外 的任何其它语句中。的任何其它语句中。 例如例如 break的运用的运用例如例如: for(r=1; r 100 ) break ; printf(“ %f , area ); 程序找错程序找错break找错找错 if ( a b )

25、 max = a ; break ; a+ ; else max = b ; break ; b+ ; 语语言言程程序序设设计计第第五五章章 5.8 break 和 continue 语句 一、 break 语句 格式: break ; 用途: 1. 在switch语句中用来使流程跳出switch构, 继续执行 switch 语句后面的其它语句。 2. 用在循环体内,使所在循环立刻终止。即跳出 循环体,继续执行循环体后面的其它语句。 留意留意: break 语句不能用于循环和语句不能用于循环和switch语句语句之外之外 的任何其它语句中。的任何其它语句中。 例如例如程序找错程序找错语语言言程

26、程序序设设计计第第五五章章 二、二、 continue 语句语句 格式格式: continue ; 作用作用: 用来终了本次循环。即跳过循环体中尚未执用来终了本次循环。即跳过循环体中尚未执 行的语句,接着进展下一次能否执行循环的行的语句,接着进展下一次能否执行循环的 判别。判别。 留意留意: break 和和 continue 的区别。的区别。 例如例如: while ( 表达式表达式1 ) while(表达式表达式1) if(表达式表达式2) break; if (表达式表达式2)continue; 另外:在另外:在 for 循环中,遇到循环中,遇到 continue 语句后,语句后, 先计

27、算先计算 for 循环表达式循环表达式3的值的值, 再执行表达式再执行表达式2, 根据其结果来决议能否继续执行根据其结果来决议能否继续执行 for 循环。循环。语语言言程程序序设设计计第第五五章章例例 5.5 把把100 200之间的不能被之间的不能被3整除的数输出整除的数输出 main ( ) int n ; for ( n = 100 ; n = 200 ; n + + ) if ( n % 3 = =0) continue ; printf(“ %d , n); if ( n % 3 != 0 ) printf( “%d, n ) ;语语言言程程序序设设计计第第五五章章 补充例题补充例题

28、1 : main ( ) main ( ) int i , j , x = 0 ; for ( i = 0 ; i 2 ; i+ ) x + + ; for ( j = 0 ; j 100 ) break ; C) k = 0 ; D) s = 32764 ; do while (s+%2|s%2 ) k+ ; s + + ; k+ ; while ( k 0 ) ;答案:答案:C C分析分析 A) 中中i%100的值总在的值总在0 99。 (i = i %100;i + +)等价等价于于 i = i %100 + 1。 因此,因此, if 的条件总为的条件总为“真真 break 语句不能够语

29、句不能够执行。执行。 C) 中随着中随着 k 值的增大,值的增大,总要溢出,使总要溢出,使k值为负或值为负或零。零。 D) 中不论中不论s为何值,表为何值,表达式达式 s+ % 2 和和 s % 2 中中总有一个为非总有一个为非 0 。分析分析语语言言程程序序设设计计第第五五章章 2. 以下程序段中以下程序段中 是无限循环。是无限循环。 A) i = 100 ; B) for ( ; ; ) ; while ( 1 ) i = i %100 ; i+ ; if ( i 100 ) break ; C) k = 0 ; D) s = 32764 ; do while (s+%2|s%2 ) k+

30、 ; s + + ; k+ ; while ( k 0 ) ;答案:答案:C C分析分析语语言言程程序序设设计计第第五五章章 3. 以下程序运转结果是 。 main( ) int i , b , k = 0 ; for ( i = 1 ; i = 0 ) k+ ; printf ( “ %d , %d , k , b ) ; A) 3 , 1 B) 8 , 1 C) 3 , 0 D) 8 , 2答案:答案:D Db 的值为的值为:1 , 0 , 1 , 0 , 1语语言言程程序序设设计计第第五五章章 例5.6 求 的近似值。 /4 = 1 1/3 + 1/5 1/7 . 算法: S1: sig

31、n = 1 S2: sum = 1 S3: deno = 3 S4: sign = ( 1) sign S5: term = sign ( 1/deno ) S6: sum = sum + term S7: deno = deno + 2 S8: 假设 deno 1e 6 前往 S4, 否那么算法终了。5.9 程序举例程序举例 语语言言程程序序设设计计第第五五章章#include “ math.h main ( ) int s ; float n , t , pi ; t=1; pi=0; n=1.0; s = 1; while(fabs(t) = 1e 6) pi=pi+t; n=n+2 ;

32、 s = s ; t = s / n ; pi = pi * 4 ; printf ( “pi =%10.6f ,pi ) ;运转结果运转结果: pi = 3.147分析分析:(1) pi = 1 n = 3 s = 1 t = 1/3(2) pi = 1 1/3 n = 5 s = 1 t = 1/5(3) pi = 11/3+1/5 . 5.9 程序举例程序举例 语语言言程程序序设设计计第第五五章章 例例5.7 求求 Fibonacci(斐波纳契斐波纳契)数列数列(前前40个数个数) F1 = 1 ( n = 1 ) F2 = 1 ( n = 2 ) Fn = Fn 1 + Fn 2 (

33、n 3 )源程序:源程序: main ( ) long int f1 , f2 ; int i ; f1 = 1 ; f2 = 1 ; for ( i = 1 ; i = 20 ; i+ ) printf ( “ % 12ld %12ld , f1 , f2 ) ; if ( i % 2 = = 0 ) printf ( “n ) ; f1 = f1 + f2 ; f2 = f2 + f1 ; 语语言言程程序序设设计计第第五五章章 例 5.8 判别 m 能否为素数。 #include “math.h main ( ) int m , i , k ; scanf ( “ %d , &m ) ; k = sqrt(m) ; for ( i = 2 ; i = k + 1) printf( “ %d is a prime number n m ) ; else printf (“%d is not a pr

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论