ACM程序设计实践指导书

这是我们学校大二计算机大类的ACM实习指导书,主要目的训练编程,用到数据结构、算法等知识,当然,必须得知道一门编程语言,我那时只会c语言,其实经过这个训练也可以参加一些竞赛。像蓝桥杯这个竞赛就类似这种题目。

在我博客里会有这些题目的题解,大家感兴趣或者需要的可以去看看。

ACM程序设计实践指导书

一、概述

ACM国际大学生程序设计竞赛由国际计算机学会(ACM)主办,是世界上公认的规模最大、水平最高的国际大学生程序设计竞赛。竞赛旨在展示大学生创新能力、团队精神和在压力下编写程序、分析和解决问题能力,素来被冠以“程序设计的奥林匹克”的尊称,已经成为风靡全球的程序设计竞赛。赛事由各大洲区域赛和全球总决赛两个阶段组成。竞赛规定每支参赛队伍由三至四名在校大学生组成,他们需要在规定的5个小时内解决10个到13个复杂实际编程问题。每队使用一台电脑,最后的获胜者为正确解答题目最多和总用时间最少的队伍。该项赛事是目前国内高校承办的唯一一项具有国际影响的计算机竞赛。

ACM程序设计主要内容为数据结构、程序设计方法、算法设计与分析学等相关课程中典型问题的编程实现。数据结构中稍微复杂一些的算法设计中可能同时要用到多种技术和方法,如算法设计的构思方法,动态变量及链表,算法的编码,递归技术,与特定问题相关的技术等。通过实验内容的训练,突出构造性思维训练的特征,提高学生组织数据与进行编写大型程序能力。上机实习是对学生的一种全面综合训练,是与课堂听讲、自学和练习相辅相成的必不可少的一个教学环节。通常,实习题中的问题比平时的习题复杂得多,也更接近实际。实习着眼于原理与应用的结合点,使读者学会如何把书上学到的知识用于解决实际问题,培养软件工作所需要的动手能力;另一方面,能使书上的知识变“活”,起到深化理解和灵活掌握教学 内容的目的。平时的上机练习较偏重于如何编写功能单一的“小”算法,而通过ACM程序设计实践,可以提高问题分析,总体结构设计,用户界面设计,程序设计基本技能和技巧。

每个实习题采取了统一的格式,由问题描述基本要求测试数据实现提示几个部分组成。

问题描述旨在为读者建立问题提出的背景环境,指明问题“是什么”;
基本要求则对问题进一步求精,划出问题的边界,指出具体的参量或前提条件,并规定该题的最低限度要求;

测试数据部分旨在为检查学生上机作业提供方便,在完成实习题时应自己设计完整和严格的测试方案,当数据输入量较大时,提倡以文件形式向程序提供输入数据;

实现提示对实现中的难点及其解法思路等问题作了简要提示;


二、实习步骤

随着计算机性能的提高,它所面临的软件开发的复杂度也日趋增加。然而,编制一个10000行的程序的难度绝不仅仅是一个5000行的程序的两倍,因此软件开发需要系统的方法。一种常用的软件开发方法,是将软件开发过程分为分析、设计、实现和维护四个阶段。我们制订了如下所述完成实习的5个步骤:

1.问题分析和任务定义
   通常,实习题目的陈述比较简洁,或者说是有模棱两可的含义。因此,在进行设计之前,首先应该充分地分析和理解问题,明确问题要求做什么,限制条件是什么。注意:本步骤强调的是做什么,而不是怎么做。对问题的描述应避开算法和所涉及的数据类型,而是对所需完成的任务做出明确的回答。例如:输入数据的类型、值的范围以及输入的形式;输出数据的类型、值的范围及输出的形式;若是会话式的输入,则结束标志是什么,是否接受非法的输入, 对非法输入的回答方式是什么等等。这一步还应该为调试程序准备好测试数据,包括合法的输入数据和非法形式输入的数据。

2.数据类型和算法设计
   在设计这一步骤中需分逻辑设计和详细设计两步实现。逻辑设计指的是,对问题描述中 涉及的操作对象定义相应的数据类型,并按照以数据结构为中心的原则划分模块,定义主程序模块和各抽象数据类型;详细设计则为定义相应的存储结构并写出各过程和函数的伪码算法。在这个过程中,要综合考虑系统功能,使得系统结构清晰、合理、简单和易于调试,抽象 数据类型的实现尽可能做到数据封装,基本操作的规格说明尽可能明确具体。作为逻辑设计的结果,应写出每个抽象数据类型的定义(包括数据结构的描述和每个基本操作的规格说 明),各个主要模块的算法,并画出模块之间的调用关系图。详细设汁的结果是对数据结构和 基本操作的规格说明做出进一步的求精,写出数据存储结构的类型定义,按照算法书写规范函数形式的算法框架。在求精的过程中,应尽量避免陷入语言细节,不必过早表述辅助数据结构和局部变量。

3.编码实现和静态检查

编码是把详细设计的结果进一步求精为程序设计语言程序。如何编写程序才能较快地完成调试是特别要注意的问题。对于编程很熟练的读者,如果基于详细设计的伪码算法就能直接在键盘上输入程序的话,则可以不必用笔在纸上写出编码,而将这一步的工作放在上机准备之后进行,即在上机调试之前直接用键盘输入。

然而,不管是否写出编码的程序,在上机之前,认真的静态检查却是必不可少的。多数初学者在编好程序后处于以下两种状态之一:一种是对自己的“精心作品”的正确性确信不疑;另一种是认为上机前的任务已经完成,纠查错误是上机的工作。这两种态度是极为有害的。事实上,非训练有素的程序设计者编写的程序长度超过50行时,极少不含有除语法错误以外的错误。上机动态调试决不能代替静态检查,否则调试效率将是极低的。静态检查主要有两种方法,一是用一组测试数据手工执行程序(通常应先分模块检查);二是通过阅读或给别人讲解自己的程序而深入全面地理解程序逻辑,在这个过程中再加入一些注解和断言。如果程序中逻辑概念清楚,后者将比前者有效。

4.上机准备和上机调试

上机准备包括以下几个方面:

(1) 熟悉机器的操作系统和语言集成环境的用户手册,尤其是最常用的命令操作,以便顺利进行上机的基本活动。

(2)  掌握调试工具,考虑调试方案,设计测试数据并手工得出正确结果。“磨刀不误砍柴工”。计算机各专业的学生应该能够熟练运用高级语言的程序调试器DEBUG调试程序。

(3)   ACM实践题请登录PKU Judge Online提交程序并调试。

调试最好分模块进行,自底向上,即先调试低层过程或函数。在调试过程中可以不断借助DEBUG的各种功能,提高调试效率。调试中遇到的各种异常现象往往是预料不到的,此时不应“苦思具想”,而应动手确定疑点,通过修改程序来证实它或绕过它。调试正确后,认真整理源程序及其注释。

 

5.总结和整理实习报告


三、基础性题目

实习要求:

本次实习题目分为三大部分,第一部分为基础问题、第二部分为经典算法问题、第三部分为ACM实践题。其中,第一部分为基础必做题,要求每人从8道题目中任选5道题完成;第二部分是选做题,可以选做其中任何一题,完成情况作为学生总评成绩优秀的参考;第三部分ACM实践题,要求必做至少3

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值