计算机导论 指导教师:杨建国 二零零九年九月.

Slides:



Advertisements
Similar presentations
2014 年浙江省数量资料 华图网校 刘有珍 数字推理 年份题量数字规律 三级等差 2. 和递推 3. 幂次修正 4. 倍数递推 5. 倍数递推 6. 特殊差级 7. 倍数递推 8. 倍数递推 9. 积递推 10. 分数数列
Advertisements

佛教陳榮根紀念學校 姜曉霞老師、吳麗媚老師 元朗區小學教師發展日 二年級喜閱寫意校本整合 寫作教學.
While 迴圈 - 不知重複執行次數
司 法 考 试 题 2002年——2009年.
第八章 互换的运用.
2013届高考复习方案(第一轮) 专题课件.
行政诉讼法.
親愛的老師您好 感謝您選用本書作為授課教材,博碩文化準備本書精選簡報檔,特別摘錄重點提供給您授課專用。 說明: 博碩文化:
服务热线: 菏泽教师招聘考试统考Q群: 菏泽教师统考教育基础模拟题解析.
江苏省2008年普通高校 招生录取办法 常熟理工学院学生处
计算学科的基本问题 本章首先介绍一个对问题进行抽象的典型实例——哥尼斯堡七桥问题。然后,通过“梵天塔”问题和“停机问题”分别介绍学科中的可计算问题和不可计算问题。从“梵天塔”问题再引出算法复杂性中的难解性问题、P类问题和NP类问题,证比求易算法,P=NP是否成立的问题。
第一章 运动的描述  .
2011年广西高考政治质量分析 广西师范大学附属外国语学校 蒋 楠.
第一单元 生活与消费 目 录 课时1 神奇的货币  课时2 多变的价格 课时3 多彩的消费.
用问题激发学生的思维 \.
第23课时 现代中国的科学技术与 文化教育事业.
知识回顾 1、通过仔细观察酒精灯的火焰,你可以发现火焰可以分为 、 、 。 外焰 内焰 焰心 外焰 2、温度最高的是 。
第五章 经纪业务相关实务.
2016届高三期初调研 分析 徐国民
死與生的自我掌握.
数据结构(C语言版) Data Structure
大数的认识 公顷和平方千米 角的度量、平行四边形和梯形 四年级上册 三位数乘两位数 除数是两位数的除法 统计.
财经法规与会计职业道德 (3) 四川财经职业学院.
相持时双方的拉力一定大小相等,方向相反;当甲方齐心协力把绳子缓缓朝他们方向拉过去的时候,甲方的拉力一定比乙方大吗?
了解太平天国运动的主要史实,认识农民起义在民主革命时期的作用与局限性。
面向海洋的开放地区——珠江三角洲 山东省高青县实验中学:郑宝田.
第五章 电流和电路 制作人 魏海军
第一章 民法概述 一、民法概念 P4 二、民法的调整对象 三、民法的分类 四、民法的渊源 P10 五、民法的适用范围(效力范围)
发展心理学 王 荣 山.
“08高考化学学业水平(必修科目)测试的命题和教学对策研究”
出入口Y27 往塔城街口/中興醫院 出入口Y25 往延平北路一段/中興醫院 出入口Y23往延平北路一段 出入口Y21往延平北路一段
高考第二轮复习课件 东莞中学松山湖学校 丁文韬
第4章 选择结构程序设计 在现实生活中,需要进行判断和选择的情况是很多的 如果你在家,我去拜访你 如果考试不及格,要补考
第四章第一节 增值税法律制度2 主讲老师:梁天 经济法基础.
第七章 财务报告 主讲老师:王琼 上周知识回顾.
C语言程序设计 第十二章 位运算.
高级语言程序设计 主讲人:陈玉华.
循环结构又称为重复结构:用来处理需要重复处理的问题,它是程序中一种很重要的结构。
第4章 选择结构程序设计 4.1 选择结构和条件判断 4.2 用if语句实现选择结构 4.3关系运算符和关系表达式
If … else 選擇結構 P27.
第七章 函数 目录 有参的加法函数的开发 函数定义的一般形式 函数参数和函数的值 函数的调用
QQ: 李祥 QQ: 欢迎多种方式的学习交流,祝大家学有所成.
如何寫工程計畫書 臺北市童軍會考驗委員會 高級考驗營 版.
計數式重複敘述 for 迴圈 P
东北林业大学 陈宇 ACM程序设计 东北林业大学 陈宇
第4章 顺序程序设计.
第0章作业: 教材P12-练习与实践 1.写出用符号’*’输出描绘汉字”大”的流程图。
比與比值 比例式 應用問題 自我評量.
《2015考试说明》新增考点:“江苏省地级市名称”简析
§1.5 分块矩阵.
C语言概述 第一章.
乘法公式 (1) 乘法分配律 (2) 和的平方公式 (3) 差的平方公式 (4) 平方差公式.
变 阻 器 常州市北郊初级中学 陆 俊.
苏 教 版 五 年 级 数 学(上) 用字母表示数 青阳体仁小学 胡春雅.
第1章 绪论 2019/4/16.
材料二甲 授課教師:王致傑 老師 (學420、分機5305)
第一章 程序设计和C语言 主讲人:高晓娟 计算机学院.
第五章 相交线与平行线 三线八角.
電子白板百萬小學堂 本活動建議搭配電子白板 學生最多可分成2~6組(請按組別按鈕) 老師可以視時間多少,來進行活動 每一組要回答十個問題。
C程序设计.
第一章 C语言概述 教师:周芸.
資料結構與C++程式設計進階 遞迴(Recursion) 講師:林業峻 CSIE, NTU 6/ 17, 2010.
孟 胜 奇.
第十八章 平行四边形 平行四边形的性质 石家庄市第23中学 毛一鸣
程序设计基础.
第五章 逻辑运算和判断选取控制 §5.1 关系运算符和关系表达式
坚持,努力,机会留给有准备的人 第一章 四大金融资产总结 主讲老师:陈嫣.
PPT注意事项: 当前PPT课件文件必须和提供的源代码文件夹“代码”在同一目录中即不要移动文件夹“代码”的默认位置。
平面的基本性质 江苏省泰州中学 数学组 姜莹. 平面的基本性质 江苏省泰州中学 数学组 姜莹.
隨機函數.
Presentation transcript:

