[党团建设]第4章 控制结构.ppt

上传人:音乐台 文档编号:2001373 上传时间:2019-01-30 格式:PPT 页数:87 大小:334.08KB
返回 下载 相关 举报
[党团建设]第4章 控制结构.ppt_第1页
第1页 / 共87页
[党团建设]第4章 控制结构.ppt_第2页
第2页 / 共87页
[党团建设]第4章 控制结构.ppt_第3页
第3页 / 共87页
亲,该文档总共87页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《[党团建设]第4章 控制结构.ppt》由会员分享,可在线阅读,更多相关《[党团建设]第4章 控制结构.ppt(87页珍藏版)》请在三一文库上搜索。

1、 陶 维 孝 黄冈师范学院教务处 13971700996 第四章 控制结构 本章主要内容 4.1 算法基础与程序控制结构 4.2 选择结构 4.3 循环结构 4.4 常用算法 4.1 算法基础与程序控制结构 4.1.1 算法基础 4.1.2 程序控制结构 4.1.1 算法基础 一、算法的概念 算法,简单的说就是计算机解决问题的方法和步骤。任何一 个问题能否用计算机进行处理,关键步骤就是看能否设计出实现 它的算法。 如: 例4-1 求5个自然数的和 (即S1+2+3+4+5) 问题:求N个自然数的和(即S ) 计算机处理方法: S0:定义累加和变量S,初值为0,定义加数变量N,初值为1( 定义

2、变量,变量赋值)。 S1:S=S+N S0+1S1 N=N+1N1+1N2 S2:S=S+N S1+2S3 N=N+1N2+1N3 S3:S=S+N S3+3S6 N=N+1N3+1N4 S4:S=S+N S6+4S10 N=N+1N4+1N5 S5:S=S+N S10+5S15 N=N+1N5+1N6 S6:输出结果,则S为所求之和。 ?10个自然数,100个自然数 算法: S1:定义累加和变量S,初值为0,定义加数变量N,初值为1 。 S2:将加数N累加到S中去,即S+NS。 S3:加数变量N加1,产生一个新的加数,即N+1N。 S4:判断:当N5时,返回S2,再次求和;当N5时,顺序 执

3、行S5。 S5:输出结果,则S为所求之和。 二、算法的特点 1、有穷性:一个算法必须在执行有穷个计算步骤后终止; 2、确定性:一个算法给出的每个计算步骤,必须都是精确定义的、 无二义性的; 3、可行性:算法所要执行的每一个计算步骤,都是可以在有限时间内 做完的; 4、输入:一个算法一般要求有零个或多个输入信息,这些输入信息 是算法所需的初始数据; 5、输出:一个算法一般要求有一个或多个输出信息,这些信息一般 就是对输入信息进行计算的结果。 *注意:对于同一个问题,可能有多种不同的算法,即存在一题多解 的情况。在解题的过程中,应该尽可能选择一种占用资源少、执行效率 高且又容易理解的算法。 三、算

4、法的描述 描述算法有多种不同的工具,不同的工具对算法描述的质量有 着很大的影响。常见的描述工具有自然语言、流程图、N-S图、 PAD图等。 1、自然语言 自然语言是人类在日常生活中进行交流的语言。 优点:比较熟悉、容易接受。 缺点:文字冗长、有二义性、表达不够直观准确、计算机不便 于处理等。 三、算法的描述 2、流程图 亦称框图,是用一些几何框图、流程线和文字说明表示各类型 操作。 优点:直观、形象、易于理解。 缺点:程序复杂时,会使图形中的流程线过多而显得杂乱,不 便于阅读。 表4-1 流程图中常用的基本图形符号 名称图形功能 起止框表示程序的开始或结束 处理框框中指出要处理的内容 输入输出

5、框用于数据的输入输出 判断框框中内容为条件 流程线程序的走向 例4-1 所对应的流程图 结束 S0,N1 SS+N NN+1 开始 N Then 单行结构 If Then 块结构 End If 功能: 如果“表达式”的值为True或非0值,则执行“语句块”,否则执行 下一条语句。 一、If Then语句(单分支结构) 说明: 1、两种结构效果等价,但语法格式不一样。 如:If x y Then temp = x x = y 交换两个数的算法 可能执行,也可能不执行 y = temp End If Print x; y End Sub 二、If Then Else 语句(双分支结构) 格式: I

