基本算法语句
知识回顾 算法的概念: 一般而言,对一类问题的机械 的、统一的求解方法称为算法。 广义地说:为了解决某一问题而 采取的方法和步骤,就称之为算法。
流程图的概念 流程图:是由一些图框和流程线组成的,其中图框表示各种操作的类型,图框中的文字和符号表示操作的内容,流程线表示操作的先后次序。
尽管不同的算法千差万别,但它们都是由三种基本的逻辑结构构成的,这三种逻辑结构就是顺序结构、选择结构、循环结构. S S+I I I+1 I≤5? 否 是 I 1 S 0
计算机能够“理解”的语言与人的语言 有什么区别? 计算机不同于人:人有大脑,可以思考问题,而计算机则不能.用自然语言和程序框图描述的算法,计算机无法识别,必须转化为其能理解的语言,即程序语言。 对于程序语言还不是我们目前学习主要知识 我们只是先学习一种介于自然语言和计算机 语言之间的文字和符号-----伪代码
计算机完成任何一项任务都需要算法,但是,用自然语言或程序框图描述的算法,计算机是无法“看得懂,听得见”的 计算机完成任何一项任务都需要算法,但是,用自然语言或程序框图描述的算法,计算机是无法“看得懂,听得见”的.因此还需要将算法用计算机能够理解的程序设计语言(programming language)翻译成计算机程序. 程序设计语言有很多种,如BASIC,Foxbase,C语言,C++, J++,VB等.各种语言的语法存在比较大的区别,因此我们教材 使用了一种介于自然语言和计算机语言之间的文字和符号,来表 表示算法.这种文字和符号,称为伪代码(pseudo code). 为了能更好的检验我们的算法,我们还要将伪代码转换为真正 的程序,我们使用的工具是一种称为VBA(Visual Basic for Application)的程序设计语言,它可以看成是VB程序设计语言的一种简化版本.
基本的算法语句有哪些? 基本的算法语句有:输入语句、输出语句、赋值语句、条件语句、循环语句; 各自对应怎样的算法结构? 输入语句、输出语句、赋值语句基本上 是对应顺序结构,条件语句对应条件结构、 循环语句对应循环结构。
赋值语句: 赋值语句伪代码的一般格式: 变量←表达式(公式或运算式)或变量. 符号表示“←”. 如:“x←y”表示将y的值赋给x.
赋值号左边只能是变量,不能是表达式 或常数; 赋值语句: 赋值语句伪代码的一般格式: 变量←表达式(公式或运算式)或变量. 注意: 赋值号左边只能是变量,不能是表达式 或常数; 赋值号左右两边不能调换; 赋值号左右两边可以出现同一个变量,但值可能不相同; 赋值号左右两边的量应该是同类型的.
用伪代码写出求x=3时多项式 的值的算法. 伪代码: 虚线边框 x←3 y ←(x2+x/3)/( -1)
数学应用: 例1. “鸡兔同笼”是我国隋朝时期的数学著作《孙子算经》中的一个有趣而具有深远影响的题目:“今有雉兔同笼,上有三十五头,下有九十四足.问雉兔各几何.” 设有x只鸡,y只兔,则 下面我们设计一个解二元一次方程组的通用算法.
自然语言: 流程图: 开始 输入a1,b1, c1, a2,b2, c2 x←(b2c1-b1c2)/(a1b2-a2b1) y←(a1c2-a2c1)/(a1b2-a2b1) 输出x,y 结束 S1 输入a1,b1, c1, a2,b2, c2; S2 x←(b2c1-b1c2)/(a1b2-a2b1) ; S3 y←(a1c2-a2c1)/(a1b2-a2b1) ; S4 输出x,y.
输入语句伪代码的一般格式: Read a,b . 输入语句: 输入语句伪代码的一般格式: Read a,b . 输入语句也是赋值语句,只不过是从键盘等输入设备上接受数据,而且可以批量接受数据. 输出语句: 输出语句伪代码的一般格式: Print a,b . 注意使用输出语句输出字符串时,字符内容应加在括号内.
自然语言: 流程图: 开始 输入a1,b1, c1, a2,b2, c2 x←(b2c1-b1c2)/(a1b2-a2b1) y←(a1c2-a2c1)/(a1b2-a2b1) 输出x,y 结束 S1 输入a1,b1, c1, a2,b2, c2; S2 x←(b2c1-b1c2)/(a1b2-a2b1) ; S3 y←(a1c2-a2c1)/(a1b2-a2b1) ; S4 输出x,y. 伪代码: Read a1,b1, c1, a2,b2, c2 x←(b2c1-b1c2)/(a1b2-a2b1); y←(a1c2-a2c1)/(a1b2-a2b1) Print x,y
例2.求多项式函数 , 当x=5时的函数值? 10 x← 5 30 Print y 20 y ← 例2.求多项式函数 , 当x=5时的函数值? 10 x← 5 30 Print y 20 y ← 我们一共做了1+2+3+4+5=15次乘法运算,5次加法运算. 一共做了4+5=9次乘法运算,5次加法运算. 10 x← 5 20 a ←x * x 30 b ← a* x 40 c ← b* x 50 d← c * x 60 y ← 7d+6c+5b+4a+3x+1 70 Print y 有没有更简单的算法?
秦九韶算法,其算法特点是:通过一次式的反复计算,逐步得出高次多项式的值;对于一个n次多项式,只要做n次乘法和n次加法. 这种方法是我国南宋时期的数学家秦九韶在他的代表作《数书九章》中提出的,直到今天,这种算法仍是多项式求值比较先进的算法. x← 5 y←7x+6 y ← y* x+5 y← y* x+4 y← y * x+3 y ← y*x+1 Print y
课堂小结: 1、赋值语句: 赋值语句伪代码的一般格式:变量←表达式(公式或运算式)或变量. 符号表示“←”. 如:“x←y”表示将y的值赋给x. 注意: 赋值号左边只能是变量,不能是表达式或常数; 赋值号左右两边不能调换; 赋值号左右两边可以出现同一个变量,但值可能不相同; 赋值号左右两边的量应该是同类型的.
输入语句伪代码的一般格式: Read a,b . 输入语句: 输入语句伪代码的一般格式: Read a,b . 输入语句也是赋值语句,只不过是从键盘等输入设备上接受数据,而且可以批量接受数据. 输出语句: 输出语句伪代码的一般格式: Print a,b . 注意使用输出语句输出字符串时,字符内容应加在括号内.
某居民区的物管部门每月按以下方法收取卫生费:3人和3人以下的住户,每户收取5元;超过3人的住户,每超过1人加收1 某居民区的物管部门每月按以下方法收取卫生费:3人和3人以下的住户,每户收取5元;超过3人的住户,每超过1人加收1.2元。试设计一个算法,根据输入的人数计算应收取的卫生费。 自然语言: 结束 输出y y ←5 y←1.2(x-3)+5 开始 输入x x≤3 Y N S1 输入x; S2 如果x≤3 ,y ← 5, 否则 y ←1.2(x-3)+5; S3 输出y.
条件语句 If 条件 Then 语句1 Else 语句2 End If 满足条件? 否 是 语句1 语句2
某居民区的物管部门每月按以下方法收取卫生费:3人和3人以下的住户,每户收取5元;超过3人的住户,每超过1人加收1 某居民区的物管部门每月按以下方法收取卫生费:3人和3人以下的住户,每户收取5元;超过3人的住户,每超过1人加收1.2元。试设计一个算法,根据输入的人数计算应收取的卫生费。 伪代码: 自然语言: 块条件语句 S1 输入x; S2 如果x≤3 ,y ← 5, 否则 y ←1.2(x-3)+5; S3 输出y. Read x 注意语句缩进. If x≤3 Then y ← 5 Else y ←1.2(x-3)+5 End if End if 不能省略. Print y
设计一个算法,实现求绝对值的功能. 自然语言-算法1: Read x If x < 0 Then S1 输入x; y ← -x 开始 输入x x<0 y←-x y←x N 结束 输出y 自然语言-算法1: Read x If x < 0 Then y ← -x Else y ← x End if Print y S1 输入x; S2 如果x<0 ,y ←-x, 否则 y ← x; S3 输出y. N x←-x 结束 输出x Y 开始 输入x x<0 条件语句伪代码格式2: If A Then B 自然语言-算法2: 10 Read x 20 If x<0 Then x ←-x 30 Print x S1 输入x; S2 如果x<0 ,x ←-x; S3 输出x.
下列流程图,实现的一个“符号”函数的求值,试用自然语言和伪代码描述算法. S2 如果x>0 ,y ←1,转S4; S1 输入x; S4 输出y. 自然语言: S3 如果x=0 ,y ←0, 否则 y ← 1; 输出y 结束 x>0 Y N 开始 输入x y←1 x=0 y←0 y←-1
If x>0 Then y ←1 Else If x=0 Then y ← 0 y ← - 1 End if Read x 伪代码: Print y
If A Then B Else If C Then D E End If If A Then B Else C End If If A Then B
条件语句 If 条件 Then 语句1 Else 语句2 End If 满足条件? 否 是 语句1 语句2
If A Then B Else If C Then D E End If If A Then B Else C End If If A Then B
某市出租汽车最新计费标准如下:在3km以内(含3km)路程按起步价8元收费,超过3km以外的路程按2. 4元/km收费 伪代码: 自然语言: 块条件语句 S1 输入x; S2 如果x≤3 ,y ← 8, 否则 y ←2.4(x-3)+8; S3 输出y. Read x 注意语句缩进. If x≤3 Then y ← 8 Else y ←2.4(x-3)+8 End if End if 不能省略. Print y
程序: Read x If x>0 Then Print x End If 例如:编写一个程序,从键盘上输入一个整数,若是正数就将其输出。 程序: Read x If x>0 Then Print x End If
程序: Read x 火车托运行李的收费方法如下: y是收费,x上行李重量,当0<x≤20(千克)时,按每千克0.35元收费。当x>20(千克)时,20千克的部分按0.35元的单价收费,超出20千克的部分,则按0.65元的单价收费。请根据上述收费方法编写程序。 (0<x≤20) (x≥20) 程序: Read x If x>0 and x<=20 Then y←0.35﹡x Else y←0.35﹡20+0.65﹡(x-20) End If Print y
编写求一个数是偶数还是奇数的程序,从键盘上输入一个整数,输出该数的奇偶性。 程序:Read x y x Mod2 If y=0 Then Print x ; “is an even number” Else Print x ; “is an odd number” End If
设计计算2×4×6×8× ×100的一个算法,并画出流程图. … 写出伪代码 流程图如下: 解: 算法如下: 当型语句如下: S1 T 1; 二、问题给入: 设计计算2×4×6×8× ×100的一个算法,并画出流程图. … 写出伪代码 流程图如下: 解: 算法如下: 当型语句如下: 开始 I≤50 Y N 结束 T←1 I←1 T←T × 2I I←I+1 输出T S1 T 1; T←1 S2 I 1; I ←1 S3 若I≤50,则转S4, 否则转S6; While I≤50 T←T×2I S4 T T×2I; I←I+1 S5 I I+1,转S3; End while S6 输出T. Print T 当型循环:
流程图如下: 另解: 算法如下: 直到型语句如下: S1 T 1; S2 I 1; S3 T T×2I; S4 I I+1 ; 开始 T← 0 I← 1 T← T+ I Y I← I+ 1 I>50 N 结束 输出T T←1 S2 I 1; I←1 S3 T T×2I; Do S4 I I+1 ; T←T×2I S5 若I>50,则转S6, 否则转S3; I←I+1 Until I>50 S6 输出T. End Do 直到型循环: Print T
三、总结归纳: 当型语句: 直到型语句: 伪代码中的: 循环语句 Do While p 循环体 循环体 Until p End while End Do 循环语句 伪代码中的:
四、巩固应用: 例1.分别使用当型循环和直到型循环设计求 1+2+3+…+n>2006 的最小正整数n的伪代码,并画出流程图. 解:使用当型循环语句 设计如下: 流程图如下: 开始 S←0 n←1 S←0 n←1 While S≤2006 S≤2006 n←n+1 S←S+n Y S←S+n n←n+1 结束 输出n ① End while N n← n-1 ①
使用直到型语句 流程图如下: 设计如下: 开始 S←0 S← 0 n←1 n← 1 Do S←S+n S← S+ n n←n+1 Until S>2006 Y End Do n← n-1 n←n-1 结束 输出n Print n
小结: A A p p Do 循环体 While P Until P 循环体 End Do End While N Y Y N 直到型循环语句伪代码格式: Do 循环体 Until P End Do 直到型循环语句伪代码格式: While P 循环体 End While
While P 循环体 自然语言-当型循环,先累加后计数: End While S1 S←0 ; S2 i ←1 ; S←0 当型循环语句伪代码格式: While P 循环体 End While 结束 输出S S ← 开始 S← S +i i ← i +1 Y N i ← 自然语言-当型循环,先累加后计数: S1 S←0 ; S2 i ←1 ; S3 当i≤100时, S←S+i; i←i+1 ; 转S3; S4 输出S. S←0 i ←1 ; While i≤100 S←S+i i←i+1 End While Print S
当型循环流程图和伪代码条件的一致性. 自然语言-当型循环,先计数后累加: S1 S←0 ; S2 i ←0 ; S←0 S3 当i≤99时, 结束 输出S S ← 开始 i ← i + 1 S ← S +i Y N i ← 自然语言-当型循环,先计数后累加: S1 S←0 ; S2 i ←0 ; S3 当i≤99时, i←i+1 ; S←S+i; 转S3; S4 输出S. S←0 i ←0 ; While i≤99 i←i+1 S←S+i End while Print S
Do 循环体 Until P 自然语言-直到型循环先累加后计数: S←0 i ←1 ; S1 S←0 ; S2 i ←1 ; Do 直到型循环语句伪代码格式: Do 循环体 Until P End Do 开始 S ← 结束 输出S i← S←S+i i←i+1 N Y 自然语言-直到型循环先累加后计数: S←0 i ←1 ; Do S←S+i i←i+1 Until i >100 End Do Print S S1 S←0 ; S2 i ←1 ; S3 S←S+i; S4 i←i+1 ; S5 如果i不大于100, 转S3; S6 输出S.
直到型循环流程图和伪代码条件的一致性. 自然语言-直到型循环先计数后累加: S←0 i ←1 ; Do S1 S←0 ; S2 i ←1 ; 开始 S ← 结束 输出S i ← i←i+ 1 S←S+i N Y 自然语言-直到型循环先计数后累加: S←0 i ←1 ; Do i←i+1 S←S+i Until i >99 End Do Print S S1 S←0 ; S2 i ←1 ; S3 i←i+1 ; S4 S←S+i; S5 如果i不大于99, 转S3; S6 输出S.
设计计算1×3×5×7× ×99的一个算法,并画出流程图. … 写出伪代码 流程图如下: 解: 算法如下: 当型语句如下: S1 T 1; 设计计算1×3×5×7× ×99的一个算法,并画出流程图. … 写出伪代码 流程图如下: 解: 算法如下: 当型语句如下: 开始 I≤50 Y N 结束 T←1 I←1 T←T ×(2I-1) I←I+1 输出T S1 T 1; T←1 S2 I 1; I ←1 S3 若I≤50,则转S4, 否则转S6; While I≤50 T←T×(2I-1) S4 T T×(2I-1); I←I+1 S5 I I+1,转S3; End while S6 输出T. Print T 当型循环:
1-3+5-7+9-…-101 例下列伪代码实现的什么算法? S←0 a←1 i←1 While i≤101 S←S+a×i a←a×(-1) i ← i+2 End While Print S 1-3+5-7+9-…-101
例:下列伪代码实现的什么算法? S←0 i ←0 While i≤99 i←i+1 S←S+i End while Print S
请大家仔细观察上面写算法的几个问题 , 他们的结构有什么特点? 他们的循环的次数已经确定。
当循环的次数已经确定,可用“For”语句表示. For I From “初值” To “终值” step “步长” …… End For
例下列伪代码实现的什么算法?如何用For语句改写该算法? S←0 i ←0 While i≤99 i←i+1 S←S+i End while Print S S←0 For i From 0 To 99 step 1 S←S+i+1 End For Print S
例下列伪代码实现的什么算法?如何用For语句改写该算法? S←0 i ←1 Do S←S+i i←i+1 Until i >100 Print S S←0 For i From 1 To 100 step 1 S←S+i End For Print S 如何将直到型循环和当型循环的循环语句改为For语句?
1-3+5-7+9-…-101 例下列伪代码实现的什么算法?如何用For语句改写该算法? S←0 a←1 i←1 While i≤101 S←S+a×i a←a×(-1) i ← i+2 End While Print S S←0 a←1 For i From 1 to 101 Step 2 S←S+a×i a←a×(-1) End For Print S i从1到101,每次增加2 1-3+5-7+9-…-101