第5章循环结构设计程序设计研究报告

上传人:yuzo****123 文档编号:140277557 上传时间:2020-07-28 格式:PPT 页数:50 大小:587KB
返回 下载 相关 举报
第5章循环结构设计程序设计研究报告_第1页
第1页 / 共50页
第5章循环结构设计程序设计研究报告_第2页
第2页 / 共50页
第5章循环结构设计程序设计研究报告_第3页
第3页 / 共50页
第5章循环结构设计程序设计研究报告_第4页
第4页 / 共50页
第5章循环结构设计程序设计研究报告_第5页
第5页 / 共50页
点击查看更多>>
资源描述

《第5章循环结构设计程序设计研究报告》由会员分享,可在线阅读,更多相关《第5章循环结构设计程序设计研究报告(50页珍藏版)》请在金锄头文库上搜索。

1、第5章 循环结构程序设计,学习目标,理解循环结构的概念。 掌握如何用while语句构成循环结构。 掌握如何用do-while语句构成循环结构。 熟练掌握如何用for语句构成循环结构。 掌握循环结构的嵌套使用。 理解break和continue语句应用于循环体时的区别。,在C语言中可以用以下语句来实现循环: 1)while语句。 2)do-while语句。 3)for语句。 4)goto语句和if语句。,循环 是一种对同一程序段有规律的重复 被重复执行的部分叫循环体。,5.1 引言,n! =123n,用fac来存放结果:,初始化值为1,fac,1,2,n,fac1,fac,fac2,fac,fa

2、cn,fac,faci,fac,累乘器,计数器,例如,求阶乘,【例5-1】用while语句构成的循环结构求n!,算法: step1:定义初始化变量。 本程序需要三个变量,一个用来接收n,一个用来表示求阶乘过程中数据从1到n的变化,还有一个保存计算结果 step2:输入n,需要考虑输入数据合法性的问题 step3:计算n!就是一个循环累乘求积的过程 n!= 1*2* 3* . (n - 1)* n,【例5-1】 n!的C语言程序,#include void main ( ) int n,i=1; long int fac; printf(please input n(n=0):); scanf(

3、%d, ,循环变量的初始化,累乘器的初始化,循环控制条件,求阶乘,修改循环变量,注意:,先判断表达式,后执行语句。,表达式同if语句后的表达式一样,可以是任何类型的表达式。,循环体多于一句时,用一对 括起。,while循环结构常用于循环次数不固定,根据是否满足某个条件决定循环与否的情况。,#include stdio.h void main() float n; scanf( %f ,例:输入一系列实数,判断每个数的正负,输入0时,结束循环,输入数据,为第一次判断做准备,while(n!=0),判断是否结束, if(n0) printf( + ); else printf( - ); scan

