董笑菊 电子信息与电气工程学院 计算机科学与工程系

Slides:



Advertisements
Similar presentations
分享人:張益源. 個人資料介紹 姓名:張益源 畢業:體育系 97 級 專長:田徑、籃球、游泳 任教學校:慈濟大學實驗國民小學 學校職務:體育兼資訊老師.
Advertisements

定 格 入 格 破 格 —— 新诗仿写复习训练 仿照下列句子,再把 “ 人生 ” 比喻成 “ 大海 ”“ 天空 ” , 造两个句子。 如果说人生是一首优美的乐曲,那么痛苦则 是其中一个不可或缺的音符。 参考答案: 1 、如果说人生是一望无际的大海,那么挫折则 是其中一个骤然翻起的浪花。 2 、如果说人生是一片湛蓝的天空,那么失意则.
2.1 算法与程序 2.2 结构化程序设计方法简介 2.3 结构化程序的描述 2.4 简单程序分析.
C/C++ 程序设计 吉林财经大学 管理科学与信息工程学院 李艳东 : Tel :
1 网站设计理念 大连理工大学创新实验学院 优秀网站展示 - LAMP 类网站
瀛洲 —— 信 — 难求 天姥 —— 或 — 可睹: 以五岳、赤城、天台作比 写天姥山的地理位置和山势,是入梦 之由。 海客谈瀛洲,烟涛微茫信难求;越人 语天姥 ,云霞明灭或可赌。天姥连天向天 衡,势拔五岳掩赤城。天台一万八千丈, 对此欲倒东南倾。
梵谷的一生 Van Gogh ( ).
广州宜家选址分析 0连锁 李若谷 陈玉风 黄小飞 蓝柔盈.
僑泰高級中學 By: 高中部 三年四班 羅君瑛 資訊科 二年乙班 羅泰傑 電子科 二年甲班 許振崑.
对应用型本科建设中若干问题的认识 张家钰
第一章 十六世紀中葉以前的臺灣與原住民 第一節 考古發掘與史前文化.
近年来,出现了一些制作粗糙、违背史实甚至常理的“抗战雷剧”,社会上也出现了一股“戏说”抗战剧的不良风气。
數學家介紹 儒勒·昂利·龐加萊 沈孝權 6C25.
行政法 之 行政救济篇.
遊程規劃實務 中華民國遊程規劃設計協會.
量化vs質性研究分析 量化vs質性研究分析 報告人:王秀民.
自 我 介 紹 班級:運促一乙 姓名:林以權 學號:D
台塑石化 與 全國 之 財務分析 :企管二甲、乙 班級 指導 :楊雪蘭 老師 :第六組 組別 組員
資訊及 通訊科技 (ICT).
唐宋傳奇、筆記小品和史書、論著中的寓言 中碩二 吳佳樺.
浪漫 碰撞 蜕变 专题八 19世纪以来的文学艺术.
德国波恩明斯特广场修建的贝多芬铜像( 1845年)
兒童期 7 青春期 兩性圓舞曲 乘客:七年級同學 司機:張立杰老師.
2、太阳系大家族 制作:李青华.
银联无跳转支付产品.
职业生涯设计 尝试就有可能 尝试就有可能 -----我的美好人生 院系:经 济 系 专业:06级市场营销 姓名:周 庆 波 院系:经济系
工業與資訊管理學系 設立宗旨 研究領域 教育目標 培養具管理知識、創新思維、解決問題能力之工業與資訊管理領導人才。
師大通識教育 我的學思歷程: 類比通識教育 胡勝正 中央研究院
星星知我心 談古話今….. ……..觀星望斗 主講人: 陽光青春美少男.
Web Programming 網際網路程式設計
反垃圾掩埋場相關報告 組長:文煊 組員:鄭侃文 李浩暐 胡育睿 李瑞耘 朱祐賢 林承宇.
Fortran — 世界上推出的第一种高级程序设计语言 谢建勤(电子与信息工程学院)
计算机与程序.
2014年度企业所得税业务培训 蚌埠市地方税务局所得税科.
第八課 蓼莪.
年度校樹選拔秀 主辦單位:楊梅國小.
第九章日治時期的台灣(下).
初中语文总复习 说明文 阅读专题 西安市第六十七中学 潘敏.
"性"不"性"由你 性別平等之探討 北屯國小 張文陵.
第一節 進入職場前的準備 第二節 培養求職能力 第三節 當前的就業趨勢 第四節 新世代工作地圖
組員: 洪暐翔、 賴峻毅 侯家豪、 賴琦穎 指導老師: 王惠鈴 老師
第7章 行政监督.
企业所得税年度纳税申报表(2014年版)培训 国家税务总局公告2014年第63号
市级个人课题交流材料 《旋转》问题情境引入的效果对比 高淳县第一中学 孔小军.
程序设计思想与方法入门篇 庄天红.
欢迎再次走进 思想政治的课堂.
网络游戏对大学生生活的影响 英本1班 鞠申镅 汪晨茹 沈秋云 元文杰 段祺琪.
转正述职报告 乐恩公司 史航
走自立自强之路 自己的事情自己做.
人類的循環系統.
把握命题趋势 ★ 科学应考 实现最后阶段的有效增分
第十二章 生产与费用循环审计.
用字母表示数 A=X+Y+Z 执教:建阳市西门小学 雷正明.
实践 课题 周围环境对当代大学生成长的影响 指导老师:王永章 小组成员:陈荣、刘若楠、张红艳、吕雪丹、樊金芳、李惠芬、黄婧
作文: 记一次活动.
三角形的邊角關係 大綱:三角形邊的不等關係 三角形邊角關係 樞紐定理 背景知識:不等式 顧震宇 台灣數位學習科技股份有限公司.
2018/9/19.
台中市不動產經紀人職業工會 不動產經紀營業員 複訓班
Python入门培训演示 系统测试部 叶华 文件级别:公开
Python ——谁说简洁就不能强大? Gingko Studio.
一、選擇題 ( )1、下列敘述何者錯誤? (A)由彈弓射出的石子具有能量 (B)一物體具有作功的本領,則此物具有能 量 (C)被壓縮的彈簧具有能量,被拉長的彈簧 則不具有能量 (D)將地面的重物,吊到高處則此物具有能 量。 C.
两种不同类别的软件: 功能预定义软件;用户驱动的软件。他们对软件工程方法有不同的需求
Python联合服务器的使用.
第二次课后作业 计算对象的实现—存储 请给出R语言和Python语言中哪些值是可存储值,哪些值是不可存储值?
Javascript 基础 面向非JS语言的开发人员.
大数据应用人才培养系列教材 Python语言 刘 鹏 张 燕 总主编 李肖俊 主编 刘 河 钟 涛 副主编.
4.1 概 述 4.2 组合体视图绘制方法 4.3 组合体的尺寸标注 4.4 组合体视图的读图方法
30 歲前 一定要做的21件事.
Presentation transcript:

