01 C++ (Dynamic Array, Sort & STL)

Slides:



Advertisements
Similar presentations
猜谜语 有个小娃娃,真是没 礼貌。 见到小树摇一摇,吓 得树叶哇哇叫。 见到小花逗一逗,摘 去她的太阳帽。 没人和它交朋友,只 好自已到外处跑。
Advertisements

佛教陳榮根紀念學校 姜曉霞老師、吳麗媚老師 元朗區小學教師發展日 二年級喜閱寫意校本整合 寫作教學.
口試準備及口語表達技巧 民國 98 年 2 月 26 日 12:00pm 國立三重高中 陸芳瑜老師 1.
台東縣健康城市規劃研究 台東大學侯松茂教授. 2 3 本縣健康城市的總目標 瞭解本縣各項健康城市指標之現有資料、並進一 步資料分析以評估現況 瞭解本縣民眾對健康城市的期待,落實社區進而 規劃適合本縣之健康指標 建立產官學及縣市政府各業務單位之合作模式 提擬本縣健康城市計畫白皮書及各單位年度配合 計畫.
2013年华兴教育 广州中考志愿填报分析.
强力打造湖北农业信息网 全面推进湖北农村信息化
黄金时代 黄金时代:老子,释迦牟尼,苏格拉底,孔子,庄子,耶稣…… 他们是人类智慧的顶峰,他们用人生展示了智慧与慈爱。
黄帝内经 内经教研室 王黎.
Mission 01.
职官与科举 职官:在国家机构中担任一定职务的官吏,这里面有职官的名称、职权范围和品级地位等方面的内容。
眼影的学习.
花开有日 芬芳天下 “国培计划(2012)” ——幼儿园骨干教师远程培训项目 山东幼儿园教师8班第4期简报 主办人:张瑞美     
《卖火柴的小女孩》 《海的女儿》 你 认 识 这 些 图 片 的 故 事 吗 《丑小鸭》 《拇指姑娘》 它们都来自于哪位作家笔下?
高中研究性学习简介 九江三中科研处: 曹荣星 2011、5、20.
授课教师:江星玲 1.
民主國家的政府體制 我國的中央政府體制 我國中央政府的功能 地方政府組織與功能
肖 冰 深圳市达晨创业投资有限公司 副总裁 深圳市达晨财信创业投资管理公司 总裁
銷售與顧客關係管理 巫立宇.邱志聖 著.
20、豆花庄的小家伙们.
问道电商、网易(163.com)联合策划 千万电商卖家的双十一黄金档流量加油站 带领亿万网民消费者疯狂“玩转双十一”
中国好看的PPT模板网: 搜集整理发布
CH11 心理疾病 李志鴻.
华 夏 之 祖 第 3 课.
法學緒論第六單元:法律適用 設計課程︰ 財經法律系 --楊東連 法學緒論-6.
考研辅导讲座PPT 思想道德修养与法律基础 主讲:蒋中挺.
类 别 发 展 成 就 农业 的 发展 手工业的发展 商业的 繁荣 粮食作物 经济作物 纺织业 制瓷业 造船业 商业都市 对外贸易 货币
比爾蓋茲導讀.
食品营养成分的检验. 食品营养成分的检验 科学探究的一般过程: 形成假设 设计方案 收集数据 表达交流 处理信息 得出结论 探究:馒头和蛋糕中是否含有淀粉和脂肪 假设:馒头和蛋糕中含有淀粉和脂肪.
院長:鄭錦聰 教授 各系負責老師 光電系:姬梁文老師 電機系:張凱雄老師 資工系:謝仕杰老師 電子系:陳柏宏 老師
國民中小學教務(導)主任、教學(務)組長
CH1 . 集 合 与 命 题.
世界各国的经济支柱产业 09工商一班 收集资料:盛秀秀 09B 李艳君 09B
指導教授:林君憶老師 報告者:江秀英 日期: (三)
臺北市立松山家商 103學年度第1學期 學校日 教學說明 簡報
Ch19 創業精神 管理學:整合觀點與創新思維3/e.中山大學企管系 著.前程文化 出版.
愿:这个冬天不再寒冷! 甲流预防&冬日保健 外国语学院 校医院.
班級:觀光一B 姓名:李詩涵 座號: 18 指導老師:杜光玉
以考试说明带动二轮复习 福州第三中学 张璐.
期中考试后改薄工作督导点评 教务处 督导室.
運輸與空間的交互作用 運輸發展的階段 一、分散的港口 二、侵入路線 三、發展支線 四、初步相互連結 五、完全相互連結 六、高度優越的幹線
用智慧塑造形象 以修炼打造“合金” ——谈学生干部的形象塑造与核心竞争力
马克思主义基本原理概论 第三章 人类社会及其发展规律.
跨越海峡的生命桥.
02 GUI & Scribble jjcao Based on the idea of Professor Ligang Liu.
行銷學概論 I 老師:李法興.
第ㄧ章 認識 VB 2008 與主控台應用程式 注意:本投影片僅供上課使用,非經同意,請勿散播或轉載。
第2章 建立Visual Basic應用程式 2-1 如何設計Visual Basic應用程式 2-2 建立主控台應用程式
Chapter 1 用VC++撰寫程式 Text book: Ivor Horton.
第二十九章 DLL / LIB函式庫開發 當我們開發程式到一個階段之後,我們一定會希望各個Component的程式碼可以分開的越清楚越好。而這一章最主要就是要告訴各位讀者,我們常在Windows系統中看到的dll或是lib的檔案該怎麼實作?做出這樣的library我們又該如何運用?為什麼使用dll或是lib有利於我們開發程式?以上這些疑問都將會在這一章中得到解答。
C++ 與 物件導向 程式設計概念簡介 魏天君 2018/12/3.
PPT宝藏_www.pptbz.com_提供下载.
软件学院 张 慧 清华大学软件学院.
第1章 概述 本章要点: C语言程序结构和特点 C语言程序的基本符号与关键字 C语言程序的编辑及运行 学习方法建议:
資料結構與C++程式設計進階班 課程大綱 講師:洪安.
第二节 极限 一、数列极限 定义:.
读秀中文学术搜索
Windows 程式設計 (使用 C++ / C#)
電腦軟體設計丙級 Visual Basic簡介 建國科技大學 資管系 饒瑞佶 2010年.
徐迎晓 复旦大学软件学院 实现模型 徐迎晓 复旦大学软件学院.
01 C++ (Dynamic Array, Sort & STL)
101下三年級【走進臺北城】 實施成果報告 日期: 報告者:張素苓、黃心怡.
4 S W O T 点击此处添加文本信息。 顶部“开始”面板中可以对字体、字号、颜色、行距等进行修改。建议正文10号字,1.3倍字间距。
序言 報告內容: 你對父母的感覺 你與父母的關係 你是否與父母同居 你與父母見面的時間 每天與父母的談話時間 與父母談話的內容 結論 感想.
注册建造师 《市政公用工程管理与实务》 环球网校 白老师 每个PPT都有对应的头和尾 PPT头包含内容:
蓝色PPT图示 1 2.
C++程序设计 概述 潘荣江 山东大学软件学院.
是一个搜索平台,整合电子书、纸书。 读秀中文学术搜索
C++程序语言设计 Chapter 14: Templates.
关于复旦大学体锻制度的调查报告 仇璐 宛蓉.
99 教育部專案補助計畫案明細 大類 分項 教育部補助 學校配合款 工作項目 計畫主 持人 執行期限 文號 備註 設備費 業務費 管理學院
Presentation transcript:

01 C++ (Dynamic Array, Sort & STL) 1-1 Basic Dynamic Array & Selection Sort jjcao Mostly Based on the assignment of Professor Ligang Liu

Coding environment Win32 Console Project (of Visual C++ 2010) Refer to (http://www.jjcao.net/c.html): 学习使用Visual C++ 2010环境开始编程:学习最简单的使用Win32 Console Project (类似于Turbo C中的环境),使用说明可见:https://skydrive.live.com/?cid=2832c42ad0503307&sc=documents&id=2832C42AD0503307%21545 01-1.2-Win32ConsoleApplication.pptx A_Console_Project.rar & Command_line_argument.rar

Coding Standard & Style 编写程序一定要养成良好的代码习惯。“程序不是写给自己看的,是写给别人看的”。 学习规范化编程,养成良好的习惯。可参考编程规范及技巧的文档: appendix1_ShortcutKey和appendix2_CodingStandard&Style in http://www.jjcao.net/c.html 注意:不同的团体、公司都有各自的编程规范,没有统一的编程规范。在编程训练的初期,只要选择自己喜欢的一套比较统一的编程规范来写即可,不必追求与上述文档完全一致的编程规范。以后随着编程水平的提高以及查看其他规范的代码后,可根据自己的喜好和合作团队的要求来不断调整自己的编程规范。

Essentials for high quality coding The Power of Variable Names, [McConnell2] ch11 Good Class Interfaces, [McConnell2] ch6.2 High-Quality Routines, [McConnell2] ch7 Defensive Programming, [McConnell2] ch8 Developer Testing, [McConnell2] ch22 Self-Documenting Code, [McConnell2] ch32 appendix2_CodingStandard&Style in http://www.jjcao.net/c.html

Why Dynamic Array 使用固定大小的数组,如 double a[100]; 有使用不方便的地方:数组大小固定,不灵活;如果程序使用的情况数组元素的个数多于100,则要改数组大小,然后重新编译程序;如果程序使用的情况数组元素的个数很少,则有大量的空间被浪费。  为了解决这个矛盾,可以使用动态分配内存空间的方法(需要对内存的动态分配的机制和原理了解和熟悉)

Basic Dynamic Array 采用一个指针p记录数组的头地址;采用一个整数n记录数据元素的个数 程序运行时,用多少个元素n,就从内存中申请多少空间来存储数组p;p所指向的内存空间的数组元素总是n。n一旦变化,p即申请新的空间用来存储数组(当然需释放掉以前的内存空间,以免造成内存泄漏)。这样,对数组的操作是通过一些函数来操作:这些函数就是对操作这个数组的“接口”。 上述的程序大概形式可见,or next page http://www.math.zju.edu.cn/ligangliu/Courses/DataStructure_2005-2006/SourceCodes/C2C++/Array0.rar

Implementation 0 // 检查输入参数的合法性 [McConnell2] ch8.1

Encapsulation 由于p 和 n之间有强烈的逻辑关系,自然可以用struct将它们“包”在一起处理,见: http://www.math.zju.edu.cn/ligangliu/Courses/DataStructure_2005-2006/SourceCodes/C2C++/Array1.0.rar http://www.math.zju.edu.cn/ligangliu/Courses/DataStructure_2005-2006/SourceCodes/C2C++/Array1.1.rar

Encapsulation // [McConnell2] ch10.3 Guidelines for Initializing Variables // [McConnell2] ch10.4 keep Variables “Live” for as Short a Time as Possible

More encapsulation 这时发现那些操作数组的接口函数,都是操作struct的数据,自然可以想到将这些函数“放”到struct里面。在struct中放函数在C中是不行的,但是在C++中是可以的。这样大概如下形式: http://www.math.zju.edu.cn/ligangliu/Courses/DataStructure_2005-2006/SourceCodes/C2C++/Array2.rar   此时发现,数据p,n及处理它们的函数都“包”在一起,放在一个struct中,这就是对它们的一种封装。用户只要操作这个struct的函数,就可以操作一个“数组”。

More encapsulation

A Simple Class for Dynamic Array 我们将关键词struct改为class,然后将函数的类型改为public,其他不变,这个程序就可以编译运行。这事实上就是一个简单的C++的程序,并且大致完成了一个class!见: http://www.math.zju.edu.cn/ligangliu/Courses/DataStructure_2005-2006/SourceCodes/C2C++/Array3.rar   在写C++程序时,一般一个类需要2个文件,一个头文件*.h(定义了这个类的接口),一个实现文件*.cpp(具体这个类的实现),见: http://www.math.zju.edu.cn/ligangliu/Courses/DataStructure_2005-2006/SourceCodes/C2C++/Array4.rar 希望上述过程好好体会一下。注意:上述的代码都不太符合编程规范,只是演示了大致的一个过程。你需按照严格的编程规范来完成该练习。

A template project with requirements 实现hw01_BasicDynamicArray_Template要求的动态数组 实现Selection Sort算法 学习使用VC2010debugger工具的基本功能(” appendix1_ShortcutKey” PPT的8-9页)来调试程序; 完成满足上述接口的动态数组(Dynamic array)的程序,递交工程文件(*.vcxproj, *.vcxproj.user, (旧的版本*.dsp)) 和源文件( *.h, *.cpp); 工程目录中的debug目录删除掉,其他文件压缩打包发给我,参照我们提供的code template。 评分标准 分数 程序成功运行(通过所有assert) 50 正确完成Selection算法 10 正确使用new/delete,不出现内存泄漏 需要遵循基本的编程规范和风格; 20 按时完整的提交项目文件,不包含无用文件 抄袭则 平均分配 成绩 =?/n hw01_BasicDynamicArray_Template in http://www.jjcao.net/c.html

通过完成该作业需达到的目标: 务必体会类(对象)的抽象和封装特性:数组抽象为通过各种操作来完成的一个“容器”。对象的特性完全是通过其“接口”(public函数)来表达的; 掌握和熟悉类的定义和语法,包括构造函数(缺省构造函数,重载构造函数,拷贝构造函数),析构函数,函数的重载; 熟悉动态内存的操作原理及其分配和释放,学会使用new/delete; 赋值操作符号"="的重载,操作符(如”[]”)的重载; 理解和使用预编译头的机制(在头文件(*.h)中使用“预编译#define #ifdef #endif”等来避免重复编译); 学会利用VC2010的debug工具来调试程序; 学会构造各种情况和极端情况来测试程序的鲁棒性。

学习编程的有效方法及TIPS 1 编程是很有用的,不论你以后是否从事计算机相关的工作,请相信:较强的编程能力都能对你未来有所帮助!因为它所提供的不仅是个思维的训练,而且还是解决问题的方法的训练。另外,编程能力能帮助你实现你的很多想法。如果你不能实现你的想法,就等于没有想法! 如果你对编程没有兴趣,甚至对编程有抵制情绪,请尽早告知(否则是在浪费你的时间,也是在浪费我的时间),我建议你别学C++编程了,做你自己喜欢做的事。生活中没有C++,也同样美好。 如果你觉得编程还挺有意思,首先需要有这个信念:学习编程比学习数学容易得多得多!能学好数学的同学一定能学好编程。 学习编程有一定的方法,需掌握好方法才能快速提高编程的能力!“方法不对,努力白费”! 不要像学数学那样来学习编程,即不要花很多时间(比如,花很多周,甚至1-2个月来研读某教材)来研究C++的各种语法特性;只要初步了解一定的基本语法,就可以开始动手写程序;通过边做边查找来体会各种知识。没有必要去研究(i+++++i)这种钻牛角尖的语句,因为没人会写出这种代码的!

学习编程的有效方法及TIPS 2 学习编程一定要有足够的时间(最好能在1-2个月之内集中)。如果你时间不够,先暂时不要学。 Mission Driven: 通过各种任务及目标的设定来学习编程是最有效的方法,如果,要相信我布置给你的一系列练习会在短时间给你很大的提高,甚至精通面向对象(C++)编程思想!(该方法的有效性已得到充分的验证) 正如骑自行车、游泳、说英语一样,编程是一种技能学习,而不能把它当作知识来学。只有通过动手来学习是正确的方法,光看书不动手是学不会的! 对于某个困难点,可通过自己的努力去解决;若一个问题长久时间还得不到解决,可能是陷入到一个思维定势,或者方法不正确,这时可寻求比你更有经验的人 or Google来帮助解决。在找人帮助解决的时候,最好能坐在他/她边上看他是如何解决的(包括设置断点、调试过程等),这样学到的东西最多。注意:不要太依赖与他人的帮助,不经过思考和失败而寻求他人的帮助对你是无效的!

学习编程的有效方法及TIPS 3 学习方法:首先找本较好的C++教材(比如你学习的教材,或者谭浩强编的教材),快速浏览且大致了解一下C++语言的语法,在脑子内有个大致印象;然后将教材当作参考书/字典,按照训练作业的要求一步一步去完成任务;若在参考书中找不到的话,可通过google或百度去搜索;若还有困难,可寻求周围更有经验的人的帮助。 希望在不久的将来,看到你已成为一名编程好手!如果你没有成为编程好手,那唯一可能的原因就是你并没有上心来学(没有兴趣、没有时间、或者没有投入)。当然,要成为高手,路还很长,这是一个不断探索和努力的过程,以后会跟你具体讲的! 快捷键的使用能很大程度上提高你的效率,可在平时有意识积累(不必在一次作业中全部掌握,需日积月累),以后会带给你巨大的价值。另外,建议你迫使自己键盘盲打,学会盲打同样会带给你巨大的价值。