周日补课循环结构ppt课件_第1页
周日补课循环结构ppt课件_第2页
周日补课循环结构ppt课件_第3页
周日补课循环结构ppt课件_第4页
周日补课循环结构ppt课件_第5页
已阅读5页,还剩38页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、循循 环环 结结 构构 计算机运用系:赵计算机运用系:赵岚岚 2019.12.9 2019.12.9概述概述循环构造的本质:循环构造的本质:将功能反复的代码以简化的方式表述出来将功能反复的代码以简化的方式表述出来 循环构造的根本作用:循环构造的根本作用: - -减少反复执行一项义务时需求的代码减少反复执行一项义务时需求的代码语句数量语句数量循环构造的特点:循环构造的特点:要处理的问题必需可以归纳成一个通式要处理的问题必需可以归纳成一个通式在循环构造中,假设某个变量的值的变化可以在循环构造中,假设某个变量的值的变化可以决议循环是继续还是终了,那么称该变量是循决议循环是继续还是终了,那么称该变量是

2、循环控制变量环控制变量循环次数是有限的,循环体中应有使循环趋于循环次数是有限的,循环体中应有使循环趋于终了的语句,否那么将进入死循环终了的语句,否那么将进入死循环循环可以在满足一定条件下提早终了循环可以在满足一定条件下提早终了 C C言语可实现循环的语句:言语可实现循环的语句:用用goto goto 和和 if if 构成循环构成循环while dowhile do语句语句do while do while 语句语句for for 语句语句 goto goto语句及用语句及用gotogoto构成循环构成循环gotogoto语句普通格式:语句普通格式:goto 语句标号;语句标号; .标号:语句

3、;标号:语句; while语句语句普通方式:普通方式:while(表达式表达式) 循环体语句;循环体语句;v执行流程:执行流程:expr循环体循环体假假(0)真真(非非0)whilev特点:先判别表达式,后执行循环体特点:先判别表达式,后执行循环体v 只需当循环条件表达式为真,就执行循环只需当循环条件表达式为真,就执行循环体语句体语句v阐明:阐明:v循环体有能够一次也不执行循环体有能够一次也不执行v循环体可为恣意类型语句循环体可为恣意类型语句v以下情况,退出以下情况,退出whilewhile循环循环v条件表达式不成立为零条件表达式不成立为零v循环体内遇循环体内遇break,return,got

4、obreak,return,gotov无限循环无限循环: while(1): while(1)v 循环体循环体; ; 例例: :用用whilewhile循环求循环求1 1到到100100的累加和的累加和 #include main() int i,sum=0; i=1; while(i=100) sum=sum+i; i+; printf(%d,sum);循环初值循环初值循环终值循环终值循环变量增值循环变量增值循环条件循环条件循环体循环体Sum=0,i=1当当i=100Sum=sum+ii=i+1例例 显示显示110110的平方的平方#include main() int i=1,k; whi

5、le(i=10) k=i*i; printf(%d*%d=%dn,i,i,k); i+; return 0;运转结果:运转结果:1*1=12*2=43*3=94*4=165*5=256*6=367*7=498*8=649*9=8110*10=100dowhile语句语句普通方式:普通方式:do 循环体语句;循环体语句; while(表达式表达式);v执行流程:执行流程:do循环体循环体expr假假(0)真真(非非0)whilev特点:先无条件执行循环体,后判别表达式特点:先无条件执行循环体,后判别表达式v阐明:阐明:v至少执行一次循环体至少执行一次循环体vdowhile可转化成可转化成whil

6、e构造构造expr循环体循环体假假(0)真真(非非0)循环体循环体While循环循环sum=0,i=1当当i=100Sum=sum+ii=i+1例例 用用dowhiledowhile循环求循环求1 1到到100100的累计和的累计和 #include int main() int i,sum=0; i=1; do sum+=i;i+; while(i=100); printf(%d,sum); return 0;sum=0,i=1sum=sum+Ii=i+1 当i=100例例 while while和和dowhiledowhile比较比较#include int main() int i,su

7、m=0; scanf(%d,&i); do sum+=i;i+; while(i=10); printf(%d,sum); return 0;#include int main() int i,sum=0; scanf(%d,&i); while(i=10) sum+=i;i+; printf(%d,sum); return 0;for语句语句普通方式:普通方式:for(expr1 ; expr2 ; expr3) 循环体语句;循环体语句;v执行流程:执行流程:expr2循环体循环体假假(0)真真(非非0)forexpr1expr3vfor语句普通运用方式:语句普通运用方式:f

