当前位置:文档之家 > 数据结构实验抽象数据类型——复数运算报告

数据结构实验抽象数据类型——复数运算报告

【实验题目】

实验1. 抽象数据类型. 【问题描述】

用C 或C++语言设计并实现一个可进行复数运算的演示程序。 【基本要求】

1.由输入的实部和虚部生成一个复数

2.两个复数求和

3.两个复数求差

4.从已知复数中分离出实部和虚部

5.复数及相应运算结果以相应的表现形式显示。 【实现提示】

定义复数为由两个相互之间存在次序关系的实数构成的抽象数据类型,则可以利用实数的操作来实现复数的操作。

(下面的内容由学生填写,格式统一为,字体: 楷体, 行距: 固定行距18,字号: 小四) 一、【实验构思(Conceive )】(10%)

(本部分应包括:描述实验实现的基本思路,包括所用到的离散数学、工程数学、程序设计、算法等相关知识)

1. 首先构造结构体数组接受储存数据

2. 构造函数进行模块运算

3. 应用到了算法中的抽象数据类型ADT (即数据+操作),数据部分包括实部和虚部;

操作部分包括加分Plus 、减法Minus 、乘法Multiply 、除法Divide 4. 运用到了复数的基本知识及四则运算法则:

设 z 1=a + bi ,z 2=c + di ,(a ,b ,c ,d ∈R ,)

加减法:(a + bi )〒(c + di )=(a 〒 c )+(b 〒 d )i 乘法:(a + bi )*(c + di )=(ac - bd )+(ad + bc )i

除法: 2222

()()()()a bi a bi c di ac bd bc ad i

c di c

d c d

++-+-==+++ 二、【实验设计(Design)】(15%) (本部分应包括:抽象数据类型的功能规格说明、主程序模块、各子程序模块的伪码说明,主程序模块与各子程序模块间的调用关系) 解答:

抽象数据类型 数据部分:用结构体(数组)实现复数的储存结构 操作部分:实现复数的输入、存储、运算及输出 程序模块伪码说明: #define N 2

int n=0; //控制选择语句,及检验输入是否正确 typedef struct{

double real;//复数的实部

double imag;//复数的虚部

}paramater; //paramater是结构体变量的类型表示“复数”,声明复数的存储结构paramater cpxNum[N];//构造结构体数组储存数据

paramater result;//构造result结构体储存结果

int main(){

//实现第一个复数的输入储存

cout<<"\t请输入第一个复数的实部和虚部:";

cin>>real>>imag;

outs(c[0].real,c[0].imag)//初始化复数c[0]并实现输出

//实现第二个复数的输入储存

cout<<"\t请输入第二个复数的实部和虚部:";

cin>>real>>imag;

puts( c[0].real,c[0].imag);//初始化复数c[1]并实现输出

//复数运算

cout << "c1 + c2的结果是: "; puts(plus(c[0],c[1])); cout << endl; //调用plus函数运算加法,再用puts函数输出结果复数

cout << "c1 - c2的结果是: "; puts(milus(c[0],c[1])); cout << endl; //调用mlius函数运算减法,再用puts函数输出结果复数

cout << "c1 * c2的结果是: "; puts(multiply(c[0],c[1])); cout << endl; //调用multiply函数运算乘法,再用puts函数输出结果复数

cout << "c1 / c2的结果是: "; puts(divide(c[0],c[1])); cout << endl; //调用divide函数运算除法,再用puts函数输出结果复数

return 0;

}

三、【实现描述(Implement)】(25%)

(本部分应包括:抽象数据类型具体实现的函数原型说明、关键操作实现的伪码算法、函数设计、函数间的调用关系,关键的程序流程图等,给出关键算法的时间复杂度分析。)

解答:

抽象数据类型:数据部分,复数的储存结构

typedef struct{

double real;//复数的实部

double imag;//复数的虚部

}paramater; //paramater是结构体变量的类型表示“复数”

操作部分:

●主程序:定义声明、初始化基本变量,实现复数的输入与存储,调用puts函数输

出复数,通过if条件语句选择运算及选择验证,运用循环语句重新输入选择,得到正确选择后调用plus、milus、multiply、divide函数分别进行四则运算

●调用函数程序及调用关系:

void puts(double,double); //实现复数的输出

void plus(paramater,paramater);//实现复数的加法运算,结果调用puts函数输出void milus(paramater,paramater);//实现复数的减法运算,结果调用puts函数输出void multiply(paramater,paramater);//实现复数的乘法运算结果调用puts函数输出void divide(paramater,paramater);//实现复数的除法运算,结果调用puts函数输出关键的程序流程图:

数据结构实验抽象数据类型——复数运算报告

四、【测试结果(Testing)】(20%)

注释:

数据结构实验抽象数据类型——复数运算报告

实现第一个复数的输入

实部为2,虚部为3

实现第一个复数的输出2+3i

实现第二个复数的输入

实部为42,虚部为2、

实现第二个复数的输出42+2i,

输出含有字符长度控制

运算的选择

选择出错

提示重新选择,选择2表示选择

减法运算