计算机导论 指导教师:杨建国 二零零九年九月

思考 问题七:大学生如何提高实践能力? 上课认真学 课后作业自己做(多看书多看网站多实践) 参加USRP、做老师的项目 培训 实习

李开复给程序员的七个建议 1.练内功:数据结构、算法、数据库、操作系统原理、计 算 机体系结构、计算机网络、离散数学等基础打实。 2.多实战:编程和调试并重。 3.求实干:一丝不苟、强烈的好奇心。 4.重视数学学习:离散数学、概率论、布尔代数、集合论和 数理逻辑。 5.培养团队精神:不能单打独斗、学会协作。 6.激励创新意识、培养好奇心、不要死记硬背:重要自己思 想的提高。 7.有策略的“打工”:实习机会也很重要。

贝贝,如果你一生可以做五个工作,你希望做哪五个工作 送给学生的话 它们需要哪些能力 贝贝,如果你一生可以做五个工作,你希望做哪五个工作 爱好、吃苦、认真、特长、乐观、交际 老师、省长、CEO、医生、记者

计算机算法 7.1 算法的发现 7.2 什么是算法 7.3 算法的表示 7.4 基本的算法 电子计算机,俗称电脑,是一种电子化的计算工具。在中国大陆也经常用计算机来指代电子计算机。就目前而言,电子计算机是根据预先设定好的程序来进行信息处理的一种设备。电子计算机分为巨型计算机(又称“超级计算机”)、大型计算机、中型计算机、小型计算机、微型计算机(简称“微机”,其中包括个人计算机,PC),已经逐步进入社会各个领域,尤其是进入了家庭和个人领域,极大地改变了社会的日常面貌。 从1930年代中期到1940年代后期,许多人在开发现代的、数字的、电子的,通用电子计算机。许多试验型的机器被造了出来并且可能是图灵完备化的。这些机器在当时都被宣称为第一台电子计算机,然而它们都只有有限的处理通用问题的能力,所以他们的设计最终都被抛弃了。 计算机发明于1946年。大约在1940—1942年间,在研制导弹的过程中,急需要有一种能迅速计算的工具,以便对导弹的飞行进行控制。在它偏离人所预测的轨道时,把它拉回到轨道上来。这样就产生了能在1/10秒或1/100秒的时间内计算出导弹运行轨迹同预定轨道的偏差的电子计算机。电子计算机不以十进位制进行计算,而是用二进位制计算的。它的出现是当代世界上最大的发明之一。第一台计算机的发明者是一位名叫冯·诺埃门的数学家。

