当前位置:
文档之家› 程序设计思想与方法——第一章
程序设计思想与方法——第一章
31
Python安装与运行
• 版本:教材和上课都采用Python 2.7
– 与最新的Python 3.x有不兼容的地方.
• 安装后,启动Python解释器
– 命令行
– GUI
Lu Chaojun, SJTU
32
第一个程序:HelloWorld
• 交互方式 >>> print "Hello, World!" Hello, World! • 本课程的教学中常用交互方式演示新语句 • 实际上很少用交互方式执行程序
7
Lu Chaojun, SJTU
计算机:软件
• 计算机是信息处理机器,信息处理过程由 预定的程序控制.
– 单条指令是做不了什么事情的,需要大量指 令组成一个逐步执行的指令序列-程序.
• 各种程序统称为计算机软件. • 没有软件的计算机毫无用处.
Lu Chaojun, SJTU
8
计算
• 计算:利用计算机执行程序来解决问题.
– 多次执行同一程序需要多次输入程序 – 多行语句无法一次性执行
Lu Chaojun, SJTU
33
第一个程序:HelloWorld
• 程序文件
– 将语句保存在纯文本文件hello.py中
print "Hello, World!"
– 四种执行方式
在IDLE中用Run Module菜单执行 双击hello.py文件图标 >>> import hello C:\Python27> python hello.py
次级存储器
计算机:硬件(2)
• 中央处理器(CPU):执行指令.
– 每条指令只能完成简单的操作!
例如:加法, 比较, 将数据从一个内存单元移到另 一单元, etc.
• 存储器:存储信息(程序和数据).
– 主存:CPU能直接访问,速度快但易失. – 次级存储器:速度慢但持久.
• 输入/输出设备:人机交互
Lu Chaojun, SJTU
29
本课程的定位(续)
数学 计算机科学 可 计 算 性 理 论 程 序 设 计 语 言 算 法 设 计 与 分 析 计 算 思 维 理,化,生... 经,管,金融...
数 据 结 构
工程
艺术
Lu Chaojun, SJTU
30
Python语言
• 荷兰人Guido van Rossum于1980年代发明.
Lu Chaojun, SJTU
25
生活中的计算思维
• 算法:小学算术中的长除法 • 查找方法:查黄页是顺序翻找还是借助索 引 • 排序:整理扑克牌 • 排队:先来先处理 • 预取与缓存:书包存放当天上课用的书 • 并行处理:烧菜 • ……
Lu Chaojun, SJTU
26
计算 + X
• • • • • • 计算数学,计算几何,自动定理证明 计算物理学 计算化学 计算生物学,生物信息学 计算经济学 计算机艺术:电影特效,计算机作曲绘画书 法 • ……
• CS研究计算的基础,实现与应用.
– 例如,CS的一个基本问题:什么是可计算的?
• 本课程的学习目标:像计算机科学家一样 思考.
Lu Chaojun, SJTU
11
程序设计
• 计算的关键是程序设计(编程).
– 给定一个问题,利用计算机支持的简单操作, 设计出一个操作步骤的序列,计算机执行这 个序列从而解决问题.
Lu Chaojun, SJTU
27
计算+X:十二五863计划
• 征集重大应用软件课题
– – – – – – – – 聚变与裂变能源数值模拟 真实飞机外型全流场和优化设计数值模拟 航天飞行器全飞行流域数值模拟 新药研发与蛋白质折叠数值模拟 真实感动漫渲染与创作 大型工程设备结构力学分析 复杂电磁环境数值模拟 新型材料设计与性能评估
37
程序构件:语句
• 输出语句
– 我们用语句模板来给出正确用法 print <表达式> print <表达式1>,<表达式2>,...
• 赋值语句
>>> x = 3.14 >>> print x * 10
Lu Chaojun, SJTU
38
程序构件:函数
• 多条语句构成一个整体,并命名
>>> def greet(): print "Hello!" print "Goodbye!" >>> greet() Hello! Goodbye!
9
通用计算机
• 计算机执行一个程序即可实现一个功能; 换着执行不同的程序即可实现不同的处 功能. • 通用计算机:可以加载不同的程序来执行.
– 与一些电器的比较:电视机功能单一,洗衣机 则功能较多(可加载多种洗涤程序),现在的手 机则功能更多,基本上就是计算机.
计算机科学
• 并非研究计算机!
– 计算机之于计算机科学家正如望远镜之于天 文学家. (E. W. Dijkstra)
计算思维
• 计算思维(computational thinking)是计算 机科学家利用计算机(计算过程)解决问题 时的思想和方法.
– 计算机科学(CS)是关于“计算”的科学.
• 如何像计算机科学家一样思考?
Lu Chaojun, SJTU
18
真的有计算思维吗?
• 人们在解决不同问题时有不同的思考方式
Lu Chaojun, SJTU
21
计算思维例:编程实现
• • • • 类型系统与类型检查 结构化与模块化的思考 编程范型:过程式,面向对象,函数式,... 程序美学,系统设计的简洁与优雅
Lu Chaojun, SJTU
22
计算思维例:计算理论
• 算法复杂度分析
– 问题的解法是有效率差别的 – 有些问题是难解的 – 寻求近似解
28
Lu Chaojun, SJTU
本课程的定位
• 学习利用计算机解决问题的思想方法,应 用于其他专业领域 • 不是程序设计语言课程!
– 编程是计算思维的实践 – 坏消息:学习编程语言需要掌握非常繁琐的 细节 – 好消息:Python语言非常简单,易学易用
• 不是算法和数据结构课程!
– 会学习一些基本的知识
34
Lu Chaojun, SJTU
程序构件:数据
• 数据是被处理的信息 • 有不同类型的数据
– 字符串数据 >>> print "Hello, World!" – 数值数据 >>> print 3.1415
Lu Chaojun, SJTU
35
程序构件:变量
• 和数学类似:用一个名字表示可变的数据
– 数学中多用单字母,程序中多用单词/词组
• 标识符:Python命名
– 以字母或下划线开头,后跟0个或多个字母,数 字,下划线.区分大小写字母. 合法: x xYz x_123 _ __ _w3 非法: 3q x-123 first name
• 良好的命名风格:有意义,风格一致
Lu Chaojun, SJTU
Lu Chaojun, SJTU
3
考核方式
• 期末考试
– 笔试, 占最终成绩的50%
• 平时作业
– 编小程序, 邮件或ftp上传给助教, 占最终成绩的20%
• 大作业
– 编一个大程序, 期末提交, 占最终成绩的30%
Lu Chaojun, SJTU
4
第1章 计算与计算思维
计算机:硬件(1)
CPU 输入设备 主存储器 输出设备
输出
思考:为什么高级语言程序具有可移植性,即同一个程序 可以在不同厂商的计算机上执行?
算法与编码实现
• 程序;
伪代码
– 再用形式化的编程语言将上述算法实现—— 程序.
代码
算法例:欧几里德算法
• 欧几里德算法:求最大公约数. 输入:自然数a、b 输出:a、b的最大公约数 步骤: 第1步:令r为a除以b所得余数 第2步:若r=0,则算法结束,b即为答案;否则 置a←b,b←r,转到第1步.
– 通用/跨平台/开源/自由(免费) – 简单易学,高度的可读性 – 支持多种编程范型
• 编译+解释:源代码先编译成字节码,再解释执行
• 流行编程语言前10名之一.
/index.php/content/paper info/tpci/index.html
Lu Chaojun, SJTU
对算法的要求
• 算法的每个步骤必须是明确的,可行的.
– 不明确:"在菜中放点盐" – 不可行:"用青菜豆腐做出龙肝凤髓的美味" – 每个步骤不必是最底层的琐细步骤,可以是 组合的高级步骤.如:"焯水"
• 算法的步骤必须在有限时间内完成. • 我们说的计算,即是指"算法计算":用明确 可行的基本步骤组成的序列来解决问题.
– 抽象:将现实中的各种数量关系,空间关系,处 理过程抽象为计算机的数据结构和控制结构
例如:温度数据抽象为数值还是文字?
– 不同抽象层次
• 问题表示得合适与否直接影响问题的解 法的发现和效率
Lu Chaojun, SJTU
20
计算思维例:算法设计
• • • • 化难为易:分解,约简,嵌入,转换,模拟... 分治法,递归法,贪心法,动态规划... 递归地思考 并行处理
– 不是狭义的数学计算!
• 程序使得简单指令完成复杂任务.
– 问:只会加法的小学生能完成乘法运算任务吗? – 答:能!关键是编写合适的程序