1、 程序框图程序框图 知识回忆 1、程序框图的概念 2、程序框图的图示和意义 3、顺序结构和条件分支结构的特点 程序框图又称流程图,是一种用规定的图形,指向线及程序框图又称流程图,是一种用规定的图形,指向线及 文字说明来准确、直观地表示算法的图形。文字说明来准确、直观地表示算法的图形。 程序框 名称 功能 起、止框 表示一个算法的起始和结束 输入、输出 框 表示算法的输入和输出的信 息 处理框(执 行框) 赋值、计算 判断框 判断一个条件是否成立,用 “是”、“否”或“Y”、 “N”标明 例1 设计一算法,求和:1+2+3+100 第一步:确定首数确定首数a a,尾,尾 数数b b,项数,项数n
2、 n; 第二步:利用公式利用公式“总总 和和=(=(首数首数+ +尾数)尾数)项数项数 /2/2”求和;求和; 第三步:输出求和结果。输出求和结果。 算法1: 开始 结束 输入a,b,n Sum=(a+b)*n/2 输出Sum 例1 设计一算法,求和:1+2+3+100 算法2: 第一步:从从1开始将自然开始将自然 数数1、2、 3、100逐逐 个相加个相加; 第二步:输出累加结果。输出累加结果。 思考:1、上边的式子有怎样的规律呢? Sum=0 Sum=Sum + 1 Sum=Sum + 2 Sum=Sum + 3 Sum=Sum + 100 2、怎么用程序框图表示呢? i = i + 1
3、Sum=Sum + i 4、如何使程序结束? 3、i有什么作用?Sum呢? Sum=Sum + i 程序框图 如图 开始 i=1 sum=0 i=i+1 sum=sum+1 i100? 输出sum 结束 否 是 例2 用二分法求解方程 求关于x的方程x220的根,精确到0.005 算法描述 第一步 令f(x)=x2-2,以为f(1)0,所以设x1=1,x2=2 第二步 令m=(x1+x2)/2,判断f(m)是否为0,若是,则m为所求, 否则,则继续判断f(x1) f(m)大于0还是小于0。 第三步 若f(x1) f(m) 0则令x1=m,否则x2=m。 第四步 判断|x1-x2|=100? 否
4、 是 思考:该流程图与前面的例3 中求和的流程图有何不同? 小结 1、循环结构的特点 2、循环结构的框图表示 3、循环结构有注意的问题 避免死循环的出现,设置好进入(结束)循环 体的条件。 当型和直到型 重复同一个处理过程 程序框图程序框图 习题课习题课 例:设计求一个例:设计求一个 数数a的绝对值的算的绝对值的算 法并画出相应的流法并画出相应的流 程图程图 第一步:第一步:输入输入a 第二步:第二步:如果如果a ;则;则lala,否则,否则, lala; 第三步:第三步:输出输出lal N Y 结束 输出 |a| a 0 输入a 开始 输出 |a|=a 输出 |a|=a 例、 对任意正整数n
5、, n s 1 3 1 2 1 1 的值,并画出程序框图. 开始 输入一个正整数n 输入S的值 结束 S=0 i=1 S=S+1/i i=i+1 in Y N 设计一个算法求 步骤A 步骤B 思考:将步骤A和步骤B交换位 置,结果会怎样?能达到预期结果 吗?为什么?要达到预期结果,还 需要做怎样的修改? 例 用二分法求解方程 求关于x的方程x220的根,精确到0.005 算法描述 第一步 令f(x)=x2-2,因为f(1)0,所以设x1=1,x2=2 第二步 令m=(x1+x2)/2,判断f(m)是否为0,若是,则m为所求, 否则,则继续判断f(x1) f(m)大于0还是小于0。 第三步 若f
6、(x1) f(m) 0则令x1=m,否则x2=m。 第四步 判断|x1-x2|0.005是否成立?若是则x1、x2之间的任意值 均为满足条件的近似值;否则返回第二步。 开始 x1=1:x2=2 f(x)=x22 x1=m x2=m m=(x1+x2)/2 x1=m x2=m f (m)=0 ? f(x1)f(m)0 |x1-x2|0.005 结束 输出所求的近似根m m=(x1+x2)/2 是 否 否 是 否 是 流程图表示 第一步 令f(x)=x2-2,因为 f(1)0,所以设 x1=1,x2=2 第二步 令m=(x1+x2)/2, 判断f(m)是否为0,若是, 则m为所求,否则,则继 续判
7、断f(x1) f(m)大于0还 是小于0。 第三步 若f(x1) f(m) 0则 令x1=m,否则x2=m。 第四步 判断|x1-x2| 5 N Y T1 输出T I2 TTI II + 1 开始 结束 赋值语句 伪代码 Excel VBA 例例1 1 交换两个变量 x、y 的值 p x x y y p p x x y y p 赋值号 x、y、p的值各是多少? 输入输出语句 伪代码 Excel VBA 例例2 2 输入一个数,输出这个数的绝对值。 Read a x Abs(a) Print x a Inputbox(请输入一个数) x Abs(a) Msgbox x 其他输入语句 条件语句单行
8、 伪代码 Excel VBA 例例3 3 输入三个数,输出最大数。 Read a, b, c x a If b x Then x b If c x Then x c Print x a InputBox(输入a) b InputBox(输入b) c InputBox(输入c) x a If b x Then x b If c x Then x c MsgBox 最大数 & x 条件语句块 伪代码 Excel VBA 例例4 4 输入x,计算 y 的值。 Read x If x0 Then y x2 Else y sin x End If Print y x InputBox(输入一个数) If
9、 x 0 Then y x2 Else y sin(x) End If MsgBox y 0,sin , 0, 2 xx xx 条件语句嵌套 伪代码 Excel VBA 例例5 5 输入x,计算 y 的值。 Read x If x 0 Then y 1 Else If x 0 Then y 0 Else y 1 End If Print y x InputBox(输入一个数) If x 0 Then y 1 Else If x 0 Then y 0 Else y 1 End If MsgBox y 0, 1 , 0, 0 , 0, 1 x x x 循环语句For 伪代码 Excel VBA 例
10、例6 6计算1 3 5 7 99。 S 1 For I From 3 To 99 Step 2 S S I End For Print S S 1 For I 3 To 99 Step 2 S S*I Next I MsgBox S 循环语句While 伪代码1 例例7 7求最小的奇数I,使 1 3 5 7 I 10 000。 S 1 I 3 While S10 000 S S I I I 2 End While Print I S 1 I 1 While S10 000 I I 2 S S I End While Print I 伪代码2 算法 案例 m2 While Mod(m, 3)2
11、或 Mod(m, 5)3 或 Mod(m, 7)2 mm + 1 End While Print m 流程图与伪代码 算法案例 N Y 输出m Mod(m, 3)2 mm + 1 m2 或Mod(m, 5)3 或Mod(m, 7)2 算法 案例 m 2 While m Mod 3 2 Or m Mod 5 3 Or m Mod 7 2 m = m + 1 Wend MsgBox 不定方程的一个解为 & m Excel VBA-1 m = 1 Do m = m + 1 Loop Until m Mod 3 = 2 And m Mod 5 = 3 And m Mod 7 = 2 MsgBox 不定
12、方程的一个解为 & m Excel VBA-2 例例3 3 求两个整数a和b的最大公约数欧几里得辗转相除法。 问题背景与分析 分析分析 求出列数: a,b,r1,r2,rn 1,rn,0 这列数从第三项开始,每项都是前两项相除所得的余数,余数为0的前一 项rn即是a和b的最大公约数这种方法称为“欧几里得辗转相除法” 流程图与伪代码 10 Read a, b 20 rMod(a,b) 30 ab 40 br 50 If r 0 Then 20 60 Print a 70 End 输出a ab N r 0 Y 输入a,b rMod(a,b) br 流程图与伪代码 Read a, b While M
13、od(a,b)0 rMod(a,b) ab br End While Print b 输出b ab Y N 输入a,b rMod(a,b) br Mod(a,b) 0 算法 案例 a InputBox(输入第一个自然数) b InputBox(输入第二个自然数) Do r a Mod b a b b r Loop Until r 0 MsgBox 最大公约数为 & a Excel VBA-1 算法 案例 a InputBox(输入第一个自然数) b InputBox(输入第二个自然数) While a Mod b 0 r a Mod b a b b r Wend MsgBox 最大公约数为 &
14、 a Excel VBA-2 例例4 4 用二分法求方程x3 x 1 0在区间 1,1.5 内的一个近似解(误差不超过 0.001)。 问题背景与分析 第一步第一步 确定有解区间a, b 第二步第二步 取a, b的中点 第三步第三步 计算函数在中点处的函数值 第四步第四步 判断中点处函数值是否为0 第五步第五步 判断新的有解区间的长度是否小于 给定的误差 流程图与伪代码 10 Read a, b, c 20 x0(a + b)/2 30 f(a)a3 a 1 40 f(x0)x03 x0 1 50 If f(x0) = 0 Then Goto 120 60 If f(a)f(x0) 0 The
15、n 70 bx0 80 Else 90 ax0 100 End If 110 If |a b|c Then Goto 20 120 Print x0 N 输出x0 x0(a+b) f(x0)=0 输入a,b,c bx0 f(a)f(x0) 0 |a b| c ax0 f(a)a3 a 1 f(x0)x03 x0 1 Y N Y Y N 10 a Val(InputBox(输入区间左端点值 ) 20 b Val(InputBox(输入区间右端点值 ) 30 c Val(InputBox(输入误差点限制) 40 x0 (a + b) / 2 50 f1 a3 a 1 60 f2 x03 x0 1
16、70 If f2 0 Then Goto 140 80 If f1*f2 0 Then 90 b x0 100 Else 110 a x0 120 End If 130 If Abs(a b) c Then Goto 40 140 MsgBox 方程的近似解为 & x0 a Val(InputBox(输入区间左端点值) b Val(InputBox(输入区间右端点值) c Val(InputBox(输入误差限制) Do x0 (a + b) / 2 f1 a3 a 1 f2 x03 x0 1 If f2 0 Then Exit do If f1*f2 0 Then b x0 Else a x0 End If Loop Until Abs(a b) c MsgBox 方程的近似解为 & x0 二分法 a Val(InputBox(输入区间左端点值) b Val(InputBox(输入区间右端点值) c Val(InputBox(输入误差限制) Do x (a + b) / 2 If f(x) 0 Then Exit do If f(a)*f(x) 0 Then b x Else a x End If Loop Until Abs(a b) c MsgBox 方程的近似解为 & x 二分法