收藏 分享(赏)

【最新】星火杯讲座ppt模版课件.ppt

上传人:微传9988 文档编号:3433972 上传时间:2018-10-28 格式:PPT 页数:50 大小:485.50KB
下载 相关 举报
【最新】星火杯讲座ppt模版课件.ppt_第1页
第1页 / 共50页
【最新】星火杯讲座ppt模版课件.ppt_第2页
第2页 / 共50页
【最新】星火杯讲座ppt模版课件.ppt_第3页
第3页 / 共50页
【最新】星火杯讲座ppt模版课件.ppt_第4页
第4页 / 共50页
【最新】星火杯讲座ppt模版课件.ppt_第5页
第5页 / 共50页
点击查看更多>>
资源描述

1、星火小组系列讲座 程序设计入门,褚华 西安电子科技大学软件所,让我们先感受一段程序做为开始吧我怎样才能达到这种境界?,我应该具有,扎实的基础 数据结构、离散数学、编译原理 丰富的想象力 不要拘泥于固定的思维方式 丰富的想象力是建立在丰富的知识的基础之上 最简单的是最好的 相同的代码永远不要写两遍,学习程序设计的一般步骤,读抄改写,认真读,仔细抄,随意改,经常写,写好代码的十个秘诀,1.集百家之长,归我所用(Follow Basic Coding Style) 2.取个好名字(Using Naming Conventions) 3.凌波微步,未必摔跤(Evil goto? Maybe Not)

2、4.先发制人,后发制于人(Practice Defensive Coding) 5. 见招拆招,滴水不漏(Handle The Error Cases: They Will Occur!),6. 熟悉剑法刀术,所向无敌(Learn WIN32 API Seriously) 7. 双手互搏,无坚不摧(Test, but dont stop there) 8. 活用断言(Use, dont abuse, assertions) 9. 草木皆兵,不可大意(Avoid Assumptions) 10. 最高境界,无招胜有招(Stop writing so much code),写好代码的十个秘诀,集百

3、家之长,归我所用(Follow Basic Coding Style) 代码能够清晰地表达你的思路 代码应该具备自解释能力 代码的缩进和排版规范 所有的函数和变量应用他人容易理解的名字 减少单个函数的长度,控制在50-100行以内 多使用枚举和常量定义(不要从天上掉下一个数字来),写好代码的十个秘诀,凌波微步,未必摔跤(Evil goto? Maybe Not) goto的使用应该遵循原则,而不是全盘否定 不用写高深晦涩的语句,不要一味追求性能忽视代码的可读性 模式并不总是正确的,写好代码的十个秘诀,先发制人,后发制于人(Practice Defensive Coding) 尽量保持代码的简洁

4、和简单 调用其他接口和函数时现对返回值进行检查 避免有符号/无符号、32位/16位、被零除等误算情况,写好代码的十个秘诀,见招拆招,滴水不漏(Handle The Error Cases: They Will Occur!) 通过异常处理机制来保证程序代码的健壮性 异常处理中一定要注意资源的释放 异常处理要关注日志的详细记录,便于后续BUG分析 不要把后台编码或系统异常直接抛给用户 熟悉剑法刀术,所向无敌(Learn WIN32 API Seriously) Win32 API是Windows平台编程的根本 对系统强大的类库的熟悉和整理将事半功倍,写好代码的十个秘诀,双手互搏,无坚不摧(Tes

5、t, but dont stop there) 如果你没有进行测试,你完成的代码将仅仅是个半成品 尽可能多地对自己的代码进行测试 编码人员应该更专注于白盒测试和单元测试 要善于使用Junit、Nunit、PureCoverage、Compuware、Ncover等测试工具 相互间的Review和走查是对代码可维护性的重要测试手段 有特殊性能要求时需要对相关功能或模块单独进行性能测试,写好代码的十个秘诀,活用断言(Use, dont abuse, assertions) 断言可以很好的描述假设和不可能情况 断言对程序Debug很有用,可以尽早地发现程序问题 草木皆兵,不可大意(Avoid Ass

6、umptions) 考虑到用户使用的各种场景 不用假设用户会正确地输入数据,要做好各种完整性和便捷的检验 程序中70%左右的代码是为了保证这种完整性服务的,正常条件下的功能可能30%代码就实现了,写好代码的十个秘诀,最高境界,无招胜有招(Stop writing so much code) 不要一味地拷贝粘贴代码 编码过程注意重用,函数级组件级系统级 通过重构持续改进代码质量,改进自我逻辑思维,程序设计的一般步骤,第一步:透彻地分析和理解所要解决的问题 第二步:解决这个问题的主要步骤(解题方法) 第三步:关键操作,以及操作之间的关系(程序的逻辑结构) 第四步:把这些操作翻译成某种程序设计语言的

