第4章 控制结构设计Word文档下载推荐.docx

上传人:b****5 文档编号:21164149 上传时间:2023-01-28 格式:DOCX 页数:22 大小:112.34KB
下载 相关 举报
第4章 控制结构设计Word文档下载推荐.docx_第1页
第1页 / 共22页
第4章 控制结构设计Word文档下载推荐.docx_第2页
第2页 / 共22页
第4章 控制结构设计Word文档下载推荐.docx_第3页
第3页 / 共22页
第4章 控制结构设计Word文档下载推荐.docx_第4页
第4页 / 共22页
第4章 控制结构设计Word文档下载推荐.docx_第5页
第5页 / 共22页
点击查看更多>>
下载资源
资源描述

第4章 控制结构设计Word文档下载推荐.docx

《第4章 控制结构设计Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《第4章 控制结构设计Word文档下载推荐.docx(22页珍藏版)》请在冰豆网上搜索。

第4章 控制结构设计Word文档下载推荐.docx

(2)重复执行加法,将每一个加数累加到变量S中去。

可用以下算法实现:

S1定义一个表示累加和的变量S,初始值为0;

定义一个表示加数的变量N,初始值为1。

S2将加数N累加到变量S中去,即S+N→S。

S3加数变量N加1,产生一个新的加数,即N+1→N。

S4判断:

当N≤5时,返回S2,再次求和;

当N>

5时,顺序执行S5。

S5输出结果,则S为所求之和。

在这个算法里,出现了重复运算的操作,称为循环。

循环必须用条件限制循环次数,否则就成为死循环,导致程序无法结束。

算法中S4是判断条件,如果条件成立(N≤5)则回到S2继续求和,否则执行S5输出结果。

2.算法的特点

从上面的例子中,可以概括出算法的5个特点:

有穷性:

一个算法必须在执行有穷个计算步骤后终止;

确定性:

一个算法给出的每个计算步骤,必须都是精确定义的、无二义性的;

可行性:

算法所要执行的每一个计算步骤,都是可以在有限时间内做完的;

输入:

一个算法一般要求有零个或多个输入信息,这些输入信息是算法所需的初始数据;

输出:

一个算法一般要求有一个或多个输出信息,这些信息一般就是对输入信息进行计算的结果。

注意:

对于同一个问题,可能有多种不同的算法,即存在一题多解的情况。

在解题的过程中,应该尽可能选择一种占用资源少、执行效率高且又容易理解的算法。

3.算法的描述

描述算法有多种不同的工具,不同的工具对算法描述的质量有着很大的影响。

常见的描述工具有自然语言、流程图、N-S图、PAD图等。

(1)自然语言。

自然语言是人类在日常生活中进行交流的语言。

用自然语言描述算法的优点在于人们比较熟悉,容易接受,但存在文字冗长、有二义性、表达不够直观准确、计算机不便于处理等缺点。

(2)流程图。

流程图亦称框图,是用一些几何框图、流程线和文字说明来表示各种类型的操作,具有直观、形象、易于理解等特点,应用很广泛,但程序流程很复杂时,会使图形中的流程线过多而显得杂乱,不便于阅读。

流程图采用的基本图形符号如表4-1所示。

表4-1流程图中常用的基本图形符号

名 

图 

功 

起止框

表示程序的开始或结束

处理框

框中指出要处理的内容

输入输出框

用于数据的输入输出

判断框

框中内容为条件

流程线

 

程序的走向

(3)N-S图。

N-S图去掉了流程图中引起混乱的流程线,算法由一个矩形框来描述。

4.1.2程序控制结构

结构化程序设计的基本思想是像玩积木游戏那样,只要利用几种简单的结构,就可以构成任意复杂的程序。

基于这种思想,1966年Bobra和Jacopini提出了三种基本结构——顺序结构、选择结构、循环结构。

基于这三种结构的程序,就是结构化程序(StructuredProgram)。

