




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、循环结构程序设计循环结构程序设计52l掌握循环结构的基本特点掌握循环结构的基本特点l掌握掌握3种循环语句:种循环语句:for语句、语句、while语句和语句和do-while语句语句l学会利用学会利用for语句、语句、while语句和语句和do-while语句语句设计简单的循环程序设计简单的循环程序l了解了解goto语句构成的循环语句构成的循环 35.1 循环的基本概念循环的基本概念【问题】如何计算【问题】如何计算1+2+3+4+100 s = s + i; /* 投入投入i 枚硬币到枚硬币到s中中*/i = i + 1; /* 计算下次投币数计算下次投币数 */45.1.1 方法的探索方法的
2、探索s=0; /* 盒子开始为空盒子开始为空*/i=1; /* 第第1次投币次投币*/while(i=100) /* 100次投币次投币*/ s=s+i; /* 投入投入i 枚硬币到枚硬币到s中中*/ i=i+1; /* 计算下次投币数计算下次投币数 */ 55.1.2 循环结构语句循环结构语句 lfor 循环循环lwhile 循环循环ldo-while 循环循环65.2 while循环循环lwhile循环通过循环通过while语句实现。语句实现。while循环又循环又称为称为“当型当型”循环。循环。l一般格式为:一般格式为:l while (表达式表达式) 语句语句l其中,括号后面的语句可以
3、是一条语句,也可以是其中,括号后面的语句可以是一条语句,也可以是复合语句。它们都称为循环体。复合语句。它们都称为循环体。l while语句的执行过程为:语句的执行过程为:l (1) 计算并判断表达式的值。若值为计算并判断表达式的值。若值为0,则结束循,则结束循环,退出环,退出while语句;若值为非语句;若值为非0,则执行循环体,则执行循环体l (2) 转步骤转步骤(1)75.2 while循环循环l流程图流程图8【例【例5-1】计算】计算s=1+2+3+100。 #include void main() int i,s;i=1;s=0;while(i=100) /* 循环控制循环控制 */
4、s=s+i;i=i+1;printf(s=%dn,s);9【注意注意】l循环体包括一条或多条语句,多条语句必须用循环体包括一条或多条语句,多条语句必须用一对花括号一对花括号“”括起来。括起来。l合理的循环是有限次循环。如果循环不能退出,合理的循环是有限次循环。如果循环不能退出,则称为则称为“死循环死循环”,在程序设计中应该避免出,在程序设计中应该避免出现。现。l控制循环执行的次数因素包括循环中的循环条控制循环执行的次数因素包括循环中的循环条件、控制循环的主要变量的初值和终值以及每件、控制循环的主要变量的初值和终值以及每次变化的幅度等。次变化的幅度等。l例如,上例中例如,上例中i有效地控制了循环
5、的运行,有效地控制了循环的运行,i从从1循环到循环到100,每次加,每次加1,循环运行了,循环运行了100次,次,i也也可以称为循环变量。可以称为循环变量。 10【注意注意】l如果只有一个循环变量,而且循环变量每次有如果只有一个循环变量,而且循环变量每次有固定的增加和减少,则循环的次数可以用以下固定的增加和减少,则循环的次数可以用以下公式计算:公式计算:l循环次数循环次数 = (终值终值-初值初值)/ 步长步长 + 1l步长为循环变量每次增加或减少的值,例如,步长为循环变量每次增加或减少的值,例如,上例循环次数为:上例循环次数为:(1001)/1 + 1,即,即100次。次。l步长可以为负数。
6、步长可以为负数。 11【例【例5-2】计算】计算1到到100之间所有之间所有3的倍数的和。的倍数的和。 #include void main() int i,s; i=3;s=0; while(i=99) s=s+i; i=i+3; printf(s=%dn,s); 125.3 do-while循环循环 ldo-while循环,又称为循环,又称为“直到型直到型”循环循环,用用do-while语句来实现,其一般格式为:语句来实现,其一般格式为: do 语句语句 while(表达式表达式);ldo-while语句的执行过程为:语句的执行过程为:先执行循环体语句再判断表达式的值。若值先执行循环体语句
7、再判断表达式的值。若值为为0,则结束循环,退出,则结束循环,退出do-while语句;若值语句;若值为非为非0,则继续执行循环体。,则继续执行循环体。 135.3 do-while循环循环流程图流程图14【例【例5-3】计算】计算s=1+2+3+100。 #include void main() int i,s; i=1;s=0; do s=s+i; i=i+1; while(i=100); printf(s=%dn,s); 15注意注意ldo-while循环和循环和while循环可以完成相同的任务。例循环可以完成相同的任务。例如上面的程序都可以计算出如上面的程序都可以计算出1到到100的数的
8、和。的数的和。ldo-while循环的循环条件的判断在循环体的后面,所循环的循环条件的判断在循环体的后面,所以和以和while循环有区别,例如下面的两个程序:循环有区别,例如下面的两个程序:int i=1;s=0;int i=1,s=0;while(i1)do s=s+i; s=s+i; i=i+1; i=i+1; while(i1);printf(s=%dn,s);printf(s=%dn,s);l左边的程序运行结果为左边的程序运行结果为:s=0l右边的程序运行结果为右边的程序运行结果为:s=1。165.4 for循环循环 lfor循环是循环的一种标准形式,循环是循环的一种标准形式,通过通过
9、for语句实现,语句实现,其其语法如下:语法如下:lfor(;) l表达式,通常用于循环的初始化。包括循环变量的赋表达式,通常用于循环的初始化。包括循环变量的赋初值、其他变量的准备等;初值、其他变量的准备等;l表达式,循环的条件判断式,如果为空则相当于真值;表达式,循环的条件判断式,如果为空则相当于真值;l表达式,通常设计为循环的调整部分,主要是循环变表达式,通常设计为循环的调整部分,主要是循环变量的变化部分;量的变化部分;l循环体,由一条或多条语句构成,多条语句需要用一循环体,由一条或多条语句构成,多条语句需要用一对花括号括起来。对花括号括起来。175.4 for循环循环流程图流程图18【例
10、【例5-4】计算】计算s=1+2+3+100。 #include void main() int i,s; for(i=1,s=0;i=100;i+) s = s + i; printf(s=%dn,s); 19注意注意 lfor循环可以用以下循环可以用以下while循环代替:循环代替: ; while () ; ;l表达式表达式可以是多个表达式构成的逗号表达式,例如可以是多个表达式构成的逗号表达式,例如i=1,s=0;。l、构成循环的控制部分,构成循环的控制部分,3个表达式之间用个表达式之间用分号分隔。分号分隔。l表达式表达式可以放在可以放在for循环的前面,但后面的分号不循环的前面,但后面
11、的分号不能少,例如:能少,例如:l;for(; );20注意注意l表达式表达式也可以省略,相当于也可以省略,相当于始终为真值,从而构始终为真值,从而构成无条件循环,循环将不能终止,需要采取其他措施。成无条件循环,循环将不能终止,需要采取其他措施。l表达式表达式也可以省略,但作为循环变量的调整功能不也可以省略,但作为循环变量的调整功能不能缺少,可以在循环体中完成,例如下面的能缺少,可以在循环体中完成,例如下面的for循环。循环。lfor (i=1,s=0;i=100;) s = s + i+;l如果表达式如果表达式和和都省略的话,相当于都省略的话,相当于while循环,循环,例如下面的程序形式:
12、例如下面的程序形式:i=1,s=0;for (;i=100;) /*相当于相当于 while(i=100)*/ s = s + i+;21注意注意l、均省略,即:均省略,即:lfor (;) ;l相当于相当于while (1) ;。循环的所有控制和计算功能。循环的所有控制和计算功能都必须在循环体都必须在循环体中完成,这样的循环适合于随机中完成,这样的循环适合于随机退出循环程序的情况。退出循环程序的情况。l表达式表达式也可以省略,但必须至少保留一个分号,也可以省略,但必须至少保留一个分号,即:即:lfor (;) ; 一个分号即是一条空语句。一个分号即是一条空语句。l如果如果、均省略,即如以下形
13、式:均省略,即如以下形式:lfor (;); 这将构成一个死循环。这将构成一个死循环。 22【例【例5-5】计算】计算1+1.5+2.0+2.5+3.0+3.5+10。 #include void main() float i, s; /*i,s需要定义为需要定义为float型型 */ for(i=1,s=0;i=10;i=i+0.5) s = s + i; printf(s=%fn,s); 235.5 循环嵌套循环嵌套(1)while () while () (2)for (;) for (;) (3)do do while (); while ();(4)while () for (;)
14、(5)for (;) while (;) (6)do for (;); while ();24【例【例5-6】计算】计算s=1+(1+2)+(1+2+3)+(1+2+3+4+10)。 #include void main() int i,j,s; for(i=1,s=0;i=10;i+) for(j=1;j=i;j+) s=s+j; printf(s=%dn,s); 变量跟踪表变量跟踪表255.6 break语句、语句、continue语句和语句和goto语句语句 l5.6.1 break语句lswitch结构中可以用结构中可以用break语句跳出结构去执语句跳出结构去执行行switch语句的
15、下一条语句。实际上,语句的下一条语句。实际上,break语句也可以用来从循环体中跳出,常常和语句也可以用来从循环体中跳出,常常和if语语句配合使用。例如:句配合使用。例如:lfor(i=1;i100)break;l当变量当变量i100时退出循环。时退出循环。lbreak语句不能用于循环语句和语句不能用于循环语句和switch语句之语句之外的任何其他语句中。外的任何其他语句中。 265.6 break语句、语句、continue语句和语句和goto语句语句l5.6.2 continue语句语句l与与break语句退出循环不同的是,语句退出循环不同的是,continue语句语句只结束本次循环,接着
16、进行下一次循环的判断,如只结束本次循环,接着进行下一次循环的判断,如果满足循环条件,继续循环,否则退出循环。果满足循环条件,继续循环,否则退出循环。 l5.6.3 goto语句语句lgoto语句为无条件转向语句,形式为:语句为无条件转向语句,形式为:lgoto 语句标号语句标号l语句标号用标识符表示,命名规则同变量名。语句标号用标识符表示,命名规则同变量名。 27【例【例5.7】阅读下面程序,写出运行结果。】阅读下面程序,写出运行结果。 #include void main() int i,s; for(i=1,s=0;i=10;i+) if(i%2=0) continue; if(i%10=
17、7) break; s=s+i; printf(s=%dn,s); 285.7 程序举例程序举例 l【例【例5-8】计算】计算s=12348。 #include void main()int i;long s;for(i=1,s=1;i=8;i+)s = s * i;printf(s=%ldn,s); 29【例【例5-9】打印图形。】打印图形。 #include void main()int i,j;for (i=1;i=5;i+)for (j=1;j=i;j+)printf(*); printf(n); /* 每输出一行需要换行每输出一行需要换行 */ 30循环变量的功能循环变量的功能l控制
18、循环控制循环l作为循环体中算法的引用变量作为循环体中算法的引用变量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+0+1+2+99+991+2+3+1+2+3+100+1001+2+3+1+2+3+100+1001+2+3+1+2+3+100+100for(i=2,j=1;i=200;i=i+2) s=s+j; j=j+1; 控控制制控控制制+引引用用31【例【例5-9】打印图形。】打印图形。l分析分析for(i=1
19、;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); /*输出一行后换行输出一行后换行*/32【例【例5-10】计算】计算100以内的所有素以内的所有素数之和。数之和。 l【分析】【分析】l从定义来判断,除了从定义来判断,除了1和本身之外,没有其他和本身之外,没有其他因子,所以程序的任务是依次判断因子,所以程序的任务是依次判断1到到100之之间所有的数是否为素数,如果是,将其累加。间所有的
20、数是否为素数,如果是,将其累加。最后输出累加的和。最后输出累加的和。l需要嵌套的循环,外循环控制产生需要嵌套的循环,外循环控制产生1到到100的的数的循环,循环变量的值也正是内循环需要数的循环,循环变量的值也正是内循环需要判断的对象;内循环首先判断当前的循环变判断的对象;内循环首先判断当前的循环变量的值是否为素数,是则累加。循环结束后量的值是否为素数,是则累加。循环结束后输出累加的和。输出累加的和。33【例【例5-10】计算】计算100以内的所有素以内的所有素数之和。数之和。#include void main()int i,j,s=0;for(i=2;i=100;i+) /* 设置循环产生设
21、置循环产生2100之间的数之间的数 */ for(j=2;ji-1) /* i是素数,因为是素数,因为2 i-1没有没有i的因子的因子 */s=s+i;printf(%dn,s); 以上程序中以上程序中j=i-1也可以改成也可以改成j=i/2或或j=3)l很显然,很显然,fibonacci数列依次为:数列依次为:1,1,2,3,5,8,13,21,3436【例【例5-11】计算】计算fibonacci数列前数列前20项的和。项的和。#include void main() int f1,f2,f;int i;long s;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); 37l 循环结构是面向过程编程中三种结构中最重循环结构是面向过程编程中三种结构中最重要的一种结构,学好它是学好这门课程的关要的一种结构,学好它是学好这门课程的关键。本章介绍的内容
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 软件设计师考试经验交流想法试题及答案
- 网络连接搭建试题及答案解析
- 计算机辅助设计的应用领域试题及答案
- 2025届江苏省南京市育英外学校七年级数学第二学期期末经典试题含解析
- 2025至2030年中国洗发纸行业投资前景及策略咨询研究报告
- 法学概论跨学科研究方法试题及答案
- 2025至2030年中国工业用光电编码器行业投资前景及策略咨询研究报告
- 2025至2030年中国全隔爆式可燃气体检测报警器行业投资前景及策略咨询研究报告
- 2025年中国防滑松紧带市场调查研究报告
- 油品分析考试试题及答案
- 2025年全国燃气安全生产管理主要负责人考试笔试试题(500题)附答案
- 列那狐测试题及答案
- 《酉阳杂俎》女性角色研究
- 浙江省嘉兴市2025届高三下学期4月教学测试物理+答案
- 婴幼儿照护 课件 2遗尿现象的干预
- 2025年广东省深圳市31校中考一模历史试题及答案
- 餐饮厨房燃气设备安全操作与维护
- 2025年上海劳动合同范本
- 氧化碳气瓶搬运、存放及使用管理制度
- 老年人安全用药与护理
- 动态葡萄糖图谱报告护理应用专家共识解读(2025年)解读课件
评论
0/150
提交评论