




已阅读5页,还剩45页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第5章循环结构程序设计,掌握循环结构的基本特点掌握3种循环语句:for语句、while语句和do-while语句学会利用for语句、while语句和do-while语句设计简单的循环程序了解goto语句构成的循环,学习目标,5.1案例:一次有趣的投币游戏,5.1.1游戏规则,5.1.2问题的解决,游戏的开始首先游戏中的投币数和投币箱我们分别用变量i和s来存储。游戏之前,执行以下两条语句:s=0;/*投币箱开始必须是空的*/i=1;/*投币数开始是1*/游戏的进行每次的投币操作都可以看成以下两条语句的执行:s=s+i;/*第i个人投币i枚*/i=i+1;/*第i+1个人准备投币*/将以上两条语句运行100次就完成了任务,就相当于投币100次。游戏的结束还有个重要的问题就是,游戏什么时候结束?很显然,当第100个人投币结束,游戏结束,即只要i=100,游戏继续进行,否则结束。,5.1.2问题的解决,s=0;/*盒子开始为空*/i=1;/*第1次投币*/while(i=100)/*100次投币*/s=s+i;/*投入i枚硬币到s中*/i=i+1;/*计算下次投币数*/,循环结构语句,for循环while循环do-while循环,5.2while循环,while循环通过while语句实现。while循环又称为“当型”循环。一般格式为:while(表达式)语句其中,括号后面的语句可以是一条语句,也可以是复合语句。它们都称为循环体。while语句的执行过程为:(1)计算并判断表达式的值。若值为0,则结束循环,退出while语句;若值为非0,则执行循环体(2)转步骤(1),5.2while循环,流程图,【例5-1】计算s=1+2+3+100。,#includevoidmain()inti,s;i=1;s=0;while(i=100)/*循环控制*/s=s+i;i=i+1;printf(s=%dn,s);,注意:,循环体包括一条或多条语句,多条语句必须用一对花括号“”括起来。合理的循环是有限次循环。如果循环不能退出,则称为“死循环”,在程序设计中应该避免出现。控制循环执行的次数因素包括循环中的循环条件、控制循环的主要变量的初值和终值以及每次变化的幅度等。例如,上例中i有效地控制了循环的运行,i从1循环到100,每次加1,循环运行了100次,i也可以称为循环变量。,注意:,如果只有一个循环变量,而且循环变量每次有固定的增加和减少,则循环的次数可以用以下公式计算:循环次数=(终值-初值)/步长+1步长为循环变量每次增加或减少的值,例如,上例循环次数为:(1001)/1+1,即100次。步长可以为负数。,【例5-2】计算1到100之间所有3的倍数的和。,#includevoidmain()inti,s;i=3;s=0;while(i=99)s=s+i;i=i+3;printf(s=%dn,s);,5.3do-while循环,do-while循环,又称为“直到型”循环,用do-while语句来实现,其一般格式为:do语句while(表达式);do-while语句的执行过程为:先执行循环体语句再判断表达式的值。若值为0,则结束循环,退出do-while语句;若值为非0,则继续执行循环体。,5.3do-while循环,流程图,【例5-3】计算s=1+2+3+100。,#includevoidmain()inti,s;i=1;s=0;dos=s+i;i=i+1;while(i=100);printf(s=%dn,s);,do-while循环和while循环可以完成相同的任务。例如上面的程序都可以计算出1到100的数的和。do-while循环的循环条件的判断在循环体的后面,所以和while循环有区别,例如下面的两个程序:inti=1;s=0;inti=1,s=0;while(i1)dos=s+i;s=s+i;i=i+1;i=i+1;while(i1);printf(s=%dn,s);printf(s=%dn,s);左边的程序运行结果为:s=0右边的程序运行结果为:s=1。,5.4for循环,for循环是循环的一种标准形式,通过for语句实现,其语法如下:for(;)表达式,通常用于循环的初始化。包括循环变量的赋初值、其他变量的准备等;表达式,循环的条件判断式,如果为空则相当于真值;表达式,通常设计为循环的调整部分,主要是循环变量的变化部分;循环体,由一条或多条语句构成,多条语句需要用一对花括号括起来。,5.4for循环,【例5-4】计算s=1+2+3+100。,#includevoidmain()inti,s;for(i=1,s=0;i=100;i+)s=s+i;printf(s=%dn,s);,for循环可以用以下while循环代替:;while();表达式可以是多个表达式构成的逗号表达式,例如i=1,s=0;。、构成循环的控制部分,3个表达式之间用分号分隔。表达式可以放在for循环的前面,但后面的分号不能少,例如:;for(;);,表达式也可以省略,相当于始终为真值,从而构成无条件循环,循环将不能终止,需要采取其他措施。表达式也可以省略,但作为循环变量的调整功能不能缺少,可以在循环体中完成,例如下面的for循环。for(i=1,s=0;i=100;)s=s+i+;如果表达式和都省略的话,相当于while循环,例如下面的程序形式:i=1,s=0;for(;i=100;)/*相当于while(i=100)*/s=s+i+;,、均省略,即:for(;);相当于while(1);。循环的所有控制和计算功能都必须在循环体中完成,这样的循环适合于随机退出循环程序的情况。表达式也可以省略,但必须至少保留一个分号,即:for(;);一个分号即是一条空语句。如果、均省略,即如以下形式:for(;);这将构成一个死循环。,5.5案例:倒数的求和,#includevoidmain()inti;doubles=0;/*s需要定义为double型*/for(i=1;i=99;i=i+2)/*先计算:*/s=s+1.0/i;/*1.0/i不能写成1/i*/for(i=2;i=100;i=i+2)/*再计算:*/s=s1.0/i;printf(s=%fn,s);,#includevoidmain()inti;doubles=0;/*s需要定义为double型*/for(i=1;i=100;i+)if(i%2=1)s=s+1.0/i;/*i是奇数时加1.0/i*/elses=s-1.0/i;/*i是偶数时减1.0/i*/printf(s=%lfn,s);,#includevoidmain()inti;doubles;/*s需要定义为double型*/doubleflag=1;/*double型的flag用于处理符号问题*/for(i=1,s=0;i=100;i+)s=s+flag*1.0/i;/*用flag处理符号问题*/flag=-flag;/*下一次flag由1变成-1,或者由-1变成1*/printf(s=%lfn,s);,5.6循环嵌套,(1)while()while()(2)for(;)for(;)(3)dodowhile();while();,(4)while()for(;)(5)for(;)while(;)(6)dofor(;);while();,【例5-6】计算s=1+(1+2)+(1+2+3)+(1+2+3+4)+(1+2+3+4+5),#includevoidmain()inti,j,s;for(i=1,s=0;i=5;i+)for(j=1;j100时退出循环。break语句不能用于循环语句和switch语句之外的任何其他语句中。,5.6break语句、continue语句和goto语句,5.7.2continue语句与break语句退出循环不同的是,continue语句只结束本次循环,接着进行下一次循环的判断,如果满足循环条件,继续循环,否则退出循环。5.7.3goto语句goto语句为无条件转向语句,形式为:goto语句标号语句标号用标识符表示,命名规则同变量名。,【例5.7】阅读下面程序,写出运行结果。,5.8案例:阶乘的计算,【例5-8】计算s=12348。#includevoidmain()inti;longs;for(i=1,s=1;i=8;i+)s=s*i;printf(s=%ldn,s);,计算阶乘的方法与求和差不多,但需要注意以下几点:求和时累加器s初始化为0,求阶乘时累乘器初始化为1。求和时用s=s+i,求阶乘时用s=s*i。由于阶乘的值很容易放大,所以数据类型定义为long型,输出的时候用%ld。,5.9案例:输出星号组成的图形,5.9案例:输出星号组成的图形,回顾:循环变量的功能控制循环作为循环体中算法的引用变量,for(i=0;i100;i+)s=s+i;,for(i=1;i=100;i+)s=s+i;,for(i=1,j=1;i=100;i+)s=s+j;j=j+1;,for(i=0;i100;i+)s=s+i+1;,0+1+2+99,1+2+3+100,1+2+3+100,1+2+3+100,for(i=2,j=1;i=200;i=i+2)s=s+j;j=j+1;,控制,控制+引用,5.9案例:输出星号组成的图形,分析,for(i=1;i=4;i+)/*控制输出4行*/for(j=1;j=i-1;j+)printf();/*输出i-1个空格*/for(j=1;j=2*i-1;j+)printf(*);/*输出2*i-1个星号*/printf(n);/*输出一行后换行*/,5.9案例:输出星号组成的图形,完整的程序#includevoidmain()inti,j;/*行数从1到5*/for(i=1;i=5;i+)for(j=1;j=i-1;j+)printf();/*代表空格*/for(j=1;j=i;j+)printf(*);printf(n);/*每输出一行需要换行*/,j循环从1到i-1,共i-1次循环,每次打印1个空格,共输出i-1个空格,j循环从1到i,共i次循环,每次打印1个星号,共输出i个星号,5.10案例:计算100以内的素数之和,【分析】从定义来判断,除了1和本身之外,没有其他因子,所以程序的任务是依次判断1到100之间所有的数是否为素数,如果是,将其累加。最后输出累加的和。需要嵌套的循环,外循环控制产生1到100的数的循环,循环变量的值也正是内循环需要判断的对象;内循环首先判断当前的循环变量的值是否为素数,是则累加。循环结束后输出累加的和。,5.10案例:计算100以内的素数之和,#includevoidmain()inti,j,s=0;for(i=2;ii-1)/*i是素数,因为2i-1没有i的因子*/s=s+i;printf(%dn,s);以上程序中j=i-1也可以改成j=i/2或j=3)很显然,Fibonacci数列依次为:1,1,2,3,5,8,13,21,34,5.11案例:计算Fibonacci数列前20项的和,#includevoidmain()intf1,f2,f;inti;longs;f1=f2=1;s=f1+f2;for(i=1;i=18;i+)f=f1+f2;/*得到一个新数*/s=s+f;f1=f2;/*重置两个数*/f2=f;printf(%ldn,s);,5.12循环的阅读和技巧,不管是什么循环语句,循环的准备循环条件循环的调整循环体这四个部分通常都存在,5.12循环的阅读和技巧,变量跟踪,5.13案例:日历的打印,【例5-11】输入2012年的某个月份,打印该月份的日历。#includemain()inti;intmonth;intfirst=0;/*2012年的1月1日是星期天*/intdaysmonth;/*用来记录该月有多少天*/printf(Yearis2012,Pleaseinputthemonth:);scanf(%d,5.13案例:日历的打印,for(i=1;i=month;i+)switch(i)case2:daysmonth=29;break;case4:case6:case9:case11:daysmonth=30;break;default:daysmonth=31;break;/*其他月份都是31天*/if(imonth)/*及时调整该月的1号对应的星期,0表示星期天*/first=(first+daysmonth)%7;,5.13案例:日历的打印,printf(Year:2012,Month:%d,First:%dn,month,first);printf(SUMOTUWETHFRSAn);/*每个星期名称占3个字符*/for(i=0;ifirst;i+)/*输出1号前面的空格*/printf();/*每次输出3个空格*/for(i=1;i=daysmonth;i+)printf(%3d,i);if(i+first)%7=0)/*输出每行最后一天后补充输出一个换行符*/printf(n);printf(n);,循环结构是面向过程编程中三种结构中最重要的一种结构,学好它是学好这门课程的关键。本章介绍的内容主要包括:三种循环结构while、do-while和for循环(goto也可以构成循环,通常不用)break语句、continue语句和goto语句while循环和do-while循环的条件判断一个在前,一个在后,为导致循环体执行的次数不同,需要密切注
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 软件设计师考试全方位试题及答案分析
- 病房火灾的应急预案演练脚本(3篇)
- 烤房火灾应急预案(3篇)
- 网络架构设计对业务支持的影响试题及答案
- 软件设计师考试顺序安排试题及答案详情
- 2025年软件设计师考试考点解析试题及答案
- 2025年软件设计师考试高效阅读材料试题及答案
- 计算机二级VB考试核心试题及答案
- 2025年程序员考试的复习策略试题及答案
- 实践指导2025年软件设计师试题及答案
- 公益慈善基金会的品牌建设与传播
- 2024上海市体检人群抽样健康报告
- 2024年档案知识竞赛考试题库300题(含答案)
- 【基于PLC的智能立体停车场控制系统设计10000字(论文)】
- 智能电能表换装.安全技术交底
- 广东省深圳市福田区2023-2024学年七年级下学期期末语文试题
- 教师专业发展第6章 教师教育对教师专业发展的全程规划
- 2024年湖南湘西自治州公开招募“三支一扶”高校毕业生(高频重点复习提升训练)共500题附带答案详解
- 2024中考化学成都10年考情及趋势分析【必考知识点】
- 二手房委托代理协议书范本参考
- 甘肃旅游旅行
评论
0/150
提交评论