版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第五章循环结构程序设计,吴良杰,Harbin Engineering University,实例分析,计算1+2+3+4+100值。 设累加器sum,分别将1、2、100加到变量sum中。 核心:做100次加法。 算法:,sum=0, i=1,i 100,sum=sum+i,i=i+1,输出 sum,Begin,sum=0 i=1,sum=sum+i,输出sum,End,i= i+1,F,T,i=100,循环结构,实例分析,#include void main() int sum,i; sum=0; i=1; while(i=100) sum=sum+i; i+; printf(%dn,sum
2、); ,#include void main() int sum,i; sum=0; for(i=1;i=100;i+) sum=sum+i; printf(%dn,sum); ,循环结构,循环结构 在一定条件下,反复执行一组操作。 循环结构两个要素: 循环条件:循环的前提 循环体:反复执行的操作 循环结构描述:,循环结构,for语句: for(表达式1;表达式2;表达式3) 循环体,C语言实现方法 while语句: while(循环条件) 循环体,do-while语句: do 循环体 while(循环条件);,while循环,实例输出所有的“水仙花”数。 “水仙花”:一个三位数,各位立方和等
3、于自身。如153=13+53+33。 问题分析 三位数的范围:100999 对每个三位数的操作: 分离、求立方和、判断是否与自身相等。 对所有三位均做相同的操作: 使用循环。,while循环,循环条件: 被处理的数小于或等于999。 循环体: 分离、求立方和、判断是否与自身相等、 被处理的数增1 数据结构: 五个整型变量:m,a,b,c,n 数据初始值: m:100,while循环,算法:,#include stdio.h void main( ) int m,a,b,c,n; m=100; while(m=999) a=m%10; b=m/10%10; c=m/100; n=a*a*a+b*
4、b*b+c*c*c; if(m=n) printf(%7d,m); m+; ,while循环,while语句形式: while(表达式) 语句,说明: (1) 表达式值为非0=真,值为0=假 (2) 语句可以是单语句,也可以是复合语句。,while循环,while语句执行流程:,求解表达式,表达式值0,执行语句,执行循环体下面操作,T,F,while循环,求两个数的最大公约数。 方法:欧几里德方法(辗转相除法)。 设两个数为a、b 。 (1)计算a和b 的余数r ; (2)判断r是否0,若不为0,执行(3),否则执行(4) (3) ba, rb 再计算 a和b 的余数r ; 执行(2)。 (4
5、) 此时b是最大公约数。,循环 问题,while循环,循环条件: 余数r不为0 循环体:ba, rb 计算 a和b 的余数r ; 算法:,读入a、b a%b r r0 b a r b a%b r 输出b,#include void main() int a,b,r; scanf(%d%d, ,for循环,实例:输入15个学生的成绩,统计及格率和平均成绩。 问题分析 数学模型: 及格率=及格人数/总人数。 平均成绩=总成绩/总人数 总人数:15人 及格人数:统计 总成绩:统计 结构:对15个数据处理,使用循环,次数确定。 循环体:读入数据 、累加、判断是否及格。,for循环,次数确定的循环: 设
6、置循环控制变量,使用for语句实现。 数据结构:四个整型变量 算法,#include void main() int n=0,i; float g,s=0; for(i=1;i=60) n+; printf(平均成绩=%.2fn,s/15); printf(及格率=%.2f%n,n/15.0*100); ,for循环,for语句格式 for(表达式1;表达式2;表达式3) 语句,for循环,执行流程,(1)求解表达式1; (2)求解表达式2的值, 值为真(非0),执行(3), 否则执行(5); (3)执行循环体,执行(4); (4)求解表达式3,执行(2); (5)执行循环体下面的语句。,do
7、-while循环,实例 计算一个小于30000的自然数各位数字的和值。如,输入1234,输出10。 问题分析: 如何分离出n的各位数字? 1)将个位分离出;n%10 2)将m位数变为m-1位数;n/10 上述过程重复多次。(循环结构) 循环条件:n!=0 循环体:n%10 ,累加,n/10,do-while循环,语句格式 do 语句 while(表达式);,循环体,循环 条件,#include void main() int n,k,sum=0; scanf(%d,执行过程: (1)执行循环体; (2)求解“表达式”的值, 若值为真(非0),执行(1); 若值为假(0),执行(3); (3)执
8、行while语句下面的语句。,do-while循环,分析程序的运行结果 #include void main() int i=10,j=0; do j=j+i; i-; while(i2); printf(%dn,j); ,循环的嵌套,实例:“水仙花”数的另一种求解方法。 思路 三位数可以是:c*100+b*10+a c:19b:09a: 09 若c*100+b*10+ac3+b3+a3, 则c*100+b*10+a是“水仙花”数。 程序见教材P122。,循环的嵌套,嵌套循环的执行过程: (1)求解外层循环条件; (2)值为真时,执行(3);值为假时执行(4) (3)执行一次外层循环体,当执行
9、到内循环时,执行内循环,然后再执行外循环的其它语句;执行(1); (4)执行外层循环体后面的语句。,循环的嵌套,循环嵌套的注意事项 (1)内、外层循环不能交叉, 外层循环必须完整包含内层循环。 (2)若内、外层循环均为for循环, 循环控制变量不能同名。 (3)三种循环可以相互嵌套。,循环的嵌套,#include void main ( ) int y=2,a=1; while (y-!=-1) do a*=y ; a+ ; while (y-) ; printf(%d,%dn,a,y); ,分析程序运行结果,循环的嵌套,输出100 200间的所有素数。 “素数”:只能被1和自身整除的数。 如
10、何判断一个数(n)是否是素数? 用2 n/2之间的数i除n, 都除不尽:n是素数; 有一个可以除尽:不是素数。 是一个循环过程,用什么循环? 循环条件:i=n/2且n%i!=0 循环体: i+,i=2; while(in/2) printf(%4d,n);,循环的嵌套,如何输出100 200间的所有素数? 将判定一个数是否为素数的过程重复多次。 又是循环,用什么循环? 循环变量初值、终值、增量? 101、199、2 数据结构: 2个整型变量 算法:,n=101,199,2,i=2,i0,i+,in/2,输出n,循环的嵌套,#include void main() int i,n; for(n=
11、101;nn/2) printf(%4d,n); ,每行输 出5个,#include void main() int i,n,j=0; for(n=101;nn/2) printf(%4d,n); j+; if(j%5=0) printf(n); printf(n); ,几种循环的比较,1) 三种循环的功能等价,一般情况下可以相互替代。 2) 各种循环都必须包含使循环趋于结束的操作。 3) 循环准备工作(控制变量的初始化)的处理。 4) while、for循环: 先判断循环条件,后执行循环体; 循环体可能一次不 执行。 do-while循环: 先执行循环体,后判断循环条件, 循环体至少执行一次
12、。,几种循环的比较,#include void main() int n,k,s=0; scanf(%d,#include void main() int n,k,s=0; scanf(%d,#include void main() int n,k,s=0; scanf(%d,几种循环的比较,#include stdio.h void main() int s=0,i; for(i=1;i=100;i+) s=s+i; printf(%d,s); ,#include stdio.h void main() int s=0,i; i=1; while(i=100) s=s+i; i+; prin
13、tf(%d,s); ,#include stdio.h void main() int s=0,i; i=1; do s=s+i; i+; while(i=100); printf(%d,s); ,break语句,语句格式: break; 功能: 终止循环的执行 实例分析 分析程序的 运行结果 说明: 只能终止一层循环,#include void main ( ) int a=10,y=0 ; do a+=2 ; y+=a ; if (y50) break ; while (a=14) ; printf(“%d ,%dn,a,y) ; ,continue 语句,语句格式 continue; 功能: 结束本次循环 实例分析 分析程序结果,#include void main( ) int x, i ; for( i=1,x=1; i=10) break; if(x%2=1) x+=5; continue; x-= 3; printf(%dn, i ); ,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 仓库货物管理库存清单模板(库存量与出入库记录)
- 集体诚信建设推动承诺书范文3篇
- 业务连续性计划制定指导手册
- 家庭教育工作担当承诺书6篇
- 推进民生安全承诺函4篇
- 2026年西宁市重点中学初三第二次中考模拟试题语文试题含解析
- 宁波市惠贞书院九年级2025-2026学年初三下学期期中考试英语试题文试题含解析
- 甘肃省天水市名校2026届初三英语试题下学期第一次联考试题含解析
- 云南师大附中呈贡校区2025-2026学年第二学期初三第一次考试英语试题试卷含解析
- 福建省福州市杨桥中学2025-2026学年初三下学期一诊考试英语试题含解析
- 厦门医学院辅导员考试真题2022
- 有限公司450m3高炉项目初步设计安全专篇
- 热学李椿 电子
- 教学能力比赛决赛 《英语》教案
- 勘探监督手册测井分册
- GB/T 4338-2006金属材料高温拉伸试验方法
- GB/T 39493-2020燃气燃烧器和燃烧器具用安全和控制装置特殊要求压力调节装置
- GB/T 32900-2016光伏发电站继电保护技术规范
- 2021年陕西省中考物理试卷一
- (完整版)人教版七年级数学下册教材分析
- 法院传票模板
评论
0/150
提交评论