540 likes | 755 Views
教材 陆朝俊 程序设计思想与方法讲义 参考资料 John M. Zelle Python Programming: An Introduction to Computer Science http://openbookproject.net/thinkCSpy/ Python 学习手册 _ 第 3 版. 成绩 组成 考试 作业 出勤. 课程主要内容 解决可计算问题需要教会计算机如何解决问题 如何教计算机解决问题 了解计算机有哪些基本功能 因材施教,设计教学的过程 一门与计算机进行交流的语言. 对本课程的 定位
E N D
教材 • 陆朝俊 • 程序设计思想与方法讲义 • 参考资料 • John M. Zelle • Python Programming: An Introduction to Computer Science http://openbookproject.net/thinkCSpy/ • Python学习手册_第3版
成绩组成 • 考试 • 作业 • 出勤
课程主要内容 解决可计算问题需要教会计算机如何解决问题 如何教计算机解决问题 了解计算机有哪些基本功能 因材施教,设计教学的过程 一门与计算机进行交流的语言
对本课程的定位 • 学习计算机科学解决问题的思想方法, 应用于其他专业领域 • 不是程序设计语言课程! • 本课程需要编程,以加深对计算思维的理解 • 坏消息:学习编程语言需要掌握非常繁琐的细节 • 好消息:Python语言非常简单,易学易用 • 也不是算法和数据结构课程! • 当然会学习这方面的一些基本技术 6
数学 计算思维 理,化,生... 计算机科学 经,管,金融... 工程 可计算性理论 程序设计语言 算法设计与分析 数据结构 艺术 7 Lu Chaojun, SJTU
什么是计算 什么是计算思维 初识Python • 程序排错 2 3 1 4
1.1.1 计算机与计算 1.1 什么是计算 个人计算 计算中心 云计算 移动计算 超级计算
1.1.1计算机与计算 1.1 什么是计算 • 2007年1月《Nature》:《Social Sciences: Life's A Game》(社会科学:生活就是一场游戏)。 • 越来越多的人“生活”在Cyber世界中,人跟人之间的沟通越来越借助于机器 • 今天如果突然失去机器,世界将崩溃
1.1.1计算机与计算 1.1 什么是计算
中央处理器(CPU):执行指令. • 每条指令只能完成简单的操作! • 例如:加法, 比较, 将数据从一个内存单元移到另一单元, etc. • 存储器:存储信息(程序和数据). • 主存:CPU能直接访问,速度快但易失. • 次级存储器:速度慢但持久. • 输入/输出设备:人机交互 12 Lu Chaojun, SJTU
CPU、指令与程序 CPU 指令 指令集 程序 程序设计 1.1 什么是计算
1.1 什么是计算 • 存储器 • 主存储器 • 保存正在运行的程序代码和数据 • 关机后,内存的数据全部丢失 • 次存储器 • 比如硬盘
输入与输出设备 • 输入设备将人能理解的符号转换成计算机能处理的符号。常用的输入设备有:键盘、鼠标、光笔等 • 输出设备将计算机的输出转换成人能理解的输出。常用的输出设备有:显示器、打印机、音响设备等
计算机:软件 • 计算机是信息处理机器,信息处理过程由预定的程序控制. • 单条指令是做不了什么事情的,需要大量指令组成一个逐步执行的指令序列-程序. • 各种程序统称为计算机软件. • 没有软件的计算机毫无用处. 16 16 16 Lu Chaojun, SJTU Lu Chaojun, SJTU
计算 计算:利用计算机执行程序来解决问题. 不是狭义的数学计算! 程序使得简单指令完成复杂任务. 高斯算法 1.1 什么是计算
计算 把大象放进冰箱里需要几步? 1.1 什么是计算
计算机的通用性 计算机执行一个程序即可实现一个功能;换着执行不同的程序即可实现不同的处功能. 请列举你熟悉的应用程序 1.1 什么是计算
计算机科学 • 并非研究计算机! • 计算机之于计算机科学家正如望远镜之于天文学家. (E. W. Dijkstra) • CS研究计算的基础,实现与应用. • 例如,CS的一个基本问题:什么是可计算的? • 本课程的学习目标:像计算机科学家一样思考.
程序设计 • 计算的关键是程序设计(编程). • 给定一个问题,利用计算机支持的简单操作,设计出一个操作步骤的序列,计算机执行这个序列从而解决问题. • 学习程序设计的好处: • 做计算机的主人 • 提高问题求解能力 • 本身是很有乐趣的智力活动 21 Lu Chaojun, SJTU
1.1.2 计算机语言 人与计算机进行交流的一种语言 为什么不用自然语言与计算机交互? 精确的语法和语义 无二义性 有不同层次的程序设计语言
1.1.2 计算机语言 机器语言 汇编语言 高级语言 1.1 什么是计算 0010001000000011 1000001000010000 0010011000000010 0110000100000001 0001000000000000 1111000000000000 Load R0,3 Mul R0,16 Load R1,2 Add R0,R1 Write R0 Halt >>>print 3*16+2
1.1.2 计算机语言 编译 将程序全部翻译成机器语言的程序,然后再执行。 main() {inti, s; i=1; s=0; 01100010 11101001 C compiler Object program Source program 1.1 什么是计算
源程序 解释系统 (逐句解释、执行) 输出结果 输入数据 1.1 什么是计算 • 1.1.2 计算机语言 • 解释
高级语言的特点 具备了一定的机器独立性,使用户可以专注于解决问题的方法。但某些方面还是受到机器的限制 为了解决移植性问题,ANSI制订了一系列的标准
1.1.3算法 回想一下把大象放进冰箱的问题。 1.1 什么是计算
程序设计 • 先用非形式化的语言将问题求解步骤表达出来——算法; • 伪代码 • 再用形式化的编程语言将上述算法实现——程序. • 代码
1.1 什么是计算 • 1.1.3算法 • 欧几里德算法 • 输入:自然数a,b • 输出:a,b的最大公约数 • 步骤: • 第1步:令 r为a/b的余数 • 第2步:若r=0,则算法结束,b即为答案;否则置a<-b,b<-r,转到第1步。
对算法的要求 • 算法的每个步骤必须是明确的,可行的. • 不明确:"在菜中放点盐" • 不可行:"用青菜豆腐做出龙肝凤髓的美味" • 每个步骤不必是最底层的琐细步骤,可以是组合的高级步骤.如:"焯水" • 算法的步骤必须在有限时间内完成. • 我们说的计算,即是指"算法计算":用明确可行的基本步骤组成的序列来解决问题.
1.1.4 实现 • 算法<>程序
1.2什么是计算思维 计算思维:现代科技创新的基础之一 计算思维最根本的内容,即其本质是抽象(Abstraction)与自动化(Automation)。 1.2 神奇的“合并形状”功能
1.2 什么是计算思维 • 计算思维是计算机科学家利用计算机解决问题时的思想和方法 • 计算机科学是关于“计算”的科学 • 计算思维建立在由人或机器执行的计算过程的能力和限制之上 • 如何像计算机科学家一样思考?
Lu Chaojun, SJTU • 真的有计算思维吗? • 人们在解决不同问题时有不同的思考方式 • 数学思维:解数学问题 • 工程思维:工程设计 • 形象思维:文学创作 • ...... • 计算思维:建立在计算机的能力与局限之上. • 由于计算机的广泛应用,计算思维未来会成为人们的基本能力. • 与阅读,书写,算术能力一样! 34 34 Lu Chaojun, SJTU
1.2 什么是计算思维 • 计算思维的具体例子 • 问题表示 • 算法设计 • 编程技术 • 可计算性与算法复杂性
Lu Chaojun, SJTU • 计算思维例:问题的表示 • 问题的表示(建模) • 抽象:将现实中的各种数量关系,空间关系,处理过程抽象为计算机的数据结构和控制结构 • 例如:温度数据抽象为数值还是文字? • 不同抽象层次 • 问题表示得合适与否直接影响问题的解法的发现和效率
计算思维例:算法设计 • 化难为易:分解,约简,嵌入,转换,模拟... • 分治法,递归法,贪心法,动态规划... • 递归地思考 • 并行处理 37 Lu Chaojun, SJTU
计算思维例:编程实现 • 类型系统与类型检查 • 结构化与模块化的思考 • 编程范型:过程式,面向对象,函数式,... • 程序美学,系统设计的简洁与优雅 38 Lu Chaojun, SJTU
计算思维例:计算理论 • 算法复杂度分析 • 问题的解法是有效率差别的 • 有些问题是难解的 • 寻求近似解 • 问题的可计算性 • 有些问题是不可计算的 39 Lu Chaojun, SJTU
计算思维的特点 • 是概念化思考,而非编程 • 是基本思考能力,而非机械的套用 • 是人的思考,而非计算机 • 与数学思维和工程思维相结合 • 是思想,而非人造物 • 人人皆有,处处皆是 40 Lu Chaojun, SJTU
Lu Chaojun, SJTU • 生活中的计算思维 • 算法:小学算术中的长除法 • 查找方法:查黄页是顺序翻找还是借助索引 • 排序:整理扑克牌 • 排队:先来先处理 • 预取与缓存:书包存放当天上课用的书 • 并行处理:烧菜 • ……
Lu Chaojun, SJTU • 计算 + X • 计算数学,计算几何,自动定理证明 • 计算物理学 • 计算化学 • 计算生物学,生物信息学 • 计算经济学 • 计算机艺术:电影特效,计算机作曲绘画书法 • ……
计算+X:十二五863计划 • 征集重大应用软件课题 • 聚变与裂变能源数值模拟 • 真实飞机外型全流场和优化设计数值模拟 • 航天飞行器全飞行流域数值模拟 • 新药研发与蛋白质折叠数值模拟 • 真实感动漫渲染与创作 • 大型工程设备结构力学分析 • 复杂电磁环境数值模拟 • 新型材料设计与性能评估 43 Lu Chaojun, SJTU
1.3 初识Python 本课程采用Python语言 高级程序设计语言有很多种,据说2008年网上被引用最多的10个语言是(按字母顺序): C,C++,C#,Java,JavaScript,Perl, PHP,Python,Ruby,SQL 下载python 软件的地址 http://www.python.org/getit/ python 2.7 版 44
Python安装与运行 • 版本:教材和上课都采用Python 2.7 • 与最新的Python 3.x有不兼容的地方. • 安装后,启动Python解释器 • 命令行 • GUI 45 Lu Chaojun, SJTU
第一个程序:HelloWorld • 交互方式 >>> print "Hello, World!" Hello, World! • 本课程的教学中常用交互方式演示新语句 • 实际上很少用交互方式执行程序 • 多次执行同一程序需要多次输入程序 • 多行语句无法一次性执行 46 Lu Chaojun, SJTU
第一个程序:HelloWorld • 程序文件 • 将语句保存在纯文本文件hello.py中 • 四种执行方式 • 在IDLE中用File->Run Module菜单执行 • 双击hello.py文件图标 • >>> import hello • C:\Python27> python hello.py print "Hello, World!" 47 Lu Chaojun, SJTU
程序构件:数据 • 数程序构件:数据 • 据是被处理的信息 • 有不同类型的数据 • 字符串数据 >>> print "Hello, World!" • 数值数据 >>> print 3.1415 48 Lu Chaojun, SJTU
程序构件:变量 • 和数学类似:用一个名字表示可变的数据 • 数学中多用单字母,程序中多用单词/词组 • 标识符:Python命名 • 以字母或下划线开头,后跟0个或多个字母,数字,下划线.区分大小写字母. 合法: x xYz x_123 ___ _w3 非法: 3q x-123first name • 良好的命名风格:有意义,风格一致 49 Lu Chaojun, SJTU
程序构件:表达式 • 表达式:能计算出一个值. • 字面值: 3.14, “hello” • 变量 • 数据+运算符(如 ) >>> 2+3*4-5 • 运算符 • 不同类型的数据有不同运算 • 运算符有优先级 • 良好编程风格:用空格,括号增加表达式的可读性. 50 Lu Chaojun, SJTU