输出计算结果

四、【实验总结】(10%)

(本部分应包括:自己在实验中完成的任务,注意组内的任意一位同学都必须独立完成至少一项接口的实现;对所完成实验的经验总结、心得)

1.程序的实现首先要明确程序设计的目的和算法,明确所应用到的离散数学、工程

数学知识等。

2.在这部分实验中应用到了复数四则运算的基本知识,和抽象数据类型的概念,而

抽象数据类型中的数据部分包括复数的储存结构,操作部分应当包括四种复数运算。

3.在程序设计过程中首先明确程序的基本模块,可以用伪码先表示出,然后再根据

需要添加步骤逐步完善程序:如对输入的校验,运用循环结构提示重新输入;运用条件句型选择运算;对输入输出字符长度的限定等。

4.程序设计应当保持明确的思路,尽可能在完善简化程序的过程中优化程序,如:

应用函数调用简化主程序,使得程序思路更加明确清晰。在函数调用过程中应当注意函数调用的基本格式,明确函数间调用关系,如:主程序通过调用plus、milus、multiply、divide函数分别进行四则运算,而这几个程序又通过调用puts函数实现复数运算结果的输出等。

5.可以应用流程图帮助理解设计程序,通过对算法时间度分析得到最优化的程序设

计,多次重复运行程序并改变输入以校验程序的可行性。

五、【项目运作描述(Operate)】(10%)

(本部分应包括:项目的成本效益分析,应用效果等的分析。)

1.这次实验的目的是用C或C++语言设计并实现一个可进行复数运算的演示程序。

2.我所设计的程序已满足基本要求,可以实现复数的输入输出、两个复数基本四则

运算及运算结果的输出,并且运用了循环和条件语句实现运算的选择及校验。3.这个程序只能针对两个复数的四则运算,并且只能进行一次运算,时间复杂度为

线性阶,因此对于两个复数的基本运算效益较高,但如果要实现多个复数的运算只能多次进行程序的运行,效益较低。

4.本程序只是通过演示程序实现输入输出,没有类似于计算器的基本界面,但是通

过对输入输出的字符控制,基本实现的演示程序的美观性及可读性。

六、【代码】(10%)

#include

#include

#include"math.h"

#define N 2

typedef struct

{

double real;

double imag;

}paramater; //paramater是结构体变量的类型

paramater cpxNum[N];

paramater result;

void puts(double,double);

int n=0; //控制选择语句,及检验输入是否正确

void plus(paramater,paramater);

void milus(paramater,paramater);/*实现两个复数c1, c2的减法, 差作为函数cmilus的返回值*/

void multiply(paramater,paramater); /*实现两个复数c1, c2的乘法, 积作为函数cmultiply的返回值*/

void divide(paramater,paramater); /*实现两个复数c1, c2的乘法, 商作为函数cdivide的返回值*/

int main()

{

printf("\t请输入第一个复数的实部:");

scanf("%lf",&cpxNum[0].real);

printf("\n\t请输入第一个复数的虚部:");

scanf("%lf",&cpxNum[0].imag);

puts(cpxNum[0].real, cpxNum[0].imag);

printf("\t请输入第二个复数的实部:");

scanf("%lf",&cpxNum[1].real);

printf("\n\t请输入第二个复数的虚部:");

scanf("%lf",&cpxNum[1].imag);

puts( cpxNum[1].real, cpxNum[1].imag);

printf("\t\t请选择运算:\n");

printf("\t1、加法;2、减法;3、乘法;4、除法\n");

printf("\t\t请输入您的选择:");

do

{

scanf("%d",&n);

if(n!=1 && n!=2 && n!=3 && n!=4)

printf("\t\t您输入有误!请重新输入:");

}while( n!=1 && n!=2 && n!=3 && n!=4);

if (n==1)

plus(cpxNum[0],cpxNum[1]);

else if (n==2)

milus(cpxNum[0],cpxNum[1]);

else if (n==3)

multiply(cpxNum[0],cpxNum[1]);

else if (n==4)

divide(cpxNum[0],cpxNum[1]);

else

printf("\t\t选择出错\n");

printf("\t\t运算结束");

return 0;

}

void puts( double r, double i)

{

if(n==0)

printf("\n\t您输入的复数是:%lf + %lf i\n\n",r,i);

else

printf("\n\t计算得到的复数是:%lf + %lf i\n\n",r,i);

}

void plus(paramater c1,paramater c2)

{

result.real=c1.real+c2.real;

result.imag=c1.imag+c2.imag;

puts(result.real,result.imag);

}

void milus(paramater c1,paramater c2)/*实现两个复数c1, c2的减法, 差作为函数cmilus的返回值*/

{

result.real=c1.real-c2.real;

result.imag=c1.imag-c2.imag;

puts(result.real,result.imag);

}

void multiply(paramater c1,paramater c2) /*实现两个复数c1, c2的乘法, 积作为函数cmultiply的返回值*/ //(ac - bd)+(ad + bc)i