6、f Then Else 单行结构 If Then Else 块结构 End If 功能:如果“表达式”的值为True或非0值,则执行“语句块 1”,否则执行“语句块2”。 二、If Then Else 语句(双分支结构) 说明: 1、“Else ”可以省略。省略时,化为单分支结 构。 2、单行结构中如果Then或Else后面有多条语句,则各语句之 间用“:”隔开。 【例4-3】编程求分段函数的值。 程序代码如下: Private Sub Command1_Click() Dim x as Integer x = CInt(InputBox(“Input a number:“) If x=0 T

7、hen y = 2 * Sqr(2 * Sin(x) * Sin(x) + 4 * x +1) - 3 Else y = 3 * x * x + 4 * x - 5 End If Print y End Sub 三、If语句的嵌套 格式: 【例4-5】象限判断。 Private Sub Command1_Click() Dim x As Integer, y As Integer x = Val(Text1.Text) y = Val(Text2.Text) If x = 0 Or y = 0 Then Print “该点不在任何象限“ Exit Sub End If If x 0 Then

8、If y 0 Then Print “该点位于第一象限“ Else Print “该点位于第四象限“ End If Else If y 0 Then Print “该点位于第二象限“ Else Print “该点位于第三象限“ End If End If End Sub 四、If Then ElseIf 语句(多分支结构) 格式: If Then Elself Then Elself Then Else End If 功能: 如果“条件1”的值为True或非0 值,则执行“语句块1”,否则继续 判断“条件2”;如果“条件2”的值 为True或非0值,则执行“语句块2 ,否则继续判断“条件3”;

9、以此类 推;如果上述条件均不成立,则执行 “语句块n+1”。 四、If Then ElseIf 语句(多分支结构) 说明: 1、ElseIf 不要写成Else If,否则编译通不过。 2、如果省略“ElseIf”子句,则块IF语句简化为双分支选择结 构。 例4-7: Private Sub Command1_Click() Dim x As Single, y As Single x = Val(Text1.Text) If x Case 表达式列表2 Case Else End Select 功能: 根据“测试表达式”的值 ,从多个语句块中选择符合条 件的一个语句块执行。 说明: 1、执行流

10、程 1)、求“测试表达式”求值。 2)、按顺序与“表达式列表”值匹配,如找到,执行该Case 子语句的语句块,否则,执行Case Else子语句语句块,执行完 后退出Select Case结构。 2、“测试表达式”数据类型:数值、字符串,通常为变量或 常量。 3、各“表达式列表”与“测试表达式”的数据类型必须相 同。 4、“表达式列表”有三种格式: 1) 、, 如:Case 2,4,6,8 2)、 To 如:Case 1 To 5 3)、Is 如:Case Is y,x,y) 二、Choose函数 格式:Choose(整数表达式,返回值1,返回值2,) 功能:根据“整数表达式”的值来决定返回选

11、项列表中的某个值。 如果“整数表达式”的值为1,则Choose函数的返回值为“返回值1” ;如果“整数表达式”的值为2,则Choose函数的返回值为“返回值 2”;以此类推。若“整数表达式”的值小于1或大于列出的选项数目 时,则Choose函数的返回值为Null。 如:将数字形式的星期week转换成中文星期名。 CWeek=Choose(week,“星期一“,”星期二“,”星期三” ,“星期四”,“星期五”) week=15,Cweek= “星期一“ “星期五” week “?“ counter = counter + 1 i = i + 1 char = Mid(Text1.Text, i,

12、 1) Wend Print: Print Tab(10); “输入字母的个数为:“; counter End Sub 4.3.3 DoLoop循环 格式一: Do While | Until Exit Do Loop 格式二: Do Exit Do Loop While | Until 说明: 1、格式一为前测型,先判断条件后执行循环体,若一开始条件不 成立,循环体一次也不执行;格式二为后测型,先执行循环体后判断 条件,若一开始条件不成立,循环体也执行一次。 2、While在条件为T时就执行循环体;Until在条件变为T之前执 行循环体。 3、Exit Do语句可以强制退出循环,而执行Loo

