《数据结构》实验报告_抽象数据类型复数的实现

  • 格式:doc
  • 大小:159.50 KB
  • 文档页数:57

实 验 报 告

学 院: 信息工程学院

专 业: 计算机

信息工程学院计算机实验中心制

《数据结构》实验报告

姓名 学号 日期 7-8节

实验室 计算机基础实验室 指导教师 张有华 设备编号

实验题目 实验1 抽象数据类型复数的实现

一 实验内容

实验1 抽象数据类型复数的实现

二 实验目的

1. 了解抽象数据类型(ADT)的基本概念,及描述方法。

2. 通过对复数抽象数据类型ADT的实现,熟悉C语言语法及程序设计。为以后章节的学习打下基础。

三 需求分析

复数抽象数据类型ADT的描述及实现。

[复数ADT的描述]

ADT complex{

数据对象:D={ c1,c2 c1,c2∈FloatSet }

数据关系:R={ c1, c2 ∈D }

基本操作:创建一个复数 InitComplex();

输出一个复数 OutComplex();

求两个复数相加之和 AddComplex();

求两个复数相减之差 SubComplex();

求两个复数相乘之积 MulComplex();

求两个复数的商 SComplex();

等等; } ADT complex;

本实验实现使用TC2.0实现复数的描述及操作。具体实现要求:

1.从键盘分别输入2个复数,并可修改已输入的复数。

2.能输出指定的复数。

3.两个复数相加之和,观察输出结果。

4.两个复数相加之差,观察输出结果。

5.求两个复数相乘之积,观察输出结果。

6.求两个复数的商,观察输出结果。

7.用户可看到如下界面:

*****************************

* 1.输入复数C1 *

* 2.输入复数C2 *

* 3.输出复数C1 *

* 4.输出复数C2 *

* 5.求C1和C2的和 *

* 6.求C1和C2的差 *

* 7.求C1和C2的积 *

* 8.求C1和C2的商 *

* 0.结束 *

*****************************

四 详细设计

步骤1:复数的抽象数据类型的定义。 ADT Complex{

数据对象:D={a,b|a,b∈FloatSet }

数据关系:R={ |a,b ∈D }

基本操作:

InitComplex(&C,vr,vi);

操作结果:构造一个复数,元素a,b分别被赋以参数vr,vi的值。

OutComplex(C);

操作结果:输出一个复数。

AddComplex(&C,C1,C2);

操作结果:求两个复数C1,C2之和,结果存入C。

SubComplex(&C,C1,C2);

操作结果:求两个复数C1,C2之差,结果存入C。

MulComplex(&C,C1,C2);

操作结果:求两个复数C1,C2的积,结果存入C。

} ADT Complex

步骤2:复数的存储结构及相关操作的声明。

复数的存储结构

#include

#include

typedef struct Complex {

float real;

float image;

}Complex;

基本操作的声明:

Status InitComplex(&C,vr,vi);

操作结果:构造一个复数,元素a,b分别被赋以参数vr,vi的值。

void OutComplex(C);

操作结果:输出一个复数。

Complex AddComplex(&C,C1,C2);

操作结果:求两个复数C1,C2之和,结果存入C。

Complex SubComplex(&C,C1,C2);

操作结果:求两个复数C1,C2之差,结果存入C。

Complex MulComplex(&C,C1,C2);

操作结果:求两个复数C1,C2的积,结果存入C。

Complex SComplex(&C,C1,C2);

操作结果:求两个复数C1,C2的商,结果存入C。

步骤3:复数的基本操作的实现。

复数的基本操作:

//构造一个复数,元素a,b分别被赋以参数vr,vi的值 Status InitComplex(Complex &C, float vr, float vi)

{

C.real = vr;

C.image =vi;

return OK;

}

//输出一个复数

void OutComplex(Complex C)

{

“+”“i”);

}

//求两个复数C1,C2之和,结果存入C

Complex AddComplex(Complex &C,Complex C1,Complex C2);

{

C.real = C1.real + C2.real;

C.image = C1.image + C2.image;

return C;

}

//求两个复数C1,C2之差,结果存入C

Complex SubComplex(Complex &C,Complex C1,Complex C2)

{

C.real = C1.real - C2.real;

C.image = C1.image - C2.image; return C;

}

//求两个复数C1,C2的积,结果存入C

Complex MulComplex(Complex &C,Complex C1,Complex C2)

{

C.real = C1.real * C2.real + C1.image * C2.image;

C.image = C1.real * C2.image + C1.image * C2.real;

return C;

}

//求两个复数C1,C2的商,结果存入C

Complex SComplex(Complex &C, Complex C1, Complex C2)

{

C.real = (C1.real * C2.real + C1.image *

C2.image)/(C2.real * C2.real + C2.image *

C2.image);

C.image = (C1.image * C2.real - C1.real *

C2.image)/(C2.real * C2.real + C2.image *

C2.image);

return C;

}

步骤4:上机编程与调试

#include "stdafx.h"

#include "Complex0515.h" #include "user.h"

int main(int argc, char* argv[])

{

int flag,flag1;

float cr,ci,vr,vi;

Complex c1,c2,C;

CComplex0506 c;

printf(" ***************************** \n");

printf(" * 1.输入复数C1 * \n");

printf(" * 2.输入复数C2 * \n");

printf(" * 3.输出复数C1 * \n");

printf(" * 4.输出复数C2 * \n");

printf(" * 5.求C1和C2的和 * \n");

printf(" * 6.求C1和C2的差 * \n");

printf(" * 7.求C1和C2的积 * \n");

printf(" * 8.求C1和C2的商 * \n");

printf(" * 0.结束 * \n");

printf(" ***************************** \n");

while(1)

{ printf("请输入您的选择(0~8):");

scanf("%d",&flag);

switch(flag)

{

case 1:

printf("请分别输入复数C1的实部和虚部(空格隔开):");

scanf("%f %f",&vr,&vi);

break;

case 2:

printf("请分别输入复数C2的实部和虚部(空格隔开):");

scanf("%f %f",&cr,&ci);

break;

case 3:

c.InitComplex(c1,vr,vi);

printf("C1="); c.OutComplex(c1); //复数的初始化

break;

case 4:

c.InitComplex(c2,cr,ci);

printf("C2="); c.OutComplex(c2);

break;