




已阅读5页,还剩38页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
.,1,第四章循环结构程序设计,DO语句DOWHILE语句循环的嵌套循环结构的程序设计方法,.,2,循环结构,循环结构的基本思想是重复,即利用计算机运算速度快以及能进行逻辑控制的特性,重复执行某些语句,以完成大量的计算要求。,.,3,4.1用DO语句实现循环,例如,当X取1,2,3,10时,分别计算sinx和cosx的值。INTEGERXDOX=1,10,1PRINT*,X,SIN(X*1.0),COS(X*1.0)ENDDOEND,.,4,4.1.1DO循环一般格式,DOi=e1,e2,e3(循环体)ENDDO其中i代表循环变量,它可以是整型或实型变量。e1、e2、e3称为循环参数表达式,分别表示循环变量的初值、终值和步长。循环体是在循环过程中被重复执行的语句组。,.,5,例求5!,PROGRAMLOOPINTEGERP,KP=1DOK=5,1,-1P=P*KENDDOPRINT*,PEND,.,6,说明,(1)当循环变量变化的步长为1时,表达式e3可以省略。即DOK=1,10,1与DOK=1,10等价。(2)如果循环变量和循环参数表达式的类型不一致,其处理办法与赋值语句一样,先将表达式的最后结果转换成循环变量的类型,然后再进行处理。(3)DO循环的执行次数r=MAX(INT(e2-e1+e3)/e3),0)。,.,7,例,INTEGERXDOX=1.2,5.6,2.4PRINT*,XENDDOEND程序执行后的输出结果为:35如果循环变量的步长为0,程序在编译和连接时都没有问题,但在执行过程中求循环执行次数时将出现语法错,即进行了除零运算。这是应当避免的。,.,8,4.1.2DO循环执行过程,计算e1、e2、e3的值,e1i,计算循环次数r,r=0?,执行循环体,i+e3i,r-1r,ENDDO下面的语句,Y,N,.,9,说明:,循环体指的是DO语句与ENDDO语句之间的语句,因此循环体并不包括DO语句,执行程序时DO语句也只执行一次。如果循环参数表达式e1、e2、e3中含有变量,那么即便在循环体中改变变量的值,循环参数并不改变。在循环体内给循环变量赋值,是不允许的。,.,10,分析下面的程序:,INTEGERX,Y,Z,KX=1Y=7Z=2DOK=X,Y,Z+1X=2Y=Y+XZ=Z*KPRINT*,K,X,Y,ZENDDOEND,程序的执行结果为:129242118721356,.,11,例,INTEGERKDOK=1,5,2K=K+1PRINT*,KENDDOEND编译时将给出错误信息:errorFOR3598:assignmenttoDOvariableKdetectedbetweenKand=,.,12,(3)退出循环后循环变量的值与最后一次循环时循环变量的值不同,前者比后者多一个步长。例如:DOK=1,10,2L=KENDDOPRINT*,K,LEND程序的执行结果为:119,.,13,例4.1求,累加项F的递推式为:Fi=Fi-1*X/I可用赋值语句F=F*X/I来实现。READ*,X,NF=1.0Y=1.0DOI=1,NF=F*X/IY=Y+FENDDOPRINT*,Y=,YEND,.,14,例4.2一个整数的因子(不包括该数本身)之和等于它本身,则称该数为完数。例如6的因子有1,2,3,且1+2+3=6,因此6是完数。输入一个整数,判断它是否完数,根据完数的定义,先求整数的因子之和,然后判断该数本身是否等于因子之和,若是则为完数。INTEGERM,SUM,IREAD*,MSUM=0DOI=1,M/2!该循环求因子之和IF(MOD(M,I)=0)SUM=SUM+IENDDOIF(M=SUM)THENPRINT*,M,是完数ELSEPRINT*,M,不是完数ENDIFEND,.,15,例4.3Fibonacci数列定义如下:F1=1F2=1Fn=Fn-1+Fn-2(n2)求Fibonacci数列的前30项。,设待求项为F,待求项前面的第1项为F1,待求项前面的第2项为F。首先根据F1和F2推出F,再将F1作为F2,F作为f1,为求下一项作准备。如此一直递推下去。具体过程如下:11235第一次F2+F1F第二次F2+F1F第三次F2+F1F,.,16,例4.4所谓“水仙花数”是指一个三位整数,其各位数字立方和等于该数本身。例如,153就是一个水仙花数。输出全部“水仙花数”。,在100,999范围内,对所有整数逐一验证是否符合的条件,输出符合条件的数。这种方法称为穷举法。,.,17,4.1.3与循环有关的控制语句,EXIT语句在循环体内使用EXIT语句,将迫使所在循环立即终止,即跳出所在循环体,而继续执行循环结构后面的语句。通常将EXIT语句与IF语句配合使用,即在循环体中使用语句:IF(e)EXIT,.,18,例4.6求两个整数a与b的最大公约数和最小公倍数。,分析:根据例1.7介绍的算法,找出a与b中较小的一个,则最大公约数必在1与最小整数的范围内。使用DO语句,循环变量i从较小整数变化到1。一旦循环控制变量i同时整除a与b,则i就是最大公约数,然后使用EXIT语句强制退出循环。求出最大公约数后,直接应用最小公倍数和最大公约数之间的关系求出最小公倍数。,.,19,INTEGERA,B,GCD,LCM,TPRINT*,请输入两个自然数READ*,A,BIF(AB)THENT=A;A=B;B=TENDIFDOT=A,1,-1IF(MOD(A,T)=0.AND.MOD(B,T)=0)THENPRINT*,GCD=,TEXITENDIFENDDOPRINT*,LCM=,A*B/TEND,.,20,2.CYCLE语句,CYCLE语句用来结束本次循环,即跳过循环体中尚未执行的语句。在循环结构中,CYCLE语句将使控制直接转向循环条件测试部分,从而决定是否继续执行循环。CYCLE语句和EXIT语句的区别在于:CYCLE语句只结束本次循环,而不是终止整个循环的执行。EXIT语句则是结束所在循环,跳出所在循环体。,.,21,例4.7求1100之间的全部奇数之和。,INTEGER:X=0,Y=0DOX=X+1IF(MOD(X,2)=0)THENCYCLEELSEIF(X100)THENEXITELSEY=Y+XENDIFENDDOPRINT*,YEND,.,22,4.2用DOWHILE语句实现循环,对于循环次数确定的循环问题使用DO循环是比较方便的。但是,有些循环问题事先是无法确定循环次数的,只能通过给定的条件来决定是否继续循环。这时可以使用DOWHILE语句来实现循环。,.,23,4.2.1DOWHILE循环的一般格式,DOWHILE循环一般格式如下:DOWHILE(逻辑表达式)循环体ENDDO其中逻辑表达式表示循环的条件,它要用括号括起来。循环体是在循环过程中被重复执行的语句组。ENDDO是循环终端语句,DOWHILE语句和ENDDO语句要配合使用。,.,24,例:输出所输入的全部正数,直到输入负数或零,程序结束。,REAL:P=1.0DOWHILE(P0)PRINT*,PREAD*,PENDDOEND,.,25,DOWHILE循环的执行过程,执行循环体,ENDDO下面的语句,满足循环条件?,.,26,例4.8输入一个整数,输出其位数。,输入的整数存入变量N中,用变量K来统计N的位数。程序如下:INTEGER:N,K=0READ*,NDOWHILE(N0)K=K+1N=N/10ENDDOPRINT*,K=,KEND,.,27,4.3几种循环组织方式的比较,实现循环结构的三种语句,它们各具特点。一般而言,事先能确定循环次数的循环问题用DO循环,而事先不能确定循环次数的循环问题用DOWHILE循环。但这并不是绝对的,很多情况下它们是可以相互代替的。,.,28,例4.11输入一个整数m,判断是否素数。,程序1:用DO循环实现。IMPLICITNONEINTEGERM,I,JREAD*,MJ=SQRT(REAL(M)DOI=2,JIF(MOD(M,I)=0)EXITENDDOIF(IJ.AND.M1)THENPRINT*,M,isaprimenumberELSEPRINT*,m,isnotprimenumberENDIFEND,.,29,程序2:用DOWHILE循环实现IMPLICITNONEINTEGERM,I,JREAD*,MI=2J=SQRT(REAL(M)DOWHILE(IJ.AND.M1)THENPRINT*,M,isaprimenumberELSEPRINT*,m,isnotprimenumberENDIFEND,.,30,程序3:用DO循环和逻辑IF语句的嵌套实现。IMPLICITNONEINTEGERM,I,JREAD*,MI=2J=SQRT(REAL(M)DOIF(MOD(M,I)=0.OR.IJ)EXITI=I+1ENDDOIF(IJ.AND.M1)THENPRINT*,M,isaprimenumberELSEPRINT*,m,isnotprimenumberENDIFEND,.,31,4.4循环的嵌套,如果一个循环结构的循环体又包括一个循环结构,就称为循环的嵌套,或称为多重循环结构。在设计多重循环时,要特别注意内、外循环之间的关系,以及各语句放置的位置,不要搞错。,.,32,例4.12求100,1000以内的全部素数。,(1)判断一个数是否素数。(2)利用穷举法将判断一个数是否素数的程序段,对指定范围内的每一个数都执行一遍,即可求出某个范围内的全部素数。LOGICALFLAGDOM=101,1000,2FLAG=.TRUE.I=2J=SQRT(REAL(M)DOWHILE(I0的初始值x0,就可保证牛顿迭代法收敛。当然迭代初值不同,迭代的次数也就不同。,.,38,例4-17求f(x)在a,b上的定积分。,分析:求一个函数f(x)在a,b上的定积分,其几何意义就是求曲线y=f(x)与直线x=a,x=b,y=0所围成的图形的面积。为了求得图形面积,先将区间a,b分成n等分,每个区间的宽度为h=(b-a)/n,对应地将图形分成n等分,每个小部分近似一个小曲边梯形。近似求出每个小曲边梯形面积,然后将n个小曲边梯形的面积加起来,就得到总面积,即定积分的近似值。n越大,近似程度越高。这就是函数的数值积分方法。,.,39,近似求每个小曲边梯形的面积的常用方法,(1)用小矩形代替小曲边梯形,求出各个小矩形面积,然后累加。此种方法称为矩形法。(2)用小梯形代替小曲边梯形,此种方法称为梯形法。(3)用抛物线代替该区间的f(x),然后求出抛物线与x=a+(i-1)h,x=a+ih,y=0围成的小曲边梯形面积,此种方法称为辛普生法。,.,40,以梯形法为例:,第一个小梯形的面积为:第二个小梯形的面积为:第i个小梯形的面积为:第n个小梯形的面积为:本质上讲这是一个累加问题。,.,41,例1.18利用蒙特卡洛法(Monte-Carlomethod)求的近似值。,分析:蒙特卡洛法是一种通过模拟随机事件的发生进行统计实验的技术。它往往涉及到大量运算,用它进行问题求解不使用计算机是不可思议的。蒙特卡洛法可用来求定积分,其步骤如下:(1)先用一个长为b-a、高为c的矩形,把s围在内。(2)产生n个均匀分布在矩形框内的随机点(x,y),即x在a,b区间均匀分布,y在0,c区间均匀分布。(3)统计落入欲求面积内的随机点的个数m。(4)由计算所求面积的近似值。其中c(b-a)为矩形面积,为落在欲求面积的范围内的概率。n愈大,计算愈精确。,.,42,例4.19,某些分子和分母都
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 中国照明行业出海国别机会洞察报告
- 安全试题分类及答案图片
- 游戏化教学在科学探究课程中的创新应用报告
- 2025年数字货币监管政策对金融监管机制的影响研究报告
- 周末安全提醒课件
- 周总理主题班会课件
- 走进民族英雄教育
- 助力冬奥班会课件
- 湖南省衡阳市耒阳市2025年八下英语期末学业水平测试模拟试题含答案
- 中国元素英文课件
- 六年级20道说理题
- 两个女儿断绝关系协议书范文
- 备品备件保障方案
- OCEAN脚本简明教程
- 幼儿教师专业成长支持体系构建研究
- 举一反三系列高考高中数学同步及复习资料人教A版必修1专题5.15 三角函数的图象与性质的综合应用大题专项训练(30道)(含答案及解析)
- CSTM-窗口晶体 紫外级氟化钙晶体编制说明
- 广东省安全生产管理台账表格与说明
- 2025年日历A4纸打印
- 设备部物资管理岗位试题
- 2023-2024学年八年级第二学期期末数学考试试卷附答案
评论
0/150
提交评论