经过前面 11 节的介绍,相信大家对 C 语言已经有了足够的认识,实际上,C 语言的大部分语法基本介绍完了,认真看完这 11 节的朋友应该可以用 C 语言解决很多现实问题了。在这 11 节中,我为了解释一些概念,举出了很多问题,并且也编写代码解决了它们。再回头,相信大家都能看的比较顺畅。
但是如果从头开始编写程序解决某个问题,应该按照什么步骤来呢?
我还记得我当初学习 C 语言时,看人家写的例子非常顺畅,觉得 C 语言也不过如此。可是真的给我一个问题让我从头编程解决,还真是一脸懵逼,完全没有头绪,完全不知道从何入手。现在想想,这是因为当时我还没有编程思想,还不会按照计算机的思维考虑问题,这项能力只能多锻炼获得。
长征是一步一步走的,再复杂的程序也是一句一句完成的。本节介绍一种“增量式”开发的思路,非常适合还没有形成“计算机思维”的初学者。我们还是以实际问题为例,对这种开发思路做介绍,请看如下问题:
一个长方形对角的两个点坐标分别为 (x1, y1) 和 (x2, y2),用 C 语言编写程序求它的面积。
从数学上来看,要解决这个问题,显然可以分三步:
- 计算这个长方形的长: L=|x1-x2|
- 计算这个长方形的宽:W=|y1-y2|
- 利用公式:长 x 宽 计算这个长方形的面积 S=L x W
这里直接认为长方形的长在 x 轴方向,宽在 y 轴方向了,长宽的方向并不影响计算面积。
接着,我们看看如何用 C 语言计算长方形的长。首先应该知道,坐标,长宽,面积应该用 double 类型的数据表示,所以计算长方形长的函数可以如下写:
double length(double x1, double x2) { return 0.0; }
初学者写到这里就已经不太自信了:这个函数定义写得对吗?虽然我是按我理解的语法规则写的,但书上没有和这个一模一样的例子,万一不小心遗漏了什么呢?既然不自信就不要再往下写了,没有一个平稳的心态来写程序很可能会引入Bug。所以在函数定义中插一个return 0.0立刻结束掉它,然后立刻测试这个函数定义得有没有错误:
#include <stdio.h> int main() { printf("L=%f\n", length(1.1, 3.1)); return 0; }
编译,运行,一切正常。这时你就会建立起信心了:既然没问题,就不用管它了,继续往下写。
double length(double x1, double x2) { double L; L = fabs(x1-x2); // fabs 为计算绝对值的函数,要 #include <math.h> return L; }
如果你不敢确定写的对,可以就此打住,再来测试一次:
#include <stdio.h> #include <math.h> int main() { printf("L=%f\n", length(1.1, 3.1)); return 0; }