1程序设计基础授课教师:吴文虎徐明星上课地点:第五教室楼上机实验:东主楼9区2层机房2程序设计基础授课教师:毛希平吴文虎上课地点:第六教室楼上机:主楼开放实验室机房3一、教学对象计算机科学与技术系新生(第一学期)二、教学目标程序设计的重要性程序设计的基本概念与基本方法编程解题的思路与典型方法数学模型简介算法及算法步骤程序结构与相应语句编码与上机调试4三、教学重点程序设计的基本概念,基本方法;在C/C++语言的环境下,学会如何针对问题进行分析,构建数学模型,寻找算法并编程实现;有条有理有根有据的编程实践;养成良好的编程风格与习惯;重在思维方法的学习,鼓励创新。5四、指导思想1.立足改革,人的认识要随着时代的前进而不断深化,在新的形势和环境下,教学要突破传统观念和传统模式,也要追求高效和完美,以培养高素质有创造精神的人才为这门课的教学目标。2.以学生为中心学生是教学的主体,安排教学首先须考虑培养目标、学生的认知规律和学习特点。教学的每一个环节都要顾及学生的实际情况,要有利于调动学生学习的积极性,引导学生主动学习。63.强化实践程序设计是高强度的脑力劳动,实践性极强,不是听会的、也不是看会的,而是练会的。要让学生充分上机动手编程。这可能与以往的教学安排最大的不同之处。4.鼓励和引导探索式的学习按照建构主义的学习理论,学生(作为学习的主体)是在与客观环境(所学内容)的交互过程中构建自己的知识结构的。引导学生在解题编程的实践中探索其中带规律性的认识,将感性认识升华到理性的高度。75.突出重点重点放在思路、算法、编程构思和程序实现上。语句只是表达工具,强调抱西瓜,不拣芝麻。重在训练利用计算机编程手段分析问题和解决问题的能力。6.养成良好的编程习惯强调可读性;变量要加注释;程序构思要有说明;学会如何调试程序;尽可能优化;对运行结果要做正确与否的分析。87.考试方法不纸上谈兵,不搞笔试,不考死记硬背的东西上机解题,自动测试不计失败,只计成功正在建立试题库,题目随机抽取8.学习方法动手动脑,在理论指导下实践注重学习思路,总结思路倡导:做学问,要又学又问倡导:“自学、动手、应用、上网”倡导:实践出真知。在编写大量程序之后,才能感到运用自如。99.学习心态“自立、自信、自尊、自强”要有战胜困难的勇气和信心要求做到越学越会充满信心10五、教学内容安排1.概论:程序设计的基本概念与基本方法;怎样才能学好这门基础课2.程序的基本结构3.编程关键:逻辑思维与问题求解人是怎样让计算机帮助自己解题的4.数据的组织方式一:数组5.模块化:函数与函数调用116.分治思想:递归算法及其实现7.逻辑指代与物理指代:指针8.数据的组织方式二:结构9.蒙特卡洛法10.贪心法11.动态规划1212.数据的组织方式三:链表与树13.数据的组织方式四:文件,数据的永久存储与重复使用14.面向对象程序设计的概念及特点13精心铸精品理念须先行对老师要高标准严要求教书育人教学理念最重要用心探究课程本身的科学体系课程的目标,应知应会的重点课程的特点,怎样才能学得主动14对学生调动积极性,激发潜能兴趣是成功的妈妈信心比什么都重要自立,自信,自尊,自强敬业精神的培养,从点滴做起敢字当头,鼓励标新立异15教学需要不断改革教法为什么要改?怎样改?改后效果如何?16教法为什么要改?传统上法存在的问题语句语法讲得太多太细忽视基本问题求解过程算法意识淡薄不能激发学生兴趣17我们的目标借助程序设计的知识载体,传授基本问题的求解过程和基本思路。建立算法意识,培养良好的思维习惯。从学科方法论上打基础,培养计算思维能力和分析问题解决问题的能力。18学科教育走内涵发展道路计算思维能力抽象思维能力和逻辑思维能力理性思维和理性实践19创造力观察能力思维能力实践能力感知能力想象能力联想能力设计能力洞察能力预见能力审美能力表达能力注意力抽象思维能力分析能力语言能力记忆力形象思维能力归纳能力协调能力灵感思维能力批判能力操作能力逻辑思维能力决策能力独立工作能力求异思维能力评审能力20怎样改?教学设计中的几个难点改革的思路创新点改革的八项具体做法21教学设计中的几个难点对“构造性”和“能行性”的把握。如何培养计算思维能力?抽象第一与动手编程实践的关系。尽量超越具体语言,又不能没有上机的语言环境。初学者的难点在哪儿?怎样激发学生的学习兴趣?22教学改革的思路问题驱动理出思路建立模型构思算法程序实现抽象思维、逻辑思维形式化归纳模型化算法设计程序结构编码调试引发兴趣23创新点提出课程的定位是培养学生利用计算机编程手段分析问题和解决问题的能力提出强化实践的教学设计提出理性思维和理性实践的导学要求提出“抱西瓜,不捡芝麻”的教学策略提出上课同时养成良好的编程习惯提出上机解题的考试方法提出创设进行因材施教的探索空间242编程准备25请你编程实现一个功能强大的计算器26假如你是一个初学者,对在C++语言环境下如何编程一无所知,这里先给你搭一个台阶,教你构造一个功能强大的计算器,所谓功能强大是说(1)数学计算式子可以很复杂;(2)计算速度极快。学习目标27内容要点I/O流与插入、抽取操作符算术运算符号进入和退出C++环境常用数学函数28C++程序结构C++源代码一般都由若干函数和类组成。为了便于管理,一般把不同功能的函数和类放在不同的文件中,对于类的声明和实现也分别放在对应的.h(或.hpp)和.cpp文件中。由于文件较多,所以为了便于管理,一般的集成开发工具都会提供工程(Project)管理功能来管理这些文件,对源文件进行编译和链接。29类的声明(.h)目标文件(.obj)类的实现(.cpp)编译类的声明(.h)目标文件(.obj)类的实现(.cpp)编译……库函数可执行文件(.exe)链接目标文件(.obj)主程序(.cpp)编译30【任务2.1】计算下列三角函数的值2.1进入VC++环境,写程序代码oooosin(20)cos(20)-cos(10)/tan(10)为了完成任务2.1先要进入VC集成环境1、进入VC集成环境有两种办法(1)双击VC图标31用鼠标双击“桌面”上的VC图标,进入环境图2.132用鼠标点击“开始”菜单(图2.2)将鼠标上移至“程序(p)”然后将鼠标水平右移,在下一级菜单中将鼠标移至“MicrosoftVisualstudio6.0”再将鼠标右移至下一级菜单上,将鼠标上下移动到“MicrosoftVisualC++6.0”上,单击鼠标左键会出现图2.3,这就是我们编程时要用到的环境。(2)从开始菜单进入33图2.234图2.335图2.4File菜单:文件操作等36图2.5Edit菜单:编辑查找37图2.6View菜单:窗口设置等38图2.7Insert菜单:资源加入等39图2.8Project菜单:工程管理等40图2.9Build菜单:编译链接调试41图2.10Tools菜单:调试工具、系统配置等42图1.4图2.11Window菜单:窗口管理43图1.12Help菜单:帮助信息44见演示2.建立工程和文件3.编译和链接45//************************************************//*程序:YW1_1.cpp*//**//*功能:任务1.1计算三角函数的值*//**//*sin(20)cos(20)-cos(10)/tan(10)*//**//*作者:俞玮*//**//*时间:2002年6月4日*//**//*修改:张三*//**//*时间:2002年9月13日*//************************************************2.2任务2.1计算三角函数程序代码的说明46#includeiostream//预编译命令#includecmath//预编译命令usingnamespacestd;intmain()//主函数{//主函数开始//计算三角函数式并输出coutsin(20.0/180*3.14159)*cos(20.0/180*3.14159)-cos(10.0/180*3.14159)/tan(10.0/180*3.14159)endl;return0;}//主函数结束471、以符号“#”开头的行,称为编译予处理行。2、“#include”称为文件予处理命令。3、“#includeiostream”这条命令是让文件“iostream”的内容包含到新建的程序中去。4、iostream是C++系统定义的一个“头文件”,在这个头文件中设置了C++的输入/输出(I/O)相关环境,定义了输入流cin和输出流cout对象。说明485、“#includecmath”,这条命令是让系统中已经有的常用的数学函数包含到新建的程序中去。有了它你才能使用正弦、余弦函数的公式。6、usingnamespace称为使用名字空间命令,是为避免同名冲突而引入的,std是C++自带的一个名字空间,由它定义了C++的库标示符,比如cout等。有了usingnamespacestd这句话,程序就可以直接使用std里面的标示符了。497、intmain()是每一个C++程序都必须有的,称为主函数。你可以把它看成是程序的入口。在main前面的int是标准C++所提倡的,这样做,需要在主函数结束前增加一行代码:return0;50关于main()主函数的详细说明将在第3章中介绍。在这个计算三角函数的程序中实际上只有一行代码,开头是cout,中间是三角函数算式,结尾是endl。按照这种模式,两头不动,你只要改变中间部分就可以计算任何算式(当然是cmath.h支持的才行)这里cout是系统的关键字,代表标准输出的流设备,其后的符号表示输出操作,可将其右侧的数据送至显示器上。在这个程序中“cout”的右侧就是三角函数算式的数值。“endl”表示在屏幕显示计算结果之后,换一行。512.3输出流对象cout在C++中引入术语stream(流),指的是来自设备或传给设备的一个数据流。cout表示输出流对象,它是输入输出流库的一部分。与cout相关联的设备是显示器。在程序中有了关联字cout就有了将数据流传到显示器的条件,这时用插入操作符“”将其后的数据插入到该流中去。比如下面的两条语句cout“welcometoTsinghua”;coutendl;52可以用图2.2来说明,放在引号“”中的字符串welcometoTsinghua是要送给显示器设备的数据,用插入操作符将其传至显示设备上。endl字符串之后插入回车,直接将字符串写到屏幕上。welcometoTsinghuacoutwelcometoTsinghua图2.2显示器53插入操作符可以把多个输出数据组合或级联成单个的输出语句。比如下面的语句:cout“WelcometoTsinghua,”“Iamastudent.”endl;这时屏幕上显示WelcometoTsinghua,Iamastudent.542.4输入流对象cincin表示输入流对象,它也是输入输出流库中的一部分,与相关联的输入设备是键盘。由键盘输入的字符串形成输入流,用提取操作符“”可将输入流存储到一个事先定义好的变量中。比如floatx;cinx;55第一条是定义了一个浮点数类型的对象:变量x第二条是用键盘敲入一个带小数点的数,比如3.1415956图2.3描述了提取输入流的示意图有关什么是变量,如何从键盘输入数据的内容放到下一章去讲。图2.3X的地址cin3.141593.14159键盘572.5注释及其重要性注释(comments)是非常重要的一种机制。没有注释的程序不能算作合格的程序。要建立这样的观念:程序是给人编的,让人家看懂是第一位重要的事情。特别是将来你可能参加一个团队,几十人甚至几百