《数据结构》实验报告_抽象数据类型复数的实现
- 格式: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;