8、or(循环变量赋初值;循环条件;循环变量增值循环变量赋初值;循环条件;循环变量增值) 循环体语句;循环体语句; v阐明:阐明:vfor语句中语句中expr1, expr2 ,expr3 类型恣意,都可省略,但分类型恣意,都可省略,但分号;不可省号;不可省v无限循环无限循环: for(;)vfor语句可以转换成语句可以转换成while构造构造expr1;while(expr2)循环体语句;循环体语句;expr3;例例 用用forfor循环求循环求11001100累加和累加和 #include main() int i,sum=0; for(i=1;i=100;i+) sum+=i; printf

9、(%d,sum);例:例:#include main( ) int i=0; for(i=0;i10;i+) putchar(a+i); 运转结果:运转结果:abcdefghij例:例:#include main( ) int i=0; for(;i10;i+) putchar(a+i); 例:例:#include int main( ) int i=0; for(;i10;) putchar(a+(i+); return 0; 例:例:#include main( ) int i=0; for(;i10;putchar(a+i),i+) ; 循环的嵌套循环的嵌套三种循环可相互嵌套三种循环可相

10、互嵌套, ,层数不限层数不限外层循环可包含两个以上内循环外层循环可包含两个以上内循环, ,但不能相互但不能相互交叉交叉嵌套循环的执行流程嵌套循环的执行流程(1) while() while() . (2) do do while( ); . while( );(3) while() do while( ); . (4) for( ; ;) do while(); while() .v嵌套循环的跳转嵌套循环的跳转v制止:制止:v从外层跳入内层从外层跳入内层v跳入同层的另一循环向上跳转跳入同层的另一循环向上跳转例例 循环嵌套,输出九九表循环嵌套,输出九九表123456789123456789246

11、8101214161836912151821242791827364554637281.ij#include int main() int i,j; for(i=1;i10;i+) printf(%4d,i); printf(n-n); for(i=1;i10;i+) for(j=1;j10;j+) printf(j=9)?%4dn:%4d,i*j); return 0;i10printf假假(0)真真(非非0)i=1j+j=1j10真真(非非0)假假(0)i+for(i=1;i10;i+) for(j=1;j10;j+) printf(j=9)?%4dn:%4d,i*j);外循环外循环内循环

12、内循环 辅助控制语句辅助控制语句 breakbreak语句语句 功能:在循环语句和功能:在循环语句和switchswitch语句中语句中, ,终止并跳出循环终止并跳出循环体或开关体体或开关体 阐明:阐明: breakbreak只能终止并跳出最近一层的构造只能终止并跳出最近一层的构造 breakbreak不能用于循环语句和不能用于循环语句和switchswitch语句之外的任何其语句之外的任何其它语句之中它语句之中exprbreak;假假(0)真真(非非0)whiledobreak;.expr假假(0)真真(非非0)whileexpr2break;.假假(0)真真(非非0)forexpr1exp

13、r3switchexpr语句组语句组1break;语句组语句组2break;语句组语句组nbreak;语句组语句组break;.const 1const 2const ndefaultcase breakbreak举例举例1 1:输出圆面积,面积大于:输出圆面积,面积大于100100时停顿时停顿#include#define PI 3.14159int main() int r; float area; for(r=1;r100) break; printf(r=%d,area=%.2fn,r,area); return 0;breakbreak举例举例2 2:小写字母转换成大写字母:小写字母

14、转换成大写字母, ,直至输入非字母字符直至输入非字母字符#include int main() int i,j; char c; while(1) c=getchar(); if(c=a & c=100) break;l for (i=10; ;i-) sum+=i; if (sum=0) break;continue语句语句功能:终了本次循环,跳过循环体中尚功能:终了本次循环,跳过循环体中尚未执行的语句,进展下一次能否执行循环未执行的语句,进展下一次能否执行循环体的判别体的判别仅用于循环语句中仅用于循环语句中exprcontinue;假假(0)真真(非非0)while真真(非非0)d

15、ocontinue;.expr假假(0)whileexpr2continue;.假假(0)真真(非非0)forexpr1expr3例例 求输入的十个整数中正数的个数及其平均值求输入的十个整数中正数的个数及其平均值#include int main() int i,num=0,a; float sum=0; for(i=0;i10;i+) scanf(%d,&a);if(a=0) continue;num+;sum+=a; printf(%d plus integers sum :%6.0fn,num,sum); printf(Mean value:%6.2fn,sum/num); re