{

result.real=(c1.real*c2.real)-(c1.imag*c2.imag);

result.imag=(c1.real*c2.imag)+(c1.imag*c2.real);

puts(result.real,result.imag);

}

void divide(paramater c1,paramater c2) /*实现两个复数c1, c2的乘法, 商作为函数cdivide的返回值*/

{

double a;

a = pow(c1.real,2.0)+pow(c2.imag,2.0);

if(a!=0.0)

{

result.real=(c1.real*c2.real+c1.imag*c2.imag)/a;

result.imag=(c1.imag*c2.real-c1.real*c2.imag)/a;

puts(result.real,result.imag);

}

else

printf("\n\n\t复数不能做除数,输入错误,程序结束!\n\n"); }

数据结构实验抽象数据类型 复数运算报告
数据结构实验抽象数据类型 复数运算报告_电子/电路_工程科技_专业资料。【实验题...
数据结构实验报告(实验一 复数运算)
韶学生 关实验报告 院册 实验课程名称:数据结构与算法 实验项目名称:实验抽象数据类型 复数四则运算 实验类型(打√ ): (基础 、综合 、设计√ ) 院姓......
数据结构实验报告(一)
运算结果以相应的复数或实数的表示形式显示。 程序代码: // 抽象数据类型复数的表示与实现 #include <iostream.h> typedef struct RECORD { double real; double ......
数据结构 复数的四则运算
数据结构实验报告题目:复数的四则运算 专业: 学号: 计算 1191 2011957032 姓名:孙幸杰 2012-2013 学年第一学期 一 实验内容 实验 1 抽象数据类型复数的 ......
数据结构实验之实现两个复数的四则运算
数据结构实验报告 数据结构》 院系 应用科技学院 专业 电子信息工程 姓名 ...概要设计 (1) 为了实现上述程序的功能,需要定义一个表示复数抽象数据类型。...
抽象数据类型复数的实现
信息工程学院计算机实验中心制 《数据结构实验报告 数据结构》姓名实验室 张文楚...数据类型复数的实现 一 实验内容 实验 1 抽象数据类型复数的实现 二 实验目的 ......
实验1:抽象数据类型
实验1:抽象数据类型
数据结构实验报告样本
数据结构实验报告 院系 应用科技学院 专业 电子信息工程 姓名 陈高雪 学 ...3.概要设计 (1) 为了实现上述程序的功能,需要定义一个表示复数抽象数据类型......
数据结构Lab1——复数的四则运算
云南大学软件学院 数据结构实验报告指导教师: 指导教师: 2009 秋季学期 学号:...【实现提示】 定义复数为由两个相互之间存在次序关系的实数构成的抽象数据类型, ......
数据结构实验报告范例
数据结构实验报告范例_调查/报告_表格/模板_实用文档。实验报告一、 实验题目 [问题描述] 设计一个可进行复数运算的演示程序。 [基本要求] 实现下列六种基本运算:......
数据结构_实验一_抽象数据类型的表示与实现
实验编号:1 四川师大《数据结构实验报告 实验抽象数据类型的表示与实现_ 2016 年 9 月 8 日 一.实验目的及要求 (1) 熟悉类 C 语言的描述方法,学会将类......
实验数据结构基础实验
实验数据结构基础实验_数学_自然科学_专业资料。实验报告一C++基础实验班级__...更高 } 粘贴测试结果: 4.[问题描述]:设计一个复数类,其抽象数据类型描述如......
数据结构_实验1_抽象数据结构
实验报告 实验课程 实验项目 实验地点 指导教师 班级 数据结构 C 实验一、抽象...通过对复数抽象数据类型 ADT 的实现,熟悉 C 语言语法及程序设计,为以后章节 的......
数据结构实验-集合的并交差运算实验报告
东北大学数据结构实验报告 实 验 报 告 实验课程:数据结构 实验项目:实验一...差运算运算运算 新建集合 结束/返回 结束 三、详细设计抽象数据类型定义......
抽象数据类型
数据结构实验报告 1.实验题目 抽象数据类型 2.需求分析 本演示程序用 TC 编写,完成复数的加、减、乘、除四则运算,并获取和设置复数实、 虚部,初始化等操作。 ...
数据结构实验报告一C++基础实验
(4) 利用 time 函数实现算法评价的事后统计方法 (5) 熟悉抽象数据类型的表示和实现方法 二、 实验内容: 1、利用函数模板,实现输入三个数(可以是三个整形或浮点......
数据结构实验内容
2.掌握采用高级程序设计语言中的数据类型来实现抽象数据类型。 二、实验内容 1.复数的六种基本运算:生成、求和、求差、求积、获得实部、获得虚部 三、实验要求 1......
云南大学软件学院数据结构实验
云南大学软件学院 数据结构实验报告 实验难度: A □ B□ C□ 序号 学号 姓名...功 能说明等) 抽象数据类型的定义: typedef struct Complex //构造复数结构......
数据结构实验报告一C++基础实验
[问题描述]:设计一个复数类,其抽象数据类型描述如...后置条件:无 Operate + 重载加法运算符,实现两个...数据结构实验报告四 8页 1下载券 数据结构实验报告......