4、f( %f , ,判断正负号,继续输入下一个数,#include stdio.h void main() char ch;int num=0; ch=getchar();,例:统计从键盘输入的一行字符的个数(以回车键作为输入结束标记),while(ch!=n),判断是否输入结束, num+; ch=getchar(); ,printf(num=%dn,num); ,注意:,表达式在判断前,必须要有明确的值。,循环体中一般有改变条件表达式的语句。,while (表达式)后面没有分号。, 5.3 do-while语句,do-while的形式: do 循环体; while (表达式);,do-whi

5、le语句形式与与直到型循环相似,但它仍然是当型循环。条件为真时执行循环,真(非零),循环体,假(零),【例5-2】用do-while语句构成的循环结构求n!,do fac*=i; i+; while(i=n);,说明:,先执行语句,后判断表达式。,第一次条件为真时,while,do-while等价; 第一次条件为假时,二者不同。,while(i=n) fac*=i; i+; ,注意:,在if、while语句中,表达式后面都没有分号,而在do-while语句的表达式后面则必须加分号。,do-while和while语句相互替换时,要注意修改循环控制条件 。,5.4 for语句,for的形式: fo

6、r(初始表达式1;条件表达式2;循环表达式3) 循环体;,表达式1:用于循环开始前为循环变量设置初始值。,表达式2:控制循环执行的条件,决定循环次数。,表达式3:循环控制变量修改表达式。,循环体语句: 被重复执行的语句。,表达式3,计算表达式1,循环体,假(零),真(非零),for的下一条语句,执行流程:,for(fac=1,i=1; i=n; i+) fac*=i;,例如:,它相当于以下语句: fac=1;i=1; while (i=n) fac*=i; i+; ,表达式1;,while(表达式2),表达式3;,说明:,三个表达式都可以是逗号表达式。,三个表达式都是任选项,都可以省略,但要注

7、意省略表达式后,分号间隔符不能省略。,for语句中表达式省略的几种情况:,(1)for语句一般形式中的“表达式1”可以省略; 如:fac=1; i=1; for ( ; i=n;i+) fac*=i;,(2)表达式2省略,即不判断循环条件,循环会无终止地进行下去,所以此时循环体中要保证循环能正常结束; 如: for(fac=1,i=1;i+) if(in) break; fac*=i; ,(3)表达式3也可以省略,同样此时循环体中要保证循环能正常结束; 如: for(fac=1,i=1;i=n;) fac*=i; i+; ,(4) 可以省略表达式1和表达式3,只有表达式2 如: fac=1;

8、i=1; for (;i=n;) fac*=i; i+; ,i=1;fac=1; while (i=n) fac*=i; i+; ,相当于,fac=1,i=1; while (1) if(in) break; fac*=i; i+; ,(5)三个表达式都可省略,同样此时循环体中要保证循环能正常结束;,fac=1;i=1; for(;) if(in) break; fac*=i; i+; ,相当于,条件始终为真地执行循环体。,如 :,(6)循环体为空语句 对for语句,循环体为空语句的一般形式为: for (表达式1;表达式2;表达式3) ; 如:,在显示器上输出输入的一串字符,输入的字符为*时

9、, 结束循环。 输入abcd* 输出abcd* while( putchar(getchar( ) )!=* ) ;,for(fac=1,i=1;i=n;fac*=i, i+) ;, 5.5 continue语句和break语句在循环体中的应用,5.5.1 continue语句在循环体中的应用 continue语句的一般形式为: continue; 其作用是结束本次循环,即跳过本次循环体中continue 语句之后的语句,转入下一次循环条件的判断,决定循环是否继续执行。,注意:,执行continue语句并没有使整个循环终止 在while和do-while循环中,continue语句使得流程直接

10、跳到循环控制条件的测试部分 在for循环中,遇到continue后,跳过循环体中余下的语句,而转去对for语句中的“表达式3”求值,然后进行“表达式2”的条件测试,最后根据“表达式2”的值来决定for循环是否执行。, 5.5.2 break语句在循环体中的应用,语句形式: break;,用break语句可以使程序执行流程跳出switch语句体, 从而构成多分支选择结构。,break语句只能使用在循环体和switch语句内。 作用:,break出现在循环体中时,用于结束当前循环, 跳出break所在的循环结构。,break语句和continue语句的区别:,break语句是完全从循环中跳出 co

11、ntinue语句只结束本次循环。,while(条件) 语句A; break; 语句 B; ,真,语句B,条件,语句A,break,假,结束循环, break语句与continue语句的区别,至此位置,while(条件) 语句A; continue; 语句 B; ,真,语句B,条件,语句A,continue,假,结束循环,至此位置,【例5-3】编程实现如下要求:找出1到100之间的前10个偶数并输出。,while(n100) n+; if(count=10) break; /判断偶数个数 是否已满10个 if(n%2!=0) /判断当前数据是否奇数 continue; /是奇数结束本次循环 pr

12、intf(“%dt”,n); /打印偶数 count+; /统计偶数个数 ,程序运行结果:,2 4 6 8 10 12 14 16 18 20,在一个循环体内又包含有另一个完整的循环结构, 称为循环嵌套。, 5.6 循环的嵌套,嵌套时,每一层循环在逻辑上必须是完整的。,前面介绍的三种类型的循环:while 、do-while、for三种都可以互相嵌套。,循环嵌套时正确和错误的逻辑关系,for(.) . for(.) . ,并列循环,嵌套循环,交叉循环,for(.) . for(.) . ,错误,真,真,外循环初始条件,内循环初始条件,内循环体,外循环条件,假,内循环条件,假,内循环循环条件,外

13、循环循环条件,循环结束,二重循环嵌套结构执行流程,程序范例,使用双层循环输出下面的图形 * * *,#include stdio.h main( ) int i, j, k; for(i=0;i=2; i+ ) for(j=0;ji;j+) printf( ); for(k=0;k=3;k+) printf(*); printf(n); ,程序代码如下:,由i控制的外层for循环中内嵌了两个平行的for循环 由j控制的for循环体用来输出空格 由k控制的for循环体用来输出“*”号 当i等于0时,由j控制的循环,因为j的值为0,表达式ji的值为假,循环体一次也不执行,接着执行由k控制的循环,连

14、续输出四个“*”号;当i等于1时,由j控制for循环体执行一次,输出一个空格,这就使得接着输出的四个“*”号右移一个字符位置 第三行续依次类推,代码分析:,注意: 以上内嵌的第一个for循环的结束条件和循环的控制变量i有关; 第二个for循环结束条件是固定不变的。 下面给出了以上双重循环中i,j 和k值的变化规律。,i的变化j的变化k的变化 000,1,2,3,4 10,10,1,2,3,4 20,1,20,1,2,3,4 3, 【例5-4】打印九九乘法表,算法分析: 采用双重循环,逐行输出。 外层循环控制行数,九九乘法表共有九行,因此外层循环次数为9 每一行的具体输出一般分为3步: 1)确定

15、起始打印位置。本例每行左对齐。 2)输出该行数据,因为有多项数据,需要嵌套一个内层循环完成对本例,若行号用i表示,每一行有i个数据项式子,所以内层循环次数与行号相关,从1变化到i。 3)每输完一行进行换行操作。,具体程序如下:,#include void main() int i,j; for (i=1; i=9; i+) for (j=1; j=i; j+) printf (%d*%d=%-4d, i,j,i*j); printf(n); ,5.7 goto语句与标号,goto 语句一般形式: 语句标号: goto 语句标号;,作用:无条件转向“语句标号”处执行。,“语句标号”是一个标识符,它表示程序指令的地址。 语句标号仅仅对goto 语句有效,对其它语句不影响。,无条件转向使程序结构无规律、可读性差。 所以goto语句不符合结构化程序设计准则, 一般应避免使用goto语句, 除非能在很大程度上提高程序的执行效率, 才适当使用它。,5.8 应用举例, 【例5-6】判断一个数是否为素数 算法分析: 素数是指那些大于1,且除了1和它本身以外不能被其他任何

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 中学教育 > 教学课件 > 高中课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号