前言

一个问题抽象为一个抽象数据类型后,仅是形式上的抽象定义,还没有达到问题解决的目的,要实现这个目标,就要把抽象的变成具体的,即抽象的数据类型在计算机上实现,变成一个能用的具体的数据类型。

C语言实现抽象数据类型

  • 用已有数据类型定义描述它的存储结构
  • 用函数定义描述它的操作

用”类 C 语言”真正实现抽象数据类型的定义

例如:抽象数据类型”复数“的实现:

#include <stdio.h>

typedef struct{

    float realpart;

    float imagpart;

} Complex;


void assign(Complex *a,float real,float imag){

    a->realpart = real;

    a->imagpart = imag;

}


void add(Complex *result,Complex b, Complex c){

    result->realpart = b.realpart + c.realpart;

    result->imagpart = b.imagpart + c.imagpart;

}


void multiply(Complex *result, Complex b, Complex c){

    result->realpart = b.realpart * c.realpart - b.imagpart * c.imagpart;

    result->imagpart = b.realpart * c.imagpart + b.imagpart * c.realpart;

}


void divide(Complex *result, Complex b, Complex c){

  

    result->realpart = (b.realpart * c.realpart + b.imagpart * c.imagpart)/

                     (c.realpart * c.realpart + c.imagpart * c.imagpart);

    result->imagpart = (b.imagpart * c.realpart - b.realpart * c.imagpart)/

                        (c.realpart * c.realpart + c.imagpart * c.imagpart);

}

$$
例:\quad z=\frac{(8+6i)(4+3i)}{(8+6i)+(4+3i)}
$$

void main(){

    Complex z1,z2,z3,z4,z;

    float z1_real, z1_imag, z2_real, z2_imag;
    

    printf("输入z1的实部和虚部:"); 

    scanf("%f %f",&z1_real,&z1_imag); \\ 输入 8.0 6.0

    printf("输入z2的实部和虚部:"); 

    scanf("%f %f",&z2_real,&z2_imag); \\ 输入 4.0 3.0
    

    assign(&z1,z1_real,z1_imag);

    assign(&z2,z2_real,z2_imag);

    multiply(&z3,z1,z2);

    add(&z4,z1,z2);

    divide(&z,z3,z4);

    printf("z = %.2f + %.2fi\n",z.realpart,z.imagpart);
    
}

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

作者

3049874370@qq.com

相关文章

类C语言有关操作的补充(1)

C语言的动态内存规划 C++的动态存储分配 ...

读出全部

2.4 线性表的顺序表示和实现(2)

顺序表的特点 顺序表(元素)与数组(元素)特...

读出全部

1.1 计算机系统简介-a

现代计算机的多态性 把感应器嵌入和装备到电网...

读出全部

2.4 线性表的顺序表示和实现(1)

线性表的顺序表示又称为顺序存储结构或顺序映像...

读出全部