1.顺序结构

顺序结构是最简单的一种结构,其程序流向是沿着一个方向进行的,有一个入口(A),一个出口(B);

先执行A块,再执行B块。

A块和B块分别代表某些操作。

2.选择结构

程序的流程在某个位置发生分支,需要根据条件选择其中之一执行,这就是选择结构,又称为分支结构。

它也有一个入口(A),一个出口(B)。

简单的选择结构只有两个分支,根据给定的条件是否成立决定执行A块还是B块。

3.循环结构

循环结构又称重复结构,即程序流程根据条件重复执行某一块程序(循环体)。

循环结构有两种类型:

(1)当型(WHILE)循环结构:

先判断条件,后执行循环体。

当条件满足时执行循环体,否则就退出循环。

当型循环结构的流程图和N-S图如图4-5所示。

(2)直到型(UNTIL)循环结构:

先执行循环体,后判断条件。

当条件不满足时继续执行循环体,直到条件满足退出循环体。

虽然我们强调VisualBaisc是一种面向对象的程序设计语言,但其同样也是一种结构化程序设计语言,它对结构化程序设计的三种控制结构提供了良好的支持。

4.2选择结构

选择结构根据分支的个数,可分为单分支选择结构、双分支选择结构和多分支选择结构。

VisualBaisc中提供了多种形式的条件语句来实现不同的选择结构,本节我们主要介绍If语句和SelectCase语句

以及相关的选择函数。

4.2.1IF条件语句

If条件语句可分为单分支结构、双分支结构和多分支结构。

1.If…Then语句(单分支结构)

格式一(单行结构):

If<

表达式>

Then<

语句块>

格式二(块结构):

If<

Then

<

EndIf

功能:

如果“表达式”的值为True或非0值,则执行“语句块”,否则执行下一条语句。

说明:

(1)两种结构效果上等价,只是语法格式不一样而已,例如:

Ifx<

0Thenx=0

等价于

0Then

x=0

EndIf

(2)如果Then后面有多条语句,则各语句之间用“:

”隔开。

例如:

Ifx<

0Thena=b:

b=c:

c=a

(3)表达式可以为关系表达式、逻辑表达式、数值表达式、字符串表达式,当为数值表达式时,非0值表示True,0值表示False。

If1Thenx=0

条件为数值1,表示True,即执行语句“x=0”。

【例4-2】编程实现比较两整数x和y的大小,使x≤y。

分析:

x和y的关系有两种:

①x≤y,则无需做任何操作直接输出结果即可;

②x>y,则需交换x和y的值,然后输出结果。

程序代码如下:

PrivateSubCommand1_Click()

DimxAsInteger,yAsInteger

DimtempAsInteger'

用于存放中间结果

x=CInt(InputBox("

请输入一个数:

"

))'

输入一个数,并转换成整型

y=CInt(InputBox("

请输入另一个数:

))

Ifx>

yThen'

交换两个数的算法

temp=x

x=y

y=temp

Printx;

y

EndSub

以上IF语句采用块结构实现,如果采用单行结构,IF语句可写为:

Ifx>

yThentemp=x:

x=y:

y=temp

思考:

交换两个数的算法能否用如下语句交换两个数?

x=y:

y=x

本例中使用了临时变量temp来交换两个数,还有一种不使用临时变量的算法,如下:

x=x+y:

y=x-y:

x=x-y

2.

If…Then…Else语句(双分支结构)

语句块1>

[Else<

语句块2>

]