董笑菊 电子信息与电气工程学院 计算机科学与工程系 程序设计思想与方法 董笑菊 电子信息与电气工程学院 计算机科学与工程系

教师信息 办公地点:电院楼群3号楼519室 电话:34205060转602 E-mail dong-xj@cs.sjtu.edu.cn xjdong@sjtu.edu.cn 网址 http://basics.sjtu.edu.cn/~xiaoju/CT

助教 唐翔 作业 请确定通过Python验证后上传到助教指定的ftp帐号中 截止时间:每个星期三晚上10点之前 tangxiang@sjtu.edu.cn 作业 请确定通过Python验证后上传到助教指定的ftp帐号中 截止时间:每个星期三晚上10点之前

课程信息 教材 参考书 《程序设计思想与方法——问题求解与计算思维》 陆朝俊,高教出版社,2013 Python Programming: An Introduction to Computer Science. (电子版) How to Think Like a Computer Scientist—Learning with Python.(电子版) http://openbookproject.net/thinkCSpy/ Python学习手册 第4版 (原版:Learning Python)

课程信息 下载python 软件的地址 Purdue University的课件地址: https://www.python.org/ http://secant.cs.purdue.edu/ cs190c:textsoft09

教学方式 课堂教学 机房上机 - 每星期四3, 4节 讲课, 演示 单周(3-15周,共7次) 周一1, 2节, 电院4号楼313教室 完成当天上机作业并提交 答疑

