编写lisp程序解一元二次方程_C++实战篇(十三),编写程序的技巧

当我们学会了如何阅读代码,调试代码后就需要更进一步的如何编写程序。这一篇我们来介绍如何把实际问题用一个程序来解决,让大家对程序设计有一个简单的认识。

  • 程序设计的基本步骤

当我们遇到一个问题时,它往往不是一个直接用程序代码描述的问题,例如,统计销售量和利润,寻找出行的公交路线,将中文翻译成中文等。所以,先要把实际问题转化成一个计算机能够解决的问题,而大多数问题一般分为3类。

(1)算:计算利润,计算一元二次方程的根,计算一个数列的和等。

(2)找:找最大的值,找最短的一条路径,找一个字符串的位置等。

(3)实现功能:实现撤销,重做的功能实现某种操作的功能等。

正确分析了实际问题,并将其转化为上述3种计算机能够解决的问题之后,我们便要开始设计解决问题的方案了,设计解决问题的方案需要考虑算法和数据结构两个方面,在之前的文章中我们就已经说明,算法是解决一类问题过程和方法,而数据结构,目前可以简单的理解为数据的存储形式,如是变量,数组还是链表等。

设计完之后,我们要将一整套复杂的方案解析为一个个简单的小模块。拆解的程度根据代码的可读性可写性来决定。如果某个模块过于复杂,那么会给代码书写和程序调试带来麻烦,也会给日后阅读程序代码带来困难。在实际书写代码过程中,这些小模块往往以函数形式出现。

至此,我们已经做完了所有的准备工作,可以上机书写程序代码了。在代码的书写过程中,可能会遇到一些没有考虑到的小问题,所以要适当的对之前设计的方案有所修正。最后,不断的对程序进行调试和修改,一个程序便能根据要求来解决实际问题了。整个程序设计过程如下图:

97c6a3dfbf410d94643cdd4d5209a884.png

我们已经把计算机能解决的问题归结为,算,找,实现功能这3类,接下来我们通过3个例子,来讲述如何解决这3类问题。

算法实现

我们知道中国象棋的棋盘格有64格,我们把第一格放1颗粒米,第二格放2粒米,第三格放4粒米,第四格放8粒米,以此类推,放完64格,如果按照每粒米的重量平均为0.02克,那么请算一下这些米有多重。

问题分析,这是一个数列问题,我们只要把64格的米全部加起来在乘以0.02,就是所有米的重量了。

下面给出代码的实例

9e538b0a9bb5ae795a206dd5fd794e89.png

字符串查找

在记事本里有一个查找的功能,输入我们要查找的关键字,能够快速找到它所在位置,如果没找到并给出提示,我们现在要求在一个字符串里找到一个子串,和记事本的查找功能一样。

下面给出代码实例

7595f5f4aee50c25cf4b942da3d154e7.png

功能实现

有n个孩子围成一个圈,他们按顺时针编号依次为1~n,有一个整数m,现在从第一个孩子开始顺时针数到第m个孩子,则那个孩子离开那个圈,从下一个孩子继续数m个孩子,则他也会离开这个圈,如此继续,知道最后剩下的孩子胜出,如果知道孩子的个数n和整数m,你能预测一下最后胜利的孩子的?

问题分析:这是有名的约瑟夫环问题,程序的要求是模拟一下游戏的过程,并预测游戏结果,而游戏规则已经告知了,这里主要考虑到如何直观表示孩子围成的一个圈,这不难让我们想到链表,如果表头表尾想接不就是一个圈了吗?每离开一个孩子就删除一个结点,直到最后剩下一个结点,程序可分为两个模块,一个进行圈的初始化,一个进行游戏模拟。

下面给出程序代码实例

95db5df86a4e79e07eef1538cee20ed2.png

本篇完!欢迎大家收藏与转发

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值