推荐阅读:程序员2006.4《算法的力量》 内容简介 《算法导论(原书第2版)》一书深入浅出,全面地介绍了计算机算法。对每一个算法的分析既易于理解又十分有趣,并保持了数学严谨性。本书的设计目标全面,适用于多种用途。涵盖的内容有:算法在计算中的作用,概率分析和随机算法的介绍。本书专门讨论了线性规划,介绍了动态规划的两个应用,随机化和线性规划技术的近似算法等,还有有关递归求解、快速排序中用到的划分方法与期望线性时间顺序统计算法,以及对贪心算法元素的讨论。本书还介绍了对强连通子图算法正确性的证明,对哈密顿回路和子集求和问题的NP完全性的证明等内容。全书提供了900多个练习题和思考题以及叙述较为详细的实例研究。   《算法导论(原书第2版)》一书内容丰富,对本科生的数据结构课程和研究生的算法课程都是很实用的教材。本书在读者的职业生涯中,也是一本案头的数学参考书或工程实践手册。   在有关算法的书中,有一些叙述非常严谨,但不够全面,另一些涉及了大量的题材,但又缺乏严谨性。《算法导论》将严谨性和全面性融为一体。   《算法导论(原书第2版)》一书深入讨论各类算法,并着力使这些算法的设计和分析能为各个层次的读者接受。各章自成体系,可以作为独立的学习单元。算法以英语和伪代码的形式描述,具备初步程序设计经验的人就能看懂。说明和解释力求浅显易懂,不失深度和数学严谨性。   《算法导论(原书第2版)》一书自第1版出版以来,已经成为世界范围内广泛使用的大学教材和专业人员的标准参考书。第2版增加了论述算法作用、概率分析与随机算法、线性规划等几章。同时,对第1版的几乎每一节都作了大量的修订。一项巧妙而又重要的修改是提前引入循环不变式,并在全书中用来证明算法的正确性。在不改变数学和分析重点的前提下,作者将许多数学基础知识从第一部分移到了附录中,并在开始部分加入了一些富有诱导性的题材。  ★经典的算法书,被卓越网,《程序员》等评选为2006年最受读者喜爱的十大IT图书之一。  ★算法领域的标准教材,全球多所知名大学选用  ★MIT名师联手铸就,被誉为“计算机算法的圣经”  ★编写上采用了“五个一”,即一章介绍一个算法、一种设计技术、一个应用领域和一个相关话题。 作者简介   本书的四位作者均是算法领域的大师级人物,Thomas H. Cormen,Charles E. Leiserson和Ronald L. Rivest是MIT的教授,Clifford Stein是MIT的博士,现在哥伦比亚大学做教授,四人姓氏的首字母联在一起即是此书的非常酷的英文简称(CLRS 2e)。其中第三作者Ronald L. Rivest更是RSA算法的老大(算法名字里面的R即指他),并因此获得过图灵奖。 媒体推荐 书评 在有关算法的书中,有一些叙述非常严谨,但不够全面,另一些涉及了大量的题材,但又缺乏严谨性。《算法导论》将严谨性和全面性融为一体。   本书深入讨论各类算法,并着力使这些算法的设计和分析能为各个层次的读者接受。各章自成体系,可以作为独立的学习单元。算法以英语和伪代码的形式描述,具备初步程序设计经验的人就能看懂。说明和解释力求浅显易懂,不失深度和数学严谨性。   本书自第1版出版以来,已经成为世界范围内广泛使用的大学教材和专业人员的标准参考书。第2版增加了论述算法作用、概率分析与随机算法、线性规划等几章。同时,对第1版的几乎每一节都作了大量的修订。一项巧妙而又重要的修改是提前引入循环不变式,并在全书中用来证明算法的正确性。在不改变数学和分析重点的前提下,作者将许多数学基础知识从第一部分移到了附录中,并在开始部分加入了一些富有诱导性的题材。

