第一篇:算法描述与设计教案
课型:新课 《算法与程序设计》(选修)人教版
教学目标:
1.进一步理解什么是;算法,知道算法的多样性
2.能够对设计的算法做简装的评价
3.学会利用自然语言、流程图和伪代码来描述算法
教学内容
1.了解什么是算法及其特征 2.学习三种描述算法语言
教学重点:通过例子设计算法
教学难点:三种描述算法语言的使用
课时数:1课时
正课讲解
一、算法是“灵魂”
1.算法存在于人们生活中,如:上街购物、顾客付款、营业员(主)找银等。
2.“韩信点兵问题”有不同的求解过程,就有不同的算法。
有N个人,除以3,5,7,分别余2,3,2,求N。
3.算法——解决问题的方法和步骤。
算法是尼克劳斯.沃斯(N.Writh)提出的,他指出:算法+数据结构=程序。
(即算法不能单独构成程序,它必须和数据结构合二为一)
4.算法的发现
时间:公元前3000年~公元前1500年 地点:巴比伦
巴比伦人求解“算法”的过程:先用解代数方法,再计算实际数目,最后写上一句短句“这就是一个过程”。
5.算法的特征
我们曾在必须修课中提过一点算法,如:冒泡排序法。
例:计算1+2+3+„„+100=?
分析:这个算法有限制范围,可以在有限时间内完成,这是算法的第一个特征:有穷性。计算此算法可以用纸笔、算盘、运算器
和计算机来完成,且计算过程是多样的,但结果是唯一的。这就是算法的可行性、确定性。
计算方法:
⑴把这100个数按顺序相加。
⑵用凑数法:1+99=100,2+98=100,3+97=100,„„,49+51,最后只剩下50和100。
⑶令S=0,使1≤n≤100,先执行S=S+n ⑴,再执行n=n+1 ⑵
n=1,S=0时,S(0)=1 n=2,S=1时,S(0)=3 n=3,S=3时,S(0)=6
n=4,S=6时,S(0)=10 n=5,S=10时,S(0)=15 n=6,S=15时,S(0)=21„„
算法的另外一个特征:输入、输出。
练习:水仙花数问题,如153=1^3+5^3+3^3,分析它应满足什么条件才能使用此方法?
二、如何描述算法
1.用自然语言描述算法
⑴自然语言——人们日常生活中使用的语言。
⑵此种语言的特点:通俗语易懂,缺乏直观性和简洁,且易产生歧义。
使用此种语言的注意事项:描述要求尽可能精确,详尽。
例:用自然语言描述凯撒密码的原理
第1步:输入26个英文字母,它们分别对应1~26个数学。
第2步:令a=1,k=3,n=26。
第3步:使a的取值范围为1≤a≤26,F(a)=(a+k)mod n,转第5步。
第4步:a=a+1,转第3步。
第5步:输出F(a)相对应的数字。
第6步:把数学转化成相当的字母,输出字母。
第7步:累计字母出现顺序,转第4步。
练习:现有一串字母“PROGRAM”给它加密,请设计算法,用自然语言描述。
2.用流程图描述算法
⑴特点:描述算法形象、直观,容易理解。
⑵流程图符号
3.用伪代码描述算法
特点:描述的算法简、易懂,修改容易,容易转化为程序语言代码。
例:分析课本经9页算法描述
第一个条件:y mod 4=0
判断闰年的条件:⑴y不能被100整除;⑵y能被400整除且y能被400整除。
判断不是闰年的条件:⑴y mod 4=0 且y mod 100=0,但y不能被400整除;⑵y不能被4整除。
表示条件判断语句 表示循环处理语句:
IF 条件 THEN 执行语句一 Do While 条件循环语句
ELSE执行语句二 Loop
END IF
条件语句中可以包含多个子语句
实践:用表格比较自然语言、流程图和伪代码3种描述方法的优缺点。
第二篇:1.1 算法与程序框图 教学设计 教案
教学准备
1.教学目标
(1)了解算法的含义,体会算法思想.
(2)会用自然语言和数学语言描述简单具体问题的算法;
(3)学习有条理地、清晰地表达解决问题的步骤,培养逻辑思维能力与表达能力
2.教学重点/难点
重点:算法的含义、解二元一次方程组的算法设计. 难点:把自然语言转化为算法语言.
3.教学用具
课件
4.标签
算法
教学过程 情境导入
电影《神枪手》中描述的凌靖是一个天生的狙击手,他百发百中,最难打的位置对他来说也是轻而易举,是香港警察狙击手队伍的第一神枪手.作为一名狙击手,要想成功地完成一次狙击任务,一般要按步骤完成以下几步: 第一步:观察、等待目标出现(用望远镜或瞄准镜); 第二步:瞄准目标;
第三步:计算(或估测)风速、距离、空气湿度、空气密度; 第四步:根据第三步的结果修正弹着点; 第五步:开枪;
第六步:迅速转移(或隐蔽). 以上这种完成狙击任务的方法、步骤在数学上我们叫算法. ●课堂探究 预习提升
1.定义:算法可以理解为由基本运算及规定的运算顺序所构成的完整的解题步骤,或者看成按照要求设计好的有限的确切的计算序列,并且这样的步骤或序列能够解决一类问题. 2.描述方式
自然语言、数学语言、形式语言(算法语言)、框图. 3.算法的要求
(1)写出的算法,必须能解决一类问题,且能重复使用;
(2)算法过程要能一步一步执行,每一步执行的操作,必须确切,不能含混不清,而且经过有限步后能得出结果. 4.算法的特征
(1)有限性:一个算法应包括有限的操作步骤,能在执行有穷的操作步骤之后结束.
(2)确定性:算法的计算规则及相应的计算步骤必须是唯一确定的.
(3)可行性:算法中的每一个步骤都是可以在有限的时间内完成的基本操作,并能得到确定的结果.
(4)顺序性:算法从初始步骤开始,分为若干个明确的步骤,前一步是后一步的前提,后一步是前一步的后续,且除了最后一步外,每一个步骤只有一个确定的后续.
(5)不唯一性:解决同一问题的算法可以是不唯一的. 课堂典例讲练
命题方向1 对算法意义的理解 例1.下列叙述中,①植树需要运苗、挖坑、栽苗、浇水这些步骤;
②按顺序进行下列运算:1+1=2,2+1=3,3+1=4,„99+1=100; ③从青岛乘动车到济南,再从济南乘飞机到伦敦观看奥运会开幕式; ④3x>x+1;
⑤求所有能被3整除的正数,即3,6,9,12,„.能称为算法的个数为()A.2
B.3
C.4
D.5 【解析】根据算法的含义和特征:①②③都是算法;④⑤不是算法.其中④,3x>x+1不是一个明确的步骤,不符合明确性;⑤的步骤是无穷的,与算法的有限性矛盾. 【答案】B
[规律总结] 1.正确理解算法的概念及其特点是解决问题的关键.
2.针对判断语句是否是算法的问题,要看它的步骤是否是明确的和有效的,而且能在有限步骤之内解决这一问题.
【变式训练】 下列对算法的理解不正确的是________ ①一个算法应包含有限的步骤,而不能是无限的
②算法可以理解为由基本运算及规定的运算顺序构成的完整的解题步骤 ③算法中的每一步都应当有效地执行,并得到确定的结果 ④一个问题只能设计出一个算法
【解析】由算法的有限性指包含的步骤是有限的故①正确; 由算法的明确性是指每一步都是确定的故②正确;
由算法的每一步都是确定的,且每一步都应有确定的结果故③正确; 由对于同一个问题可以有不同的算法故④不正确. 【答案】④
命题方向2 解方程(组)的算法 例2.给出求解方程组的一个算法.
[思路分析]解线性方程组的常用方法是加减消元法和代入消元法,这两种方法没有本质的差别,为了适用于解一般的线性方程组,以便于在计算机上实现,我们用高斯消元法(即先将方程组化为一个三角形方程组,再通过回代方程求出方程组的解)解线性方程组. [规范解答]方法一:算法如下:
第一步,①×(-2)+②,得(-2+5)y=-14+11,即方程组可化为
第二步,解方程③,可得y=-1,④ 第三步,将④代入①,可得2x-1=7,x=4,第四步,输出4,-1.方法二:算法如下:
第一步,由①式可以得到y=7-2x,⑤ 第二步,把y=7-2x代入②,得x=4.第三步,把x=4代入⑤,得y=-1.第四步,输出4,-1.[规律总结]1.本题用了2种方法求解,对于问题的求解过程,我们既要强调对“通法、通解”的理解,又要强调对所学知识的灵活运用.
2.设计算法时,经常遇到解方程(组)的问题,一般是按照数学上解方程(组)的方法进行设计,但应注意全面考虑方程解的情况,即先确定方程(组)是否有解,有解时有几个解,然后根据求解步骤设计算法步骤. 【变式训练】
【解】 算法如下:S1,①+2×②得5x=1;③ S2,解③得x=;
S3,②-①×2得5y=3;④ S4,解④得y=;
命题方向3 筛选问题的算法设计
例3.设计一个算法,对任意3个整数a、b、c,求出其中的最小值. [思路分析]比较a,b比较m与c―→最小数 [规范解答]算法步骤如下:
1.比较a与b的大小,若a
2.比较m与c的大小,若m 【变式训练】在下列数字序列中,写出搜索89的算法: 21,3,0,9,15,72,89,91,93.[解析]1.先找到序列中的第一个数m,m=21; 2.将m与89比较,是否相等,如果相等,则搜索到89; 3.如果m与89不相等,则往下执行; 4.继续将序列中的其他数赋给m,重复第2步,直到搜索到89.命题方向4 非数值性问题的算法 例4.一个人带三只狼和三只羚羊过河,只有一条船,同船可以容一个人和两只动物,没有人在的时候,如果狼的数量不少于羚羊的数量,狼就会吃掉羚羊.(1)设计安全渡河的算法; (2)思考每一步算法所遵循的共同原则是什么? [解析](1)1.人带两只狼过河; 2.人自己返回; 3.人带一只狼过河; 4.人自己返回; 5.人带两只羚羊过河; 6.人带两只狼返回; 7.人带一只羚羊过河; 8.人自己返回; 9.人带两只狼过河. (2)在人运送动物过河的过程中,人离开岸边时必须保证每个岸边的羚羊的数目大于狼的数目. [规律总结]1.对于非数值性的问题,在设计算法时,应当先建立过程模型,也就是找到解决问题的方案,再把它细化为一步连接一步组成的步骤.从而设计出算法. 2.首先应想到先运两只狼,这是唯一的首选步骤,只有这样才可避免狼吃羊,带过一只羊后,必须将狼带回来才行. 【变式训练】两个大人和两个小孩一起渡河,渡口只有一条小船,每次只能渡一个大人或两个小孩,他们四人都会划船,但都不会游泳,他们如何渡河?请写出你的渡河方案及算法. [解析]因为一次只能渡过一个大人或两个小孩,而船还要回来渡其他人,所以只能让两个小孩先过河,渡河的方案算法为: 1.两个小孩同船渡过河去; 2.一个小孩划船回来; 3.一个大人独自划船渡过河去; 4.对岸的小孩划船回来; 5.两个小孩再同船渡过河去; 6.一个小孩划船回来; 7.余下的一个大人独自划船渡过河去; 8.对岸的小孩划船回来; 9.两个小孩再同船渡过河去. 课后习题 1.以下对算法的描述正确的个数是()①对一类问题都有效; ②对个别问题有效; ③计算可以一步步地进行,每一步都有唯一的结果; ④是一种通法,只要按部就班地做,总能得到结果. A.1个 B.2个 C.3个 D.4个 [答案]C [解析]①③④正确,均符合算法的概念与要求,②不正确. 2.算法的有限性是指()A.算法的最后必包含输出 B.算法中每个操作步骤都是可执行的 C.算法的步骤必须有限 D.以上说法均不正确 [答案]C [解析]由算法的要求可知,应选C.3.下列语句中是算法的个数是()①从广州到北京旅游,先坐火车,再坐飞机抵达; ②解一元一次方程的步骤是去分母、去括号、移项、合并同类项、系数化为1; ③方程x2-1=0有两个实根; ④求1+2+3+4的值,先计算1+2=3,再由3+3=6,6+4=10得最终结果10.A.1个 B.2个 C.3个 D.4个 [答案]C [分析]解答本题可先正确理解算法的概念及其特点,然后逐一验证每个语句是否正确. [解析]①中说明了从广州到北京的行程安排,完成任务;②中给出了一元一次方程这一类问题的解决方法;④中给出了求1+2+3+4的一个过程,最终得出结果.对于③,并没有说明如何去算,故①②④是算法,③不是算法. 4.设计一个算法求方程5x+2y=22的正整数解,其最后输出的结果应为________. [答案](2,6),(4,1)[解析]因为求方程的正整数解,所以应将x从1开始输入,直到方程成立. x=2时,y==6; 5.已知一个学生的语文成绩为89,数学成绩为96,外语成绩为99.求它的总分和平均成绩的一个算法为: 1.取A=89,B=96,C=99; 2.____①____; 3.____②____; 4.输出D,E.[解析]求总分需将三个数相加,求平均分,另需让总分除以3即可. x=4时,y==1.[答案]①计算总分D=A+B+C ②计算平均成绩E= 第一课 初识算法与程序设计 一、教学目标 1、知识与技能 (1)理解算法的概念,培养学生自我探索信息,高效获取信息的能力; (2)能初步利用算法解决简单的问题,培养学生的理论联系实际能力和动手操作能力。 2、情感、态度、价值观 学生在学习过程中,通过亲身经历体验获得对此算法的感性认识,培养学生自我获取信息、分析评价信息、、表达呈现信息的能力,进一步提高其信息素养。 二、教学重点难点 重点:算法概念的理解 难点:如何科学合理的选择和设计算法。 三、教学策略与手段 以趣味性问题设置情境,激发学生探索解决问题的兴趣,与学生进行互动探讨,通过Flash演示材料,比较直观地把抽象的问题简单化,使学生的思考逐步深入,从而总结出算法的概念,学会如何设计和选择算法,培养学生自主探究学习的能力。 四、教学过程(1课时) (一)我们来共同寻找下面一些生活中比较现实的问题的解决方法。【问题一】天下真的有“不要钱的午餐”吗? 某一餐馆门口海报上写着“不要钱的午餐”,规则如下:在三个月内,来宾必须凑够五个人,五人每次来就餐必须按照不同的顺序坐,直到把所有可能的顺序都坐一遍,以后来吃饭就可永远免费”。于是有人想,这太容易了,每人每次坐不同的位置,吃五次不就行了?于是他就叫上自己的朋友参加这项活动,可是,吃了十次之后,还没有吃上免费午餐,这是怎么回事呢? 学生们感觉非常有意思,很快以小组为单位进行热烈的讨论并得出了破解问题的步骤:①第一个座位5个人都有坐的机会②第二个座位只有4个人中的任一个有坐的机会(一个人不能同时坐两个座位)③第三个座位只有3个人中的任一个有坐的机会④第四个座位只有2个人中的任一个有坐的机会⑤第五个座位只有1个人有坐的机会⑥计算:5×4×3×2×1=120⑦得出结论:需要吃120次才有可能吃上免费午餐。 【问题二】有三个和尚和三个妖怪过河,只有一条能装下两个人的船,在河的任何一方或者船上,如果妖怪的人数大于和尚的人数,那么和尚就会有被吃掉的危险。你能不能找出一种安全的渡河方法呢?请写一写你的渡河方案。学生:学生讨论回答。〖展示步骤〗 ①两个妖怪先过河,一个妖怪回来; ②再两个妖怪过河,一个妖怪回来; ③两个和尚过河,一个妖怪和一个和尚回来; ④两个和尚过河,一个妖怪回来; ⑤两个妖怪过河,一个妖怪回来; ⑥两个妖怪过河。 【Flash动画展示】通过讨论和动画展示,我们可以知道,计算机解决问题和人解决问题一样需要有清晰的解题步骤。算法就是解决问题的程序或步骤。 (二)【课件展示】算法的概念: 1、广义的算法是指完成某项工作的方法和步骤,在我们日常生活中也经常使用算法,只是没意识到罢了。如:洗衣机的使用说明书是操作洗衣机的算法,菜谱是做菜的算法等等。 2、在数学中,现代意义的算法是指可以用计算机来解决的某一类问题的程序和步骤,这些程序或步骤必须是明确和有效的,而且能够在有限步之内完成。 【小试身手】按照这样的理解,我们可以设计出很多由具体数学问题解决一类数学问题的算 法.下面看一个例子:(要求学生自己考虑并写出具体的算法) 鸡兔同笼问题。一个笼子里有鸡和兔,现在只知道里面一共有17个头,48只脚,鸡和兔各有多少只?试设计一个求解的算法。 【设计意图】求解鸡兔的问题简单直观,却包含着深刻的算法思想。应用解二元一次方程组的方法来求解鸡兔同笼问题。 第一步:设有小鸡x只,小兔y只,则有 第二步:将方程组中的第一个方程两边乘-2加到第二个方程中去,得到,得到y=7; 第三步:将y=7代入(1)得x=10。 【变一变】在笼中有鸡、兔若干,已知有头a个,有脚b只,求各有多少只鸡和兔。 【师生合作】老师带领学生共同书写规范的算法的具体步骤,最后引出算法使用的范围:能解决一类问题,并且能重复使用。 (三)【课件展示】算法的基本特征 ①有穷性 ②确定性 ③不唯一性 ④有效性(逻辑性) 1、有穷性:一个算法应该包含有限个操作步骤,而不能是无限的。 2、确定性:算法的每个步骤都应该是明确无误的,不能含义模糊,使执行者无所适从。 3、有零个或者多个输入,有一个或者多个输出 4、有效性:算法中的每一步都应该能有效地执行,执行算法最后应该能得到确定的结果。 【教学总结】 1、本节课通过一些生活中看似简单问题的解决方法和步骤,使学生比较轻松的接受了生活算法的概念,进一步理解了计算机算法的概念。 2、课堂教学的效益取决于学生对所学知识理解了多少,能否用所学知识来解决一些实际问题。本节课的设计突出讲与练的结合,培养学生的动手能力,并且引出学生对下一节课的内容的思考,比较顺利的完成了本节课的教学任务。 3、如何优化算法,找到算法的形式和用算法解决问题的效益的最佳结合点,还尚需探讨。 算法设计与分析学习心得 班级:物联网1201 姓名:刘潇 学号:1030612129 一、实验内容: 这学期的算法与设计课,老师布置了这四个问题,分别是货郎担问题,动态生成二维数组,对话框下拉列表,排序问题。 二、学习掌握: 基本程序描述: (1)货郎担问题:货郎担问题属于易于描述但难于解决的著名难题之一,至今世界上还有不少人在研究它。货郎担问题要从图g的所有周游路线中求取具有最小成本的周游路线,而由始点出发的周游路线一共有(n一1)!条,即等于除始结点外的n一1个结点的排列数,因此货郎担问题是一个排列问题。货郎担的程序实现了利用穷举法解决货郎担问题,可以在城市个数和各地费用给定的情况下利用穷举法逐一计算出每一条路线的费用,并从中选出费用最小的路线。从而求出问题的解 (2)费用矩阵:费用矩阵的主要内容是动态生成二维数组。首先由键盘输入自然数,费用矩阵的元素由随机数产生,并取整,把生成的矩阵存放在二维数组中,最后把矩阵内容输出到文件和屏幕上。它采用分支界限法,分支限界法的基本思想是对包含具有约束条件的最优化问题的所有可行解的解(数目有限)空间进行搜索。该算法在具体执行时,把全部可行的解空间不断分割为越来越小的子集,并为每个子集内的解计算一个下界或上界。动态生成二维n*n的数组程序利用指针表示数组的行和列,并逐一分配空间,在输入n的数值后,系统自动分配空间,生成n*n的数组,并产生随机数填充数组,最后将结果输入到指定文件中。 (3)Mfc:在下拉列表框中添加内容程序,在下拉列表对应的函数中利用addstring添加需要的内容。首先定义下拉列表框为ccombox型,并定义其属性名,利用addstring函数可以任意添加需要的内容。a排序问题:快速排序的运行时间与划分是否对称有关,其最坏情况发生在划分过程中产生的两个区域分别包含n-1个元素和1个元素的时候。其算法的时间复杂度为O(n 2),在最好的情况下每次划分的基准恰好为中值,可得其算法时间复杂度为O(n㏒n)。算法的实现和理解和代码实现完全是两回事,想要完全掌握一种算法,需要动手实践,用代码实现,才能理解透彻,真正掌握。b对话框下拉列表:这个项目简单易懂,轻松实现。三.疑问与总结: 货郎担的问题,我认为穷举法相对比而言是比较初级的方法,费时耗力,适合在练习时选用,但是在实际问题中不建议采用。克鲁斯卡尔或者普里姆算法求取最小生成树的方法来解决货郎担的问题是更适合现实解决问题的。我认为程序可以用switch函数来将函数分成几个部分更人性化,比如分为解决问题的的选项,输出结果选项,退出程序选项等。再有就是费用矩阵的值可以从文件中读取,而结果也可以直接放在指定文件中,这样在实际应用中比较广泛。 动态生成二维数组的程序我认为如果按照规范性,我的方法是中规中矩的,毕竟再向下延伸,生成三维的数组,需要三层的指针来实现。但是就程序的简化程度和计算机处理时间来说,我认为这样双层指针的算法有些太占用内存,毕竟要给行和列各分配n个空间。我通过与同学的交流,我发现可以用1位数组来实现二维的n*n的数组。首先分配n*n的空间,然后通过循环在一行的数据达到n时自动换行。这样程序得到了一定的简化,并且减少了一定的内存使用。我认为这种方法是比较贴合实际的。 四.心得体会 在计算机软件专业中,算法分析与设计是一门非常重要的课程,很多人为它如痴如醉。很多问题的解决,程序的编写都要依赖它,在软件还是面向过程的阶段,就有程序=算法+数据结构这个公式。算法的学习对于培养一个人的逻辑思维能力是有极大帮助的,它可以培养我们养成思考分析问题,解决问题的能力。 如果一个算法有缺陷,或不适合某个问题,执行这个算法将不会解决这个问题。不同的算法可能用不同的时间、空间或效率来完成同样的任务。一个算法的优劣可以用空间复杂性和时间复杂度来衡量。算法可以使用自然语言、伪代码、流程图等多种不同的方法来描述。计算机系统中的操作系统、语言编译系统、数据库管理系统以及各种各样的计算机应用系统中的软件,都必须使用具体的算法来实现。算法设计与分析是计算机科学与技术的一个核心问题。因此,学习算法无疑会增强自己的竞争力,提高自己的修为,为自己增彩。 数据结构算法设计与分析、计算机网络、计算机组成原理、操作系统原理、编译原理、数据库原理及应用、软件工程、软件测试等计算机基础理论课程; 网页制作、程序设计Java、JSP程序设计、Oracle、XML程序设计、计算机网络、SSH(Struts+Spring+Hibernate)框架、Java EE程序设计、Ajax程序设计、Linux+PHP+MySQL程序设计、Android手机开发、UML系统分析与设计、性能测试、自动化软件测试、软件质量保证、毕业设计及项目综合实训等。 数据结构、计算机网络、计算机组成原理、操作系统原理、编译原理、数据库原理及应用、金融学概论、西方经济学等基础理论课程; 网页制作、程序设计Java、JSP程序设计、J2EE程序设计、SQL Server数据库、Oracle数据库、Linux操作系统、UML系统分析与设计、软件工程、XML程序设计、SSH框架、金融市场学、ERP财务管理、管理信息系统、投资银行学、商业银行学、国际金融管理、毕业设计及项目综合实训等专业课程。 数据结构、计算机网络、计算机组成原理、操作系统原理、数据库原理及应用、软件工程、软件测试等计算机基础理论课程; 网页制作、程序设计Java、JSP程序设计、J2EE程序设计、XML程序设计、Ajax程序设计、SSH框架、Android手机开发、Linux+PHP+MySQL程序设计、SQL Server数据库、Linux操作系统、UML系统分析与设计、软件项目管理、行业标准与规范、IT服务管理、IT职业英语、毕业设计及项目综合实训等专业课程第三篇:算法与程序设计教案
第四篇:算法设计与分析学习心得
第五篇:数据结构算法设计与分析