20182308 2018-2019-1《程序设计与数据结构》课程总结
20182308 2018-2019-1《程序设计与数据结构》课程总结
每周作业链接汇总
-
- 认真学习考核方式,理解成绩构成;
- 认真学习课前准备,掌握学习方法;
- 作业一定按教学进程中的模板提交;
- 本周学习任务;
- 完成本周学习任务,并撰写博客;
-
第二、第三周作业
1.教材第2章
(1)编辑、编译、运行教材上代码,参考「积极主动敲代码,使用Junit学习Java程序设计」
(2)代码中不懂的内容仔细阅读教材,参考Java API帮助文档
(3)代码托管到git@OSC,
(4)完成课后自测题,并参考答案学习
(5)完成课后练习题
(6)完成程序设计项目:至少完成PP2.2, PP2.4, PP2.6, PP2.08, PP2.10
2.教材第3章
(1)阅读全文,编辑、编译、运行教材上代码
(2)代码托管到git@OSC,参考一下使用开源中国托管代码
(3)完成课后自测题,并参考答案学习
(4)完成课后练习题
(5)完成程序设计项目:至少完成PP3.1, PP3.3, PP3.5
3.完成上面两章,并撰写博客 -
第四周作业
教材4.8.1节和第5章:- 阅读全文,编辑、编译、运行教材上代码
- 代码托管到git@OSC,参考一下使用开源中国托管代码
- 完成课后自测题,并参考答案学习
- 完成课后练习题
- 完成程序设计项目:至少完成PP5.3, PP5.6, PP5.13
-
第五周作业
教材第8章
(1)阅读全文,编辑、编译、运行教材上代码
(2)代码托管到git@OSC,参考一下使用开源中国托管代码
(3)完成课后自测题,并参考答案学习
(4)完成课后练习题
(5)完成程序设计项目:至少完成PP8.2~PP8.8
- 完成上面内容,并撰写博客
-
第六周作业
教材第9章和教材第10章- 阅读课本章节内容
- 代码托管到码云上
- 完成课后自测题,并参考答案学习
- 完成课后练习题
- 完成程序设计项目,至少完成pp9.2,pp9.4,pp9.6,pp9.7,pp10.2,pp10.3
- 参考上面的学习总结模板,把学习过程通过博客(随笔)发表,博客标题“学号 《程序设计与设计结构》 第六周学习总结”。
-
第七周作业
教材第12章、第14章和教材第15章- 阅读课本章节内容
- 代码托管到码云上
- 完成课后自测题,并参考答案学习
- 完成课后练习题
- 完成程序设计项目,至少完成pp14.1,pp14.7,pp15.1,pp15.2
- 参考上面的学习总结模板,把学习过程通过博客(随笔)发表,博客标题“学号 《程序设计与设计结构》 第七周学习总结”。
-
第八周作业
教材第13章- 阅读课本章节内容
- 代码托管到码云上
- 完成课后自测题,并参考答案学习
- 完成课后练习题
- 完成程序设计项目,至少完成pp13.2,pp13.6
- 参考上面的学习总结模板,把学习过程通过博客(随笔)发表,博客标题“学号 《程序设计与设计结构》 第八周学习总结”。
-
第九周作业
教材第16章和第17章- 阅读课本章节内容
- 代码托管到码云上
- 完成课后自测题,并参考答案学习
- 完成课后练习题
- 完成程序设计项目,至少完成pp16.6,pp17.1
- 参考上面的学习总结模板,把学习过程通过博客(随笔)发表,博客标题“学号 《程序设计与设计结构》 第九周学习总结”。
-
第十周作业
教材第19章- 阅读课本章节内容
- 代码托管到码云上
- 完成课后自测题,并参考答案学习
- 完成课后练习题
- 完成程序设计项目,至少完成pp19.1,pp19.3
- 参考上面的学习总结模板,把学习过程通过博客(随笔)发表,博客标题“学号 《程序设计与设计结构》 第十周学习总结”。
自认为写得最好一篇博客是?为什么?
- 第九周学习总结
虽然之前写过许多篇幅更长,视觉效果更好的博客,但是那个时候还没有设置好博客园随笔的格式,不是Markdown。可以说第九周学习总结是我写的、属于Markdown格式的随笔中比较好的一篇了。
作业中阅读量最高的一篇博客是?谈谈经验
- 第一周学习总结
好像没什么经验之谈,只不过最初大家都对学习总结的博客没什么概念的时候,我比较早地交了这个博客而已。然而事实证明,我前期的随笔格式是有问题的,所以大概只能作为教训来保存吧。
实验报告链接汇总
-
实验一 实验名称:Linux基础与Java开发环境
- 简要内容:
- 基于命令行和IDE(Intellj IDEA 简易教程](http://www.cnblogs.com/rocedu/p/4421202.html)进行简单的Java程序编辑、编译、运行和调试。(本次实验主要使用命令行的方式)
- 练习Linux基本命令;
- 学习Java程序的JDB调试技能:https://www.cnblogs.com/rocedu/p/6371262.html
- 编写简单的Java程序。
- 简要内容:
-
实验二 实验名称:Java基础(数据/表达式、判定/循环语句)
- 简要内容:
- 编写简单的计算器,完成加减乘除模运算。
- 要求从键盘输入两个数,使用判定语句选择一种操作,计算结果后输出,然后使用判定和循环语句选择继续计算还是退出。
- 编写测试代码,测试验证。(https://www.cnblogs.com/rocedu/p/4472842.html)
- 简要内容:
-
实验三 实验名称:面向对象程序设计
- 简要内容:
- 下载安装并使用IDEA,完成下面实验(https://www.cnblogs.com/rocedu/p/6371315.html)。
- 初步掌握单元测试和TDD
- 理解并掌握面向对象三要素:封装、继承、多态(自己去学!)
- 初步掌握UML建模
- 完成蓝墨云上 (1)-(5)实验。
- 简要内容:
-
实验四 实验名称:Java Socket编程
- Java Socket编程
- 学习蓝墨云上教材《Java和Android编程》“第16章 输入/输出 ”和“第22章 网络”,学习JavaSocket编程
- 结对编程。结对伙伴A编写客户端SocketClient.java,结对伙伴B编写服务器端。
- 截图加学号水印上传蓝墨云,代码push到码云,并撰写实验报告。
- Java和密码学
- 以结对的方式完成Java密码学相关内容的学习(帖子中所有代码和相关知识点需要学习)。提交学习成果码云链接和代表性成果截图,要有学号水印。
- 编写有理数/复数计算器
- 远程有理数计算器
- 远程复数计算器
- Java Socket编程
-
实验五 实验名称:Android程序设计
- Android Stuidio的安装测试:
- 参考《Java和Android开发学习指南(第二版)(EPUBIT,Java for Android 2nd)》第二十四章:
- 参考http://www.cnblogs.com/rocedu/p/6371315.html#SECANDROID,安装 Android Stuidio
- 完成Hello World, 要求修改res目录中的内容,Hello World后要显示自己的学号,自己学号前后一名同学的学号,提交代码运行截图和码云Git链接,截图没有学号要扣分
- 学习Android Stuidio调试应用程序
- Activity测试
- 参考《Java和Android开发学习指南(第二版)(EPUBIT,Java for Android 2nd)》第二十五章:
- 构建项目,运行教材相关代码
- 创建 ThirdActivity, 在ThirdActivity中显示自己的学号,修改代码让MainActivity启动ThirdActivity
- UI测试
- 参考《Java和Android开发学习指南(第二版)(EPUBIT,Java for Android 2nd)》第二十六章:
- 构建项目,运行教材相关代码
- 修改代码让Toast消息中显示自己的学号信息
- 布局测试:
- 参考《Java和Android开发学习指南(第二版)(EPUBIT,Java for Android 2nd)》第二十七章:
- 构建项目,运行教材相关代码
- 修改布局让P290页的界面与教材不同
- 事件处理测试:
- 参考《Java和Android开发学习指南(第二版)(EPUBIT,Java for Android 2nd)》第二十八章:
- 构建项目,运行教材相关代码
- 提交代码运行截图和码云Git链接,截图要有学号水印,否则会扣分
- Android Stuidio的安装测试:
-
实验六 实验名称:线性结构之链表
- 链表练习,要求实现下列功能:
- 通过键盘输入一些整数,建立一个链表;这些数是你学号中依次取出的两位数,再加上今天的时间。
- 打印所有链表元素, 并输出元素的总数。
- 在你的程序中,请用一个特殊变量名来纪录元素的总数,变量名就是你的名字。
- 做完这一步,把你的程序签入源代码控制(git push)。
- 链表练习,要求实现下列功能:
- 实现节点插入、删除、输出操作;
- 继续你上一个程序, 扩展它的功能,每做完一个新功能,或者写了超过10行新代码,就签入代码,提交到源代码服务器;
- 从磁盘读取一个文件, 这个文件有两个数字。
- 从文件中读入数字1, 插入到链表第 5 位,并打印所有数字,和元素的总数。 保留这个链表,继续下面的操作。
- 从文件中读入数字2, 插入到链表第 0 位,并打印所有数字,和元素的总数。 保留这个链表,并继续下面的操作。
- 从链表中删除刚才的数字1. 并打印所有数字和元素的总数。
- 链表练习,要求实现下列功能:
- 使用冒泡排序法或者选择排序法根据数值大小对链表进行排序;
- 如果你学号是单数, 选择冒泡排序, 否则选择选择排序。
- 在排序的每一个轮次中, 打印元素的总数,和目前链表的所有元素。
- 在(2)得到的程序中继续扩展, 用同一个程序文件,写不同的函数来实现这个功能。
- 在android上实现实验(1)和(2)
- 在android平台上实现实验(3)
- 链表练习,要求实现下列功能:
-
实验七 实验名称:查找与排序
- 定义一个Searching和Sorting类,并在类中实现linearSearch,SelectionSort方法,最后完成测试。
- 要求不少于10个测试用例,提交测试用例设计情况(正常,异常,边界,正序,逆序),用例数据中要包含自己学号的后四位
- 提交运行结果图。
- 重构你的代码,把Sorting.java Searching.java放入 cn.edu.besti.cs1823.(姓名首字母+四位学号) 包中(例如:cn.edu.besti.cs1823.G2301)
- 把测试代码放test包中
- 重新编译,运行代码,提交编译,运行的截图(IDEA,命令行两种)
- 参考http://www.cnblogs.com/maybe2030/p/4715035.html ,学习各种查找算法并在Searching中补充查找算法并测试,提交运行结果截图
- 补充实现课上讲过的排序方法
- 希尔排序,堆排序,二叉树排序等(至少3个)
- 测试实现的算法(正常,异常,边界)
- 提交运行结果截图(如果编写多个排序算法,即使其中三个排序程序有瑕疵,也可以酌情得满分)
- 定义一个Searching和Sorting类,并在类中实现linearSearch,SelectionSort方法,最后完成测试。
-
实验八 实验名称:树
- 参考教材PP16.1,完成链树LinkedBinaryTree的实现(getRight,contains,toString,preorder,postorder)
- 用JUnit或自己编写驱动类对自己实现的LinkedBinaryTree进行测试
- 提交测试代码运行截图,要全屏,包含自己的学号信息
- 课下把代码推送到代码托管平台
- 基于LinkedBinaryTree,实现基于(中序,先序)序列构造唯一一棵二㕚树的功能,比如给出中序HDIBEMJNAFCKGL和后序ABDHIEJMNCFGKL,构造出附图中的树
- 用JUnit或自己编写驱动类对自己实现的功能进行测试,提交测试代码运行截图,要全屏,包含自己的学号信息
- 课下把代码推送到代码托管平台
- 自己设计并实现一颗决策树;提交测试代码运行截图,要全屏,包含自己的学号信息
- 课下把代码推送到代码托管平台
- 输入中缀表达式,使用树将中缀表达式转换为后缀表达式,并输出后缀表达式和计算结果
- 提交测试代码运行截图,要全屏,包含自己的学号信息
- 参考教材PP16.1,完成链树LinkedBinaryTree的实现(getRight,contains,toString,preorder,postorder)
-
实验九 实验名称:图
- 初始化:根据屏幕提示(例如:输入1为无向图,输入2为有向图)初始化无向图和有向图(可用邻接矩阵,也可用邻接表),图需要自己定义(顶点个数、边个数,建议先在草稿纸上画出图,然后再输入顶点和边数)(2分)
- 图的遍历:完成有向图和无向图的遍历(深度和广度优先遍历)(4分)
- 完成有向图的拓扑排序,并输出拓扑排序序列或者输出该图存在环(3分)
- 完成无向图的最小生成树(Prim算法或Kruscal算法均可),并输出(3分)
- 完成有向图的单源最短路径求解(迪杰斯特拉算法)(3分)
团队项目报告链接汇总
代码托管:
- 代码托管链接
- 给出statistic.sh的运行结果,说明本学期的代码量目标达到没有?
- 原本计划6000行代码,现在纯JAVA代码是7333代码,完成了这学期的代码量目标。
- 加点代码,改点代码是理解的最好方式,参考编程的智慧,谈谈你的心得
- 这是一个非常玄乎的问题。因为面对对象的编程语言,是需要大量引用别的地方的代码的。这些代码并非以库文件的形式存在,很多时候是自己敲的代码。为此,抄代码是不可能的事情,而改代码也是相当困难的事情。代码借过来之后,如何修改、不同的变量指的是什么,都相当麻烦。为此,我觉得这门课确实不适合以高强度进行,而是需要一些消化时间的。
- 积极主动敲代码做到没?教材实践上有什么经验教训?
- 大概是没有做到,光是把老师布置的实践做完已经是一件非常不容易的事情了,把课本上的代码敲完之后,不太可能有时间去探索其他的代码。教训就是学习确实不能完全脱离课本,许多课堂实践用到的代码,在书本上都有一些代码可以提供思路参考、甚至是原文。同时教材上的代码为了进行示范,一些地方是有大量的重复的、不适合的、徒劳无益地增加工作量的,比如System out println中的内容,其实很多时候可以自定义。
课堂项目实践
-
课堂实践链接(没有的可以不列)
- 课堂实践-Scanner&JDB练习
- 类的编写实践
- Random和NumberFormat测试
- Interface实践
- 复数/有理数计算器(接口)
- 文件读写
- 期中测试
- 时间复杂度分析
- ArrayStack类的实现和测试
- 后缀表达式求值
- 出门条-栈-数组实现栈
- 链栈补全(LinkedStack补全)size\isEmpty\toString\Push
- 链表插入
- 链表实践
- CircularArrayQueue方法补全
- 线性表实践(ArrayList、LinkedList)
- 查找及ASL作业(编程+计算)
- 二分查找(折半查找)实践
- 快速排序测试(必须有中间过程)
- 选择排序最坏情况
- 树-计算题
- 中序和先序计算二叉树结构
- 二叉树的建立和层序遍历法实践
- 递归前中后序和非递归前中序遍历实践
- 堆排序过程测试
- 二叉排序树实践
- 哈夫曼编码实践
- 哈夫曼编码测试
- 图实践
- 十字链表练习
- 图的DFS和BFS测试
- 考试安排冲突问题(画图)
- 最小生成树测试
- Dijkstra(迪杰斯特拉)算法测试
- AOE/AOV练习
- 拓扑排序实践测试
-
课堂实践对提高应用能力有帮助吗?
- Java部分的课堂实践恐怕没有,因为每次限定那么短的时间内想要敲出相应的代码来确实不是容易的事情。而数据结构部分的有一定帮助,在课末的时候(虽然很多时候时间还是不够用)进行一些绘图、计算之类的工作,来重温一下课上学的内容,也是比较合适的。
-
课堂实践上自己有什么经验教训?
- 这个问题在后期数据结构的学习的时候更加明显:数据结构的很多东西都是相当抽象的,如果老师在讲的时候你稍微跟不上一点,那么之后的课堂实践就不会做。
-
课堂实践上对老师有什么教学建议?
- 希望老师以后给课堂实践之前能有点征兆,忽然整活确实让我们猝不及防。
课程收获与不足
- 自己的收获(投入,效率,效果等)
- 因为这一门课的学分最多、课时最多,所以投入的时间最多也没有什么问题。
- 效率多少是存疑的,因为战线拉得太长,而且本人的基础本来就差、学习速度又快,许多时候并不是靠简简单单的“努力”一词可以拉小差距的。
- 效果并不如设想的那么好,不过在高强度地整活下,Java语言的基本编程语法知道了,面向对象编程语言的三要素牢牢记住了(继承、多态、封装),同时也了解了一些数据结构的基本常识。
- 自己需要改进的地方
- 可能还是需要多看书、多熟悉一些基础的知识点吧。每一次随堂测试的成绩都不高,恐怕就是因为忙着应付敲代码的同时,留给课本的时间确实是太少了。许多知识点(尤其在前面Java语言部分)即便看过了也很容易转头就忘。
- 结对学习是不是真正贯彻了?写一下你提供的帮助或接受了什么帮助,并对老师提供参考建议
- 结对学习在相当程度上是非常不妥当的一件事情,因为事实上结对学习的两个人很难是“一好带一差”。结对大多数情况还是根据自己的社交关系来制定的,许多时候资源是不合理分配的,成绩好的同学很多时候也和成绩好的同学在一起组队,而成绩差的同学也很难抱得到大腿。这个问题在之后的制作APP的时候也充分体现了——有的团队组起一个全明星并不是为了做出一个全明星质感的APP,而是只是因为单纯想要垄断班里成绩最好的几个同学而已。所以我建议老师以后不必将团队合作这样的内容制订为明面上的规则,这样其实反而限制了同学们之间的自由互助、自由竞争。
问卷调查
- 你平均每周投入到本课程有效学习时间有多少?
- 不太清楚,课堂时间中的大部分时间,周末大概有六个小时的时间能拿来学习
- 每周的学习效率有提高吗?你是怎么衡量的?
- 有些许提高吧。看打开电脑看代码的时间,有多少时间是专注的。
- 蓝墨云班课的使用对你的学习有促进吗?有什么建议和意见吗?
- 有促进,加强了课堂的互动感。不过希望老师以后不要这么高强度整活了。
- 你觉得这门课老师应该继续做哪一件事情?
- 继续维持上课时候幽默风趣的上课风格,加强上课中与学生的互动、PPT图形演示等。
- 你觉得这门课老师应该停止做哪一件事情?
- 将过多的时间交给学生来自习,说是锻炼学生的自主学习能力,但事实上在开荒阶段这样做只会徒然拉大同学们之间的差距,导致前期走得慢的同学整个学期的节奏都会被打乱。
- 全英文的课堂实践方式。这个活强度太高了。我们需要一个翻译器,而且我们容易把更多时间放在找答案、而非思考上。
其他任意发挥
-
班主任在刚开学的时候就给我们说,和王Sir认真学,不是为了应付考试,那么一定会有所收获的。我很惭愧,我不知道这学期对我来说具体的收获是什么,最多就是捣鼓捣鼓,过了一把下了IDEA、Android Stdio充当大佬的瘾罢了。但是这也同样让我知道了,开发软件很多,而网上的各种资源教程也很多。我们许多所谓的自习,都是一边看CSDN,一边自己抄一些、敲一些这样过来的。如果以后仍然有兴趣去学习一门编程语言,或者进行计算机其他方面的课程学习的时候,仍然可以试一试这样连滚带爬的方法去自习一下。
-
这门课学分很多,但是不用期末考试,我们却没有因此更加轻松。不如说把战线拉长了之后,我们的学习生活是更加痛苦的。一拖再拖是我在这个学期发现的巨大毛病,总喜欢等到DDL前夕等待着别人的答案救急,但事实上许多时候我们等不到答案,最终还是依靠自己上网去找代码、改代码。而且时间太匆促,我们连自己去学习代码、消化代码的时间都没有,很遗憾并且很羞愧,到最后只是变成了抄代码。为此,我认为作业不要拖是正确的。早做晚做都是CSDN的话,还不如早点上手,早点开始看,兴许还能有更多的收获呢。
总结中涉及到的链接的二维码
-
第一周作业:
-
第二、三周作业:
-
第四周作业:
-
第五周作业:
-
第六周作业:
-
第七周作业:
-
第八周作业:
-
第九周作业:
-
第十周作业:
-
实验一:
-
实验二:
-
实验三:
-
实验四:
-
实验五:
-
实验六:
-
实验七:
-
实验八:
-
实验九:
-
团队第一周:
-
团队第二周:
posted on 2019-12-21 12:36 20182308hlh 阅读(226) 评论(0) 编辑 收藏 举报