《最新循环数据结构设计PPT课件》由会员分享,可在线阅读,更多相关《最新循环数据结构设计PPT课件(36页珍藏版)》请在金锄头文库上搜索。
1、循环数据结构设计循环数据结构设计实例分析实例分析n n计算计算1+2+3+4+100值。值。设累加器设累加器sum,分别将,分别将1、2、100加到变量加到变量sum中。中。核心:核心:做做100次加法。次加法。算法:算法: sum=0,i=1 i 100 sum=sum+i i=i+1 输出输出 sumBeginsum=0 i=1sum=sum+i输出输出sumEndi= i+1FTi=100循环循环循环循环结构结构结构结构while循环循环while语句形式:语句形式:while(表达式表达式)语句语句n n说明:说明:说明:说明:(1)(1) 表达式值为非表达式值为非表达式值为非表达式值
2、为非0=0=真,值为真,值为真,值为真,值为0=0=假假假假(2)(2) 语句可以是单语句,也可以是复合语句。语句可以是单语句,也可以是复合语句。语句可以是单语句,也可以是复合语句。语句可以是单语句,也可以是复合语句。while循环循环n nwhile语句执行流程:语句执行流程:求解表达式求解表达式求解表达式求解表达式表达式值表达式值表达式值表达式值00执行语句执行语句执行语句执行语句执行循环体下面操作执行循环体下面操作执行循环体下面操作执行循环体下面操作T TF Fwhile循环循环n n求两个数的最大公约数。求两个数的最大公约数。求两个数的最大公约数。求两个数的最大公约数。 方法:欧几里德
3、方法方法:欧几里德方法方法:欧几里德方法方法:欧几里德方法( (辗转相除法辗转相除法辗转相除法辗转相除法) )。设两个数为设两个数为设两个数为设两个数为a a、bb。 (1)(1)计算计算计算计算a a和和和和bb的余数的余数的余数的余数r r; (2)(2)判断判断判断判断r r是否是否是否是否0 0,若不为,若不为,若不为,若不为0 0,执行,执行,执行,执行(3)(3),否则执行,否则执行,否则执行,否则执行(4)(4) (3)(3) b ba a,rrb b再计算再计算再计算再计算 a a和和和和bb的余数的余数的余数的余数r;r;执行执行执行执行(2)(2)。 (4)(4) 此时此时
4、此时此时b b是最大公约数。是最大公约数。是最大公约数。是最大公约数。循环循环循环循环问题问题问题问题while循环循环循环条件:循环条件:循环条件:循环条件: 余数余数余数余数r r不为不为不为不为0 0循环体:循环体:循环体:循环体:b ba a,r rb b计算计算计算计算 a a和和和和bb的余数的余数的余数的余数r;r;n n算法:算法:算法:算法:读入读入a、ba%brr0barba%br输出输出b#includevoidmain()inta,b,r;scanf(%d%d,&a,&b);r=a%b;while(r)a=b;b=r;r=a%b;printf(%dn,b);for循环循
5、环实例:输入实例:输入实例:输入实例:输入1515个学生的成绩,统计及格率和平均成个学生的成绩,统计及格率和平均成个学生的成绩,统计及格率和平均成个学生的成绩,统计及格率和平均成绩。绩。绩。绩。问题分析问题分析问题分析问题分析数学模型数学模型数学模型数学模型:及格率及格率及格率及格率= =及格人数及格人数及格人数及格人数/ /总人数。总人数。总人数。总人数。平均成绩平均成绩平均成绩平均成绩= =总成绩总成绩总成绩总成绩/ /总人数总人数总人数总人数总人数:总人数:总人数:总人数:1515人人人人及格人数:统计及格人数:统计及格人数:统计及格人数:统计总成绩:统计总成绩:统计总成绩:统计总成绩:
6、统计 结构:结构:结构:结构:对对对对1515个数据处理,使用循环,个数据处理,使用循环,个数据处理,使用循环,个数据处理,使用循环,次数确定次数确定次数确定次数确定。循环体:读入数据循环体:读入数据循环体:读入数据循环体:读入数据 、累加、判断是否及格。、累加、判断是否及格。、累加、判断是否及格。、累加、判断是否及格。 for循环循环次数确定的循环:次数确定的循环:次数确定的循环:次数确定的循环:设置循环控制变量,使用设置循环控制变量,使用设置循环控制变量,使用设置循环控制变量,使用forfor语句实现。语句实现。语句实现。语句实现。数据结构:四个整型变量数据结构:四个整型变量数据结构:四个
7、整型变量数据结构:四个整型变量算法算法算法算法0s,0ni=1,15读入成绩读入成绩gs+gsg=60n+输入输入s/15,n/15TF#includevoidmain()intn=0,i;floatg,s=0;for(i=1;i=60)n+;printf(平均成绩平均成绩=%.2fn,s/15);printf(及格率及格率=%.2f%n,n/15.0*100);for循环循环n nforfor语句格式语句格式语句格式语句格式forfor( (表达式表达式表达式表达式1 1;表达式;表达式;表达式;表达式2 2;表达式;表达式;表达式;表达式3 3) )语句语句语句语句for循环循环n n执行
8、流程执行流程(1 1)求解表达式)求解表达式)求解表达式)求解表达式1 1;(2 2)求解表达式)求解表达式)求解表达式)求解表达式2 2的的的的值值,值为值为真真真真( (非非非非0)0),执执行行行行(3)(3), 否否否否则执则执行行行行(5)(5);(3 3)执执行循行循行循行循环环体,体,体,体,执执行行行行(4)(4);(4 4)求解表达式)求解表达式)求解表达式)求解表达式3 3,执执行行行行(2)(2);(5 5)执执行循行循行循行循环环体下面的体下面的体下面的体下面的语语句。句。句。句。do-while循环循环n n实例实例实例实例计算一个小于计算一个小于计算一个小于计算一个
9、小于3000030000的自然数各位数字的和值。如,的自然数各位数字的和值。如,的自然数各位数字的和值。如,的自然数各位数字的和值。如,输入输入输入输入12341234,输出,输出,输出,输出1010。问题分析:问题分析:问题分析:问题分析:如何分离出如何分离出如何分离出如何分离出n n的各位数字?的各位数字?的各位数字?的各位数字?1 1)将个位分离出;)将个位分离出;)将个位分离出;)将个位分离出;n%10n%102 2)将)将)将)将mm位数变为位数变为位数变为位数变为m-1m-1位数;位数;位数;位数;n/10n/10上述过程重复多次。(循环结构)上述过程重复多次。(循环结构)上述过程
10、重复多次。(循环结构)上述过程重复多次。(循环结构)循环条件:循环条件:循环条件:循环条件:n!=0n!=0循环体:循环体:循环体:循环体:n%10n%10,累加,累加,累加,累加,n/10n/10do-while循环循环语句格式语句格式do语句语句while(表达式表达式);循环体循环体循环体循环体循环循环循环循环条件条件条件条件#include #include void main()void main()int n,k,sum=0;int n,k,sum=0; scanf(%d,&n); scanf(%d,&n); do do k=n%10;k=n%10; sum=sum+k; sum=
11、sum+k; n=n/10; n=n/10; while(n!=0);while(n!=0); printf(“ %dn,sum); printf(“ %dn,sum);执行过程:执行过程:执行过程:执行过程:(1)(1)执行循环体;执行循环体;执行循环体;执行循环体;(2)(2)求解求解求解求解“ “表达式表达式表达式表达式” ”的值,的值,的值,的值,若值为真若值为真若值为真若值为真( (非非非非0)0),执行,执行,执行,执行(1)(1);若值为假若值为假若值为假若值为假(0)(0),执行,执行,执行,执行(3)(3);(3)(3)执行执行执行执行whilewhile语句下面的语句。语句
12、下面的语句。语句下面的语句。语句下面的语句。do-while循环循环n n分析程序的运行结果分析程序的运行结果分析程序的运行结果分析程序的运行结果#include#includevoidmain()voidmain()inti=10,j=0;inti=10,j=0; dodo j=j+i;j=j+i; i-;i-; while(i2);while(i2); printf(%dn,j);printf(%dn,j); 循环的嵌套循环的嵌套实例:实例:“水仙花水仙花”数的另一种求解方法。数的另一种求解方法。思路思路三位数可以是:三位数可以是:c*100+b*10+ac:19b:09a:09若若c*1
13、00+b*10+ac3+b3+a3,则则c*100+b*10+a是是“水仙花水仙花”数。数。程序见教材程序见教材P122。循环的嵌套循环的嵌套n n 嵌套循环的执行过程:嵌套循环的执行过程:嵌套循环的执行过程:嵌套循环的执行过程:(1 1)求解外层循环条件;)求解外层循环条件;)求解外层循环条件;)求解外层循环条件;(2 2)值为真时,执行()值为真时,执行()值为真时,执行()值为真时,执行(3 3);值为假时执行();值为假时执行();值为假时执行();值为假时执行(4 4)(3 3)执行一次外层循环体,当执行到内循环时,执)执行一次外层循环体,当执行到内循环时,执)执行一次外层循环体,当
14、执行到内循环时,执)执行一次外层循环体,当执行到内循环时,执行内循环,然后再执行外循环的其它语句;执行行内循环,然后再执行外循环的其它语句;执行行内循环,然后再执行外循环的其它语句;执行行内循环,然后再执行外循环的其它语句;执行(1 1););););(4 4)执行外层循环体后面的语句。)执行外层循环体后面的语句。)执行外层循环体后面的语句。)执行外层循环体后面的语句。循环的嵌套循环的嵌套n n 循环嵌套的注意事项循环嵌套的注意事项循环嵌套的注意事项循环嵌套的注意事项(1 1)内、外层循环不能交叉,)内、外层循环不能交叉,)内、外层循环不能交叉,)内、外层循环不能交叉, 外层循环必须完整包含内
15、层循环。外层循环必须完整包含内层循环。外层循环必须完整包含内层循环。外层循环必须完整包含内层循环。(2 2)若内、外层循环均为)若内、外层循环均为)若内、外层循环均为)若内、外层循环均为forfor循环,循环,循环,循环,循环控制变量不能同名。循环控制变量不能同名。循环控制变量不能同名。循环控制变量不能同名。(3 3)三种循环可以相互嵌套。)三种循环可以相互嵌套。)三种循环可以相互嵌套。)三种循环可以相互嵌套。循环的嵌套循环的嵌套#include#includevoidmain()voidmain()inty=2,a=1;inty=2,a=1;while(y-!=-1)while(y-!=-1
16、)dodoa*=y;a*=y;a+;a+;while(y-);while(y-);printf(%d,%dn,a,y);printf(%d,%dn,a,y); 分析程序分析程序分析程序分析程序运行结果运行结果运行结果运行结果循环的嵌套循环的嵌套n n输出输出输出输出100100200200间的所有素数。间的所有素数。间的所有素数。间的所有素数。“ “素数素数素数素数” ”:只能被:只能被:只能被:只能被1 1和自身整除的数。和自身整除的数。和自身整除的数。和自身整除的数。如何判断一个数(如何判断一个数(如何判断一个数(如何判断一个数(n n)是否是素数?)是否是素数?)是否是素数?)是否是素数
17、?用用用用2 2n/2n/2之间的数之间的数之间的数之间的数i i除除除除n n,都除不尽:都除不尽:都除不尽:都除不尽:n n是素数;是素数;是素数;是素数;有一个可以除尽:不是素数。有一个可以除尽:不是素数。有一个可以除尽:不是素数。有一个可以除尽:不是素数。是一个循环过程,是一个循环过程,是一个循环过程,是一个循环过程,用什么循环用什么循环用什么循环用什么循环?循环条件:循环条件:循环条件:循环条件:i=n/2i=n/2且且且且n%i!=0n%i!=0循环体:循环体:循环体:循环体: i+i+i=2;i=2; while(i=n/2&n%i!=0)while(in/2)if(in/2)p
18、rintf(%4d,n);printf(%4d,n);循环的嵌套循环的嵌套如何输出如何输出如何输出如何输出100100200200间的所有素数?间的所有素数?间的所有素数?间的所有素数?将判定一个数是否为素数的过程重复多次。将判定一个数是否为素数的过程重复多次。将判定一个数是否为素数的过程重复多次。将判定一个数是否为素数的过程重复多次。又是循环,又是循环,又是循环,又是循环,用什么循环?用什么循环?用什么循环?用什么循环?循环变量初值、终值、增量?循环变量初值、终值、增量?循环变量初值、终值、增量?循环变量初值、终值、增量?101101、199199、2 2数据结构:数据结构:数据结构:数据结
19、构:2 2个整型变量个整型变量个整型变量个整型变量算法:算法:算法:算法: n=101,199,2n=101,199,2i=2i=2i=n/2i=n/2且且且且n%i0n%i0i+i+in/2in/2输出输出输出输出n n循环的嵌套循环的嵌套#include#includevoidmain()voidmain()inti,n;inti,n;for(n=101;n=199;n=n+2)for(n=101;n=199;n=n+2)i=2;i=2;while(i=n/2&n%i!=0)while(in/2)if(in/2)printf(%4d,n);printf(%4d,n); 每行输每行输每行输每
20、行输出出出出5 5个个个个#include#includevoidmain()voidmain()inti,n,j=0;inti,n,j=0;for(n=101;n=199;n=n+2)for(n=101;n=199;n=n+2) i=2;i=2; while(i=n/2&n%i!=0)while(in/2)if(in/2) printf(%4d,n);printf(%4d,n);j+;j+; if(j%5=0)printf(n);if(j%5=0)printf(n); printf(n);printf(n); 几种循环的比较几种循环的比较1)1) 三种循环的功能等价,一般情况下可以相互替代。
21、三种循环的功能等价,一般情况下可以相互替代。三种循环的功能等价,一般情况下可以相互替代。三种循环的功能等价,一般情况下可以相互替代。2)2) 各种循环都必须包含使循环趋于结束的操作。各种循环都必须包含使循环趋于结束的操作。各种循环都必须包含使循环趋于结束的操作。各种循环都必须包含使循环趋于结束的操作。3)3) 循环准备工作循环准备工作循环准备工作循环准备工作( (控制变量的初始化控制变量的初始化控制变量的初始化控制变量的初始化) )的处理。的处理。的处理。的处理。4)4) whilewhile、forfor循环:循环:循环:循环:先判断循环条件,后执行循环体;先判断循环条件,后执行循环体;先判
22、断循环条件,后执行循环体;先判断循环条件,后执行循环体;循环体可能一次不循环体可能一次不循环体可能一次不循环体可能一次不 执行。执行。执行。执行。do-whiledo-while循环:循环:循环:循环:先执行循环体,后判断循环条件,先执行循环体,后判断循环条件,先执行循环体,后判断循环条件,先执行循环体,后判断循环条件,循环体至少执行一次。循环体至少执行一次。循环体至少执行一次。循环体至少执行一次。几种循环的比较几种循环的比较#include #include void main()void main()int n,k,s=0;int n,k,s=0; scanf(%d,&n) scanf(%
23、d,&n); ; do do k=n%10;k=n%10; s=s+k; s=s+k; n=n/10; n=n/10; while(n!=0);while(n!=0); printf(“%dn,s) printf(“%dn,s); ;#include #include void main()void main()int n,k,s=0;int n,k,s=0; scanf(%d,&n) scanf(%d,&n); ; while(n!=0) while(n!=0) k=n%10;k=n%10; s=s+k; s=s+k; n=n/10; n=n/10; printf(“%dn,s) print
24、f(“%dn,s); ;#include #include void main()void main()int n,k,s=0;int n,k,s=0; scanf(%d,&n) scanf(%d,&n); ; for( ;n!=0; ) for( ;n!=0; ) k=n%10;k=n%10; s=s+k; s=s+k; n=n/10; n=n/10; printf(“%dn,s) printf(“%dn,s); ;几种循环的比较几种循环的比较#includestdio.h#includestdio.hvoidmain()voidmain()ints=0,i;ints=0,i; for(i=
25、1;i=100;i+)for(i=1;i=100;i+)s=s+i;s=s+i;printf(%d,s);printf(%d,s); #includestdio.h#includestdio.hvoidmain()voidmain()ints=0,i;ints=0,i;i=1;i=1;while(i=100)while(i=100)s=s+i;s=s+i;i+;i+;printf(%d,s);printf(%d,s); #includestdio.h#includestdio.hvoidmain()voidmain()ints=0,i;ints=0,i;i=1;i=1;dodos=s+i;s=
26、s+i;i+;i+;while(i=100);while(i=100);printf(%d,s);printf(%d,s); break语句语句n n语句格式:语句格式:break;n n功能:功能:终止循环的执行终止循环的执行n n实例分析实例分析分析程序的分析程序的运行结果运行结果n n说明:说明:只能终止一层循环只能终止一层循环#includevoidmain()inta=10,y=0;doa+=2;y+=a;if(y50)break;while(a=14);printf(“%d,%dn,a,y);continue语句语句n n语句格式语句格式continue;n n功能:功能:结束本次
27、循环结束本次循环n n实例分析实例分析分析程序结果分析程序结果#includevoidmain()intx,i;for(i=1,x=1;i=10)break;if(x%2=1)x+=5;continue;x-=3;printf(%dn,i);程序举例程序举例n n打印输出打印输出打印输出打印输出FibonacciFibonacci数列的前数列的前数列的前数列的前2020项,每行输出项,每行输出项,每行输出项,每行输出5 5个个个个数据。数据。数据。数据。FibonacciFibonacci数列的通项:数列的通项:数列的通项:数列的通项:fn=1 n=1、2fn-1+fn-2 n=3问题分析:问
28、题分析:问题分析:问题分析:根据通项公式,多次计算、输出,循环问题。根据通项公式,多次计算、输出,循环问题。根据通项公式,多次计算、输出,循环问题。根据通项公式,多次计算、输出,循环问题。使用何种循环?使用何种循环?使用何种循环?使用何种循环?循环控制变量初值、终值、增量?循环控制变量初值、终值、增量?循环控制变量初值、终值、增量?循环控制变量初值、终值、增量?循环体?循环体?循环体?循环体?计算计算计算计算f fn n、输出、输出、输出、输出f fn n、控制执行、为计算、控制执行、为计算、控制执行、为计算、控制执行、为计算f fn n1 1做准备做准备做准备做准备 程序举例程序举例变量设置:变量设置:f、f1、f2初始值:初始值:f1=1、f2=1如何控制每行输出如何控制每行输出5个数据?个数据?输出第输出第5、10、15、20个数据后换行,个数据后换行,即即i%5=0时换行。时换行。结束语结束语谢谢大家聆听!谢谢大家聆听!36