C语言程序设计教程第4章-循环结构程序设计_第1页
C语言程序设计教程第4章-循环结构程序设计_第2页
C语言程序设计教程第4章-循环结构程序设计_第3页
C语言程序设计教程第4章-循环结构程序设计_第4页
C语言程序设计教程第4章-循环结构程序设计_第5页
已阅读5页,还剩37页未读 继续免费阅读

下载本文档

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

文档简介

1、C语言程序设计,第4章 循环结构程序设计,本章需要掌握的知识点: while语句的语法和语义 do while语句的语法和语义 for语句的语法和语义 break语句和continue语句的使用 求和、迭代和穷举算法的理解和运用,内容安排,4.1 问题的提出 4.2 while 语句 4.3 do while语句 4.4 for语句 4.5 多重循环 4.6 break语句 4.7 continue语句 4.8 程序举例,4.1 问题的提出,为什么要提供循环结构?,4.2 while 语句,在C语言中用什么样的句法来表示循环结构? P条件成立或者不成立用什么表示?,while循环语句的语法是:

2、 while (表达式) 一个语句单元,例:用while语句 解决“1+2+3+n”的问题,首先确定计算思路 确定n值, 0sum sum+1sum sum+2sum sum+n sum,然后根据算法画出N-S图,#include stdio.h void main() int i=1,sum=0,n; printf(nPlease input a integer:); scanf(%d, ,最后将流程图内容翻译成语言,E0503.c,注意事项,循环次数的控制要正确。 循环体包含一条以上的语句时,一定要使用复合语句。 在循环体内要有使循环趋向于结束的语句,否则,可能引起无限循环。 在循环体中可

3、以使用break语句强制退出循环。,4.3 do while语句,do while循环语句的语法是: do 循环语句单元 while (表达式); 但一般采用以下形式 do 复合语句 while (表达式);,例:用do while 解决“1+2+3+n”的问题,#include stdio.h void main() int i=1,sum=0,n; printf(nPlease input a integer:); scanf(%d, ,do sum=sum+i; i+; while (i=n);,while和do-while循环的比较,main ( ) int sum=0,i; scan

