控制结构(循环结构)

控制结构(循环结构)

ID:42058822

大小:312.51 KB

页数:31页

时间:2019-09-07

上传者:U-145848
控制结构(循环结构)_第1页
控制结构(循环结构)_第2页
控制结构(循环结构)_第3页
控制结构(循环结构)_第4页
控制结构(循环结构)_第5页
资源描述:

《控制结构(循环结构)》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

第4章控制结构(循环结构)教学内容掌握三条语句两种循环的实现形式理解循环三要素熟悉循环结构程序设计思路教学重点两种循环的实现形式教学难点循环嵌套循环结构程序设计 循环概述用途解决一些需要重复多次才能完成的问题每一次在做相同操作或与上一次有联系的相似操作分类循环条件循环体0当型循环非0入口出口非0循环体循环条件0直到型循环入口出口 while语句功能:实现当型循环形式:while(表达式)循环体语句执行:先判断,后执行表达式循环体语句0非0例4-11求n!P101i<=nt=t*ii++0非0i=1,t=1.0 源程序main(){intn,i;floatt;printf(“pleaseinputn(n>=0):”);scanf(“%d”,&n);t=1.0;i=1;while(i<=n){t*=i;i++;}printf(“%d!=%f ”,n,t);}循环条件,i为循环变量循环变量初始化改变循环变量的值 while语句应用举例例4-12:求π的近似值P101程序流程输入数据:无处理数据:π/4≈1-1/3+1/5-1/7+……输出结果:π算法分析问题实质:累加求和解决方案:循环循环条件循环变量初始化改变循环变量的值累加项t的绝对值大于等于10-6循环变量t=第1项的值循环变量t=下一项的值 流程图开始pi=0t=1|t|>=10-6pi=pi+tt=下一项非00pi=pi*4输出pi结束找规律项:1、-1/3、1/5、-1/7…找递推公式找本项与下一项之间的关系每一项都是一个分式分子都是1分母是n+2,n代表前一项分母下一项与本项符号相反n=n+2sign=-signt=sign/nn=1sign=1 源程序#includemain(){floatpi,t,n;intsign=1;pi=0.0;n=1.0;t=1.0;while(fabs(t)>=1e-6){pi=pi+t;n=n+2;sign=-sign;t=sign/n;}pi=pi*4;printf(“pi=%f ”,pi);}循环条件,t为循环变量循环变量初始化改变循环变量的值 do-while语句功能:实现直到型循环形式do循环体语句while(表达式);执行:先执行,后判断非0循环体语句表达式0当型循环可能一次也不执行,直到型循环至少执行一次 do-while语句应用举例例4-13:计算sin(x)P102定义变量输入数据处理数据输出结果xsin(x)=x-x3/3!+x5/5!-x7/7!+…sin(x)累加问题循环实现当型循环直到型循环直到最后一项的绝对值小于1e-7循环条件循环变量初始化循环体(改变循环变量)fabs(t)>=1e-7s=s+tt=xt=-t*x*x/(n-1)/n找规律通项公式:an与n之间的关系递推公式:an与an-1之间的关系 源程序#includemain(){doubles,t,x;intn;printf(“pleaseinputx:”);scanf(“%lf”,&x);t=x;n=1;s=x;do{n=n+2;t=-t*x*x/(n-1)/ns=s+t;}while(fabs(t)>=1e-7);printf(“sin(%f)=%lf”,x,s);}如果将s=x;改为s=0;程序应如何修改? for语句功能最灵活,既可实现当型循环,也可实现直到型循环多用于循环次数已知的循环,也可用于循环次数未知的循环形式for(表达式1;表达式2;表达式3)语句执行流程图 for语句执行流程图如何转换成等价的while循环?表达式1;while(表达式2){语句表达式3;}求解表达式1表达式2循环体语句求解表达式3非00表达式1只在进入循环前求解一次 for语句的典型应用for(循环变量赋初值;循环条件;循环变量增值)语句main(){inti,sum;sum=0;for(i=1;i<=100;i++)sum=sum+i;printf(“%d”,sum);}循环变量赋初值循环条件循环体语句循环变量增值非00 for语句的灵活性for(sum=0,i=1;i<=100;i++)sum=sum+i;sum=0,i=1;for(;i<=100;i++)sum=sum+i;for(sum=0,i=1;i<=100;){sum=sum+i;i++;}sum=0,i=1;for(;i<=100;){sum=sum+i;i++;}for(sum=0,i=1;;i++){if(i<=100)break;sum=sum+i;}sum=0,i=1;for(;;){if(i<=100)break;sum=sum+i;i++;} 循环嵌套一个循环体内又包含另一个完整的循环结构三种循环语句可以相互嵌套P107一般情况下各层循环变量互不相同例4-16:打印金字塔图案P107122233333444444455555555566666666666777777777777788888888888888899999999999999999编程思想:抽象的学问抽象方法:找规律用变量来描述变化的规律用流程图来描述算法编程实现算法 流程图一行一行输出重复操作循环i=1i<=9输出第i行i++0非0循环变量除用来控制循环的开始与结束外,往往还参与循环体内的操作。一个字符一个字符输出j=1j<=2*i-1输出第j个ij++0非0每行输出若干个空格和若干个数字k=1k<=10-i输出第k个’’j++0非0 源程序main(){inti,j;for(i=1;i<=4;i++){for(k=1;k<=10-i;k++)printf("%c",'');for(j=1;j<=2*i-1;j++)printf("%c",48+i);printf(" ");}}是否可改为‘0’+i?是否可将k改为j?是否可去掉? 几种循环的比较循环三要素循环条件、循环变量初始化、改变循环变量的值whiledo-whilefor类型当型直到当型直到型循环条件while后while后表达式2循环变量初始化while前do前for前表达式1改变循环变量的值循环体中循环体中循环体中表达式3 循环中应避免的问题不循环发生场合:当型循环原因:循环变量初值不合适,循环初始条件为假死循环发生场合:当型循环、直到型循环原因:循环变量改变量不合适,循环条件始终为假 反面案例n=10;while(n<10)n=n+1;printf(“n=%d”,n);for(n=10;n<10;n++);printf(“n=%d”,n);n=10;don=n+1;while(n>10);printf(“n=%d”,n);for(n=10;n<10;n--);printf(“n=%d”,n); 循环的入口与出口循环入口满足循环条件即可进入循环循环出口正常出口:不满足循环条件,正常退出紧急出口:当出现某种情况时,不管当前是否满足循环条件,立即退出 循环的紧急出口break语句:结束整个循环continue语句:结束本次循环一般出现在一条if语句中if(n%3==0)break;例4-20:判断素数P111算法描述:如果m不能够被2~sqrt(m)之间任一整数整除,则m为素数。流程图源程序 流程图k=sqrt(m)i=2i<=km%i00非0非0正常出口紧急出口输入m判断m是否为素数输出结论如何判断退出方式?i>k非00m是素数m不是素数正常退出紧急退出 源程序#includemain(){intm,i,k;printf(“Enterm= ”);scanf("%d",&m);k=sqrt(m);for(i=2;i<=k;i++)if(m%i)break;if(i>k)printf(“Yes ");elseprintf(“No ");} 循环结构程序设计应用举例例4-22:换零钱问题P113穷举法(枚举法):一一列举各种可能情况,并判断哪一种可能是符合要求的解一种笨方法 源程序voidmain(){intx,y,z;printf(“5yun1yun0.5yun ”);n=0;for(x=1;x<=100;x++)for(y=1;y<=100;y++)for(z=1;z<=100;z++)if(x+y+z==100&&5*x+y+0.5*z==100){printf(“%d%d%d ”,x,y,z);n++;}printf(“Total%d”,n);}voidmain(){intx,y,z;printf(“5yun1yun0.5yun ”);n=0;for(x=1;x<=100;x++)for(y=1;y<=100;y++){z=100-x-y;if(5*x+y+0.5*z==100){printf(“%d%d%d ”,x,y,z);n++;}printf(“Total%d”,n);} 循环结构程序设计应用举例-2例4-23:求平方根P115程序流程输入数据:欲求平方根的数据处理数据:求平方根输出结果:平方根算法分析迭代法P115要求解X,可由给定的一个初值X0,通过迭代公式求得一个新值X1,这个新值X1比初值X0更接近要求的X,再以新值X1作为初值,即X1→X0,重新按原来方法求X1,重复此过程直到|X1-X0|<ε(某一给定的精度),此时可将X1作为问题的解算法实现:循环循环条件:|X1-X0|>=ε循环变量初始化:X0、X1改变循环变量的值:迭代公式、X1→X0 流程图开始X0=初值aX1=0.5*(X0+a/X0)X0=X1|X1-X0|>=1e-5结束输出X1非00开始X0=初值aX1=0.5*(X0+a/X0)t=|X1-X0|,X0=X1|t|>=1e-5结束输出X1非00 源程序#includevoidmain(){floata,x0,x1,t;scanf(“%f”,&a);x0=a/2.0;do{x1=0.5*(x0+a/x0);t=x1-x0;x0=x1;}while(fabs(t)>=1e-5);printf(“%f ”,x1);}试与P115程序进行比较 实验四实验指导书实验五:4,7 作业教材P119:三教材P120:四

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。
关闭