13、p后的语句。 4、若语句省略While或Until子句,即循环由DoLoop构成,则 为无条件循环,循环体内应该有Exit Do语句,否则成为死循环。 【例4-17】求两个整数的最大公约数、最小公倍数 分析:算法使用“辗转相除法”,其基本思想是: 用两数中的大数(用m表示)作为被除数,小数(用n表示) 作为除数,相除后得余数(用r表示),如果r为0,则此时的除 数为最大公约数,否则,将除数作为下一次运算的被除数(m=n ),余数作为下一次运行的除数(n=r),相除得到新的余数r, 再次对余数r进行判断。 最小公倍数的算法为两数之积除以其最大公约数,即: 最小公倍数=(m*n)/最大公约数 Pr

14、ivate Sub Form_Click() Dim n%, m%, nm%, r% m = Val(InputBox(“m=“) 输入一个数 n = Val(InputBox(“n=“) 输入另一个数 nm = n * m 求两个数积 If m n r = m Mod n 求m与n的余数 Do While (r K Then Print N; “ 是素数“ Else Print N; “ 不是素数“ End If End Sub 4.3.4 GoTo语句 格式: GoTo 标号行号 功能:无条件地转移到标号或行号指定的语句。 即当程序遇到该语句后,下一个执行语句是指定的标号 或行号所在位置后

15、的第一个语句。 说明: 1、行号是写在一行开头的整数,标号则是变量加上一个“: ”。 2、行号是一个数字序列,标号是一个字符序列。 【例4-19】判求50以内素数。 程序代码如下: Private Sub Command1_Click() For i = 2 To 50 For j = 2 To i - 1 If i Mod j = 0 Then GoTo notnextm Next j Print i; notnextm: Next i End Sub 4.3.5 循环嵌套 循环嵌套:一个循环体内又出现另外的循环语句称为循环的嵌套,也 称为多重循环。在嵌套结构中,一般有几层嵌套,就说是几重循

16、环。 注意:1、嵌套时,内层循环必须完全包含在外层循环之内,不能相 互“交叉”。 For i=1 to 5 外循环 for j=1 to 3 内循环 Next j 内循环 Next i 外循环 2、多重循环的执行过程是,外循环每执行一次,内循环都要 从头到尾执行一遍。 For i=1 to 5 For j=1 to 3 Print i, j, i + j Next j Next I 外循环一次,内循环3次。 【例4-20】编程打印“九九乘法表” Private Sub Form_Click() Dim i As Integer, j As Integer For i = 1 To 9 控制行

17、For j = 1 To i 控制列 Print i 输出每一个乘法等式项 Next j Print 换行 Next i End Sub 4.4常用算法 4.4.1 累加、连乘 4.4.2 输出定位 4.4.3 穷举法 4.4.4 递推法 4.4.5 数字处理 4.4.1 累加、连乘 累加:是在原来和的基础上再加一个数,并重复此操作。累加分 为数值累加和字符串累加。 算法:Sum=Sum+F(i) 如:Sum=Sum+i str=str “!=“; k End Sub 【例4-23】求n!(n为自然数)。 4.4.2 输出定位 输出定位:即要求在指定位置输出字符或图形信息。 【例4-20】打印

18、九九乘法表就是输出定位的一个例子。 说明:在解决这类问题时,应该首先从图形效果上找规律,再 采用循环等结构来进行处理。 Private Sub Form_Click() FontSize = 21 Print: Print Tab(30); “九九乘法表“ For i = 1 To 9 For j = 1 To i Print i Next j Print Next i End Sub 【例4-24】在窗口中输出以下图形。 分析: 图形(1):每一行都输出同样的6个*,只需将输出一行字符的 语句连续执行5次。程序代码如表4-9(1)。 图形(2):与(1)的差别在于每一行*前面有若干空格,空格

19、 的个数与其行号相同,即始终与行变量j相同。代码如表4-9(2 )。 图形(3):与(1)的差别在于每一行的*个数不同,每行输出 的*个数与其行数相同,代码如表4-9(3)。 图形(4):一是每行字符个数的规律为:第j 行输出2*j-1个字符 ;二是每一行起始位置的规律是:第j行输出的位置为tab(10-j )。代码如表4-9(4)。 4.4.3 穷举法 穷举法:也称为“枚举法”或“试凑法”,即将可能出现的各 种情况一一测试,判断是否满足条件,一般采用循环来实现。 【例4-25】百元买百鸡问题。假定母鸡每只3元,公鸡每只2元, 小鸡每只5角。现在有100元要求买100只鸡,编程列出所有可能 的

20、购买方案。 分析:设母鸡、公鸡、小鸡各为x、y、z只,根据题目要求,列 出方程为: x+y+z=100 3x+2y+0.5z=100 三个未知数,两个方程,此题有若干个解。本题有两种方法:方 法一,最为直观简单,三个未知数利用三重循环来穷举;方法二, 利用三个未知数的关系,采用两重循环来穷举。 由于x、y、z都为整数,从式可以看出,0x33; 0y50;已知x、y的值,则由可知z=100-x-y。 Private Sub Form_Click() Dim x As Integer, y As Integer, z As Integer x、y、z分别代表母鸡、公鸡和小鸡的只数 Print “母

21、鸡“, “公鸡“, “小鸡“ For x = 0 To 33 x取值范围为:0至33 For y = 0 To 50 y取值范围为:0至50 z = 100 - x - y 求出z的值 If 3 * x + 2 * y + 0.5 * z = 100 Then 判断母鸡、公鸡和小鸡总价是否为100元 Print x, y, z 输出购买方案 End If Next y, x End Sub 4.4.4 递推法 递推法:又称为“迭代法”,其基本思想是把一个复杂的计算 过程转化为多次重复的简单过程,每次重复用旧值递推出新值, 并由新值代替旧值。 分析: (1)首先给出第一项的值A=1,第二项的值B

22、=1; (2)输出A、B后,将 A+B的值存于变量A中,即AA+B, 再将A+B的值存于变量B中,即BA+B,变量A、B中存放的是 当前求得的最新值; (3)重复步骤(2),直到输出所有的数。 【例4-26】打印斐波那契数列的前20项,斐波那契数列如下:1 、1、2、3、5、8、13、(即从第三项起每一项是前两项的和 )。 Private Sub Form_Click() Dim strTotal As String 用于存放所有项的累加字符串变量 strTotal = “ 累加字符串变量置初值 A = 1: B = 1 初始值 strTotal = strTotal & Str(A) & S

23、tr(B) & Chr(13) & Chr(10) 将首两项累加;注意每两项后加了回车换行符 For i = 1 To 9 A = A + B 产生下一个项,存入变量A B = A + B 产生下一个项,存入变量B strTotal = strTotal & Str(A) & Str(B) & Chr(13) & Chr(10) 将新两项累加;注意每两项后加了回车换行符 Next i Print strTotal 输出结果 End Sub 4.4.5 数字处理 与数字相关的处理 找规律 分析:首先应该拆出这个数每个数字位,然后再把它们按照 反序重新组合。 怎样拆出、怎样组合? 【例4-28】输

24、入任意一个整数,将其反向输出。如:输入6231, 输出1326。 Private Sub Form_Click() a = Val(InputBox(“请输入一个数:“) 输入要处理的数 a1=a 用于存放生输入数 d = 0 用于存放生成的新数 While (a 0) b = a Mod 10 获得当前数的最低位 d = d * 10 + b 将得到的数位组合到变量d中 a = a 10 去掉原数中的最低位,即整除10 Wend Print “输入数:“ &a1 &“ 反向数:“ &d 输出结果 End Sub 分析: 方法一,将该数的每个数位拆出并求出它们的立方和,如果求出 的立方和与该数

25、相等,则是“水仙花数”并输出。要找出 1001000之间所有的“水仙花数”,把1001000之间所有的整 数依次验证。 方法二,用x、y、z分别表示百位、十位和个位,取值范围分别 为1x9、0y9、0z9。判断一个数是不是“水仙花数” ,取决于x、y、z的立方和是否等于x、y、z构成的三位数。 【例4-29】打印输出1001000之间的“水仙花数”。所谓“水 仙花数”是指一个三位数,其各位数的立方和等于该数,如: 153=13+53+33。 Private Sub Form_Click() Dim x As Integer, y As Integer, z As Integer For x = 1 To 9 百位数 For y = 0 To 9 十位数 For z = 0 To 9 个位数 a = x * 100 + y * 10 + z 构成一个三位数 b = x 3 + y 3 + z 3 求立方和 If a = b Then Print a 如果相等说明是水仙花数,输出 Next z Next y Next x End Sub 作业 1课外预习 算法基础与程序控制结构。 2作业 (1)课后选择题与填空题; (2)综合题第1、3小题。

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

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1