考核方式 期末考试 平时作业 自选作业 笔试, 占最终成绩的50% 上机作业、章节后的作业 ftp上传给助教, 占最终成绩的40% 编一个大程序, 期末提交, 占最终成绩的10% 7

第1章 计算与计算思维

问题的提出 当今时代,计算机几乎无处不在: 问题:计算机究竟是什么?怎么能做这么多不同的事情? 企业管理 产品设计 气象预报 电影制作 工业控制 游戏, 写文章, 上网, …… 问题:计算机究竟是什么?怎么能做这么多不同的事情? 9

计算机: 硬件(1) 主存储器 CPU 输入设备 输出设备 次级存储器

计算机:硬件(2) 中央处理器(CPU):执行指令 存储器: 存储信息(程序和数据) 输入/输出设备:人机交互 每条指令只能完成简单的操作! 例如: 加法, 比较, 移动, etc. 但按一定的次序执行大量简单指令能完成复杂任务! 存储器: 存储信息(程序和数据) 主存: CPU能直接访问,速度快但易失 次级存储器:速度慢但持久 输入/输出设备:人机交互 11

计算机:软件 计算机是信息处理机器,信息处理过程由预定的程序控制. 各种程序统称为计算机软件. 没有软件的计算机毫无用处. 单条指令是做不了什么事情的,需要大量指令组成一个逐步执行的指令序列,即程序. 各种程序统称为计算机软件. 没有软件的计算机毫无用处. 12 12 12

计算 计算: 利用计算机执行程序来解决问题. 程序使得简单指令能完成复杂任务. 不是狭义的数学计算! 问:只会加法的小学生能完成乘法运算任务吗? 答:能!关键是编写合适的程序 在纸上写下0,记住结果; 给所记结果加上第1个n,记住结果; 给所记结果加上第2个n,记住结果; …… 给所记结果加上第m个n,记住结果; 报告结果(即m×n) 13

通用计算机 计算机是具有如下特征的机器: 人们造了各种各样的计算机, 但: 所有计算机具有相同的能力! 能够存储和处理信息 输入处理输出 信息处理由程序控制 计算机程序是一个详细的逐步执行的指令序列,告诉计算机该做什么 程序可改变: 不同的程序完成不同的处理任务 计算机执行一个程序即可实现一个功能;换着执行不同的程序即可实现不同的功能. 人们造了各种各样的计算机, 但: 所有计算机具有相同的能力! 14 14 14

计算机科学 并非研究计算机! CS研究计算的基础,实现与应用. 本课程的目标:像计算机科学家一样思考 计算机之于计算机科学家正如望远镜之于天文学家. (E. W. Dijkstra) CS研究计算的基础,实现与应用. 例如,CS的一个基本问题:什么是可计算的? 本课程的目标:像计算机科学家一样思考 15

程序设计 计算的关键是程序设计(编程). 学习程序设计的好处: 给定一个问题,利用计算机支持的简单操作,设计出一个操作步骤的序列,计算机执行这个序列从而解决问题. 学习程序设计的好处: 做计算机的主人 提高问题求解能力 本身是很有乐趣的智力活动

程序设计语言 问:用什么语言告诉计算机做什么? 答:用精确无歧义的程序设计语言. 精确的语法和语义(形式和意义) 17

程序设计语言 有不同层次的程序设计语言 计算机的“母语”: 机器语言 将机器语言用助忆符表示:汇编语言 适合人用的语言: 高级语言 例如: 0000010000000001.是Intel8086能理解的一条指令 将机器语言用助忆符表示:汇编语言 上例即: ADD AL,1.需要汇编器处理后机器才懂 适合人用的语言: 高级语言 如: x = y + 1. 需要编译器或解释器翻译后机器才懂 18

