




已阅读5页,还剩41页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第5章循环结构程序设计,北京科技大学计算机系,C语言程序设计,2019/11/26,2,问题1:如何根据收入,确定一个人的纳税比例及纳税额?,当一个公司有多名员工时,如何计算每个人的纳税比例及纳税额?,提出问题:,C语言:循环语句,?,?,问题2如何根据学生的分数判断是否及格?,如何根据全班学生的分数,分别判断他们是否及格?,2019/11/26,3,本章主要内容,while循环控制do-while循环控制for循环控制用goto语句实现循环控制循环结构中的跳转语句循环的嵌套循环结构程序设计举例,2019/11/26,4,5.1while循环控制,语句一般格式while(表达式)语句,一般为关系表达式或逻辑表达式,也可以是C语言其他类型的合法表达式用来控制循环体是否执行,称为内嵌语句,可以是基本语句、控制语句,也可以是复合语句是循环重复执行的部分,2019/11/26,5,功能:,计算表达式的值,为非0(逻辑真)时,重复执行内嵌语句,每执行一次,就判断一次表达式的值,直到表达式的值为0时结束循环,转去执行while后面的语句。,循环控制条件,循环体,2019/11/26,6,例如:,【例5.1】编写程序,求100个自然数的和即:s=1+2+3+100,思路:寻找加数与求和的规律,加数i从1变到100,每循环一次,使i增1,直到i的值超过100。i的初值设为1。求和设变量sum存放和,循环求sum=sum+i,直至i超过100。,2019/11/26,7,算法和程序:,main()inti,sum;i=1;sum=0;while(i=100)sum=sum+i;i+;printf(sum=%dn,sum);,运行jc5_1,程序输出结果:sum=5050,i:循环控制变量sum:累加器,2019/11/26,8,注意:,如果while的(表达式)值为0,则循环体一次也不执行(例如当i的初值=101)。在循环体中必须有使循环趋向结束的操作,否则循环将无限进行(死循环)。在循环体中,语句的先后位置必须符合逻辑,否则会影响运算结果。,思考程序段的输出?while(i=100)i+;sum=sum+i;,运行后,输出:sum=5150原因是什么?,2019/11/26,9,inti=0;while(+i+i;判断i判断i+i;sum+=i,不同的while语句形式,设:sum=0;inti=1;while(isum+=i;+i;,运行结束后:i、sum=?,运行结束后:i=101,sum=5050i=101,sum=5050i=101,sum=5050i=100,sum=5050,运行jC5_a,2019/11/26,10,其他的while语句形式,while(0).由于表达式恒等于0,所以循环体永远也不会执行,是一个逻辑错误的语句,while(1).由于表达式恒等于1,所以不可能通过循环控制条件来结束循环体的执行,即死循环。为了保证循环正常运行,应该特别注意:循环控制条件的描述控制条件的初始状态(初始值)循环体内部对控制条件的影响,2019/11/26,11,5.2do-while语句,语句一般格式do语句while(表达式);功能:先执行内嵌语句(循环体),之后计算表达式的值,不为0(逻辑真)时,再执行循环体并判断条件,直到表达式的值为0结束循环,转去执行while下面的语句。,2019/11/26,12,do-while循环的算法,N-S结构图,main()inti=1,sum=0;dosum=sum+i;i+;while(i=100);printf(%dn,sum);,用do-while语句求100个自然数的和,2019/11/26,13,说明:,while和do-while都能实现循环控制,while结构程序通常都可以转换成do-while结构,区别:do-while语句先执行循环体再判断条件,循环体至少执行一次;while语句先判断条件再执行循环体,循环体有可能一次也不执行dowhile循环体中一定要有能使表达式值趋于0的操作(如i+),否则会出现死循环。,2019/11/26,14,do-while语句的简单应用,【例5.3】用辗转相除法求m和n的最大公约数,思路:先求m和n相除的余数r然后将mn,将nr,并判断r(或n)如果r0,再重复求余数,直到r等于0时结束循环此时的m为最大公约数,2019/11/26,15,算法和程序:,main()intm,n,r;scanf(%d,%d,运行jc5_3,程序运行情况如下:24,6012,2019/11/26,16,5.3for语句,语句一般格式for(表达式1;表达式2;表达式3)语句,功能:计算表达式1的值,再判断表达式2,如果其值为非0(逻辑真),则执行内嵌语句(循环体),并计算表达式3;之后再去判断表达式2,一直到其值为0时结束循环,执行后续语句。,循环初始条件,循环控制条件,循环体,2019/11/26,17,for语句的算法,例如:main()inti,sum;sum=0;for(i=1;i5)for(n=0;n26;n+)printf(%c,n+A);作用是输出26个大写字母for(sum=0,i=1;i=100;sum=sum+i,i+=2);作用是计算100以内的奇数和,2019/11/26,24,几种循环语句的比较,while和do-while语句的表达式只有一个,for语句有三个。while和for先判断循环条件后执行循环体,do-while语句先执行循环体后判断循环条件。,while语句多用于循环次数不定的情况do-while语句多用于至少要运行一次的情况for语句多用于要赋初值或循环次数固定的情况,2019/11/26,25,5.4用goto语句实现循环,有兴趣的同学自学不提倡使用goto语句,注意:goto语句能实现程序无条件转移,为编程提供了便利。但是无限制地使用,会破坏程序的结构化程度。因此应限制使用。,2019/11/26,26,5.5循环结构中的跳转语句,有如下三种语句实现跳转:continue语句break语句goto语句在循环语句的循环体中使用,可以进行循环的流程控制,2019/11/26,27,5.5.1continue语句及应用,功能:中断循环体的本次执行(即跳过循环体中尚未执行的语句),立即开始执行下一次循环。,continue;,while语句,continue;,do-while语句,continue;,for语句,2019/11/26,28,例如:,intx,n=0,s=0;while(n10)scanf(%d,intx,n=0,s=0;doscanf(%d,for(n=0,s=0;n10;)scanf(%d,2019/11/26,29,应用举例,【例5.7】把100200之间能被7整除的数,以十个数为一行的形式输出,最后输出一共有多少个这样的数。,思路:设变量n,从100变化到200;对每个n进行判断,当n不能被7整除时,终止本次循环,否则就输出这个数;设变量j作为输出个数的计数器,每输出一个数就令j+;当输出了10个数时(即j%10等于0),输出n退出循环后输出j的值。,2019/11/26,30,算法和程序,main()intn,j=0;for(n=100;n=200;n+)if(n%7!=0)continue;printf(%6d,n);j+;if(j%10=0)printf(n);printf(n);printf(j=%dn,j);,运行jc5_7,2019/11/26,31,5.5.2循环中break的应用,功能:利用break语句能够强迫终止本层循环,转到后续语句执行。,break;,while语句,break;,do-while语句,break;,for语句,2019/11/26,32,例如:,intx,n=0,s=0;while(n10)scanf(%d,intx,n=0,s=0;doscanf(%d,for(n=0,s=0;n10;n+)scanf(%d,2019/11/26,33,5.6循环的嵌套,如果循环语句的循环体内又包含了另一条循环语句,则称为循环的嵌套例如:,#includemain()inti,j;for(i=1;i10;i+)for(j=1;j=i;j+)printf(j=i)?%4dn:%4d,i*j);,运行jc5_a,外循环语句,内循环语句,外循环体,内循环体,2019/11/26,34,注意:,while、do-while、for循环语句可以并列,也可以相互嵌套,但要层次清楚,不能出现交叉。多重循环程序执行时,外层循环每执行一次,内层循环都需要循环执行多次。例如:,for(a=1;a=10;a+)for(b=0;b=5;b+),外循环执行了10次,内循环执行6次循环正常结束时,内循环执行了106=60次,2019/11/26,35,5.7循环结构程序设计,【例5.5】按每行输出5个数的形式输出Fibonacci数列的前20项。,思路:Fibonacci数列的前几项是:1、1、2、3、5、8、13、21、34、。此数列的变化规律是:,设变量f1、f2和f3,并为f1和f2赋初值1,令f3=f1+f2得到第3项;将f1f2,f2f3,再求f3=f1+f2得到第4项;依此类推求第5项、第6项,这是一种递推算法应采用循环实现,2019/11/26,36,算法和程序,#defineN20main()inti,f1,f2,f3;f1=f2=1;printf(n%8d%8d,f1,f2);for(i=3;i1e-6);printf(%fn,x);,运行jc5_13,2019/11/26,43,举例4,【例5.11】编程序求210000以内的完全数。,完全数:一个数的因子(除了这个数本身)之和等于该数本身。,思路:设定i从2变到10000,对每个i找到其因子和s;判定i=s?若相等,则i为完全数,否则不是。,例如:6的因子是1、2、3,因子和1+2+36因此6是完全数,使用穷举算法用双层循环实现,2019/11/26,44,算法和程序:,main()inti,j,s;for(i=2;i=10000;i+)s=0;for(j=1;ji;j+)if(i%j=0)s+=j;if(i=s)printf(%6dn,s);,运行jc5_11,2019/11/26,45,举例5,【例5.10】编程序,输出以下图形。,*,一共有4行,每行由空格和星号组成:空格数按行增加,星号按行减少变量i控制输出行数,从1变化到4变量j
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 淮北市电梯安全员培训课件
- 海螺安全培训知识题库课件
- 安全驾驶技术教育培训课件
- 安全驾驶培训赚钱课件
- 安全驾驶培训现场课件
- 安全驾驶培训特征课件
- 简单的入股协议合同8篇
- 2025年特岗招教考试试题及答案
- 2026届河南省平顶山市化学九上期中经典模拟试题含解析
- 子公司向总公司借款合同8篇
- 2025年秋人教版(2024)初中数学八年级第一学期教学计划及教学进度表
- 纺织企业安全生产知识培训
- 小区物业合伙管理协议书
- 2025年全国小学生“学宪法、讲宪法”活动知识竞赛题库及答案
- 小学心理健康教育四级预警汇报流程
- 软件行业基础知识培训课件
- 教案2025秋形势与政策纪念抗战胜利坚定民族信念抗战胜利80周年
- 卷烟零售户培训课件
- 2025年学法减分试题及答案
- 财政专题分析报告:财政数据背后的宏观线索-国金证券
- 《智能建造概论》高职完整全套教学课件
评论
0/150
提交评论