2019年循环数据结构设计课件

上传人:我*** 文档编号:144772143 上传时间:2020-09-14 格式:PPT 页数:35 大小:576.50KB
返回 下载 相关 举报
2019年循环数据结构设计课件_第1页
第1页 / 共35页
2019年循环数据结构设计课件_第2页
第2页 / 共35页
2019年循环数据结构设计课件_第3页
第3页 / 共35页
2019年循环数据结构设计课件_第4页
第4页 / 共35页
2019年循环数据结构设计课件_第5页
第5页 / 共35页
点击查看更多>>
资源描述

《2019年循环数据结构设计课件》由会员分享,可在线阅读,更多相关《2019年循环数据结构设计课件(35页珍藏版)》请在金锄头文库上搜索。

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; 功

14、能: 结束本次循环 实例分析 分析程序结果,#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 ); ,程序举例,打印输出Fibonacci数列的前20项,每行输出5个数据。 Fibonacci数列的通项:,问题分析: 根据通项公式,多次计算、输出,循环问题。 使用何种循环? 循环控制变量初值、终值、增量? 循环体? 计算fn、输出fn、控制执行、为计算fn1做准备,程序举例,变量设置:f、f1、f2 初始值:f1=1、f2=1 如何控制每行输出5个数据? 输出第5、10、15、20个数据后换行, 即 i%5=0时换行。,

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > PPT模板库 > PPT素材/模板

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号