C语言程序设计
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

1.6 解决问题与程序设计

有了适用的程序语言,该如何着手编写程序呢?程序设计是一种智力劳动,编程序就是解决问题。初学程序设计时写的是很简单的程序,与做一道数学应用题或物理练习题有类似之处。编程序时面对的是一个需要解决的问题,要完成的是一个符合题目要求的程序。一般来说,解决问题的过程可分为3步:第一步是分析问题,设计一种解决方案;第二步是通过程序语言严格描述这个解决方案;第三步是在计算机上试用这个程序,运行它,看是否真能解决问题。如果在第三步发现错误,那么就需要仔细分析错误原因,弄清楚并后退到前面步骤去纠正错误。如果发现程序有问题,那就要修改它,然后重新编译运行和检查;如果发现求解方案有误,那就需要修改方案,重编程序,……

这个工作过程的第一步与在其他领域里解决问题类似,只是考虑问题的基础不同。在程序设计中,需要从计算和程序的观点出发,这将引出许多新问题,这是本书讨论的一个重要方面。第二步和第三步是程序设计的特殊问题。由于程序语言的各种结构有明确定义的功能,把头脑中形成的解决方案变为程序语言描述,往往也不是直截了当的,而需要经过仔细考虑和规划。另外,程序语言有严格规定的形式,把想清楚的程序按符合规定的形式写出来,也需要做不少工作,在这个过程中也可能犯错误。前面关于程序中可能的错误与排除的讨论,应主要关注第二步和第三步之间的小循环,这个方面有许多新东西需要学习。至于发现问题的解决方案有错误,则需要根据对所发现问题的深入分析而得出。

在程序设计领域里,在解决小问题与解决大问题或是为完成练习而写程序与为解决实际应用而写程序之间并没有鸿沟。开发大的实际程序或软件系统,增加的主要是前期工作。即首先要把问题分析清楚,弄明白到底要做什么,这方面还需要进一步学习。

本课程涉及的东西很多,包括知识的记忆和灵活掌握,解决问题的思维方法,具体处理的手段和技巧,还有许多实际工作和操作技能问题。本书把几个重要方面列在这里。

(1)分析问题的能力,特别是从计算和程序的角度分析问题的能力。应逐渐学会从问题出发,通过逐步分析和分解,把原问题转化为能用计算机通过程序方式解决的问题。在此过程中构造出一个解决方案。这方面的研究没有止境,许多专业性问题都需要用计算机解决,为此,参与者既需要熟悉计算机,也需要熟悉专业领域。将来的世界特别需要这种兼容型的人才。虽然课程和教科书里的问题很简单,但它们却是通向解决复杂问题的桥梁。

(2)掌握所用的程序语言,熟悉语言中的各种结构,包括其形式和意义。语言是解决程序问题的工具,要想写好程序,必须熟悉所用语言。应注意,熟悉语言绝不是背诵定义,这个熟悉过程只有通过程序设计的实践才能完成。就像上课再多也不能学会开车一样,仅靠看书、读程序、抄程序不可能真正学会写程序。要学会写程序,就需要反复地亲身实践从问题到程序的整个过程,开动脑筋,想办法处理遇到的各种情况。

(3)学会写程序。虽然写过程序的人很多,但会写程序、能写出好程序的人就少得多了。经过多年的程序设计实践,人们对什么是“好程序”有了许多共同认识。例如,解决同样问题,写出的程序更简单就是一个目标,这里可能有计算方法的选择问题、有语言的使用问题,其中需要确定适用的程序结构等。除了程序本身是否正确外,人们还特别关注写出的程序是否具有良好的结构,是否清晰,是否易于阅读和理解,当问题中有些条件或要求改变时,程序是否容易修改而满足新的要求,等等。后面许多章节里会反复提到这些问题。

(4)检查程序错误的能力。初步写出的程序常会包含一些错误,虽然语言系统能帮人们查出其中的一些,并通告发现错误的位置,但确认实际错误和实际位置,确定如何改正,这些永远是编程者自己的事。对于系统提出的各种警告、系统无法检查的错误等的认定就更依靠人的能力了。这种能力也需要在学习中有意识地锻炼。

(5)熟悉所用工具和环境。程序设计要用一些编程工具,要在具体的计算机环境中进行,熟悉工具和环境也是这个学习中很重要的一部分。目前大部分读者可能要用某种集成开发环境做程序实习,熟悉这种环境的使用也很重要,能大大提高人们的工作效率。