流程图(Flow Chart)是在程序设计阶段帮助程序员梳理解决问题流程的一种工具。在学习程序设计时是每一个人都必须反复练习使用的(天才和人肉编译器除外),它利用图形化的符号框来代表各种不同性质的操作,并用流程线来连接这些操作。在程序的设计(实际在编写代码码之前)阶段,通过画流程图,可以帮助我们理清程序思路。下面我来说明一下画流程图的一些关键和走过的坑。

用于程序设计的流程图

其实流程图在日常生活中也很常见,我们基本的思考过程都可以用流程来表示,所谓的『流程』就是指顺序。按照某种顺序做完一件事或思考一个问题,其背后都一张流程图。在程序设计时只不过是把理解问题、分析问题、解决问题的思路用框框线线表现出来,在实际去写代码时能够全局地统筹与规划。无论是C语言、C++、C#、Java等等编程语言,还是数据库、前端等设计语言都可以借助流程图把需求、功能或者算法表达清楚。最常用的12种流程图如下图所示。

常用的流程图元素

流程图反映出来一个问题的解决思路通常是由三种基本过程组成的:顺序、分支、循环。用流程图来表示这三种过程是几乎所有编程语言教材中必讲的内容之一。这里就不再重复了,下面举一个例子吧,看看画流程图的一般过程。

假设我们要使用C语言编程实现以下问题的求解:

例 有一数列表达式:1/3-3/5+5/7-7/9…+19/21+…,编程求前n项的计算结果,其中正整数n为用户输入的值,n>0且n<1000。

通过分析题目的要求,可以发现这属于“累和”一类的问题,关键在于找出不同项之间的关系,不难看出分子和分母的变化是有规则的,都是奇数列,且累和的符号随第几项也在交替变化,奇数项为正,偶数项为负。

在以上的分析基础上,我们来思考如何使用程序来实现这个数学式子计算结果的输出。下面再分析下处理这个问题的『流程』,首先,这个程序的输入和输出很明确,输入为n,输出为计算结果。其次,对输入的n有值域范围的约束。最后,需要根据奇偶项判断其符号的正负。下面直接给出解决这个题目的流程图。

解题流程图

有了流程图之后,可以进行实际的代码编写了,编写代码时要从流程图中找出那三种基本结构,然后一一对应代码的写法。从上面的流程图中可以看到有三处分支结构,最后一处分支结构还实现了循环。于是,写出下面的代码。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
/**
* @file main.c
* @author Xer
* @date 20190102
* @brief 求n项"累和"
*/
#include <stdio.h>

int main(int argc, char *argv[]) {
int n = 0;
double result = 0;
double temp = 0;
scanf("%d", &n);
if (n <= 0 || n >= 1000) {
printf("输入n不在约束范围内\n");
return 0;
}
for (int i = 0;i < n; ++i) {
// 构建新的一项
temp = (double) (2 * i + 1)/(2 * i + 1 + 2);
if((i + 1) % 2 == 0)// 判断奇偶项
{
result = result - temp;
}
else
{
result = result + temp;
}
}
printf("%lf\n", result);
return 0;
}

通过测试几个典型的值,以及边界条件,程序的输出无误(如何判断?用计算器算出几组结果!计算器能算出当n=999时的答案?不能!如何验证?再写一个Matlab的程序计算一下…考虑下使用代数直接求解出表达式?大坑啊)。

通过上面的过程可以发现解决这个问题的关键在于绘制出一个相对准确的流程图,对照流程图再来写代码就容易了一些。但是这个过程的『坑儿』在哪呢?来挖挖吧。

  1. 用户输入不在范围如何处理?(上面的解法直接到结束了)
  2. ”组建一项“这个过程才是编写代码的关键?从流程图中的一个框能写出来么?
  3. 如果我不记得如何判断奇偶怎么办?
  4. 我怎么从来都不能一次画对流程图?
  5. 你用什么软件画的?输出的是位图还是矢量图?
  6. 上面的代码在我的电脑上编译不了?
  7. 为什么我没有从流程图中发现这里面的三种程序结构?
  8. 我缺少逻辑思考的能力。

无论是初学还是在工程中的应用,到处都是坑的,躲不掉的。勤于思考,勤于绘制,掌握流程图还是很快的,其他的坑只有一个个踩了。对于流程图我用过的软件可以说下:Inkscape、Adobe Illustrator、OmniGrafle、yED、Shapes、Diagrammix、EdrawMax、Visio、Affinity Disigner、Sketch、draw.io、Scapple、PowerPoint、Dia、Delineato Pro、LibreOffice。以上列表是我认真想过的,都用过,画的图形都在不同的文档中出现过。这又是一个大坑啊!

所以,现在画流程图时我选择一支钢笔、一张纸,画草图,然后修改,再画,然后再修改。最后从上面的列表中先一个软件画出矢量图(依然在坑里,出不去了)。为什么用钢笔?钢笔经常不下水,还得加墨,万一没有墨水了岂不是很惨?万一漏墨了岂不更惨?是的,又一个坑!

怎么办?怎么办?

『上网学习如何保养钢笔吧』见下文。

钢笔保养维护

定期清洗、正常使用状况每三个月应清洗一次;超过1个月以上时间暂不使用的钢笔,笔应彻底清洗擦干,以免墨水干滞而堵塞出水管线而影响钢笔使用寿命。

A. 使用吸墨器清洗
准备干净的温水、将温水填充入吸墨器,置于钢笔后重复吸墨与释出的动作,直到释出的温水不再浑浊并用面纸擦拭即可。

B. 无吸墨器清洗(活塞式内置储墨器笔除外)
将前端缓缓转出并置于清水下冲洗使清水自然流入导墨装置后自然释出,直到释出的温水不再浑浊并用面纸擦拭即可。

C. 活塞式内置储墨器笔
准备干净温水,将温水以正常入墨及释出的方式清洗,直到释出的温水不再浑浊再用面纸擦拭即可。

  • 钢笔使用完毕应随手将笔盖盖上,以保护笔尖,携带时笔尖朝上;
  • 吸墨器长时间使用时会造成磨损间隙,因而产生漏水现象,此时应购买更换新的吸墨器即可;
  • 金属笔身的金属表面氧化是自然现象因此需要经常用干净棉布擦拭。