7、源代码(程序的实现),程序设计的一般步骤,第一步:透彻地分析和理解所要解决的问题 第二步:解决这个问题的主要步骤(解题方法) 第三步:关键操作,以及操作之间的关系(程序的逻辑结构) 第四步:把这些操作翻译成某种程序设计语言的源代码(程序的实现),在没有透彻地理解问题之前,一定要抑制住写代码的冲动!,从理论走向实践 练习一: 年级学生成绩管理系统,基本要求,按照教师,学生,管理员三种角色设计系统功能; 班级管理功能(管理员):班级的添加,修改,删除班级功能; 学生管理功能(管理员):登记,修改,删除某班某个学生的基本信息,可以一次导入某班全部学生信息; 成绩管理功能(老师):登记,修改某个学生某

8、门课成绩,可以一次导入某班全部学生成绩。 成绩查询功能(全部用户):每个学生可以查询自己所有课程的成绩。教师可以查询所带班级的成绩,可以对成绩进行排序和统计。管理员可以查询全年级所有学生所有课程的成绩并进行排序和统计,所有人都可以浏览各个班级的公共信息。,基本需求,主要功能,登记各班的学生基本情况 插入某班某个学生的基本情况 修改各班学生基本情况 删除学生基本情况 登记各班所有学生各门课的成绩 修改某个学生某门功课的成绩 浏览各班信息 查找,浏览每个学生的基本信息 查找,浏览每个学生的成绩信息 成绩的排序和统计 ,关键数据,年级 年级编号、班级数 班级 班级编号、教室、人数 学生 学号、班级、

9、姓名、性别、年龄、电话 课程 课程编号、名称、学分、学时、开课学期、开课类型(必、限、任) 课程成绩 学号、课程编号、平时成绩、考试成绩、最终成绩 用户权限(三种角色:教师、学生、管理员) 用户名、密码、权限,关键数据,设计的重点:数据之间的关系,实现提示,从简单到复杂,从部分到全面 可以逐个功能实现 先给出一个简单的实现,然后再逐渐补充完整 尽量将数据(学生信息、课程信息、课程成绩等)放在文件中 考虑异常情况下的处理 扩展 把数据放在数据库(例如Access)中,从理论走向实践 练习二: 航空客运订票系统,基本需求,航班信息修改 航班信息查询 多种查询方式:航班号、起点、终点、起飞时间、到达

10、时间等 起点与终点间存在多条航线时,要求输出费用最小的航线(直航以及需要中转的航线) Dijkstra算法(单源点最短路径) 订票 退票,图论基础知识,图的定义 图的存储结构 图的应用 遍历:广度优先遍历、深度优先遍历 图的连通性:最小生成树(Prim算法、克鲁斯卡尔算法) 拓扑排序 关键路径(AOV网) 最短路径,图的定义,图G = (V, E),其中 V是顶点集合; E是V中顶点偶对的有穷集,这些顶点偶对被称为边或弧; V(G):顶点集合 E(G):边集合,图的存储结构,邻接矩阵(数组表示) 邻接表(链表表示) 十字链表 邻接多重表 边表,邻接矩阵,基本思想 对于有n个顶点的图,用一维数组

11、vexsn存储顶点信息,用二维数组Ann存储顶点之间关系的信息。该二维数组称为邻接矩阵。 在邻接矩阵中,以顶点在vexs数组中的下标代表顶点,邻接矩阵中的元素Aij存放的是顶点i到顶点j之间关系的信息。,邻接矩阵,无向图,顶点表,邻接矩阵,邻接矩阵,存储结构,#define MAX 100 struct vertex int num; / 顶点编号char data; / 顶点信息 ; struct Graph vertex vexMAXMAX; / 顶点集合int edgesMAXMAX; / 边 ;,邻接链表,基本思想: 对图的每个顶点建立一个单链表,存储该顶点所有邻接顶点及其相关信息。

12、第i个单链表表示依附于顶点Vi的边(对有向图是以顶点Vi为头或尾的弧)。,邻接链表,链表中的结点称为表结点,每个结点由三个域组成, 邻接点域adjvex:指示与顶点Vi邻接的顶点在图中的位置(顶点编号) 链域nextarc:指向下一个与顶点Vi邻接的表结点 数据域info:存储和边或弧相关的信息,如权值等。,邻接链表,每个链表设一个表头结点(称为顶点结点): 链域firstarc:指向链表中的第一个结点 数据域data:存储顶点名或其他信息。,邻接链表,邻接链表,存储结构,#define MAX_VEX 30 /* 最大顶点数 */ typedef int InfoType; typedef

