您好,欢迎访问三七文档
第五章循环结构程序设计1循环结构用于处理需要重复执行的某一组操作,例如:1.将若干名学生的成绩依次出入及输出;2.求S=1+2+3…+99+100;3.求若干种商品的平均价格;4.将1到100之间奇数顺序累加,等等。2QBASIC提供三种实现循环结构的语句:1.WHILE循环结构;2.FOR循环结构3.DO循环结构用WHILE…WEND实现循环WHILE循环是最容易理解的、使用广泛的一种“当循环”结构。格式:WHILE条件循环体(重复执行的语句)WEND1.遇到WHILE语句时,先对“条件”求值,判断条件为“真”或“假”;2.如果条件为“真”,则运行WHILE与WEND之间的语句,然后再检查上述条件是否为“真”,如果为“真”,则再次运行WHILE与WEND之间的语句。以上过程反复进行到某一次条件为“假”;3.如果条件为“假”,则不执行WHILE与WEND之间的语句,直接跳到WEND出出口,脱离循环,接着执行WEND之后的语句。例:计算N!(即求1×2×3×…×N)INPUT“n=”;nm=1p=1WHILEp=nm=m*Pp=p+1WENDPRINT“m=”;mEND运行结果为:n=?5m=120即5!=120m=m*pp=p+1m=m*pp=p+1P=nP=n满足不满足当型循环结构用DO…LOOP结构实现循环(1)1、最简单的DO循环DO循环体LOOP循环体见程序:LOOP1-1.BASLOOP1-2.BASDOWHILE条件循环体LOOPDO循环体LOOPWHILE条件用DO…LOOP结构实现循环(2)2、带WHILE子句的循环(当循环)前测试型循环体条件真假后测试型循环体条件假真带WHILE子句循环举例(1)例:求50种商品的平均价格,(N-S流程图见右)程序:total=0i=1DOWHILEi=50INPUTstotal=total+si=i+1LOOPprice=total/50PRINT“averageprice=”;priceEND带WHILE子句循环举例(2)例:求Π的近似值。程序(前测型):sum=0i=1term=1/(i*i)DOWHILEterm=.00001sum=sum+termi=i+1term=1/(i*i)LOOPpi=SQR(sum*6)PRINTpi=;piEND222222521...31211166,101nn的值,再求求出精度)(也可以是其他需要的,直到用下面的公式逐项累加程序(后测型):sum=0i=1term=1/(i*i)DOsum=sum+termi=i+1term=1/(i*i)LOOPWHILEterm=.00001pi=SQR(sum*6)PRINTpi=;piEND带WHILE子句循环举例(3)程序(前测型):sum=0i=5DOWHILEi5sum=sum+iLOOPPRINTsumEND执行结果:0程序(后测型):sum=0i=5DOsum=sum+iLOOPWHILEi5PRINTsumEND执行结果:5前测试型和后测试型的循环结构有时是有区别的,不一定能够互换!QBASIC保留WHILE-WEND循环主要是为了与GW-BASIC或BASICA兼容。下面两个程序的作用相同。程序运行输出结果均为:s=1683n=33(a)(b)s=0s=0i=3i=3n=0n=0WHILEi<=99DOWHILEi<=99n=n+1n=n+1s=s+is=s+ii=i+3i=i+3WENDLOOPPRINTs=;s,n=;nPRINTs=;s,n=;nENDENDDOUNTIL条件循环体LOOPDO循环体LOOPUNTIL条件用DO…LOOP结构实现循环(3)2、带UNTIL子句的循环(直到型循环)前测试型循环体条件假真后测试型循环体条件真假带UNTIL子句循环举例例求2000~2050年之间的所有闰年。闰年的条件是:①能被4整除,但不能被100整除的年份都是闰年;②能被100整除,又能被400整除的年份是闰年。根据以上两条,2000年,2004年是闰年,2001年,2100年则不是闰年。year=2000DOUNTILyear>2050IFyearMOD4=0thenIF(yearMOD100)◇0THENleap=1ELSEIF(yearMOD400)=0THENleap=1ELSEleap=0ENDIFELSEleap=0ENDIFIFleap=1THENPRINTyearyear=year+1LOOPENDFOR-NEXT循环结构FOR-NEXT循环指由FOR语句、NEXT语句的循环体三者构成的循环,它是一般格式为:FOR循环变量=循环变量初值TO循环变量终值STEP循环变量增量循环体NEXT〈循环变量〉FOR语句称为“循环起始语句”或“循环说明语句”,它的作用是确定循环变量的值如何变化,从而控制循环的次数。“循环变量初值”、“循环变量终值”和“循环变量增量”可以是常数、变量或表达式。NEXT语句是“循环终断语句”,它的作用是标志循环结构的范围,FOR-NEXT循环结构执行过程如果有以下循环:FORi=aTObSTEPcPRINTiNEXTi在执行此循环时,按以下步骤进行:①循环变量i取初值a;②将i的值与终值b比较,如果i未超过b,则接着执行步骤③到⑤,否则跳过步骤③到⑤,而直接执行步骤⑥;③执行循环体(PRINTi);④NEXT语句,循环变量i按步长c增值;即i+c-i。此时循环变量i的值已发生了变化,由一个新值取代了原来的值。“NEXTi”不是“取下一个值i”的意思;⑤返回执行步骤②;⑥循环执行终止,接着执行NEXT语句的下一个语句。FOR-NEXT循环结构举例(1)例:顺序将50名职工的工资输入及输出。编写程序如下:FORi=1TO50INPUTs=;sPRINTsNEXTiEND用FOR语句指定循环次数,共执行循环50次,每次输入一个数给变量s,然后输出该数,(N-S流程图见下)。FOR-NEXT循环结构举例(2)“水仙花数”是指一个三位数,其各位数字的立方和等于该数,例如153=13+53+33,故153是一个“水仙花数”。请找出100~999之间的所有“水仙花数”。分析:题目的关键是如何将一个三位数中的个位、十位和百位分离出来,假设i代表一个由a、b、c三个数字组成的3位数,则:(1)百位数a:a=INT(i/100)(例如:INT(342/100)=3)(2)十位数b:b=INT((i-a*100)/10)(例如:INT((342-3*100)/10)=4(3)个位数c:c=INT(i-a*100-b*10)(例如:INT((342-3*100-4*10)=2或:c=i-INT(i/10)*10(例如:342-INT(342/10)*10=2CLSDIMaASINTEGER,bASINTEGER,cASINTEGERFORi=100TO999a=INT(i/100)b=INT((i-a*100)/10)c=i-INT(i/10)*10IFi=a*a*a+b*b*b+c*c*cTHENPRINTi,NEXTiPRINTEND关于FOR-NEXT循环结构的说明(1)①FOR语句与NEXT语句必须成对出现,缺一不可,FOR语句必须在NEXT语句之前;②循环变量初值和终值可以是正值、负值或零;③FOR语句中的“循环变量”与NEXT语句中的“循环变量”必须是同一变量,例如FORI=1TO3STEP1:?I:NEXTJ;④步长可以是正值或负值。它们可以是整数或小数。但提倡用整数。如果步长为1,则“STEP”可以省略;当步长为零时,循环永不终止,成为“死循环”。下面程序运行时就是“死循环”。FORx=2TO10STEP0PRINTxNEXTx⑤终止循环的条件是“循环变量的值超过终值”,而不是“循环变量的值等于终值”,循环次数的计算可以通过公式计算:循环次数=INT((循环终值-循环初值)/步长)+1;⑥循环变量的作用主要是用来对循环进行控制,根据它的值决定何时终止循环过程。循环变量可以在循环体中被引用,也可以不在循环体中出现(参见:samp5-17.bas)。⑦在循环体内一般不要对循环变量再赋值,否则将影响原有的循环控制状况。⑧流程可以从循环体内转移到循环体外,但不能从循环体外转到循环体内。FORk=1TO10s=s+k*kIFs>200GOTOa:NEXTka:PRINTkEND是合法的。但由于循环有两个出口,不符合结构化原则,故不提倡使用。关于FOR-NEXT循环结构的说明(2)FOR-NEXT循环结构举例(3)例:让计算机给小学生出10道题目,要求是100以内的两位整数相加,学生输入答案后自动判断它是否正确。最后输出学生的得分。(每题10分)。题目分析:首先使要让计算机产生两个两位随机整数。在QB中有一个RND函数,可随机产生(0~1)之间的一个随机小数,不包括0,1。如果将其放大100倍再取整,即INT(100*RND)是[0,99],例如随机产生一个0.256847,则INT(100*0.256847)=25;INT(10*RND)得到一个[0,9]的随机整数;INT(90*RND)得到一个[0,89]的随机整数;INT(10*RND)+10得到一个[10,99]的随机整数,即两位整数;利用循环产生10道题目(参见:sanp5-17.bas)!程序运行时,系统赋一个固定的“随机化种子”,通过该“随机化种子”来产生随机数,所以如果程序每次运行不改变“随机化种子”,就产生相同的随机数。DIMaASINTEGER,bASINTEGER,iASINTEGERREMRANDOMIZERANDOMIZETIMERscore=0FORi=1TO10a=INT(90*RND)+10b=INT(90*RND)+10PRINTa;+;b;=“;INPUTcIFc=a+bTHENscore=score+10NEXTiPRINTYourscoreis:;scoreENDFOR-NEXT循环结构举例(4)例:判断一个整数n是否是质数(除了1和它本身不能再被其他整数数整除的数)。1、利用循环从2~n-1,分别判断每一个数是否能够整除n;flag=1FORI=2TOn-1IFnMODI=0THENflag=1NEXTIPRINTn;”is”;IFflag=1THENPRINT“NOTaprimenumber.”ELSEPRINT“aprimenumber.”END2、将n分解为表示为两个数的乘积时,则这两个数中其中的一个≥,而另一个≤。因此假设n不是一个素数的话,一定可以表示为两个整数的乘积,而其中一个一定小于,所以循环的次数只有。nnnn基本要求掌握WHILE---WEND循环、FOR---NEXT循环和DO---LOOP循环的使用
本文标题:循环结构程序设计
链接地址:https://www.777doc.com/doc-3418597 .html