资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,*,*,循环结构中的嵌套,循环结构中的嵌套,1,【例1】输入某次考试成绩mark,统计100分人数good。(输入-1表示结束),分析问题:,使用标志法:结束标志为mark=-1;所以在循环前先输入分数mark。,循环体:条件mark=100成立,人数good计数,因此要用单分支结构描述,判断结束,再输入下一个分数mark。,循环条件:mark-1,说明:循环体可以是顺序的,但也可以是分支的(嵌套分支),同时也能是循环的(嵌套循环),即若循环体本身是循环就称为循环的嵌套。,设计算法:,先用自然语言描述,再画出流程图,注意:检查流程图的规范性。,编写程序:(略),运行程序:上机调试与维护(略),【例1】输入某次考试成绩mark,统计100分人数good。,2,例举 检验,例举 检验,3,【例3】实际应用,:,最值问题,输入20个数,求其中最大值max和最小值min。,打擂台法,【例3】实际应用:,4,【练2】输入n个数,统计正数的个数nz和非正数的个数nfz。(n的值由键盘输入),分析问题:结束条件是什么?首先判断结束循环使用计数法还是标志法。,设计算法:请画出流程图。循环体内嵌套什么结构?,编写程序:(略),运行程序:上机调试与维护(略),【练2】输入n个数,统计正数的个数nz和非正数的个数nfz。,5,例举 检验,例举 检验,6,【例4】求1-1000中,能被3整除的数。,【例5】找出1-1000中所有能被7和11整除的数。,例举 检验,【例4】求1-1000中,能被3整除的数。例举 检验,7,基本算法 一:枚举法,基本算法 二:解析法,基本算法 三:递推法,基本算法 一:枚举法基本算法 二:解析法基本算法 三,8,如,循环结构中的嵌套,满足下列概念则称为,枚举法,根据所需解决问题的条件,把该问题所有可能的解,一一列举出来,并逐个检验出问题真正解的方法。,枚举法也称为穷举法。,枚:一个一个 举:例举,在列举出所有可能的解时,既不能遗漏也不应重复。,枚举算法的关键步骤及注意点:,列举,用循环结构来实现,要注意循环变量、初值、终值和递增值的设置。,检验是否符合问题的要求,,用分支结构实现,不同检验结果不同处理方法。,注意点:循环变量与判断对象是否是同一个变量;一般情况下没有输入;输出经常是在判断的一个分支中实现的。,有些复杂问题一时无法直接找到求解公式或数学模型,则用枚举法体现其优势,非常高的准确性和全面性.但也有缺点:效率不高,是以消耗时间为代价的.,枚举法的结构特征:列举 检验,基本算法 一:枚举法,如循环结构中的嵌套满足下列概念则称为枚举法 根据所需解决问题,9,【例6】若一个三位数x=100a+10b+c(a、b、c都是个位数),满足a,3,+b,3,+c,3,=x,则x称为水仙花数。找出所有的水仙花数。,例举 检验,【例6】若一个三位数x=100a+10b+c(a、b、c都是,10,【例7】一张单据上有一个5位数的编号,万位数是1,千位数是4,百位数是7,个位数是8,十位数已经模糊不清,只知道该5位数是57或67的倍数,找出所有满足这些条件的5位数并输出。,例举 检验,【例7】一张单据上有一个5位数的编号,万位数是1,千位数是4,11,【例8】百鸡百钱问题:公鸡每只5元,母鸡每只3元,小鸡1元3只,现在用100元钱买100只鸡,求公鸡、母鸡、小鸡各买几只?(提示:是利用枚举法解决实际问题的例子。本例出现了双重循环,即循环嵌套,同时体现了计算机解决问题方法与数学方法的区别),例举 检验,【例8】百鸡百钱问题:公鸡每只5元,母鸡每只3元,小鸡1元3,12,解析法:,根据题目中给出的已知条件,找出已知条件与结果之间关系的数学表达式,并通过表达式的计算来实现问题求解的方法。,解析算法的关键,:寻找正确的数学表达式,解析算法的结构特征:没有特定!可能是顺序结构,也可能是分支或循环结构,甚至是几种结构的组合,完全取决于问题本身.,基本算法 二:解析法,解析法:根据题目中给出的已知条件,找出已知条件与结果之间关系,13,【例1】输入直角三角形的两个直角边的边长值a和b,计算出斜边的边长值c。,【例1】输入直角三角形的两个直角边的边长值a和b,计算出斜边,14,【例2】输入三角形边长a,b,c,求三角形面积s。,【例2】输入三角形边长a,b,c,求三角形面积s。,15,【例3】求两个并联电阻的值,公式为:,【例3】求两个并联电阻的值,公式为:,16,【例4】一元二次方程ax2+bx+c=0(a0)的系数a、b、c,求方程的解。,【例4】一元二次方程ax2+bx+c=0(a0)的系数a、,17,递推法:,从已知的初始条件出发,依据某种递推关系,逐次推出所要求的各中间结果及最后结果的算法。,初始条件一般是问题本身已经给定,或者是通过对问题的分析与化简后确定的。,基本算法 三:递推法,递推法:从已知的初始条件出发,依据某种递推关系,逐次推出所要,18,【例1】求斐波那契(Fibonacci)数列的第n个数据项,n由键盘输入。,可以用兔子繁殖的实例来说明斐波那契数列:,假设兔子出生后两个月就能每月生一对小兔子,如果1月份出生了一对小兔子,那么每个月兔子数就是一个斐波那契数列,月份,兔子数,说明,1,1,2,1,3,2,1月份的兔子生了小兔子,4,3,2月份的兔子生了小兔子,5,5,3月份的兔子生了小兔子,6,8,4月份的兔子生了小兔子,7,13,5月份的兔子生了小兔子,8,21,6月份的兔子生了小兔子,9,34,7月份的兔子生了小兔子,10,55,8月份的兔子生了小兔子,11,89,9月份的兔子生了小兔子,12,144,10月份的兔子生了小兔子,【例1】求斐波那契(Fibonacci)数列的第n个数据项,,19,月份,兔子数,说明,1,1,2,1,3,2,1月份的兔子生了小兔子,4,3,2月份的兔子生了小兔子,5,5,3月份的兔子生了小兔子,6,8,4月份的兔子生了小兔子,7,13,5月份的兔子生了小兔子,8,21,6月份的兔子生了小兔子,9,34,7月份的兔子生了小兔子,10,55,8月份的兔子生了小兔子,11,89,9月份的兔子生了小兔子,12,144,10月份的兔子生了小兔子,规律:每个月的兔子数等于上个月的兔子数加上两个月前的兔子数。,月份兔子数说明1121321月份的兔子生了小兔子432月份的,20,规律的数学表达:Fn=Fn-1+Fn-2 (该数列的各项间的关系,用Fn表示斐波那契数列的第n项),但这里,n 3,F1=1,F2=1。,Fn=Fn-1+Fn-2一般称为递推公式。,处理:,第一项和第二项分别为1。,第三项起,用递推公式计算各项的值,直至第n项为止。,由于中间各项只是为了计算后面的项,因此可以轮换赋值。,输出:第n项的值。,【例1】求斐波那契(Fibonacci)数列的第n个数据项,n由键盘输入。,分析问题:,规律的数学表达:Fn=Fn-1+Fn-2 (该数列的各项间,21,【例1】求斐波那契数列的第n个数据项,n由键盘输入。,设计算法:,编写程序(略),运行和调试(略),【例1】求斐波那契数列的第n个数据项,n由键盘输入。设计算法,22,【例2】猴子吃桃子问题:一只猴子采集了很多桃子。第一天吃了其中的一半,然后忍不住又吃了一个;第二天吃了剩下桃子的一半,然后忍不住又吃了一个;以后每天都这样,即吃了剩下桃子的一半,再多吃一个,到第十天时就只剩下一个桃子了。问第一天,猴子共采集了多少桃子?,【例2】猴子吃桃子问题:一只猴子采集了很多桃子。第一天吃了其,23,【例2】猴子吃桃子问题:一只猴子采集了很多桃子。第一天吃了其中的一半,然后忍不住又吃了一个;第二天吃了剩下桃子的一半,然后忍不住又吃了一个;以后每天都这样,即吃了剩下桃子的一半,再多吃一个,到第十天时就只剩下一个桃子了。问第一天,猴子共采集了多少桃子?,【例2】是倒推的递推法。,分析问题:,规律:每天的桃子数是前一天桃子数的一半减,那么,前一天的桃子数是后一天桃子数加的倍。,规律的数学表达:,如果用用Ai表示第i天的桃子数,则后一天的桃子数Ai+1Ai/2-1,前一天的桃子数Ai-1(Ai+1)*2。,由于本例是从第九天开始,往前逐天计算,直到第一天,因此采用的是递推公式:Ai-1(Ai+1)*2,循环变量i的计数是逐次减少,即i=i-1。,【例2】猴子吃桃子问题:一只猴子采集了很多桃子。第一天吃了其,24,【例3】求任意两个自然数的最大公约数(辗转相除法),辗转相除法是一种求两个自然数的最大公约数的方法,:,假设对于任意两个自然数a,b,当ab时,a=q*b+r。其中,q是a除以b后得到的部分商,r是a除以b后得到的余数。那么,当r等于0时,b就是a,b的最大公约数;否则,a,b的最大公约数就等于b、r的最大公约数,这是因为a 与b的最大公约数一定是b与r的最大公约数。从而可以将b作为新的除式中的a,r作为新的除式中的b,这样反复求约数,直至r等于0,这时的b就是原先的a和b的最大公约数。,例如:a=144,b=46。,a,b,q,r,432,138,3,18,138,18,7,12,18,12,1,6,12,6,2,0,432和138的最大公约数是6。,【例3】求任意两个自然数的最大公约数(辗转相除法)辗转相除,25,【例3】求任意两个自然数的最大公约数(辗转相除法),分析问题:,输入:输入两个自然数a,b的值。,处理:,求a除以b的余数r。当r不等于0时,用b作为新的被除数a,r作为新的除数b重复上述过程,直至r为0。,输出:最后的除数的值。,【例3】求任意两个自然数的最大公约数(辗转相除法)分析问题,26,
展开阅读全文