4、f(“%d”, ,main ( ) int sum=0,i; scanf(“%d”, ,当确定循环体肯定会执行一次时,使用while和do while是没有差别 如果循环体有可能不执行,必须使用while语句 如果必须保证循环体执行一次,必须使用do while语句,小结(上),循环结构的含义及其N-S图表示方法 while结构的语法形式及其语义 do while语法形式及其语义,上一节关键点回顾,循环结构的两个要素? while语句如何组合这两个关键要素? do while语句如何组合这两个关键要素?,4.4 for语句,问题:为什么要引进for语句?,例:分析求n!程序中控制循环的语句,

5、i=1; sum=1; scanf(%ld, ,i+;,i1;,i=n,对于那些初始条件明确,循环控制清晰的循环结构,可以用一个更加清晰的语句结构来描述。,for (表达式1;表达式2;表达式3) 循环语句,for循环语句的语法是:,#include stdio.h void main() int i,sum=0,n; printf(“n请输入一个整数:); scanf(%d, ,E0513.c,例:用for 语句解决“1+2+3+n”的问题,sum=0,输入,n,i=1,i,=n,sum=sum+i;,i= i + 1;,输出,sum,掌握for语句的关键点,三个表达式和循环体语句运行的顺序

6、? 注意:for语句的书写可以非常灵活!但要避免死循环! 表达式1起什么作用?如果省略会怎样? 表达式2起什么作用?如果省略会怎样? 表达式3起什么作用?如果省略会怎样?,思考1:如果循环体不是一条语句而是一组语句,怎么办? 思考2:可以采用另外一种for语句来达到同样的求和目的吗?,4.5 多重循环,循环体语句可以是三种基本结构中的任意一种 如果在一个循环体内又包含另一个循环结构,称为循环的嵌套。,例 请编写程序在一行内输出整数1到20,并连续输出5行。,使用逐步求精法,i=1,i,=5,在一行内输出整数到,i,增,i=1,i,=5,j=1,j=20,输出,j,j,增,1,输出换行,i,增,

7、#include stdio.h void main() int i,j; for (i=1; i=5 ; i+) 输出1到20并回车; ,for(j=1;j=20; j+) printf(“%d ”,j); printf(“n”); ,E0515.c,i=1,i,=5,j=1,j=20,输出,j,j,增,1,输出换行,i,增,4.6 4.7 break语句和continue语句,在循环体中遇到break语句提前退出整个循环 在循环体中遇到continue语句提前结束当次循环,EContinue.C,几种循环的比较,三种循环语句都可以互相代替。 退出条件简单且循环变量按照递增或者递减的规律变化

8、时,使用for语句结构较为清晰。,4.8 程序举例,求和(积) 穷举 迭代,穷举,穷举的基本思想是一一列举所有可能进行测试,从中找出符合条件的解。,实战分析:求两个整数的最小公倍数,公倍数必定能够被两个整数整除。 最小公倍数必定大于或者等于两个整数中最大的那一个。 如果我们从最大的整数开始往上一一寻找,那么第一个发现的就应该是最小公倍数。,gbsAgys.C,算法分析(穷举法) 先找到两个整数中最大的那一个,令为A。 检查A是否能被这两个整数整除,如果是,跳转到第3步,否则将A中的值加1,继续执行第2步。(穷举) A中的值是最小公倍数,实战分析:用分和分硬币组合成元钱,请列出所有可能,假设、分

9、别代表分和分的硬币个数,如果x,y是合适的组合,那么应有 2x+5y = 100,int x,y; for(x=0;x=50;x+) for (y=0;y=20;y+) if (2*x+5*y = 100 ) printf(c2:%d c5:%d n,x,y); ,E5_22.C,迭代(递推),递推就是采用不断由已知推出新值,直到求得解为止。,实战举例:求兔子的个数,有一对兔子,从出生后第3个月起每个月都生一对兔子。小兔子长到第3个月后每个月又生一对兔子。假设所有兔子都不死,问第20个月的兔子总数为多少对?,算法分析,用s1代表月龄为1的兔子对数,s2代表月龄为2的兔子对数,s3代表月龄为大于

10、等于3的兔子对数。那么s1+s2+s3的和为兔子的总对数,用total代表。 第一个月:s1=1,s2=0,s3=0; total等于多少? 第二个月的s1,s2,s3,total等于多少? 第三个月的s1,s2,s3,total等于多少? 如果已经知道第n月的各个月龄的兔子对数分别为:s1,s2,s3;那么第n+1月的各个月龄的兔子对数分别为多少?,s2 + s3(上个月的) s3(本月) s1(上个月的)s2(本月) s3(本月的)s1(本月),用伪代码描述算法,s1=1,s2=0,s3=0;i=1; /*i为循环变量*/ 输出 “第1个月兔子对数:”,s1s2+s3; 循环以下语句,直到

11、i大于20 s2 + s3(上个月的) s3 s1(上个月的) s2 s3(本月的) s1 输出 “第i个月兔子对数:”,s1+s2+s3 i+1 i ,E0670.C,小结(下),for循环中三个表达式和循环体运行的顺序 什么叫循环的嵌套 break语句的作用 continue语句的作用 穷举算法 迭代算法,课堂作业一,、编写求n!的程序:要求输入,然后计算输出n的阶乘。 提示:(算法思路) 1fac fac *1 fac fac *2 fac fac *n fac,课外练习,.110 4 1 4-6 4-8 4 15 *4 - 5 *4-12 #4-17 #4-20(有挑战性的问题),上机实验四,上机指导实验四 循环结构 基础部

温馨提示

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

评论

0/150

提交评论