《高中信息技术算法与程序设计.pptx》由会员分享,可在线阅读,更多相关《高中信息技术算法与程序设计.pptx(200页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、正确理解题意寻找或设计正确的解题方法使用计算工具进行计算并得到结果验证计算结果正确理解题意寻找或设计正确的解题方法设计正确的算法使用合适的程序设计语言将算法表达为计算机程序由计算机按照设计好的程序高速、自动地计算结果无论使用人工解题还是使用计算机解题,都必须在正确理解题意地基础上寻找或设计正确的解题方法。使用人工解题最后需验算,而使用计算机解题则不需要。问题:在一次班级联欢会上,同学们玩了一个猜商品价格的游戏。A同学出示一件商品,价格在11000元之间,价格为整数,要求B同学猜价格。B同学每猜一个价格,A同学需要回答猜对了,或猜大了,还是猜小了。要求B同学尽可能快地猜出商品的价格。【方法1】:
2、B同学从1、2、3、依次猜测商品的价格,直到猜对为止。【方法2】:B同学先从11000的中间数500开始猜,根据A同学的回答决定下一个要猜测的价格,如果A回答“猜大了”,则在1499之间取中间数进行猜测;否则,取5011000的中间数进行猜测,如此反复,直到猜对为止。看似无所不能的计算机,迄今为止也只能按照设计好的程序,一步步地进行运算处理。事实上,要使用计算机来解决问题,人们必须事先设计好解决问题的计算机程序。没有计算机程序,就不可能用计算机来解决问题。计算机程序就是指示计算机如何去解决问题或完成任务的一组可执行的指令。程序设计就是寻求解决问题的方法,并将其实现步骤编写成计算机可以执行的程序
3、的过程。计算机是一种按照设计好的程序,快速、自动地进行计算的电子设备。计算机开始计算之前,必须把解决某个问题地程序存储在计算机内存中。程序由指令部分和数据部分组成。指令部分由一系列指令构成,每条指令都是要求计算机执行地一个动作。由适当的指令构成一个序列,描述了解决这个问题的计算过程。数据部分用来存储计算过程中所需的原始数据、计算的中间结果和最终结果。指令就是用来规定计算机操作的命令。计算机的所有指令组成了计算机的指令集。一般而言,计算机的指令越丰富,功能也就越强大。输入通过输入设备,程序接收外界输入的数据,将数据存储到指定的变量中;输出把文字、变量中存储的数据或计算产生的结果,通过输出设备显示
4、或打印出来;数学运算进行、平方、开平方、求余数等数学运算。通常,计算所需的的数据从变量中获得,计算的结果可以存储到指定的变量中。逻辑判断可以对指定的两个数据进行大小或相等性(、)比较,比较的结果为逻辑值(真或假),也使用逻辑运算(如与、或、非),把若干个较简单的判断连接起来,成为一个复杂的判断。控制转移指令用来改变程序中指令的执行顺序。现在由计算机来扮演A同学的角色,计算机应该按照下述过程进行工作:计算机得到B同学所猜的价格计算机对得到价格与实际价格进行比较,告诉B同学比较的结果(猜小了、猜大了、猜对了)计算机根据比较的结果决定是否继续猜测。使用计算机解决问题一般要经历以下三个阶段:分析问题并
5、确定要计算机做什么寻找解决问题的途径和方法开始用计算机进行处理分析问题设计算法编写程序运行程序问题解决猜大了或是猜小了,则继续猜测猜对了则停止猜测,游戏结束数据的存储:计算所需的原始数据、计算产生的中间结果、计算的最终结果需要存储在变量中。计算的过程:首先确定解决问题的方法;然后必须将该方法步骤化,即用计算机可以执行的步骤(指令),来描述问题的计算过程,这意味着程序的计算过程不仅必须指出动作,而且必须指出动作的次序。地址指令内容1显示“输入价格:”2输入价格到变量T3比较输入价格T和商品价格S,如果TS,转到95显示“猜对了!”6结束7显示“猜小了!”8转到19显示“猜大了!”10转到111商
6、品价格变量S12输入价格变量T输出指令输入指令逻辑判断指令控制转移指令程序中的变量是计算过程中要用到的数据的存储单元;通过输入指令的执行,程序将外界输入的数据存储到指定的变量中,程序计算的结果也可以存储到指定的变量中;一旦将数据存储到某个变量中,只要我们不再把新的数据存储到其中,那么在程序运行过程中,该变量将永久保存着原来的数据;在计算过程中如果要使用到该变量中的数据,我们可以从该变量中读取出其中的数据,这种读取是不会改变变量中存储的内容的。地址指令内容1显示“输入价格:”2输入价格到变量T3比较输入价格T和商品价格S,如果TS,转到95显示“猜对了!”6结束7显示“猜小了!”8转到19显示“
7、猜大了!”10转到111商品价格变量S12输入价格变量T图中的每行代表了内存中的一个存储单元,每个存储单元可以存放一条指令或一个数据。每个存储单元都有唯一的编号,称为地址。指令是依次逐条执行的,如果遇到转移指令,会按指令要求选择下一条要执行的指令。遇到结束指令,整个程序终止运行。地址指令内容1显示“输入价格:”2输入价格到变量T3比较输入价格T和商品价格S,如果TS,转到95显示“猜对了!”6结束7显示“猜小了!”8转到19显示“猜大了!”10 转到111 商品价格变量S12 输入价格变量T地址指令内容1显示“输入价格:”2输入价格到变量T3比较输入价格T和商品价格S,如果TS,转到95显示“
8、猜对了!”6结束7显示“猜小了!”8转到19显示“猜大了!”10 转到111 商品价格变量S12 输入价格变量T算法是在有限步骤内求解某一个问题所使用的具有精确定义的一系列操作规则。每条规则都必须是确定的、能行的、不能有二义性的。算法要有一个清晰的起始步骤,且每一个步骤都只能有一个确定的后继步骤,从而组成一个有限步骤序列。步骤终止时也给出了问题的解答。解决问题的过程就是实现算法的过程。算法是程序设计的“灵魂”,算法+数据结构=程序。算法独立于任何具体程序设计语言,一个算法可以用多种程序设计语言实现。(1)有穷性一个算法必须保证它的执行步骤是有限的,即它是能够终止的,操作步骤不能无限。算法可以有
9、重复执行的步骤,只要这些步骤的执行能够终止。广义地说,“有穷性”是指操作步骤的数目或完成操作的时间在合理的范围内,如果一个算法虽然在操作步骤的数目是有限的,但它所花费的时间超过了合理的限度,这种算法并不是有效的算法。(3)可行性算法中的每一个步骤都要是实际能做的,而且必须在有限的时间内可以完成。例如:步骤“输出:Ld”在d0的情况下就不可以做。(4)有0个或多个输入所谓输入就是指算法在执行时要从外界获得数据,其目的是为算法建立某些初始状态;如果建立初始状态所需的信息已经包含算法中,那就不需要输入了。(5)有一个或多个输出算法的目的是用来求解问题,问题的结果应以一定的方式输出,以便用户知道。在数
10、学中的”无解“对于算法来说也是一个输出,没有输出的算法是毫无意义的。(2)确定性算法的每个步骤必须有确切的含义,而不应当是含糊的、模棱两可的。例如:步骤“输出:L正整数”是无法执行的,因为没有指定L除以哪一个正整数,这个步骤是不确定的。问题:步骤“输入一个正整数”是否是确定的?我们可以采用多种方法来描述一个算法,流程图是一种比较直观易用的、用图形来描述算法的方法。用流程图来描述算法要遵循一定的标准,这套标准中最常用的符号有:处理框输入、输出框判断框流程线开始、结束符在一般情况下,输入、输出框可以用处理框代替。开始结束开始结束开始T S结束显示:“输入价格:”输入价格到变量TT S显示:“猜小了
11、!”显示:“猜大了!”显示:“猜对了!”地址指令内容1显示“输入价格:”2输入价格到变量T3比较输入价格T和商品价格S,如果TS,转到95显示“猜对了!”6结束7显示“猜小了!”8转到19显示“猜大了!”10转到111商品价格变量S12输入价格变量T判断框表示条件判断:取出变量T、S中的数据,若TS是否成立)。问题1:键盘输入两个数,输出两个数的和与积?(1)需要输入哪些数据?(2)需要计算机输出什么信息?(3)如何根据输入数据得到要输出的信息?需要输入两个不同的数需要计算机输出两数的和与积 分别存入变量a、b中 两数之和存入变量sum中计算a+b,将结果存放在变量sum中;计算ab,将结果存
12、放在变量s中。最后输出sum、s。两数之积存入变量s中键盘输入两个不同的数,分别存入变量a、b中。计算a+b,将结果存放在变量sum中;计算ab,将结果存放在变量s中。输出sum、s开始输入a、b输出sum、ssuma+bsab结束顺序模式的特点:按照顺序一步一步执行。表示先计算a+b的值,然后将计算的结果存入变量sum中。“”称为赋值符,它的计算过程是:先计算符号右侧的代数式的结果,然后将计算结果存储到符号左侧的变量中。问题2:键盘输入两个不同的数,存入不同的变量中,交换两变量中的数值并输出?(1)需要输入哪些数据?(2)需要计算机输出什么信息?(3)如何根据输入数据得到要输出的信息?需要输
13、入两个不同的数需要计算机输出交换位置后的两个变量分别存入变量a、b中 将变量a的值存入变量b中;将变量b的值存入变量a中。最后输出变量a、b。将变量a的值存入变量T中;将变量b的值存入变量a中。将变量T的值存入变量b中最后输出变量a、b。键盘输入两个不同的数,分别存入变量a、b中。输出变量a、b开始输入变量a、b输出变量a、bTaabbT结束baab将变量a的值存入变量T中;将变量b的值存入变量a中。将变量T的值存入变量b中【例1】已知矩形的长和宽,求矩形的面积。求矩形面积的方法是:矩形面积=长宽。如果设计的程序只能计算固定的长和宽,那么,这个程序就没有什么实用性了。用变量a、b、s分别代表矩
14、形的长、宽、面积,则s的值应该是ab的计算结果。程序的执行流程应该是:输入两个数值给a、b通过计算ab,将结果给变量s输出变量s的值开始输入长到变量a输入宽到变量b计算:sab输出面积:s结束表示先计算ab的值,然后将计算的结果存入变量s中。“”称为赋值符,它的计算过程是:先计算符号右侧的代数式的结果,然后将计算结果存储到符号左侧的变量中。算法的执行流程,是指算法中各个处理步骤的执行次序和模式。通常需要如下三种不同的执行流程:1.顺序模式:执行完一个处理步骤step1后,接着执行下一个处理步骤step2。开始输入变量a、b输出变量a、bTaabbT结束baab【问题1】:该怎样过马路?应观察交
15、通信号灯并判断:红灯停;绿灯行。信号灯是否为红灯?等待信号灯变为绿灯过马路情况e为真?step1step2情况e为真?就是对某个条件进行判断,具体在判断框中用关系表达式或逻辑表达式来表达。xy?x0且y0?选择模式是先对某个情况e进行判断,当结果为真时,执行处理步骤step1,否则执行处理步骤step2 。选择模式可以使算法根据情况的不同,在两个预定的处理步骤中,选择执行其中一个处理步骤。“预定的处理步骤”可以是一系列操作,亦可以是无操作。当两个“预定的处理步骤”中有一个是无操作时,我们称其为单分支结构,如果均有操作,我们称其为双分支结构。判断条件“x大于y”判断条件“x、y均为正数”问题2:
16、比较两个不同数的大小关系,输出其中较大的那个数?(1)需要输入哪些数据?(2)需要计算机输出什么信息?(3)如何根据输入数据得到要输出的信息?需要输入两个不同的数需要计算机输出两数中较大的数 分别存入变量a、b中 存入变量max中判断条件“ab”,若条件成立(情况为真),则maxa;否则(情况为假)maxb。最后输出max。键盘输入两个不同的数,分别存入变量a、b中。判断条件“ab”,若条件成立(情况为真),则maxa;否则(情况为假)maxb。输出max开始输入a、b输出maxmaxamaxb结束ab?问题3:比较三个不同数的大小关系,输出其中最大的那个数?(1)需要输入哪些数据?(2)需要
17、计算机输出什么信息?(3)如何根据输入数据得到要输出的信息?需要输入三个不同的数需要计算机输出三个数中最大的数 分别存入变量a、b、c中 存入变量max中判断条件“ab”,若条件成立,则maxa;否则maxb。判断条件“maxc”,若条件成立,则保持max不变;否则maxc。最后输出max。键盘输入三个不同的数,分别存入变量a、b、c中 。判断条件“ab”,若条件成立,则maxa;否则maxb。判断条件“maxc”,若条件成立,则保持max不变;否则maxc。输出max开始输入a、b、c输出maxmaxamaxb结束ab?maxcmaxc?开始输入a、b、c结束ab且ac?bc?maxamax
18、bmaxc输出max选择模式的嵌套选择模式的特点 选择模式是由判断条件的成立与否来选择执行相应的操作步骤 使用选择模式解决问题的要点 判断框中的判断条件表达方式 判断框中的判断条件可以是关系表达式(如:ab),也可以是逻辑表达式(如:ab且ac)。1、当算法执行到某一步,如果其结果存在多种可能性时,就应使用选择模式来解决;2、全面考虑问题的所有可能性,合理设置判断条件;3、使用流程图描述算法时应注意各执行步骤的汇合点。3.重复模式(循环结构)问题:如果条件始终成立,会出现什么情况?当型循环结构的特点是:先判断条件,条件成立方能执行相应语句,继续判断条件,直到条件不成立退出循环。当型循环结构中,
19、语句块可能一次都不执行。当型循环结构直到型循环结构直到型循环结构的特点是:先执行语句块,条件不成立继续重复执行语句块,直到条件成立退出循环。直到型循环结构中的语句块至少执行1 1次。是女生?游戏N聊天YY终于可以休息了,上网结束吃晚饭、睡觉(Day加一天)Day=星期天,完成作业Day=星期一开始Day星期六?N上学去上完8节课放学、回家、吃晚饭、做作业睡觉,又过了一天(Day加一天)开始sum 0i 1sum sum ii i 1 i 100?Y输出sum结束N开始sum 1i 1sum sum ii i 2i 5?Y输出总和:sum结束Nsum=_ i=_isum条件条件i=5是否成立是否
20、成立开始sum 1i 1sum sum ii i 1sum5?Y输出总和:sum结束Nsum=_ i=_isum条件条件sum=5是否成立是否成立开始a 1b 1a a bb a ba10?Y输出:a,b结束Na=_ b=_ab条件条件a S结束显示:“输入价格:”输入价格到变量TT 0是否成立,若条件成立,则d是正数,使正数计数器c1计数(c1 c1+1),转回步骤2;否则,说明d是负数,使负数计数器c2计数(c 2 c2+1),转回步骤2;开始结束正数计数器c1置初值:c10负数计数器c2置初值:c20显示:“请输入:”接收输入数据送到变量dd=0?计数器c1计数:c1c1+1d0?输出正
21、数个数:c1计数器c2计数:c2c2+1输出负数个数:c24、输出正数的个数(正数计数器c1),负数的个数(负数计数器c2)。问题1:已知一个三角形一条边的长度a和该边上的高h,则该三角形的面积是多少?问题2:在理想情况下,从h米高的楼顶让一个铁球自由落下,铁球落地时的速度是多少?解析算法是指用解析的方法找出表示问题的前提条件与结果之间关系的数学表达式,并通过表达式的计算来实现问题求解。利用数学公式中所反映的客观事务间的数量关系,以此为基础,设计出合适的算法,从而编制出正确的程序,利用计算机的高速计算能力,便能快速地获得问题的解。注意:并不是所有问题都可以找到与之相对应的数学公式。【例题1】计
22、算并联电阻的总阻值(一)把2个电阻的两端分别连在一起,称为“2个电阻的并联”。R1R2此算法应分为如下三个步骤:1.输入两个电阻的阻值;2.计算总阻值;3.输出计算结果。开始结束输入R1、R2输出R计算:T()计算:R()计算:R()【例题2】一元二次方程求解一元二次方程ax2+bx+c=0(a0),输入方程系数a、b、c,求方程的解。根据一元二次方程的求解方法,首先需要判别b2-4ac的结果是大于0、小于0还是等于0,然后才能用求根公式进行计算。所以我们需要使用选择模式,根据条件判别的不同结果,输出两个解、一个解、“无解”。此算法应分为如下步骤:1.输入方程系数a、b、c;2.计算b2-4a
23、c的值到变量d中;3.判断条件d0是否成立,条件成立,继续判断条件d0是否成立,条件成立,计算并输出两个解;否则,计算并输出一个解。4.若条件d0不成立,则输出“无解”。开始输入a、b、cdb*b-4*a*cd0?d0?计算并输出两个解计算并输出一个解输出“无解”结束输出 、输出开始输入a、b、cdb*b-4*a*cd0?d0?输出“无解”结束题目改为:方程ax2+bx+c=0,输入方程系数a、b、c,求方程的解。输出 、输出a=0?输出“非二次方程”【例题3】计算并联电阻的总阻值(二)把n个电阻的一端都连在一起,把这n个电阻的另一端也都连在一起,这样的连接成的电阻称为“n个电阻的并联”。此时
24、我们从并联的n个电阻的两端A、B测得的电阻,是这n个并联电阻的“总阻值”。R1R2R1R2R3n个并联电阻的总阻值R,其倒数是各个电阻阻值的倒数的和,即:1、在算法的开始阶段,我们应设置变量rs的初值为0;2、通过输入指令,把使用者输入的电阻阻值(也可能是表示结束的0)送到变量r中;3、判断条件r=0是否成立,如果不成立,则r的倒数应该被累加到变量rs中,转到步骤2;如果条件r=0成立,执行步骤4;开始结束累加器置初值:rs0输入电阻阻值送到变量rr=0?把r的倒数累加到rs中:rs=0?输出总电阻:1/rs输出“无电阻连接”4、输出总电阻值1/rs。4、判断条件rs=0是否成立,如果条件不成
25、立,说明有效电阻的个数不为0,输出1/rs;否则说明没有连接电阻,输出“无电阻连接”。问题:步骤4是否正确?为什么?计数器cc1cn?cccc+1累乘器y1y1yyayya【例题4】设计算法计算yan,a、n由使用者输入,a0,n为正整数。负整数c InI?开始输入a、n输出y结束输出1/yc -n?【习题1】设计算法完成下述功能:键盘输入三个正数,分别存储在变量a、b、c中,判断长度为a、b、c的三条线段是否能构成一个三角形,若能,计算并输出三角形的面积,否则,输出文字“不能构成三角形”。提示:(1)判断三条线段能否构成三角形的条件是什么?应如何使用判断框进行描述?(2)利用三角形的三条边长
26、计算三角形面积的公式如下:【习题2】:假定某银行储蓄的年利率为2.15%,按复利计算。设计一个算法,计算y元在该银行储蓄m年后所得的本金和利息之和是多少?提示:按复利计算是指每年产生的利息与本金合计作为下一年产生利息的本金,即每年产生利息的本金是上一年的本金与利息之和。按照复利计算,一笔数量为y元的存款,m年后的本息和为x:1年后到期的本息为:x=yy0.0215=y1.0215;2年后到期的本息为:x=yy0.0215 (yy0.0215)0.0215y1.02152;以此类推,m年后到期的本息为:x=y1.0215m1.0215m为高阶指数运算,计算机不能一次算出结果,应采用重复模式进行计
27、算,让1.0215这个数做m次连乘即可。【习题1】:设计算法完成下述功能:键盘输入三个正数,分别存储在变量a、b、c中,判断长度为a、b、c的三条线段是否能构成一个三角形,若能,计算并输出三角形的面积,否则,输出文字“不能构成三角形”。线段a、b、c能构成一个三角形的条件是:任何两条线段长度的和应该大于第三条线段的长度,即:a+bc、b+ca、a+cb三个不等式同时成立。使用变量a、b、c:用来分别存储构成三角形的三条线段的长度。p用来存储周长的一半,s用来存储三角形的面积。计算的过程:1、在算法的开始阶段,首先输入变量a、b、c的值;2、判断变量a、b、c的值是否能够满足a+bc、b+ca、
28、a+cb三个不等式同时成立;3、如果三个不等式能够同时成立,则计算并输出三角形面积s;否则,输出“不能构成三角形”。输入:a a、b b、c c开始 a+bc 且b+ca且c+ab?a+bc?b+ca?a+cb?输入:a a、b b、c c开始输出s结束输出“不能构成三角形”输出s结束输出“不能构成三角形”输入:“a、b、c”开始 a+bc 且b+ca且c+ab?输出“N”结束输出“s”在输入、输出变量的值时,该变量名不能加引号;在输出文字内容时,该文字内容两端要加引号。利用数学公式进行解析算法设计时,不应习惯性的将公式中的等号带入使用,在算法流程图中,“”代表判断等号左右两边的表达式的值是否
29、相等,而我们实际的操作是将公式左侧的表达式经计算机计算后将其结果(即表达式的值)送入右侧的变量中,所 以必须使用“”。【习题2】:假定某银行储蓄的年利率为2.15%,按复利计算。设计一个算法,计算y元在该银行储蓄m年后所得的本金和利息之和是多少?提示:按复利计算是指每年产生的利息与本金合计作为下一年产生利息的本金,即每年产生利息的本金是上一年的本金与利息之和。按照复利计算,一笔数量为y元的存款,m年后的本息和为x:1年后到期的本息为:x=yy0.0215=y1.0215;2年后到期的本息为:x=yy0.0215 (yy0.0215)0.0215y1.02152;以此类推,m年后到期的本息为:x
30、=y1.0215m1.0215m为高阶指数运算,计算机不能一次算出结果,应采用重复模式进行计算,让1.0215这个数做m次连乘即可。计数器cc1cm?cccc+1累乘器t1t1tt1.0215tt1.0215开始输入本金y、存期m输出x结束xytxyt计数器cc1c m?cccc+1yy1.0215yy1.0215开始输入本金y、存期m输出y结束计数器cc1c=m?cccc+1累乘器t1t1xy1.0215xy1.0215开始输入本金y、存期m输出x结束问题1:观察一串数1、2、6、24、120、找出相邻两个数的关系?问题2:观察一串数2、5、7、12、19、31、找出31后的数应该是多少?递
31、推法是从头开始一步步地推出问题的最终结果的方法。递推是序列计算中的一种常用方法。它是按照一定的规律来计算序列中的每个项,通常是通过计算前面的一些项来得到序列中指定项的结果。例题1计算斐波那奇数列的第n项结论:从第3个月起,每个月的兔子对数总是等于上个月的兔子对数加上前个月的兔子对数,因此我们可以得到下面的这个数列:1,1,2,3,5,8,13,21,34,55,89,144,233当前项号kabc(ca+b)3F1F2F34F2F3F45F3F4F5输出c初始化:a1,b1,ca+b,k3k=n?项号变化 kk+1初始化:a1,b1,ca+b,k3,sum a+b+c计算下一项:ab,bc,c
32、a+b计算下一项并累加求和:ab,bc,ca+b,sum sum+c输出c,sum开始结束输出1n3?输入项号n项号kabc(ca+b)计算出斐波那契数列的第n项(n3),并求出前n项的和。例题3:讲义习题1计数器c1c n?cc+1tempx0temp开始输入x0,a,n输出temp结束例题4:讲义习题2temp1计数器 c 1,1,s 00c n?cc+1s s+tempes+1开始输出e结束输入n问题1:有1把锁和一串钥匙(100把),只知道在这串钥匙中至少有1把钥匙可以打开锁,如何将所有可以开锁的钥匙都找出来?问题2:在一副已经混乱的扑克牌中,如何找出所有花色是“”的扑克牌?有一类问题
33、可以采用一种盲目搜索的方法,在搜索结果的过程中,把各种可能的情况都考虑到,并对所得的结果逐一进行判断,过滤掉那些不合要求的结果,保留那些合乎要求的结果,这种方法称为枚举法。枚举法就是按照问题本身的性质,一一列举出该问题所有可能的解,并在逐一列举的过程中,检验每个可能的解是否是问题真正的解,若是,我们采纳它,否则,抛弃它。并不是所有问题都可以采用枚举法来寻找答案的,仅当问题的所有可能的解的个数不太多时,在可以接收的时间内获得问题所有的解。【例题1】在12008这些自然数中,找出所有是37倍数的自然数。求余数运算mod,A mod B就是求 A/B 的余数例如:5 mod 3=2 ,10 mod
34、3=1 此算法应分为如下步骤:此算法应分为如下步骤:1、设置、设置n的初值为的初值为1;2、判断条件、判断条件n2008是否成立,是否成立,条件成立条件成立,继续判断条件,继续判断条件 n mod 37=0是否成立,是否成立,条件成立条件成立,输出,输出n;条件条件n2008不成立不成立,跳到步骤,跳到步骤4;3、n的值增加的值增加1(nn+1),转),转回步骤回步骤2;4、此时、此时n当前的值当前的值大于大于2008,表,表示所有的数据均检查过了,示所有的数据均检查过了,算法结束。算法结束。开始n1n2008?n mod 37=0?输出nnn+1结束开始n37n2008?输出nnn+37结束
35、通过观察,我们发现12008中37的倍数是从37开始,每次增加37,最大不超过2008的这些数,所以,我们可以采用n初值设置为37,每次增加37的方法枚举出这些数。相对前面的方法,效率提高。【例题2】单据中被涂抹的数字的推算一张单据上有一个5位数的编码,其千位数和百位数处已经变得模糊不清,如右图所示。但知道这个5位数是57或67的倍数。现在请设计一个算法,输出所有满足这些条件的数,并统计这样的数的个数。我们可以从上述数学推导中得知:n的取值由i和j的取值共同决定,当我们确定当前i和j的值之后,n的取值自然也就确定了。开始结束j9n mod 57=0或n mod 67=0i 9j0i0,计数器c
36、0jj+1ii+1输出真正解n计数器c计数,cc+1n10047+i1000j100输出:计数器c的值对于每个符合条件的i的取值,我们让变量j从0开始逐次枚举到9,对于由i和j确定的n,判断其是否符合条件。具体步骤如下:1、变量j置初值0;2、判断条件j 9是否成立 若成立,计算出n的值;继续判断n是否符合条件 条件成立,输出n,计数器c计数3、j增加1,转回步骤2;当条件j 9不成立,说明当前i的所有可能解均完成验证。此时,应验证i的下一个取值对应的所有可能解。具体步骤如下:1、i增加1;2、判断条件i 9是否成立 若成立,开始验证对应的可能解否则,说明所有可能解都完成验证,输出计数器c,算
37、法结束。问题1:如果原题中的5位数如下图1所示,课本上的算法是否还适用?问题2:如果原题中的5位数如下图2所示,课本上的算法是否还适用?【例题3】P23,“实践体验”,用10元与50元的两种纸币组成240元,共有几种组合方式,试用枚举算法列出所有不同的取法和种数。设240元由x张10元、y张50元纸币组成,则必有以下方程成立:10 x+50y=240开始结束y 410 x+50y=240 x 24y0 x0,计数器c0yy+1xx+1输出x、y计数器计数:cc+1输出:计数器c对于每个符合条件的x的取值,我们让变量y从0开始逐次枚举到4,对于由x和y确定的方程,判断其是否成立。具体步骤如下:1
38、、变量y置初值0;2、判断条件y 4是否成立 若成立,继续判断方程是否 成立 条件成立,输出x、y 计数器c计数3、y增加1,转回步骤2;当条件y 4不成立,说明当前x的所有可能解均完成验证。此时,应验证x的下一个取值对应的所有可能解。具体步骤如下:1、x增加1;2、判断条件x 24是否成立 若成立,开始验证对应的可能解否则,说明所有可能解都完成验证,输出计数器c,算法结束。【例题4】包装问题包装600个变形金刚,要求是:(1)包装的规格分别是:小盒(每盒12个)、大盒(每盒15个);(2)每种规格的盒数都不能为0。请设计一个算法,输出所有可能的包装方案。设600个变形金刚分别装入x个小盒、y
39、个大盒中,则必有以下方程成立:12x+15y=600开始结束y 3912x+15y=600 x 48y1x1yy+1xx+1输出x、y对于每个符合条件的x的取值,我们让变量y从1开始逐次枚举到39,对于由x和y确定的方程,判断其是否成立。具体步骤如下:1、变量y置初值1;2、判断条件y 39是否成立 若成立,继续判断方程是否 成立 条件成立,输出x、y3、y增加1,转回步骤2;当条件y 39不成立,说明当前x的所有可能解均完成验证。此时,应验证x的下一个取值对应的所有可能解。具体步骤如下:1、x增加1;2、判断条件x 48是否成立 若成立,开始验证对应的可能解否则,说明所有可能解都完成验证,算
40、法结束。【例题5】求直角三角形边长整数解的算法在一直角三角形中,三条边a、b、c的长度都是正整数,本问题中一条直角边a的长度已经给定,斜边c的长度不能超过某个给定的正整数值maxc,算法的目标是找出满足上述条件的所有直角三角形。当一个直角三角形的三条边的边长都是整数,这样的三角形称为整数边长的直角三角形,代表边长的三个正整数成为一组“勾股数”。开始结束b (c1)c2b2a2c maxcbc-a+1ca+1bb+1cc+1输出a、b、c计数器ct计数,ctct+1输出:计数器ct的值计数器ct0输入:直角边a的长度和斜边c的最大值maxc对于每个符合条件的c的取值,我们让变量b从(c-a+1)
41、开始逐次枚举到(c-1),对于a、b,c的取值,判断其是否满足勾股定理。具体步骤如下:1、变量b置初值(c-a+1);2、判断条件b(c-1)是否成立 若成立,继续判断a、b,c的 取值是否满足勾股定理 条件成立,输出a、b、c 计数器ct计数3、b增加1,转回步骤2;当条件b(c-1)不成立,说明当前c取值的所有可能解均完成验证。此时,应验证c的下一个取值对应的所有可能解。具体步骤如下:1、c增加1;2、判断条件c maxc是否成立 若成立,开始验证对应的可能解否则,说明所以可能解都完成验证,输出计数器ct,算法结束。1 1、对于变量c c的不同取值,变量b b的循环次数是否一直不变?2 2
42、、随着变量c c值的不断增大,变量b b的循环次数有什么变化趋势?【例6】1000内素数的推算素数,也叫质数。通常我们称正整数n为素数,是指:只有1和n本身才能整除它,即只有1和其本身是它的约数,或者说一个素数除了1和其本身,不能分解为其他正整数的乘积。1不是素数;2是最小的素数;除了2以外所有的素数都是奇数。例如:2只有1和2两个约数;17只有1和17两个约数,所以2和17是素数;6有1、2、3、6四个约数;15有1、3、5、15四个约数,所以6与15不是素数。(1)如何判断一个正整数 j 是另一个正整数 i 的约数?使用条件:i mod j=0 进行判断;条件成立,j 是 i 的约数,否则
43、,j 不是 i 的约数。(2)正整数 i 是素数的条件 除了1和其本身,没有任何其他约数(即其他约数的个数为0)。或者说:在从2到(i-1)范围内的正整数中,没有任何一个数是i的约数。j2j i?jj+1计数器c0i mod j=0?cc+1c=0?判断一个正整数i为素数的方法:测试 2,i-1范围内的每个数是否为i的约数,并统计约数的个数。测试完成,约数的个数为0,则i为素数;否则,i不是素数。算法应分为如下步骤:1.j置初值2,计数器c置初值0;2.判断条件ji是否成立,若不成立,跳到步骤4;若成立,继续判断条件i mod j=0是否成立,若成立,计数器c计数;3.j增加1,转回步骤2;4
44、.此时j的值超过了(i-1),说明范围内的数均测试完成,则去判断条件c=0是否成立若成立,则i是素数;否则,i不是素数。输出“不是素数”输出“是素数”j2j 1,n为正整数,由键盘输入,应如何修改算法?j2j i?jj+1计数器c0i mod j=0?cc+1c=0?我们发现,对于计数器c,最关键的是它的值是否保持着初始值0,而对于c在测试完成后的具体大小,则不是我们观察的重点,c的值是否发生变化是我们关注的焦点,到底变成多少则无所谓。对于这种情况,我们还可以使用布尔型变量来解决问题,布尔型变量只有两种取值True和False,用于表示条件成立与不成立,可直接在判断框中进行判断,如:变量f为布
45、尔型变量:f的值为True,则执行标注Y方向的流程;f的值为False,则执行标注N方向的流程;f?对于本问题,我们可以使用布尔型变量f取代计数器c来解决:初始化布尔型变量f的值为True;i mod j=0条件成立,将布尔型变量f的值改为False;测试结束,对布尔型变量f进行判断;fTruefFalsef?输出“不是素数”输出“是素数”理解题意,根据题意使用数学方法确定可能的解的范围确定检验每个可能解的条件确定算法流程使用流程图描述算法流程(1)在列举可能解的过程中,既不能遗漏也不能重复。(2)仅当所有可能解的个数不多时,使用枚举法才能在 可以接受的时间内获得问题所有的解。作业1:课本P8
46、0,第8题。开始结束j=9n mod 57=0或n mod 67=0i=9j0i0,计数器c0jj+1ii+1输出真正解n计数器c计数,cc+1n10407+i1000j10输出:计数器c的值【作业2】设100元可以购买x只公鸡、y只母鸡,则必有以下方程成立:5x+3y=100开始结束y 315x+3y=100 x 19y1x1yy+1xx+1输出x、y对于每个符合条件的x的取值,我们让变量y从1开始逐次枚举到39,对于由x和y确定的方程,判断其是否成立。具体步骤如下:1、变量y置初值1;2、判断条件y 31是否成立 若成立,继续判断方程是否 成立 条件成立,输出x、y3、y增加1,转回步骤2
47、;当条件y 31不成立,说明当前x的所有可能解均完成验证。此时,应验证x的下一个取值对应的所有可能解。具体步骤如下:1、x增加1;2、判断条件x 19是否成立 若成立,开始验证对应的可能解否则,说明所有可能解都完成验证,算法结束。作业3:课本P80,第6题。开始结束b cc2b2a2a cb1a1bb+1aa+1输出a、b、c计数器ct计数,ctct+1输出:计数器ct的值计数器ct0输入:斜边c开始结束b=c1c2b2a2a cba+1a1bb+1aa+1输出a、b、c计数器ct计数,ctct+1输出:计数器ct的值计数器ct0输入:斜边cb1b a开始结束b=c1c =maxcbc-a+1
48、ca+1bb+1cc+1输出a、b、c计数器ct计数,ctct+1输出:计数器ct的值计数器ct0输入:直角边a的长度和斜边c的最大值maxc自1946年诞生世界上第一台计算机起,计算机程序设计语言的发展经历了四个阶段:1、机器语言阶段2、汇编语言阶段3、高级语言阶段4、面向对象程序设计阶段3.1 面向对象的程序设计方法第3章 程序设计基础 一、初期的程序设计结构化程序设计(Structure Programming)是一种强调功能抽象化和模块化的编程方法,它把求解问题的过程看作一个处理过程。三种基本的程序结构:顺序结构选择结构循环结构 二、结构化程序设计 自顶向下、逐步求精、模块化设计原则:
49、结构化程序设计解决了由多人共同开发大型软件时,如何高效率地完成高可靠性系统的问题。结构化程序的可读性好、可维护性好已成为评价程序质量的首要条件。VB改变了原Basic语言的非结构程序设计思想,采用结构化程序设计的思想和方法。二、结构化程序设计 面向对象程序设计OOP(Object Oriented Programming)是一种以对象为基础,以事件来驱动对象执行的程序设计技术。OOP将一个应用程序,逐步划分成相互关联的多个对象,并且建立起与这些对象相关联的事件过程,通过对象对所发生的事件产生响应,来执行相应事件过程,以引发对象状态的改变,从而最终达到运算、处理的目的。程序员在应用程序中只需说明
50、对象应完成的任务,该任务通常仍由编程来完成,仍采用结构化程序设计的方法。三、面向对象的程序设计面向对象程序设计最早在20世纪80 年代就已提出,起源于Smalltalk 语言。此种方法引入了新的概念和思维方式,为使软件在程序设计阶段能够模仿建立真实世界的模型,此种设计方法对系统的复杂性进行概括、抽象和分类,使软件的设计与实现形成一个由抽象到具体、由简单到复杂的一个循序渐进的过程,从而解决了大型软件研制中存在的效率低、质量难以保证、调试复杂、维护困难等一系列问题,因此近年来面向对象的程序设计得到广泛的应用。目前在Windows环境下常用的面向对象程序设计语言有:Visual Basic、Visu