第06章循环结构的程序设计.ppt_第1页
第06章循环结构的程序设计.ppt_第2页
第06章循环结构的程序设计.ppt_第3页
第06章循环结构的程序设计.ppt_第4页
第06章循环结构的程序设计.ppt_第5页
已阅读5页,还剩49页未读 继续免费阅读

下载本文档

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

文档简介

1、1,第六章,循环结构的程序设计,2,循环语句的执行流程 while 语句 do-while 语句 for 语句,本 章 要 点,3,循环的概念,问题:从键盘上输入10个整数并求和,怎么编程? 问题:从键盘上输入500个整数并求和,怎么编程?,4,6.1 循环的基本概念,循环 反复执行同一段程序,直到满足一定的条件后才停止执行该段程序。 C语言中控制循环的语句: while do-while for,5,首先判断循环控制表达式是否为“真”,若为“真”,则反复执行循环体;若为“假”,则结束循环。,1.当型循环,6,首先执行循环体,然后再判断循环控制表达式,若为“真”,则反复执行循环体,直到循环控制

2、表达式为“假”时结束循环。,2.直到型循环,7,6.2 while语句,while语句格式: while ( 表达式 ) 语句; 说明: 语句部分即循环体可以是简单语句,也可以是复合语句。,8,while语句的执行流程,9,main ( ) int count,num,total; count=0; total=0; /*total:存放累加和*/ while ( count10 ) /* 循环控制条件 */ count +; /* 循环体 */ printf (Enter the No.%d=, count); scanf (%d, ,例,从键盘输入10个整数,求这 10个整数的和,10,m

3、ain ( ) int n=0; while ( n3 ) printf (”n is %dn”,n); n+ ; printf(”Thats all.n”); ,例,例:分析程序的运行结果,11,无法正常终止的程序,称为“死循环”。 结论:while语句循环体中,一定要有能够对循环控制条件产生影响的语句。避免出现“死循环”现象。,12,index=1; while ( index 5 ) printf(”Good morning!n”); 分析:程序段将无限次打印字符串。因为循环中没有任何语句可以改变循环控制变量index的初值1。,例1 分析下列程序段,13,index=1; while(

4、 - - index 5 ) printf(”Good morning!n”); 分析:仍有问题,程序改变了index,但方向错了。在index达到系统能够处理的最大负数时,将会产生下溢而终止程序。 结论:循环体中必须有能够使循环正常停止的条件。,例2 分析下列程序段,14,分析:由于不知道要输入的字符数量,只知停止条件是输入字母a,则只能将循环控制条件设为ch!=a。 #include main( ) char ch= ; while ( ch!=a) putchar( ch = getch( ) ); ,例:从键盘中读入一系列字符,直 到输入字母 a 时才停止,15,改写: #includ

5、e main( ) char ch; while(ch = getch( ) !=a) putchar(ch); ,16,分析:n 作为行结束标记 #define EOF -1 定义文件结束标记 main ( ) int c,nl=0,nc=0; nl行计数器nc字符计数器 while(c = getchar( )!= EOF ) + nc; 进行字符计数 if ( c = n ) + nl; 如果找到n,则行计数printf(chars=%d,lines=%dn,nc,nl); ,例:对输入的行和字符进行计数,17,例:求1到100的之和 main ( ) int total=0, i=1;

6、 while ( i = 100 ) total = total + i; i +; printf(”Total=%dn, total); ,循环嵌套:在循环体中,又包含有循环语句,构成循环嵌套。 例:输出下三角形乘法九九表。 1 2 3 4 5 6 7 8 9 - 1 2 4 3 6 9 4 8 12 16 5 10 15 20 25 6 12 18 24 30 36 7 14 21 28 35 42 49 8 16 24 32 40 48 56 64 9 18 27 36 45 54 63 72 81 假设:行号为i (1=i=9),列号为j (1=j=i) 则:第 i 行中一共要输出 i

7、 个乘积,i=6 j=5 i*j,main ( ) int i=1, j; while(i=9) printf(%4d,i+); printf (n-n); i=1; while ( i= 9 ) j = 1; while ( j = i ) printf (%4d, i*j ); j +; printf (n); i +; ,20,while使用注意: 1.while (0) . 由于循环的条件表达式恒等于0,循环体永远也不会执行,是编程者的错误。 2.while (1) . 由于循环的条件表达式恒等于1,所以不可能通过循环控制条件来结束循环体的执行,称为“死循环”。,21,3.为了保证循环

8、正常运行,应该特别注意: 循环控制条件 控制条件的初始状态(初始值) 循环体内部对控制条件的影响,22,6.4 do-while语句,do-while语句格式 do 语句 while ( 表达式 ) ;,23,do-while语句的执行流程,表达式?,执行语句,成立,不成立,执行while子句之后的语句,循环控制条件,循环体,24,do-while语句先执行循环体然后再判断循环控制条件,而while和for却是先判断条件之后再执行循环体。 使用do-while构成的循环,循环体部分至少要执行一次; 而采用while构成的循环,循环体部分有可能一次也不会执行。,do-while与while的区别

9、:,25,main( ) unsigned int number; printf (Input the number:); scanf (%d, ,例:输入一个 =0 的整数,要求以相反的顺序输出该数。例如输入12345,则输出为54321。,26,第一类 0,1,2,3,4,5,6,7,8,9 第二类 +,-,*,/,%,= 第三类 其它字符 当输入字符时先计数然后停止接收输入,例 从键盘输入任意的字符,按下 列规则进行分类计数,main( ) int class1=0, class2=0, class3=0; char ch; do putchar( ch=getch( ) ); swit

10、ch (ch) case 0: case 1: case 2: case 3: case 4: case 5: case 6: case 7: case 8: case 9: class1+; break; /* 对分类1计数 */ case +: case -: case *: case /: case %: case =: class2+; break; /* 对分类2计数 */ default: class3+; break;/* 对分类3计数 */ while (ch != ); printf(class1=%d, class2=%d, class3=%dn, class1, clas

11、s2, class3); ,28,6.3 for 语句,for语句格式: for(表达式1;表达式2;表达式3) 循环语句;,for语句最常用的形式 for(循环变量赋初值;循环条件; 循环变量增量) 语句,29,不成立,执行表达式1,for语句的执行流程:,循环初始条件,循环控制条件,表达式2?,执行语句,成立,执行for循环之后的语句,执行表达式3,循环体,30,for语句等价于下列语句: 表达式1; while (表达式2) 语句; 表达式3; ,31,递推公式:n! = 1 当 n=1时 n! = (n-1)! * n当 n1时 main ( ) long int n=1; int i

12、; for ( i = 1; i =10; i+ ) n = n * i; printf(%2d!=%ldn,i,n); ,例:求1到10整数的阶乘,32,main ( ) int i, j; for ( i=1; i10; i+ ) printf (%4d,i); printf (n-n); for ( i=1; i10; i+ ) for ( j=1; j=i; j+ ) printf(j=i)?%4dn:%4d,i*j);,例:用for语句实现打印乘法九九表,33,说明: 1 for语句的一般形式中的“表达式1”可以省略,此时应该在for语句之前对循环变量赋初值。而此时虽然表达式1被省略

13、了,但其后的分号不能省略。 例如: int i=1,sum=0; for( ;i=100;i+) sum=sum+i;,34,2 表达式2也可以被省略,此时不判断循环条件,循环将无终止地进行下去,也就是认为表达式2始终为真。 3 表达式3也可以省略。表达式3的功能是使循环变量变化,此时应保证循环变量变化,使循环能正常结束。 4 三个表达式都可以省略,此时不设初值,不判断循环条件,循环变量不增值,因此该for语句的循环体将无终止地执行下去。,35,5 表达式1可以是设置循环变量初始值的赋值表达式,也可以是与循环变量无关的其它表达式。如: int i=1 , sum ; for(sum=0;i=1

14、00;i+) sum = sum+i ; 表达式3也可以是与循环控制无关的任意表达式。如: for(i=1;i=100;sum=sum+i) i+;,0;,99;,36,6 表达式1和表达式3可以是一个简单的表达式,也可以是逗号表达式,即包含一个以上的简单表达式,中间用逗号间隔。如: for(sum=0,i=1;i=100;i+) sum=sum+i;,37,7 表达式2一般是关系表达式或逻辑表达式,但也可以是数值表达式或字符表达式,只要其值为非0,就执行循环体。如: for(i=0;(c=getchar()!=n;i+=c);,38,数列1、1、2、3、5、8、13、21、是著名的菲波那奇数

15、列,其递推通项公式为: 1 2 n n-1 n-2(n=3) 根据递推通项公式,可用递推法编写程序,计算第N项的值。 递推法:由初始的已知条件开始,先计算出第(N1)步的结果,再利用前面已知的(N1)项结果,按照递推公式(或遵照递推规则),推出第N步结果。 递推法是程序设计中最常用的方法之一,使用递推法必须有明确的递推初始值和递推规则(递推公式)。,例:求菲波那奇数列的第n项,main( ) int n,i,un1,un2,un; for ( ; ; ) printf(Input n=?); scanf(%d, ,40,6.5 循环语句小结,C语言提供了三种循环语句:for、while、do-

16、while。特点如下: 1、for和while先判断循环条件后执行循环体,do-while语句先执行循环体后判断循环条件。 2、while和do-while语句的条件表达式只有一个,for语句有3个。 3、while、do-while、for可以相互替换使用。,41,4、while语句多用于不需要赋初值的或循环次数不定的情况。 for语句多用于要赋初值或循环次数固定的情况。 do-while语句多用于至少要运行一次的循环。 5、循环语句可以嵌套,可以并列,但不能交叉。,42,为了保证循环体正常运行,应该特别注意: 循环控制条件 控制条件的初始状态(初始值) 循环体内部对控制条件的影响 以上三个

17、方面相互配合,相互影响,共同完成循环控制,43,6.6 转移语句,转移语句的作用: 改变程序的运行流程 C语言转移语句 break continue goto return,44,6.6.1 break语句,格式: break; 功能: 1.在switch语句中结束case子句,使控制转到switch语句之外。 2.在循环语句的循环体中使用,结束循环过程,使控制转移到整个循环语句之外的下一条语句处。,45,break语句的执行流程,while语句,do-while语句,46,for语句,main( ) int j; long n; n=555555; for (j=999; j=100; j-

18、) if ( n%j=0 ) printf(”3 digits in %ld=%dn”, n, j ); break; /* 控制退出循环 */ ,例:求555555的约数中最大的三位数是多少?,48,break语句使用注意: 1、在嵌套循环中,break语句仅能退出一层(当前)循环。 2、若在循环语句中包含了switch语句,那么switch语句中的 break 语句仅能使控制退出switch语句。,49,6.6.2 continue语句,格式 continue; 功能 continue语句仅能在循环语句中使用 它的作用不是结束循环,而是开始一次新的循环。 对于for语句,将控制转到执行表达式3和条件测试部分;对于while和do-while语句,将控制转到条件测试部分;,50,continue

温馨提示

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

最新文档

评论

0/150

提交评论