高级语言 高级程序设计语言有很多种, 据说2008年网上被引用最多的10个语言是(按字母顺序): C, C++, C#, Java, JavaScript, Perl, PHP, Python, Ruby, SQL. 19

程序设计语言 高级语言的翻译 编译 源代码编译成目标代码, 再执行 一次编译, 多次执行. 解释 源代码直接被解释执行 每次执行都要重新解释. 20

编译vs解释 思考:为什么高级语言程序具有可移植性, 即同一个程序可以在不同厂商的计算机上执行?

Python Python采用编译/解释混合方式 安装Python 2.x 启动Python 先编译成字节码, 再解释执行 22

算法与编码实现 程序设计 先用非形式化的语言将问题求解步骤表达出来——算法; 伪代码 再用形式化的编程语言将上述算法实现——程序 代码

算法 例:欧几里德算法 欧几里德算法:求最大公约数. 输入:自然数a, b 输出: a, b的最大公约数 步骤: 第1步:令r为a除以b所得余数 第2步:若r = 0,则算法结束, b即为答案 否则置a←b, b←r,转到第1步.

对算法的要求 算法的每个步骤必须是明确的,可行的. 算法的所有步骤必须在有限时间内完成. 不明确:"在菜中放点盐" 不可行:"用青菜豆腐做出龙肝凤髓的美味" 每个步骤不必是最底层的琐细步骤,可以是组合的高级步骤.如:"焯水" 算法的所有步骤必须在有限时间内完成. 我们说的计算,即是指"算法计算":用明确可行的基本步骤组成的序列来解决问题.

