资源预览内容
第1页 / 共43页
第2页 / 共43页
第3页 / 共43页
第4页 / 共43页
第5页 / 共43页
第6页 / 共43页
第7页 / 共43页
第8页 / 共43页
第9页 / 共43页
第10页 / 共43页
亲,该文档总共43页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
实例介绍,2007年4月,第2章 实例介绍,2.1伪代码介绍 2.2三角形问题 2.3NextDate问题 2.4佣金问题 2.5简单ATM系统 2.6货币转换器,2.1 伪代码介绍,伪代码(Pseudocode)是一种算法描述语言。使用为代码的目的是为了使被描述的算法可以容易地以任何一种编程语言(Pascal, C, Java, etc)实现。因此,伪代码必须结构清晰,代码简单,可读性好,并且类似自然语言。 伪代码实际上是计算机代码的简略形式,它比流程图更像计算机代码。 伪代码要求程序设计人员集中于决绝问题而不是计算机语言。,伪代码规则,变量声明用:Dim As 例如: Dim a As INTEGER 意思是:声明a为整形变量 Dim a,b,c,match As INTEGER 意思是:声明a,b,c,match都为整形变量 符号后的内容表示注释; 例如: Dim a,b,c As INTEGER 定义三角形 的三条边,伪代码规则,数据结构声明: Type End,例如: Type STUDENT Dim name As STRING Dim age As INTEGER Dim NO As STRING Dim tele As STRING End STUDENT,伪代码规则,赋值语句: = 例如: tomorrowDay=day+1 tomorrowMonth=month+1,伪代码规则,输入: Input () 例如: Input (a) Input(a,b,c),输出 Output () 例如: Output (“Side A is”,a) Output (“Side B is”,b) Output (“Side C is”,c) Output (“Error!please again!”),伪代码规则,简单条件: 例如: Stud.age=0 Stud.agec,伪代码规则,复合条件: 例如: (ab+c) AND(ba+c)AND(ca+b),伪代码规则,顺序结构 语句按照串行顺序排列。 例如: Output (“Enter 3 integers which are sides of a triangle) Input(a,b,c) Output (“Side A is”,a) Output (“Side B is”,b) Output (“Side C is”,c),伪代码规则,简单选择 If Then EndIf 例如:if a=b Then match=match+1 EndIf,伪代码规则,选择 If Then Else EndIf 例如:if (ab+c) AND(ba+c)AND(ca+b) Then IsTriangle=True Else IsTriangle=False EndIf,伪代码规则,多重选择 Case of Case 1: Case n: EndCase,例如: Case score of Case 1:score=90 Output(“Good!”) Case 2:60=score=89 Output(“Pass!”) Case 3:0=score=59 Output(“Not Pass!”) EndCase,伪代码规则,计数循环 For=To EndFor 例如: For i=1 to 100 sum=sum+i EndFor,伪代码规则,While循环 Do While EndWhile 例如: Do While stature=165 Output(“Stop!”) EndWhile,伪代码规则,Unitl循环 Do Unilt ,例如: sum=0 i=1 Do sum=sum+i i=i+1 Until i=100,伪代码规则,过程定义(函数和面向对象方法的定义类似) (Input:; Output:) End,伪代码规则,过程调用(函数和面向对象方法的定义类似) Call (;),伪代码课堂练习,问题:计算并报告一个班学生的平均分数。 讨论:平均分数等于所有学生分数的和处以学生数。我们需要一个循环然后加班中每位学生的分数。在循环内仍需要半内学生的总数。,Program average grade Dim grade,sum ,average As Real Dim counter As integer sum=0.0 counter=0 Do while there no more data input(grade) sum=sum+grade counter=counter+1 EndWhile average=sum/counter Output(average) End average grade,2.2 三角形问题,三角形问题是在软件测试文献中使用最广的一个例子,这个例子经久不衰的原因之一是,它包含了清晰而又复杂的逻辑。它还是削弱客户、开发人员和测试人员沟通的不完整定义的典型例子。 三角形问题之所以复杂,是因为输入与正确输出之间的关系复杂。,2.2.1 三角形问题陈述,简单版本:三角形问题接受三个整数a、b和c作为输入,用作三角形的边。程序的输出是由这三条边确定的三角形类型:等边三角形、等腰三角形、不等边三角形或非三角形。有时这个问题被扩展为将直角三角形作为第五类,在有些练习中会使用这种扩展。 改进版本:三角形问题接受三个整数a、b和c作为输入,用作三角形的边。整数a、b和c必须满足以下条件: c1:1=a=200 c4: ab+c c2: 1=b=200 c5: ba+c c3: 1=c=200 c6: ca+b,续,程序的输出是由这三条边确定的三角形类型:等边三角形、等腰三角形、不等边三角形或非三角形。如果输入值没有满足这些条件中的任何一个,则程序会通过输出消息来进行通知,例如,“b的取值不在允许范围内”,若c1、c2、c3满足,则给出以下四种相互排斥输出的一个: 如果三条边相等,则程序的输出是等边三角形。 如果两条边相等,则程序的输出是等腰三角形。 如果没有两条边相等,则程序的输出是不等边三角形。 如果c4、c5和c6中有一个条件不满足,则程序的输出是非三角形。,2.2.2三角形问题实现,以下是三角形问题的数据流图描述。可以把这个程序实现为一个主程序和三个简单的过程。在后续章节里我们还要用到这个例子,现在将它的实现用伪代码表示。 三角形程序之所以复杂,是因为它包含了清晰而复杂的逻辑。,三角形程序实现的数据流图,三角形问题实现的伪代码,Program triangle2 version of simple Dim a,b,c As Integer Dim IsATriangle As Boolean Step1: Get Input Output(“Enter 3 integers which are sides of a triangle”) Input(a,b,c) Output(“Side A is ”,a) Output(“Side B is ”,b) Output(“Side C is ”,c) Step 2:Is A Triangle? If (ab+c) AND(ba+c)AND(ca+b) Then IsATriangle =True Else IsATriangle =False EndIf,step3:Determine Triangle Type If IsATrangle Then if(a=b)AND (b=c) Then Output(“Equilateral”) Else If(ab)AND(ac)AND(bc) Then Output(“Scalence”) Else Output(“Isosecles”) EndIf EndIf Else Output(“NOT a Triangle”) EndIf End triangle2,三角形问题实现的伪代码,Program triangle3 improved version Dim a,b,c As Integer Dim IsATriangle As Boolean Step1: Get Input Do Output(“Enter 3 integers which are sides of a triangle”) Input(a,b,c) c1=(1=200) c2=(1=200) c3=(1=200) If NOT(c1) Then Output(“Value of a is not in the range of permitted values”) EndIf,If NOT(c2) Then Output(“Value of b is not in the range of permitted values”) EndIf If NOT(c3) Then Output(“Value of c is not in the range of permitted values”) EndIf Until c1 AND c2 AND c3 Output(“Side A is ”,a) Output(“Side B is ”,b) Output(“Side C is ”,c) Step2 Step3 End triangle3,2.3 NextDate函数,输入变量之间的逻辑比较复杂 有两种复杂性来源:输入域和闰年规则 80%活动出现在20%的空间,2.3.1 NextDate 问题陈述,NextDate是一个有三个变量(月份、日期和年)的函数。函数返回输入日期后面的那个日期。变量月份、日期和年都是整数值,并满足以下条件: c1:1=月份=12 c2:1=日期=31 c3:1812=年=2012 我们的处理要包括对月份、日期和年的无效输入值的响应处理,还要对无效逻辑处理,例如任意年的4月31日。,2.3.2 NextDate 的伪代码实现,Program NextDate1 Simple version Dim tomorrowDay,tomorrowMonth,tomorrowYear As Integer Dim day,month,year As Integer Output(“Enter todays date in the form MM DD YYYY”) Input(month,day,year) Case month Of Case 1:month Is1,3,5,7,8,or 10:31 day months (excpet 12),If day31 then tomorrowDay=day+1 else tomorrowDay=1 tomorrowMonth=month+1 EndIf Case 2:month Is 4,6,9 or 11 30day month If day30 then tomorrowDay=day+1 else tomorrowDay=1 tomorrowMonth=month+1 EndIf,续NextDates simple version,Case 3:month Is 12: If day31 then tomorrowDay=day+1 else tomorrowDay=1 tomorrowMonth=1 If year=2012 then Output(“2012 is over”) else tomorrowYear=year+1 EndIf EndIf Case 4:month Is 2: If day28 then tomorrowDay=day+1
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号