当我们学会了如何阅读代码,调试代码后就需要更进一步的如何编写程序。这一篇我们来介绍如何把实际问题用一个程序来解决,让大家对程序设计有一个简单的认识。
- 程序设计的基本步骤
当我们遇到一个问题时,它往往不是一个直接用程序代码描述的问题,例如,统计销售量和利润,寻找出行的公交路线,将中文翻译成中文等。所以,先要把实际问题转化成一个计算机能够解决的问题,而大多数问题一般分为3类。
(1)算:计算利润,计算一元二次方程的根,计算一个数列的和等。
(2)找:找最大的值,找最短的一条路径,找一个字符串的位置等。
(3)实现功能:实现撤销,重做的功能实现某种操作的功能等。
正确分析了实际问题,并将其转化为上述3种计算机能够解决的问题之后,我们便要开始设计解决问题的方案了,设计解决问题的方案需要考虑算法和数据结构两个方面,在之前的文章中我们就已经说明,算法是解决一类问题过程和方法,而数据结构,目前可以简单的理解为数据的存储形式,如是变量,数组还是链表等。
设计完之后,我们要将一整套复杂的方案解析为一个个简单的小模块。拆解的程度根据代码的可读性可写性来决定。如果某个模块过于复杂,那么会给代码书写和程序调试带来麻烦,也会给日后阅读程序代码带来困难。在实际书写代码过程中,这些小模块往往以函数形式出现。
至此,我们已经做完了所有的准备工作,可以上机书写程序代码了。在代码的书写过程中,可能会遇到一些没有考虑到的小问题,所以要适当的对之前设计的方案有所修正。最后,不断的对程序进行调试和修改,一个程序便能根据要求来解决实际问题了。整个程序设计过程如下图:
![97c6a3dfbf410d94643cdd4d5209a884.png](https://i-blog.csdnimg.cn/blog_migrate/e71612267787c1efa98207209d4f1e9a.jpeg)
我们已经把计算机能解决的问题归结为,算,找,实现功能这3类,接下来我们通过3个例子,来讲述如何解决这3类问题。
算法实现
我们知道中国象棋的棋盘格有64格,我们把第一格放1颗粒米,第二格放2粒米,第三格放4粒米,第四格放8粒米,以此类推,放完64格,如果按照每粒米的重量平均为0.02克,那么请算一下这些米有多重。
问题分析,这是一个数列问题,我们只要把64格的米全部加起来在乘以0.02,就是所有米的重量了。
下面给出代码的实例
![9e538b0a9bb5ae795a206dd5fd794e89.png](https://i-blog.csdnimg.cn/blog_migrate/af7fa2b13220c4d31f9ac3eae3fb0f8e.jpeg)
字符串查找
在记事本里有一个查找的功能,输入我们要查找的关键字,能够快速找到它所在位置,如果没找到并给出提示,我们现在要求在一个字符串里找到一个子串,和记事本的查找功能一样。
下面给出代码实例
![7595f5f4aee50c25cf4b942da3d154e7.png](https://i-blog.csdnimg.cn/blog_migrate/8050e397a45d9a0b877e31847c3af27d.jpeg)
功能实现
有n个孩子围成一个圈,他们按顺时针编号依次为1~n,有一个整数m,现在从第一个孩子开始顺时针数到第m个孩子,则那个孩子离开那个圈,从下一个孩子继续数m个孩子,则他也会离开这个圈,如此继续,知道最后剩下的孩子胜出,如果知道孩子的个数n和整数m,你能预测一下最后胜利的孩子的?
问题分析:这是有名的约瑟夫环问题,程序的要求是模拟一下游戏的过程,并预测游戏结果,而游戏规则已经告知了,这里主要考虑到如何直观表示孩子围成的一个圈,这不难让我们想到链表,如果表头表尾想接不就是一个圈了吗?每离开一个孩子就删除一个结点,直到最后剩下一个结点,程序可分为两个模块,一个进行圈的初始化,一个进行游戏模拟。
下面给出程序代码实例
![95db5df86a4e79e07eef1538cee20ed2.png](https://i-blog.csdnimg.cn/blog_migrate/225f93b92e58d4a366419982bc53bb12.jpeg)
本篇完!欢迎大家收藏与转发