一位商人有8枚银元,其中有1枚略轻的是假银元。姑娘您能用天平(不用砝码)将假银元找出来吗? 【面试真题一】 妈呀你管谁叫姑娘呢!人家是纯爷们儿! 一位商人有8枚银元,其中有1枚略轻的是假银元。姑娘您能用天平(不用砝码)将假银元找出来吗?

还是出道题考考你吧!听好了!东方明珠大概要多少个乒乓球垒积起来? 这叫什么题啊?这叫谁谁也回答不了!我…… 【面试真题二】 还是出道题考考你吧!听好了!东方明珠大概要多少个乒乓球垒积起来? 这叫什么题啊?这叫谁谁也回答不了!我……

源代码 【面试真题三】 把23、3、465、2、57、561、36、35 变成以下形式 的二维数组: 23 3 465 57 36 561 23 3 465 57 36 561 35 这是典型的桶排序算法, 假设有9个桶,每个桶里存放N个数字。桶应该是唯一的。 所以推出结论: 1。桶是唯一的(我们因此可以利用Hashtable的唯一性来做到); 2。桶内成员可以不排序,因此可以利用数组或者Vector来做到; 3。Hashtable需要主键key来唯一标识,正好数字1~9是不重复的,是唯一的; 3。把每个数值的第一位取出来,以第一位值做为key找到hashtable中的相应vector,再将vector.addElements(该数值); 4。完成; 具体做法: 1.生成桶,9个桶,每个桶以数字1~9做为主键命名 Hashtable table=new Hashtable(); for(int i=1;i<10;i++){ Vector vector=new Vector(); table.put(new String(i), vector); } 2. 遍历每个数字,将当前数字的第一位分解出来,办法有很多种,比如除十法,这里介绍直接转字符串再取第一位法: 假设你的要处理的数字们放在数组里面int[] tmp; for(int i=0;i<tmp.length;i++){ int num=tmp[i]; String str=new String(num); char ch=str.charAt(0); //压入到桶里,先把想要的桶找到,利用主键 Vector vect=(Vector)table.get(""+ch); //找到桶后再把数值压到桶里 vect.addElements(new Integer(num)); } //取出来的时候,有多种方法,一种是利用key取出Vector,再遍历Vector,得到其中元素,元素的key为String, 内容为Integer 另一种方法是先遍历hashtable再遍历vector 同样的应用还有给一幅被洗过的扑克牌进行升或降排弃,因此可以建13个桶(A~K),每个桶内的牌再按花色排序(相当于对Vector排序,也可以不用Vector而直接用数组或者ArrayList等等) 我看了你的修改提问,现回答如下: 即使不能使用java己经封装好的Hashtable类,自己也可以很轻易地利用代码编写出类似于Hashtable的集合类,用来包容其它对象,并以主键key来唯一标识. 如果你不想这样思考,那么直接用数组来实现桶排序也很方便,外层数组长度是固定的,即1~9共9个数组元素 Elements e=new Elements[9]。 这九个数组元素不是数字,必须是你自定义的类。并用这个类形成链表结构 比如: public class Element{ int data;//存数字 Element next=null;//下一个元素是谁 } 比如有数字 51,52,53 这三个数都是以5打头,那么他们应该放在一个桶里面,即第五号桶,也就是外层数组的第个元素中。 if( 判断该数字,是否应该放在5号桶){ Elements tmp=new Elements(); tmp.data=该数字; Elements current=e[4]; if(current==null){current=tmp;}//如果该桶以前从未放过数字,则放进去的就是头部,直接引用就行了,比如51应该放在头部 else{//如果该桶以前己经放过数字,如51,己经放了,现在放52。52就应该做为51的next元素,而53就是52的next就行了 while(current!=null){current=current.next;}//遍历,从而取到最后一个元素的引用 //取到最后一个元素后,current=tmp;即可,这样就形成了链表结构 } } 通过上述代表形成的结果是, 外层结构是9个元素组成的数组 每个数组元素是Elements类对象形成的链表结构,有头有层通过next字段串连起来。 如果要排序,只需要对每个链表内部进行排序就可以了 源代码

著名计算机科学家沃思( Niklaus Wirth ) 程序=数据结构+算法 描述对数据的操作步骤 描述数据的类型、组织形式 著名计算机科学家沃思( Niklaus Wirth )

我也不知道,让我们去学习吧…… 程序的灵魂是什么? 您真棒! 三毛,计算机的灵魂是什么? 软件的灵魂是什么 软件 程序 算法 海宝,算法的灵魂是什么?

7.1 算法的发现 算法(Algorithm)由九世纪数学家al-Khwarizmi的名字翻 译而来 它初期的概念是指解决问题或执行任务的确定的过程 1842年,Ada Byron为他设想的自动计算器写了世界上第 一个算法。但这算法未能被真正实现,因为Aba Byron未能 造出他的自动计算器 现代意义上的计算机算法的概念是在1936年Alan Turing 提 出现代计算机的基本模型图灵机之后才清晰起来 算法是解决问题或执行任务的过程;它能够一步一步地在 图灵机或等价的机器(如现代的计算机)上执行

小胖,很多网民还不懂程序与算法的关系,你说说 算法常常是用伪程序、自然语言、程序语言、硬件描述 由此可见,算法的本质是问题解决过程的概念,而相应 的程序只是一种它的表述 小胖,很多网民还不懂程序与算法的关系,你说说 程序就是算法的衣服,是其中衣服的一件

7.2 什么是算法 7.2.1 什么是算法 解决某一特定问题的一组有序的、明确的、可执行的、可终 止的步骤集合

7.2.2 算法特性 输入:有零个或多个 输出:至少一个 确定性:组成算法的每条指令清晰、无歧义 有限性:每条指令执行次数有限,执行每条指令的时间有限 可行性:算法是能行的 程序是算法用程序语言的具体实现,程序可以不满足有限性

7.2.3 算法的评价 正确性 健壮性 性能性(效率与低存储量) 可读性 扩充性 维护性

7.2.4 算法的复杂性计算 时间复杂性:与问题规模、算法输入及算法本身相关 的 操作次数的总和,常记为T(n) 渐进时间复杂性: 问题规模逐渐增大后时间复杂度的极 限形式 如果存在一个常数C>0,一个算法能够在Cn2的时间内处 理完规模大小为n的输入,则该算法的时间复杂性记为 O(n2),称作n2级

7.2.5 算法的分类 数值运算算法、 非数值运算算法 串行算法、并行算法 确定性算法、随机算法 描述算法的方法:文字、图形(符号)

7.2.6 算法研究的典型问题 分类 排序 搜索(图片、视频) 遍历 集合运算

7.2.7 描述算法设计的一般过程

算法常用设计方法: 循环法 递归法 分治法 贪心法 动态规划 线性规划 搜索与枚举 启发式搜索

7.2.8 学习算法的方法 数学家的方法 工程师的方法 【典型例题】:货郎担问题 某售货员要到若干个城市销售货物,已知各城市之间 的距离,要求售货员选择出发的城市以及旅行路线,使每 个城市仅仅过一次,最后回到出发城市,而路程最短

7.3 算法的表示 7.3.1 为什么要设计算法表示 好好学习 好 读 书 不 好 读 书 不

7.3.2 带序号的自然语言描述 易懂却不直观,不严格 【例题】计算1到100的和 1. 0=>s单元 2. 1 => n单元 3. s+n =>s 4. n+1 =>n 5.判断n100?是,转3;否则转6 6.输出s的值

7.3.3 流程图-UML 灵活、自由、形象、直观,可表示任何算法 流程线 输入/输出 处理 判断 起止 连接点 【例题】计算1到100的和 开始 结束 0=>s 1=>n s+n =>s 输出s n+1=>n n100? T F 【例题】计算1到100的和

特点:完全去掉了带箭头的流程线,算法所有处理步骤 都写在一个大矩形框(表示简单、符合结构化思想) 7.3.4 N-S图(盒图) 特点:完全去掉了带箭头的流程线,算法所有处理步骤 都写在一个大矩形框(表示简单、符合结构化思想) A B P T F 处理 判断 循环 【例题】计算1到100的和 0=>s 1=>n n100? s+n =>s n+1=>n 输出s的值

7.4.5 伪代码 用介于自然语言与计算机语言之间的文字及符号来描述算法 方便、易懂、便于向计算机语言过渡 【例题】计算1到100的和 0=>s 1=>n if n100 s+n =>s n+1=>n print s

7.4.6 PAD图 P1 P2 C Pn P A 或 while c until c b 选择结构 d 循环结构 c 多选择结构 X=… Ln P A 或 while c until c 输入输出 重复 子算法 定义 选择 语句标号 处理

【例题】输入年份,判断该年是否为闰年 算法开始 算法结束 x {输入年份} x是400的倍数 或者 x是4的倍数但不是100的倍数 “x是闰年” “x不是闰年”

7.4 基本的算法 7.2.1 求和 【例题】1到100的奇数之和 #include <stdio.h> 这个程序对吗? int main() { int i,sum=0; for (i=1;i<=100;i++) sum=sum+i; i=i+2; } printf("sum= %d \n",sum); 这个程序对吗? #include <stdio.h> int main() { int i,sum=0; for (i=1;i<=100;) sum=sum+i; i=i+2; } printf("sum= %d \n",sum);

#include <stdio.h> int main() { int a=1,b=99,sum=0; for (;a<=b;) sum=sum+a+b; a=a+2; b=b-2; } printf("sum= %d \n",sum); 这个程序对吗? #include <stdio.h> int main() { int a=1,b=13,sum=0; for (;a<=b;) sum=sum+a+b; if(a==b) sum=sum-a; a=a+2; b=b-2; } printf("sum= %d \n",sum);

7.2.2 乘积 【面试真题】利用递归调用手段编程计算N! #include <stdio.h> int main() { int i,n,sum=1; scanf("%d",&n); for (i=1;i<=n;i++) sum=sum*i; } printf("sum= %d \n",sum);

#include <stdio.h> int main() { int n; int find(int i); scanf("%d",&n); printf("%d \n",find(n)); } int find(int i) int n,val=1; for(n=i;n>1;n--) val*=n; return val;

#include <stdio.h> int main() { int n; int find(int n); scanf("%d",&n); printf("n!=%d \n",find(n)); } int find(int n) if(n==1) return 1; else return find(n-1)*n;

7.2.3 最大和最小 【面试真题】四个数从小到大输出来 #include <stdio.h> int main() { int t,a,b,c,d; scanf("%d",&a); scanf("%d",&b); scanf("%d",&c); scanf("%d",&d); if(b>a) { t=a; a=b; b=t; } if(c>a) { t=a; a=c; c=t; } if(d>a) { t=a; a=d; d=t; } if(c>b) { t=b; b=c; c=t; } if(d>b) { t=b; b=d; d=t; } if(d>c) { t=c; c=d; d=t; } printf("%d,%d,%d,%d \n",a,b,c,d); }

7.2.4 排序 1.选择排序:先找一个最小的交换,然后在剩下的找最小的交换 【例题】把下列的数字从小到大排列:23,78,45,8,32,56 第一次: 8 78 45 23 32 56 第二次: 8 23 45 78 32 56 第三次: 8 23 32 78 45 56 第四次: 8 23 32 45 78 56 第五次: 8 23 32 45 56 78

2.冒泡排序:依次比较相邻的两个数,将小数放在前面,大数 放在后面 【例题】把下列的数字从小到大排列:23,78,45,8,32,56 第一次: 23 45 8 32 56 78 第二次: 23 8 32 45 56 78 第三次: 8 23 32 45 56 78 冒泡排序在最初被编写为将列表中最大元素“向下冒泡”,PPT是将最小元素“向上冒泡”,其实思想一样,PPT这样讲是为了方便与插入排序和选择排序相比较。 【思考】如果上面的例题每次找最小的排在前面,则每次 怎么排序?

3.插入排序:先取第一个,然后取第二个,把前面两个排序,然后 取第三个,把前三个排序,按照如此方法排序,就像插牌 【例题】把下列的数字从小到大排列:23,78,45,8,32,56 第一次: 23 78 45 8 32 56 第二次: 23 78 45 8 32 56 第三次: 23 45 78 8 32 56 第四次: 8 23 45 78 32 56 第五次: 8 23 32 45 78 56 第六次: 8 23 32 45 56 78

4.快速排序: 5.堆排序: 6.希尔排序: 7.桶式排序: 8.合并排序: 9.基排序:

1.顺序查找:先从第一个数比较,然后第二个,直到相等 7.2.5 查找 1.顺序查找:先从第一个数比较,然后第二个,直到相等 【例题】找到62:4,21,36,14,62,91,8,22,7,81,77,10 第一次: 4 21 36 14 62 91 8 22 7 81 77 10 第二次: 4 21 36 14 62 91 8 22 7 81 77 10 第三次: 4 21 36 14 62 91 8 22 7 81 77 10 第四次: 4 21 36 14 62 91 8 22 7 81 77 10 第五次: 4 21 36 14 62 91 8 22 7 81 77 10

2.折半查找:数据有顺序。先从数中间比较,然后看是大了还 是小了,然后再找从中间到另一半的中间的数进行比较, 一直这样比较,直到找到 【例题】找到22:4,7,8,10,21,22,36,62,77,81,91 第一次: 4 7 8 10 21 22 36 62 77 81 91 第二次: 4 7 8 10 21 22 36 62 77 81 91 第三次: 4 7 8 10 21 22 36 62 77 81 91 第四次: 4 7 8 10 21 22 36 62 77 81 91

7.2.6 子算法 结构化编程的原则要将算法分成几个单元,称为子算法, 每个子算法又分为更小的子算法,如选择排序

7.2.7 递归 迭代:如果算法的定义没有包含算法本身 递归:如果算法的定义包含算法本身

作业题 1.编写一个程序,输入m、n,打印最小公倍数和最大公约 数。用五种方法写出其算法的描述。 2.试用递归的方法写一下计算菲波那契数列的通项f(n), 已知f1=1,f2=1,以后每项都是前两项的和。 3.用折半查找1,2,3,4,5,6,7,8,9,10,11,12, 13,14,15怎么找到10,请画图表示查找过程。 4.用三种方法对下列数字排序:12,3,4,5,8,7,15, 9,10,1,11,14,6,13,2,请画出排序过程。 5.算法的灵魂是什么? 6.用C语言写出选择排序、冒泡排序、插入排序、顺序查找 和折半查找的程序(选做)。

附录:编程典型例题 1.write a program that prompt the user to specify the size of a t-shirt: S for small,M for medium,L for large and X for extra large.The prices are $10,$20,$30 and $40,respectively.Display the price of a chosen size. Eg. PromptString.java

2.write a program that displays even integer values from 1 to 20. Eg. DisplayEven.java

3.输入一个华氏温度,要求输出摄氏温度。公式为c=5(F-32)/9,输出要求有文字说明,取2位小数。 Eg. DisplayTemperature.java

4.编写一个程序,输入a、b、c、d,输出其中最大者。 Eg. DisplayMax.java

5.有一函数 y= x (x<1) y= 2x-1 (1≤x<10) y= 3x-11 (x≥10) 写一程序输入输出值。

6. 打印出所有"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该本身。例如:153是一个水仙花数,因为153=1^3+5^3+3^3。

7.一个数如果恰好等于它的因子之和,这个数就称为"完数"。例如,6的因子为1、2、3,而6=1+2+3,因此6是"完数"。编程序找出1000之内的所有完数,并按下面格式输出其因子:6 its factors are 1、2、3 。

8.有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13…求出这个数列的前20项之和。

9.一球从100米高度自由下落,每次落地后返回原高度的一半,再落下。求它在第10次落地时共经过多少米?第10次反弹多高?

10.猴子吃桃问题。猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。第二天早上又将剩下的桃子吃掉一半,又多吃一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘多少桃子。

11.打印以下图案      *      *** ***** ******* ***** *** *

12.编写一个程序,将100-200之间的素数打印出来。

13.编写一个程序,输入m、n,打印最小公倍数和最大公约数。

14.给一百分制,要求输出成绩等级‘A’、’B’、’C’、’D’、 ’E’。90分以上为‘A’,80~89分为’B’,70~79分为’C’,60-69分为’D’,60分以下为’E’ 。

15.给定一个不多于5位的正整数,要求: 求它是几位数 分别打印出每一位数字 按逆序打印出各位数字,如原数为321,应输入123

16.输入4个整数,要求按由大到小的顺序输出。 Eg. DisplaySort.java

17.输入一行字符,分别统计出其中英文字母、空格、数字和其他字符的个数。

18.求Sn=a+aa+aaa+…+aaa…a(a的个数为n)之值,其中a是一个数字。例如2+22+222+2222+22222(此时n=5),n由键盘输入。

21.用公式      求π 。

22.德国数学家:【哥德巴赫猜想】的验证 。 任一大于或等于6的偶数,总可分解为两个素数(质数)之和。 要求键盘输入一个不小于6的偶数N,然后输出6--N之间的这些哥德巴赫关系式:6=3+3,8=3+5,.....(每行输出一个式子)。 素数=质数,判断素数的方法:用3与该数的平方根之间的所有奇数去除这个数,均不能被整除者,即为素数。

23.把一个两位的素数接到另外一个两位的素数后,得到一个四位数,而这个四位数可以被这两个素数之和的一半整除,求出所有这样的素数对。 两个素数不应相同 运行结果:53,13,47,19,43,23,37,29

24.(1)一框鸡蛋,每次取2、3、4、5、6个时分别剩下一个,每次取7个时不剩。问这框鸡蛋至少有多少个? (2)一座七层宝塔,自上而下,每一层的灯都是上面一层灯的2倍,共有381盏灯。问每一层各有多少盏灯?

25.从小到大找出5个素数,使后面的数都比前面的数大12

26.打印出斐波纳契列前20个数,并计算它们的和。这个数列的特点是:第一个数为0,第二个数为1,第三个数是前二个数之和,以后的每个数都是它前面两个数之和,即:0,1,1,2,3,5,8,13……

27.找出1-99之间全部同构数。 同构数是这样一组数,它出现在平方数的右边 例如:5是25右边数,25是625右边的数,5和25都是同构数

28.输入一个字符,如果它是一个大写字母,则把它变成小写字母;如果它是一个小写字母,则把它变成大写字母;其它字符不变。

28.计算一元二次方程ax2+bx+c=0的根。

29.任意输入一年,判断是否是闰年。 闰年的条件是:能被4整除但不能被100整除的年是闰年,能被400整除的年也是闰年。

30.输入三角形三边,判断是否能组成三角形,若可以则输出它的面积和三角形的类型。

31.求一个整数任意次方的最后三位数,即求xy的最后三位数,要求x,y从键盘输入。