[Else

如果“表达式”的值为True或非0值,则执行“语句块1”,否则执行“语句块2”。

(1)“Else<

”可以省略。

省略时,则双分支结构就简化成了单分支结构。

(2)如果Then或Else后面有多条语句,则各语句之间用“:

3.IF语句的嵌套

对于较复杂的判断,可以采用If语句的嵌套来实现。

If语句嵌套的一般格式如图4-10所示。

图4-10IF语句嵌套结构图

嵌套的IF语句建议采用缩进格式进行书写,便于阅读和修改。

4.If…Then…ElseIf语句(多分支结构)

格式:

条件1>

Then

语句块l>

[Elself<

条件2>

Then

条件3>

语句块3>

……

语句块n+1>

如果“表达式1”的值为True或非0值,则执行“语句块1”,否则继续判断“表达式2”;

如果“表达式2”的值为True或非0值,则执行“语句块2,否则继续判断“表达式3”;

以此类推;

如果上述条件均不成立,则执行“语句块n+1”。

流程如图4-13所示。

图4-13IF语句多分支结构流程图

(1)ElseIf不要写成ElseIf,否则编译通不过。

(2)如果省略“ElseIf”子句,则块IF语句简化为双分支选择结构。

4.2.2SelectCase语句

SelectCase语句又称情况语句,是多分支结构的另一种形式。

SelectCase测试表达式

Case表达式列表1

Case表达式列表2

[CaseElse

EndSelect

根据“测试表达式”的值,从多个语句块中选择符合条件的一个语句块执行。

(1)情况语句执行流程是:

先对“测试表达式”求值,然后顺序测试该值与哪一个Case子句中的“表达式列表”匹配,如果找到,则执行该Case子句的语句块,否则执行CaseElse子句的语句块,执行完后退出SelectCase结构。

(2)“测试表达式”可以是数值型或字符串表达式,通常为变量或常量。

(3)“表达式列表i”与“测试表达式”的类型必须相同。

(4)“表达式列表i”有三种格式:

①<

表达式1>

[,表达式2]…

当“测试表达式”的值与其中之一相同时,就执行该Case子句的语句块。

Case2,4,6,8

②<

To<

表达式2>

当“测试表达式”的值在<

和<

之间时,就执行该Case子句的语句块。

Case1to5

③Is<

关系表达式>

当“测试表达式”的值满足<

时,就执行该Case子句中的语句块。

CaseIs<

10

SelectCase语句最多只能选择一个分支去执行,即顺序找到的第一个与“测试表达式”相匹配的Case子句,执行对应的语句块后退出SelectCase结构。

4.2.3条件函数

1.IIf函数

IIf(条件表达式,表达式1,表达式2)

IIf函数功能与If…Then…Else语句相似。

如果“条件表达式”的值为True或非0值,则函数返回“表达式1”的值,否则返回“表达式2”的值。

例如,将x,y中较大的数赋给max变量,实现代码为:

max=IIf(x>

y,x,y)

2.Choose函数

Choose(整数表达式,返回值1,返回值2,……)

根据“整数表达式”的值来决定返回选项列表中的某个值。

如果“整数表达式”的值为1,则Choose函数的返回值为“返回值1”;

如果“整数表达式”的值为2,则Choose函数的返回值为“返回值2”;

以此类推。

若“整数表达式”的值小于1或大于列出的选项数目时,则Choose函数的返回值为Null。

例如,将数字形式的星期week转换成中文星期名。

转换语句如下:

CWeek=Choose(week,"

星期一"

,"

星期二"

星期三"

星期四"

星期五"

当week值为1时,返回字符串“星期一”,然后赋值给CWeek变量;

当week值为2时,返回字符串“星期二”;

若week值不在1~5之间时,返回Null值。

4.3循环结构

在实际应用中,经常遇到一些操作并不复杂,但需要反复处理的问题,这些问题用顺序结构处理十分麻烦,甚至难以实现,而使用循环结构可以轻松实现。

循环结构就是在指定的条件下重复执行同一组语句。

VisualBaisc提供了两种不同的循环结构:

计数型循环结构(For-Next)和条件型循环(While和Do-Loop)。

4.3.1For…Next循环

For循环适合处理事先就能确定循环次数的问题。

For<

循环变量>

=<

初值>

终值>

[step<

步长>

循环体>

[ExitFor]

Next[<

循环变量>

按确定的次数执行循环体,循环次数由循环变量的初值、终值和步长值确定。

(1)For循环执行过程:

①将“初值”赋给“循环变量”;

②检查“循环变量”是否超过终值,若没有超过终值,则执行循环体,否则结束循环执行Next后面的语句;

③循环变量加上步长值,并转到②。

其流程图如图4-15所示。

图4-15For循环执行流程

2,然后继续判断是否超过终值。

直到i值变为6时,超过终值,循环结束。

其输出结果为:

12345

(2)循环变量也称“循环计数器”或“循环控制变量”,为数值型。

(3)初值、终值和步长均为数值表达式。

步长为1时可以省略,如【例4-10】中“step1”可以省略不写。

(4)ExitFor可用于强制退出For循环,转去执行Next后面的语句。

(5)Next后面的“循环变量”与For后面的“循环变量”必须相同,也可以省略不写。

由于For循环每执行一次循环体之后都要加上步长值,可以将Next语句直观地理解成如下操作:

循环变量=循环变量+步长

(6)For-Next循环的循环次数由初值、终值和步长三个因素决定,计算公式为:

循环次数=Int(终值-初值)/步长+1。

(1)当退出循环时,循环变量的值会保持退出时的值。

如【例4-10】中,退出循环后,i值为6。

(2)步长为循环变量的增量,可正可负;

如果省略,则默认步长为1。

当初值≤终值时,步长为正数,反之为负数。

①步长>0,表示循环变量的值是递增的,循环体若能执行,初值必须≤终值。

②步长<0,表示循环变量的值是递减的,循环体若能执行,初值必须≥终值。

例如以下程序段:

Fori=5To1step-1

Printi;

Nexti

54321

③步长=0,循环体若能执行,则必须在循环体中加入强制退出循环的语句ExitFor,否则构成死循环。

(3)在循环体内可以对循环变量进行引用,但如果在循环体中修改了循环变量的值,会影响原来的循环规律。

4.3.2While…Wend循环

While<

条件表达式>

[<

Wend

当“条件表达式”成立,即为True或非0值时,执行循环体,否则执行Wend之后的语句。

流程图如图4-18所示。

图4-18While循环流程图

在For循环结构中,可以利用循环变量加步长值的隐含操作修改循环变量的值,但While循环结构无此功能,所以需要在循环体内单独用一条语句修改循环变量的值。

4.3.3Do…Loop循环

Do循环有两种格式:

格式一:

Do[{While|Until}<

条件>

]

[ExitDo]

Loop

格式二:

Do

Loop[{While|Until}<

(1)格式一为前测型,先判断条件,后执行循环体,如果一开始条件不成立,则循环体一次也不执行;

格式二为后测型,先执行循环体后判断条件,即使一开始条件不成立,循环体也执行一次。

(2)While指在条件为True时就执行循环体;

Until指在条件变为True之前执行循环体。

(3)ExitDo语句可以强制退出循环,而转去执行Loop之后的语句。

(4)若语句中省略While或Until子句,即循环由Do-Loop构成,则为无条件循环,循环体内应该有ExitDo语句,否则成为死循环。

4.3.4GoTo语句

GoTo{标号|行号}

无条件地转移到标号或行号指定的语句。

行号是写在一行开头的正整数,标记则是变量加上一个“:

”。

行号写在一行的开头位置,用来指示GoTo语句所要跳到的地方。

标号是一个字符序列,行号是一个数字序列。

由于GoTo语句可以灵活跳转,如果不加限制,会破坏结构化设计风格。

所以,在程序设计时应尽可能少用、慎用GoTo语句。

4.3.5循环嵌套

一个循环体内又出现另外的循环语句称为循环的嵌套,也称为多重循环。

在嵌套结构中,一般有几层嵌套,就说是几重循环。

(1)嵌套时,内层循环必须完全包含在外层循环之内,不能相互“交叉”。

表4-8列举了常见的正确嵌套形式和错误嵌套形式。

表4-8嵌套形式范例

正确的嵌套

Fori=1To10

Forj=1To20

Nextj

Nexti

Do

Nextj

LoopWhilei<

=10

Fori=1To10

DoWhilej<

=20

Loop

错误的嵌套

(2)多重循环的执行过程是,外循环每执行一次,内循环都要从头到尾执行一遍。

Fori=1To5

Forj=1To3

Printi,j,i+j

在以上的双重循环中,外循环变量i取1时,内循环就要执行3次(内循环变量j依次取1、2、3),接着,外循环变量取值2,内层循环同样要重新执行3次(j再一次取1、2、3)……以此类推,循环体“Printi,j,i+j”一共执行了5×

3次,即15次。

4.4常用算法

(一)

4.4.1累加、连乘

累加和连乘是循环结构中最常用的算法。

累加是在原来和的基础上再加一个数,并重复此操作。

累加常可分为数值累加和字符串累加。

连乘是在原有积的基础上再乘以一个数,并重复此操作。

要注意的是,存放累加或连乘结果的变量初值应在循环语句前设置。

【例4-21】编程求Sum=1+(1+2)+(1+2+3)+…(1+2+3+…+n),其中n由用户输入。

该题是一个累加问题,共有n项相加,存放累加和的变量为Sum;

而对于第i个累加项1+2+…+i,又是一个累加问题,存放该累加和的变量为Sum1。

本题需要采用双重循环。

外循环变量i依次取1、2、…n;

内循环变量j依次取1、2、…i。

PrivateSubForm_Click()

N=InputBox("

请输入欲求的项数:

Sum=0'

存放所有项的累加和变量,置初值0

Fori=1ToN

Sum1=0'

存放每一项的累加和变量

'

在计算每个累加项之前,将其值清零

Forj=1Toi

Sum1=Sum1+j'

求每一项累加和的语句

Sum=Sum+Sum1'

求所有项累加和的语句

PrintSum'

输出结果

程序运行后,单击窗体,弹出一个输入对话框,输入5,在窗体上输出结果35。

【例4-22】逆序输出26个英文字母。

DimiAsInteger

DimstrSumAsString'

存放累加和的变量

strSum="

'

累加和变量置初值

Fori=1To26

Char=Chr(Asc("

A"

)+i-1)'

依次产生26个字母

strSum=Char+strSum'

字符串累加语句,注意Char和strSum的顺序

PrintstrSum'

运行结果为:

ZYXWVUTSRQPONMLKJIHGFEDCBA

如果要顺序输出,程序应该如何改写?

【例4-23】求n!

(n为自然数)。

n!

=1×

…×

n,乘数为1到n的步长为1的等差数列。

DimnAsInteger

n=InputBox("

输入n的值:

k=1'

存放n!

,置初值1

Fori=1Ton'

利用循环变量依次产生下一个乘数

k=k*i'

连乘语句

Printn;

"

!

="

;

k

程序运行后,在弹出的输入对话框中输入6,输出结果:

=720。

4.4.2输出定位

输出定位即要求在指定位置输出字符或图形信息。

【例4-20】打印九九乘法表就是输出定位的一个例子。

在解决这类问题时,应该首先从图形效果上找规律,再采用循环等结构来进行处理。

【例4-24】在窗口中输出以下图形。

(1)

(2)

(3)

(4)

图4-24输出定位效果图

在图形

(1)中,每一行都输出同样的6个*,只需将输出一行字符的语句连续执行5次。

程序代码如表4-9

(1)。

图形

(2)与

(1)的差别在于每一行*前面有若干空格,空格的个数与其行号相同,即始终与行变量j相同。

代码如

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > PPT模板 > 其它模板

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1