北仑中学算法与程序设计自编教材第八课循环结构一一、问题:如果计算机在运行如图1所示的流程所描述的算法时,若n的输入值为100,分析变量i,s的变化,说出s的最后的输出值。分析:只是一个循环结构的算法,这个问题的关键在于理解这个循环结构,这个循环由i=n组成了循环的条件,由s←s+i和i←i+1两个操作组成了循环体,分析循环结构的算法或程序,关键在于分析循环体内的变量变化情况,很显然,这个循环中的规律是这样的:每进入一次循环体,就会将i的值累加到S变量中,而后i变量的值自身增加1,通常我们将s=s+i这样的语句称为累加器,而把i=i+1这样的语句称为计数器。用于累加的变量s的初始值是0,第一次进入循环体的i是1,自然满足循环条件,进入循环,循环体中把1加到s中去,然后i增1变成2,也满足循环条件,进入循环,然后将2加入到s中…这样每次进入循环中的i分别是1、2、3、…100,每次进入的i都被加到S里面去,当i的值为101的时候不符合循环条件,退出循环。那么这个时候i的数值当然是101,而s的数值是1+2+…+100的累加和,即5050。数据的变化如表1所示。由于N的任意性,上述的算法的能完成计算1+2+3+…+n的和。二、算法的实现界面设计如图2所示我们容易实现红框外的流程图代码:privateSubcommand1_click()Dims,i,nAsLongn=Val(Text1.Text)s=0‘图1的红框流程实现代码Text2.Text=Str(s)is10+1=121+2=331+2+3=641+2+3+4=10….…..991+2+…+99=49501001+2+…+100=5050表1开始输入ni=n?结束yni←1s←0输出si←i+1s←s+i图1Text2Command1Text1图2北仑中学算法与程序设计自编教材EndSub那么图1红框代码怎样实现呢?这就要用到VB的循环语句VB中最常见的循环语句有两种:1.Do语句Do语句的执行过程是:先计算条件表达式的值,如果值为True,则执行一次循环体中的语句块,遇到loop后再次计算条件表达式的值,若仍true,继续执行循环体中的语句块,如此不断重复,知道条件表达式的值为False时,才终止Do语句的执行,具体执行的流程参见图3。针对于本课的问题中红框内的流程,用Do语句实现的代码就是:i=1Dowhilei=ns=s+ii=i+1Loop2.For语句For循环语句的执行过程是:首先把“初值”赋给“循环变量”,接着判断循环变量的值是否在终值限定的范围内(这个范围有两个含义:当步长是正值的时候,循环变量大于终值就是超范围,而当步长是负值的时候,循环变量小于终值才是超范围),如果循环在允许范围内,则执行一次循环体语句块,然后循环变量自身增加一个步长的值,而后进入循环判断,当循环变量还在范围内,则继续执行上述过程,否则就结束循环。具体的执行流程参见图4。针对于本课的问题中红框内的流程,用For语句实现的代码就是:fori=1tons=s+i实践1:用do语句完成连加和的程序设计工作。TF图3条件表达式循环体的语句块Do语句格式:DoWhile条件表达式语句块(循环体)LoopFor语句的格式:For循环变量=初值To终值Step步长(当步长为1时,可省略step步长)语句块(循环体)Next循环变量图4FT循环变量赋初值循环变量是否在初值到终值的范围内?循环体的语句块循环变量加步长北仑中学算法与程序设计自编教材nexti由于For语句比Do语句多了循环变量赋初值功能和循环变量自增功能,图4中蓝色框中的操作是For语句特有的,因而用For语句实现实现循环的代码量往往比Do语句少,但Do语句也有它的特点,由于语句中模式限制,因而应用更灵活。三、课堂练习读程序,写答案实践2:用For语句完成连加和的程序设计工作。(1)K=0i=-3Dowhilei3K=k+1i=i+2Loop这段代码运行后K=i=(2)S=0Fori=5to-3step-6S=s+iNexti这段代码运行后S=i=(3)s=1Fori=10to8step-1S=s*iNexti这段代码运行后s=______。(5)dims,I,nASIntegers=2Fori=1to5step2ifsithens=s+iendifNexti这段代码运行后s=______。(6)dims,I,nASIntegers=2:i=2dowhilei=2andi=8ifsmodi0thens=s+2elses=s+iendifi=i+2loop这段代码运行后s=______。(4)dimx,iasintegerx=1fori=1to10step2ifimod2=0thenx=x+1nexti这段代码运行后x=______。