16、turn 0;t=1,pi=0,n=1.0,s=1当当|t|1e-6pi=pi+tn=n+2s=-st=s/npi=pi*4输出输出pi分子:分子:1 1,-1-1,1 1,-1-1分母:分母:1 1,3 3,5 5,7 7,.为止最后一项的绝对值小于的近似值,直到公式求例用61071513114兔子问题:兔子问题: 有一对兔子,从出生后第有一对兔子,从出生后第3 3个月起每个月都个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假设兔子都不死,问每个月的兔生一对兔子,假设兔子都不死,问每个月的兔子总数为多少?子总数为多少? 程序分析:程

17、序分析: 兔子的规律为数列兔子的规律为数列 1,1,2,3,5,8,13,21. 1,1,2,3,5,8,13,21. 例求例求Fibonacci数列:数列:1,1,2,3,5,8,的前的前40个数个数)(nFFF)(nF)(nFnnn321211121f1=1,f2=1for i=1 to 20输出输出f1,f2f1=f1+f2f2=f2+f1例例 判别判别m m能否素数能否素数 读入读入m k=m i=2 当当ikm被被i整除整除真真假假用用break终了循环终了循环i=i+1ik+1真真假假输出输出:m是素数是素数输出输出:m不是素数不是素数猴子吃桃子问题:猴子吃桃子问题: 猴子第一天摘

18、下假设干桃子,当即吃了一半,猴子第一天摘下假设干桃子,当即吃了一半,还不过瘾,又多吃了一个。以后每天早上都吃了还不过瘾,又多吃了一个。以后每天早上都吃了前一天的一半又多一个。到第十天的早上,想吃前一天的一半又多一个。到第十天的早上,想吃的时候,发现只剩下一个桃子了。问第一天总共的时候,发现只剩下一个桃子了。问第一天总共摘了多少个桃子?摘了多少个桃子?分析:分析: 这个问题是一个递推问题,第这个问题是一个递推问题,第1010天只剩下天只剩下一个桃子,第一个桃子,第9 9天吃了桃子的一半并还多吃了一天吃了桃子的一半并还多吃了一个,即第个,即第9 9天的桃子数是天的桃子数是4 4个,第个,第8 8天

19、的桃子数为天的桃子数为1010个个依次类推,可以得出第依次类推,可以得出第1 1天的桃子数。天的桃子数。 通式:通式: 前一天桃子数前一天桃子数=(=(后一天桃子数后一天桃子数+1)X2+1)X2#include stdio.hmain() int i,n1,n2; n2=1; for(i=1;i=9;i+) n1=(n2+1)*2; n2=n1; printf(The peaches of the first day is %d.n,n1); getchar(); getchar(); return 0; 数字组合问题:数字组合问题: 有有1 1、2 2、3 3、4 4个数字,能组成多少个互

20、不一个数字,能组成多少个互不一样且无反复数字的三位数?都是多少?样且无反复数字的三位数?都是多少? 程序分析:可填在百位、十位、个位的数程序分析:可填在百位、十位、个位的数字都是字都是1 1、2 2、3 3、4 4。组成一切的陈列后再去。组成一切的陈列后再去掉不满足条件的陈列。掉不满足条件的陈列。 水仙花数问题水仙花数问题开场开场for a=1 to 9for b=0 to 9for c=0 to 9输出输出dd=?xd=a*100+b*10+cX=a*a*a+b*b*b+c*c*c终了终了yesno#include int main()int a,b,c,d,x; for (a=1; a=9

21、; a+) /*百位百位*/ for (b=0; b=9; b+) /*十位十位*/ for (c=0; c=9; c+) /*个位个位 */ d=a*100+b*10+c; x=a*a*a+b*b*b+c*c*c; if (d=x) printf(Daffodils number is %dn,d); getchar(); return 0;用一重循环处理水仙花数用一重循环处理水仙花数: :用一重循环的循环控制变量用一重循环的循环控制变量: :表示三位数表示三位数i4=100999i4=100999 百位数百位数i1=i4/100i1=i4/100 十位数十位数i2=(i4%100)/10i2=(i4%100)/10 个位数个位数i3=i4%10i3=i4%10 水仙花数水仙花数i4=i1i4=i1* *i1 i1* *i1+i2i1+i2* *i2 i2* *i2+i3i2+i3* *i3 i3* *i3 i3 #include int main()int a,b,c,d; for (d=100; d=999; d+) a=d%10; /*个位个位

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论