13、struct LinkNode int adjvex ; / 邻接点在头结点数组中的位置(下标)InfoType info ; / 与边或弧相关的信息, 如权值struct LinkNode *nextarc ; / 指向下一个表结点 LinkNode ; /* 表结点类型定义 */typedef struct VexNode VexType data; / 顶点信息int indegree ; / 顶点的度, 有向图是入度或出度或没有 LinkNode *firstarc ; / 指向第一个表结点 VexNode ; /* 顶点结点类型定义 */,邻接链表,存储结构,typedef stru

14、ct ArcType VexType vex1, vex2 ; /* 弧或边所依附的两个顶点 */InfoType info ; / 与边或弧相关的信息, 如权值ArcType ; /* 弧或边的结构定义 */ typedef struct int vexnum ;VexNode AdjListMAX_VEX ; ALGraph ; /* 图的结构定义 */,最短路径,问题: 两地之间是否有通路? 若存在多条通路,哪条路最短? 两点之间的最短路径问题 单源点最短路径:求从某个源点到其余各点的最短路径( Dijkstra算法) 每一对顶点之间的最短路径(Floyd算法),单源点最短路径,给定带权

15、有向图G = (V,E)及源点Vs,求Vs到G的其余各顶点的最短路径。 Dijkstra提出了一种按路径长度递增的次序产生最短路径的算法,即Dijkstra算法。,Dijkstra算法,设给定源点为Vs,S为已求得最短路径的终点集,开始时令S = Vs 。当求得第一条最短路径(Vs ,Vi)后,S为Vs,Vi 。 求下一条最短路径:设下一条最短路径终点为Vj ,则Vj只有: 源点到终点有直接的弧; 从Vs 出发到Vj 的这条最短路径所经过的所有中间顶点必定在S中。,Dijkstra算法,定义一个数组distn disti表示当前所找到的从Vs出发到Vi的最短路径的长度 下一条最短路径的终点Vj

16、必定是不在S中且值最小的顶点,即: distj = Min disti| ViV - S 利用上述公式就可以依次找出下一条最短路径。,Dijkstra算法的步骤, 令S = Vs ,用带权的邻接矩阵表示有向图,对图中每个顶点Vi按以下原则置初值:,单源点最短路径, 选择一个顶点Vj ,使得: distj=Min disti| ViV-S Vj就是求得的下一条最短路径的终点,将Vj 并入到S中,即S = SVj 。 对V-S中的每个顶点Vk ,修改distk,方法是: 若distj+Wjk distk,则修改为: distk = distj + Wjk (VkV-S ) 重复,直到S = V为止

17、。,算法实现,对下面的带权有向图,用Dijkstra算法求从顶点0到其余各顶点的最短路径。,#define MAX_VEX 30 /* 最大顶点数 */ BOOLEAN finalMAX_VEX ; int preMAX_VEX , distMAX_VEX ; void Dijkstra_path (AdjGraph *G, int v)/* 从图G中的顶点v出发到其余各顶点的最短路径 */ int j, k, m, min ; for ( j = 0; j vexnum; j+) prej = v ; finalj = FALSE ;distj = G-adjvj ; /* 各数组的初始化

18、*/distv = 0; finalv = TRUE ; /* 设置S=v */for ( j = 0; j vexnum-1; j+) /* 其余n-1个顶点 */ m = 0 ;while (finalm) m+; /* 找不在S中的顶点vk */min = INFINITY ; for ( k = 0; k vexnum; k+) if (!finalk /* 修改dist和pre数组的值 */ /* 找到最短路径 */ ,从实践上升到理论,总结,养成良好的编码习惯,你面试时的一小段代码就足以展示你的全部陋习。 熟练使用各种辅助工具,但不要全部依赖工具,最主要是学习分析和设计的思考方式。

19、 注重单元测试,关注程序性能,可维护性,可测试性是编码技能提升的重要手段。,总结,不要钻牛角尖!当你遇到障碍时,不妨暂时远离电脑。 对答案的渴求。 多与别人交流,三人行必有我师。 韧性和毅力。这也许是“高手”和一般程序员最大的区别。,职业开发人员要回答的一组问题,所开发的第一个/最近一个被用户认可的程序。 开发得最得意/最失意的程序。 开发的最大/最小的程序。 开发时间最长/最短的程序。 开发效率最高/最低的程序。 运行效率最高/最低的程序。 用户反映最好/最不好的程序。,职业开发人员要回答的一组问题,合作人数最多的程序。 寿命最长/最短的程序。 使用语言最多的程序。 经验/教训最多的程序。 抽象程度最高/最低的程序。 自我感觉最好、用户反映最差的程序。,不断地回答这些问题,你会发现自己在进步。,谢谢大家!,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 实用文档 > 教育范文

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报