大多数的计算机运算是对现实世界的模拟,如果想用计算机来模拟现实世界需要用到数据抽象的方法。所谓抽象是从实际的人、物、事和概念中抽取所关心的共同特征,,忽略非本质的细节,吧这些特征用各种概念精确的加以描述,从而使这些概念构成某种对现实世界进行描述的模型。
下面以数学中的复数为实例,通过结构体讲解数据类型的组合和抽象。至于过程抽象我们已经见过最简单的形式,就是把一组语句用一个函数名封装起来,当作一个整体使用。
现在我们用C语言表示一个复数。如果从直角座标系来看,复数由实部和虚部组成,如果从极座标系来看,复数由模和辐角组成,两种座标系可以相互转换。如下图所示
比如用实部和虚部表示一个复数,我们可以采用两个double型组成的结构体:
struct complex_struct {
doublex, y;
};
这样定义了complex_struct这个标识符,既然是标识符,那么它的命名规则就和变量一样,但它不表示一个变量,而表示一个类型,struct complex_struct { double x, y; }整个可以看作一个类型名,就像int或double一样,只不过它是一个复合类型,如果用这个类型名来定义变量,可以这样写:
struct complex_struct {
doublex, y;
} z1, z2;
这样z1和z2就是两个变量名,变量定义后面要带个;号。这点一定要注意,结构体定义后面少;号是初学者很常犯的错误。不管是用上面两种形式的哪一种形式定义了complex_struct这个标识符,以后都可以直接用struct complex_struct来代替类型名了。例如可以这样定义另外两个复数变量:
struct complex_struct z3, z4;
结构体变量也可以在定义时初始化,例如:
struct complex_struct z = { 3.0, 4.0 };
复数加法的运算法则是实部与实部相加,虚部与虚部相加。复数相加运算的函数代码如下:
struct complex_struct add_complex(structcomplex_struct z1, struct compl