《算法与程序设计》教材分析
摘自:《淮北市实验高级中学》
一、本模块开设目的
1、进一步体验算法思想,了解算法和程序设计在计算机解决问题过程中的地位和作用;
2、能从简单问题出发,设计和描述解决问题的算法;
3、能初步使用一种程序设计语言编制程序实现算法(解决问题);
二、几点想法
1、本模块开设的必要性:
因为新课改关注的是技术能力与人文素养的双重建构,既是信息素养培养的继续,又是支持个性发展的平台。对于《算法与程序设计》选修课程,我个人认为是非常重要的选修课程。印度软件产业成功的秘密就在于印度的IT 职业教育培养了大批高质量软件人才。振兴中国软件产业需要培养大量的IT人才,程序设计教学就是为培养这样的人才打下良好的基础,也是学生创新能力培养的重要途径之一。
2、本模块的重点
新课改给出了信息素养的深刻内涵:体现知识与技能、过程与方法、情感态度与价值观三个层面的学习目标。
在新的课程标准中学生的信息素养描述为:对信息的获取、加工、管理、表达与交流的能力,对信息及信息活动的过程、方法、结果进行评价的能力,发表观点、交流思想、开展合作与解决学习和生活中实际问题的能力,遵守相关的伦理道德与纪律法规,形成与信息社会相适应的价值观和责任感。
3、本模块的优势
对机器和软硬件的要求不高,知识体系比较系统成熟,教学和考核目标比较明确;
4、本模块的劣势
对学生信息素养和信息技术的基础知识的要求较高,对学生的数学素养和逻辑思维能力要求也教高,对老师的要求也相应教高。
在教学中要注意持续保持学生的学习兴趣和积极性,教学设计和举例都尽可能结合学生学习和生活中遇到的和熟悉的问题,也可以多联系一些数学和其它学科方面的知识,培养学生理论结合实践的能力和综合应用能力。
5、重要提示
《算法与程序设计》≠某一编程工具(语言)的教学
6、关于算法
算法是凌驾于程序设计语言之上的,不一定要用程序去实现,可以适当在教室中教学;
还要注意与《数学》学科中的“算法”部分相衔接。
7、关于编程工具
编程工具并不统一,但一般选择面向对象的平台,而以VB为佳,因为它简单易学,基本能反映当今最流行的程序设计的思想和方法。
8、关于教学把握
在高中阶段学习程序设计毕竟不同于专业训练,并且程序设计语言的变化也非常快,因此我们只要掌握程序设计的基本知识与一般规律。
当然,我们更要注意发现和培养对程序设计有特殊才能的学生,给他们提供充分的发展空间。
9、如何学好
爱因斯坦说过:“兴趣是最好的教师。”
程序设计学起来虽然有一定的困难,但也非常有意思,学好了我们就可以“指挥”计算机,只要保持浓厚的兴趣,多练多想多交流,就一定能学好。
三、学生学习的几个阶段(本模块的知识结构)
第一阶段:激发学习的兴趣,明确学习的内容,理解计算机解决问题的过程
通过本模块的学习,我们不仅能知道计算机是怎么工作的(工作原理),从计算机语言的层面上了解计算机能做什么,还要知道软件是怎么设计出来的以及软件设计的背后过程,甚至还能设计一些简单的小程序,同时更重要的是,对提高我们分析问题、解决问题的能力也会有很大的帮助。
通过几个有趣的例子展开
例1:韩信点兵(中国剩余定理)----古代数学问题,讨论算法
例2:画面上随机产生一些色彩绚丽的同心圆----几何问题,程序的样子
例3:个人所得税的计算----生活中的问题,算法的描述
教学目标
1、深刻体会计算机的工作原理;
2、理解计算机解决问题的过程(问题分析----确定算法----编程求解),与人解决问题的过程比较;
3、明白什么是程序;
4、明白程序设计是什么回事;
5、明白计算机语言和程序设计语言;
6、初步了解算法的知识;
第二阶段:体会算法的含义,明确算法对于计算机解题的重要性,掌握算法的基本知识
几个例子
例1:求出所有的水仙花数----穷举法
例2:判断一个数是不是质数----穷举及优化
例3:高斯的方法(求1+2+3+…..+N)----算法的多样性及评价
例4:最大公约数问题----辗转相除法(经典问题)
教学目标
1、掌握什么是算法;
2、体会算法的重要性,程序=算法+数据结构;
3、理解对于同一问题可能有多种不同的算法(算法多样性);
4、了解算法的评价及优化;
5、掌握算法的特征:有穷性、确定性、一定有输出、不一定有输入、可行性;
6、会用多种方法描述算法(自然语言、伪代码、流程图);
7、了解程序的3种基本结构(结构化程序设计的基本知识,顺序结构、分支结构、循环结构)
第三阶段:初步掌握一种程序设计语言,明白程序中的一些基本概念,学会编写简单程序
量:常量、变量(三要素:变量名、类型、值,命名规则)
数据类型:含义及存储
系统标准函数:作用、函数名、形参和实参
运算符:算术运算符(+,-,*,/,\,mod,^),关系运算符,逻辑运算符,优先级表达式:括号、值
字符串运算符(+或&)及字符串处理,ASCII码知识
语句:输入、输出、计算、交互和赋值、分支、循环
结构化程序设计的知识
程序的模块化:用户自定义函数
数组的知识
程序的编辑、保存、打开、调试、编译、运行、连接、打包
面向对象的程序设计基本知识:对象、属性、事件及事件驱动
程序设计语言的历史、发展、趋势
例1:顺序结构:已知半径,求圆的面积;
例2:顺序结构:给定初速度和加速度,求一段时间后的车速度;
例3:选择结构:个人所得税的计算;
例4:选择结构:包裹邮寄的收费程序(又重量和体积算邮资);
例5:选择结构:超市打折;
例6:选择结构:一元二次方程的解;
例7:选择结构:二元一次方程组的解;
例8:循环结构:最大公约数和最小公倍数;
例9:循环结构:质数的判断;
例10:循环结构:加密和解密问题;
例11:求N个数中的最大者、最小者、平均值(数组)
例12:画同心圆(面向对象的知识)
例13:滚动字幕(面向对象的知识)
第四阶段:掌握几种重要算法,能综合应用所学知识,编制一些小程序,解决一些实际问题解析法:公式法
例1:计算任意两个日期之间的天数;
例2:画一些简单图形;
例3:鸡兔同龙问题;
穷举法:逐个判断
例1:求出所有的水仙花数;
例2:判断某年某月的天数;
例3:输出N范围内的所有质数;
例4:判断两个数是否互质;
例5:韩信点兵;
例6:百钱买百鸡问题;
递推法:由已知到未知
例1:求菲波那挈数列的前N项;
例2:棋盘放米问题;
递归法:由大化小
例1:求菲波那挈数列的第N项;
例2:求最大公约数问题;
例3:汉诺塔问题;
查找:顺序查找与二分查找
例1:从一万个人名中找一个名字,分析平均查找的次数,比较两种查找方法的效率排序:冒泡排序
例1:运动会团体总分排名;
例2:奥运奖牌榜;
第五阶段:个性发展与提高
1、面向对象的程序设计深入
语言深入学习
理解更加深入
2、软件开发的基本知识
任务分析:问题定义----可行性分析----需求分析----形成设计文档
系统设计:模块化
代码编写与调试:设计界面----编写代码----调试与跟踪----生成可执行文件
软件测试与维护