计算思维 计算思维(computational thinkin 如何像计算机科学家一样思考? 计算机科学家利用计算机(计算过程)解决问题时的思想和方法 计算机科学(CS)是关于“计算”的科学 如何像计算机科学家一样思考? 26

真的有计算思维吗? 人们在解决不同问题时有不同的思考方式 计算思维:建立在计算机的能力与局限之上. 数学思维:解数学问题 工程思维:工程设计 形象思维:文学创作 ...... 计算思维:建立在计算机的能力与局限之上. 由于计算机的广泛应用,计算思维未来会成为人们的基本能力. 与阅读,书写,算术能力一样!

计算思维 例:问题表示 问题的表示(建模) 问题表示得合适与否直接影响问题的解法的发现和效率 抽象:将现实中的各种数量关系,空间关系,处理过程抽象为计算机的数据结构和控制结构 例如:温度数据抽象为数值还是文字? 不同抽象层次 问题表示得合适与否直接影响问题的解法的发现和效率

计算思维 例:算法设计 化难为易: 分解, 约简, 嵌入, 转换, 模拟… 分治法, 递归法, 贪心法, 动态规划... 递归地思考 并行处理

计算思维 例:编程实现 类型系统与类型检查 结构化与模块化的思考 编程范型:过程式,面向对象,函数式,... 程序美学,系统设计的简洁与优雅

计算思维 例:计算理论 算法复杂度分析 问题的解法是有效率差别的 有些问题是难解的 寻求近似解 问题的可计算性 有些问题是不可计算的

计算思维 例:其他 预取和缓存 对最坏情况的预防,保护,恢复 启发式推理 时空等不可兼得要素的权衡 ……

计算思维的特点 是概念化思考,而非编程 是基本思考能力,而非机械的套用 是人的思考,而非计算机 与数学思维和工程思维相结合 是思想,而非人造物 人人皆有,处处皆是

生活中的计算思维 算法:最大公约数 查找方法:查黄页是顺序翻找还是借助索引 排序:整理扑克牌 排队:先来先处理 预取与缓存:书包存放当天上课用的书 并行处理:烧菜 ……

计算 + X 计算数学,计算几何,自动定理证明 计算物理学 计算化学 计算生物学,生物信息学 计算经济学 计算机艺术:电影特效,计算机作曲绘画书法 ……

计算+X: 十二五863计划 征集重大应用软件课题 聚变与裂变能源数值模拟 真实飞机外型全流场和优化设计数值模拟 航天飞行器全飞行流域数值模拟 新药研发与蛋白质折叠数值模拟 真实感动漫渲染与创作 大型工程设备结构力学分析 复杂电磁环境数值模拟 新型材料设计与性能评估

2013年诺贝尔化学奖 多尺度复杂化学系统模型:在多尺度模型的辅助下,化学家们让计算机“做帮手”来揭示化学过程. 诺贝尔化学奖评选委员会:对化学家来说,计算机是同试管一样重要的工具,计算机对真实生命的模拟已为化学领域大部分研究成果的取得立下了“汗马功劳”

本课程的定位 学习利用计算机解决问题的思想方法,应用于其他专业领域 不是程序设计语言课程! 不是算法和数据结构课程! 编程是计算思维的实践 坏消息:学习编程语言需要掌握非常繁琐的细节 好消息:Python语言非常简单,易学易用 不是算法和数据结构课程! 会学习一些基本的知识

本课程的定位(续) 数学 计算思维 理,化,生... 计算机科学 经,管,金融... 工程 可计算性理论 程序设计语言 算法设计与分析 数据结构 艺术

Python语言 荷兰人Guido van Rossum于1980年代发明 编译+解释 源代码先编译成字节码,再解释执行 通用/跨平台/开源/自由(免费) 简单易学,高度的可读性 支持多种编程范型 编译+解释 源代码先编译成字节码,再解释执行

Python语言 流行编程语言前10名之一 http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html

Python安装与运行 版本:教材和上课都采用Python 2.7 安装后,启动Python解释器 与最新的Python 3.x有不兼容的地方. 安装后,启动Python解释器 命令行 GUI

第一个程序:HelloWorld 交互方式 >>> print "Hello, World!" Hello, World! 本课程的教学中常用交互方式演示新语句 实际上很少用交互方式执行程序 多次执行同一程序需要多次输入程序 多行语句无法一次性执行

第一个程序:HelloWorld 程序文件 将语句保存在纯文本文件hello.py中 四种执行方式 在IDLE中用Run Module菜单执行 双击hello.py文件图标 >>> import hello C:\Python27> python hello.py print "Hello, World!"

程序构件:数据 数据是被处理的信息 有不同类型的数据 字符串数据 >>> print "Hello, World!" 数值数据 >>> print 3.1415

程序构件:变量 和数学类似:用一个名字表示可变的数据 标识符:Python命名 良好的命名风格:有意义,风格一致 数学中多用单字母,程序中多用单词/词组 标识符:Python命名 以字母或下划线开头,后跟0个或多个字母,数字,下划线.区分大小写字母. 合法: x xYz x_123 _ __ _w3 非法: 3q x-123 first name 良好的命名风格:有意义,风格一致

程序构件:表达式 表达式:能计算出一个值. 运算符 良好编程风格:用空格,括号增加表达式的可读性 字面值: 3.14, “hello” 变量 数据+运算符(如    ) >>> 2+3*4-5 运算符 不同类型的数据有不同运算 运算符有优先级 良好编程风格:用空格,括号增加表达式的可读性

程序构件:语句 输出语句 赋值语句 我们用语句模板来给出正确用法 print <表达式> >>> x = 3.14 >>> print x * 10

程序构件:函数 多条语句构成一个整体,并命名 习惯上为程序定义一个主函数main >>> def greet(): print "Hello!" print "Goodbye!" >>> greet() Hello! Goodbye! 习惯上为程序定义一个主函数main

程序构件:注释 程序中可以使用注释,用于解释变量用途,函数功能等等信息. 注释是给人看的,对程序执行没有作用,被编译器/解释器忽略 # Author: John # Version: 1.0 def main(): .... 注释是给人看的,对程序执行没有作用,被编译器/解释器忽略 良好的编程风格:多用注释!

End