主题:[原创]四川大学数据结构课程设计
实验 1. 抽象数据类型
本次实验的主要目的在于帮助读者熟悉抽象数据类型的表示和实现
方法。抽象数据类型需借助固有数据类型来表示和实现,即利用高级程序
设计语言中已存在的数据类型来说明新的结构,用已经实现的操作来组合
新的操作,具体实现细节则依赖于所用语言的功能。通过本次实验还可以
帮助学生复习高级语言的使用方法。
[color=008080][color=0000FF][color=FF0000][color=C0C0C0][color=FF00FF][color=00FFFF][color=00FF00][color=00FFFF][color=FF00FF][color=C0C0C0][color=FF0000][color=0000FF][color=008080][color=0000FF][color=FF0000][color=C0C0C0][color=FF00FF][color=00FFFF][color=00FF00][color=00FFFF][color=FF00FF][color=C0C0C0][color=FF0000][color=0000FF][color=008080][color=0000FF][color=FF0000][color=C0C0C0][color=FF00FF][color=00FFFF][color=FF00FF][color=C0C0C0][color=FF0000][color=0000FF][color=008080][color=0000FF][color=FF0000]问题描述】
用 C 或 C++语言设计并实现一个可进行复数运算的演示程序。
基本要求】
1.由输入的实部和虚部生成一个复数
2.两个复数求和
3.两个复数求差
4.从已知复数中分离出实部和虚部
5.复数及相应运算结果以相应的表现形式显示。 [/color][/color][/color][/color][/color][/color][/color][/color][/color][/color][/color][/color][/color][/color][/color][/color][/color][/color][/color][/color][/color][/color][/color][/color][/color][/color][/color][/color][/color][/color][/color][/color][/color][/color][/color][/color][/color]实现提示】
定义复数为由两个相互之间存在次序关系的实数构成的抽象数据类
型,则可以利用实数的操作来实现复数的操作。
( 1)抽象数据类型的含义
一个抽象数据类型 ADT 就是:数据 + 操作,例如 CpxNum 其数据部分包括实
部和虚部;而操作包括 CPlus(加法)、CMinus(减法)、cmultiply(乘法)、cdivide
(除法)等运算。
我们可通过在高级语言中实现新的抽象数据类型,来扩展语言的类型体系,如
在 C++语言原有的 int、char、float、double 等内建类型的基础上,我们还可根据用户
4
的需求提供诸如:复数、CMyString、一元多项式、发票等等结合实际应用环境特征
的新型类型。这样作为高级语言的用户既可用 int、char、float 等基本类型,又可在其
程序中使用复数、CMyString、一元多项式等用户自定义类型,这样大大降低了"类
型使用者"编程的工作量和复杂性。
( 2)复数的四则运算法则:
设z1=a+bi,z2=c+di,(a,b,c,dR以下不再说明)
c 加减法:(a+bi)±(c+di)=( a ± c )+(b ± d)i
d 乘法: (a+bi)*(c+di)=(ac - bd)+(ad + bc)i
e 除法:
a bi
c di

(a bi)(c di)
c
2
 d
2

(ac bd) (bc ad)i
c
2
 d
2
( 3)复数的存储结构及接口函数声明:
复数的存储结构
//定义复数类型的存储结构,此部分对于 cpxNum 类型的使用者不公开
typedef struct {
double _real; //复数的实部
double _imag; //复数的虚部
} cpxNum; //定义结构体类型 cpxNum 表示"复数"
复数的接口函数声明
/*复数类型接口函数的定义部分,此部分对cpxNum类型的使用者公开*/
/*用double r, double i 初始化复数c*/
void assign(cpxNum& c, double r, double i);
/*以'1+2i 或1-3i'的形式将复数c输出到控制台窗口*/
void print(cpxNum& c);
/*实现两个复数c1, c2的加法, 和作为函数cplus的返回值*/
cpxNum cplus(const cpxNum& c1, const cpxNum& c2);
/*实现两个复数c1, c2的减法, 差作为函数cmilus的返回值*/
cpxNum cmilus(const cpxNum& c1, const cpxNum& c2);
/*实现两个复数c1, c2的乘法, 积作为函数cmultiply的返回值*/
cpxNum cmultiply(const cpxNum& c1, const cpxNum& c2);
/*实现两个复数c1, c2的乘法, 商作为函数cdivide的返回值*/
cpxNum cdivide(const cpxNum& c1, const cpxNum& c2);
5
/*复数接口函数实现示例*/
cpxNum cplus(const cpxNum& c1, const cpxNum& c2)
{
cpxNum result;
/*复数的加法:c1的实部+c2的实部、c1的虚部+c2的虚部*/
result._real = c1._real + c2._real;
result._imag = c1._imag + c2._imag;
return result;
}
( 4)复数类型"使用者"代码示例:
#include "cpxNum.h"
int _tmain(int argc, _TCHAR* argv[])
{
cpxNum c1, c2; //声明两个'复数'类型的变量
double real, imag;
cout <<"请输入第一个复数的实部和虚部: ";
cin >> real >>imag;
assign(c1, real, imag); //初始化'复数'c1
cout <<"您生成的第一个复数是: ";
print(c1);
cout << endl <<"请输入第二个复数的实部和虚部: ";
cin >> real >>imag;
assign(c2, real, imag); //初始化'复数'c2
cout <<"您生成的第二个复数是: ";
print(c2);
cout << endl;
cout << "***********复数运算测试*************"<<endl;
cout << "c1 + c2的结果是: "; print(cplus(c1, c2)); cout << endl;
cout << "c1 - c2的结果是: ";
cout << "c1 * c2的结果是: ";
cout << "c1 / c2的结果是: ";
print(cmilus(c1, c2)); cout << endl;
print(cmultiply(c1, c2)); cout << endl;
print(cdivide(c1, c2)); cout << endl;
cout << "***********复数运算测试结束*************"<<endl;
return 0;
}
测试数据】
参见《数据结构题集》page76.
本次实验的主要目的在于帮助读者熟悉抽象数据类型的表示和实现
方法。抽象数据类型需借助固有数据类型来表示和实现,即利用高级程序
设计语言中已存在的数据类型来说明新的结构,用已经实现的操作来组合
新的操作,具体实现细节则依赖于所用语言的功能。通过本次实验还可以
帮助学生复习高级语言的使用方法。
[color=008080][color=0000FF][color=FF0000][color=C0C0C0][color=FF00FF][color=00FFFF][color=00FF00][color=00FFFF][color=FF00FF][color=C0C0C0][color=FF0000][color=0000FF][color=008080][color=0000FF][color=FF0000][color=C0C0C0][color=FF00FF][color=00FFFF][color=00FF00][color=00FFFF][color=FF00FF][color=C0C0C0][color=FF0000][color=0000FF][color=008080][color=0000FF][color=FF0000][color=C0C0C0][color=FF00FF][color=00FFFF][color=FF00FF][color=C0C0C0][color=FF0000][color=0000FF][color=008080][color=0000FF][color=FF0000]问题描述】
用 C 或 C++语言设计并实现一个可进行复数运算的演示程序。
基本要求】
1.由输入的实部和虚部生成一个复数
2.两个复数求和
3.两个复数求差
4.从已知复数中分离出实部和虚部
5.复数及相应运算结果以相应的表现形式显示。 [/color][/color][/color][/color][/color][/color][/color][/color][/color][/color][/color][/color][/color][/color][/color][/color][/color][/color][/color][/color][/color][/color][/color][/color][/color][/color][/color][/color][/color][/color][/color][/color][/color][/color][/color][/color][/color]实现提示】
定义复数为由两个相互之间存在次序关系的实数构成的抽象数据类
型,则可以利用实数的操作来实现复数的操作。
( 1)抽象数据类型的含义
一个抽象数据类型 ADT 就是:数据 + 操作,例如 CpxNum 其数据部分包括实
部和虚部;而操作包括 CPlus(加法)、CMinus(减法)、cmultiply(乘法)、cdivide
(除法)等运算。
我们可通过在高级语言中实现新的抽象数据类型,来扩展语言的类型体系,如
在 C++语言原有的 int、char、float、double 等内建类型的基础上,我们还可根据用户
4
的需求提供诸如:复数、CMyString、一元多项式、发票等等结合实际应用环境特征
的新型类型。这样作为高级语言的用户既可用 int、char、float 等基本类型,又可在其
程序中使用复数、CMyString、一元多项式等用户自定义类型,这样大大降低了"类
型使用者"编程的工作量和复杂性。
( 2)复数的四则运算法则:
设z1=a+bi,z2=c+di,(a,b,c,dR以下不再说明)
c 加减法:(a+bi)±(c+di)=( a ± c )+(b ± d)i
d 乘法: (a+bi)*(c+di)=(ac - bd)+(ad + bc)i
e 除法:
a bi
c di

(a bi)(c di)
c
2
 d
2

(ac bd) (bc ad)i
c
2
 d
2
( 3)复数的存储结构及接口函数声明:
复数的存储结构
//定义复数类型的存储结构,此部分对于 cpxNum 类型的使用者不公开
typedef struct {
double _real; //复数的实部
double _imag; //复数的虚部
} cpxNum; //定义结构体类型 cpxNum 表示"复数"
复数的接口函数声明
/*复数类型接口函数的定义部分,此部分对cpxNum类型的使用者公开*/
/*用double r, double i 初始化复数c*/
void assign(cpxNum& c, double r, double i);
/*以'1+2i 或1-3i'的形式将复数c输出到控制台窗口*/
void print(cpxNum& c);
/*实现两个复数c1, c2的加法, 和作为函数cplus的返回值*/
cpxNum cplus(const cpxNum& c1, const cpxNum& c2);
/*实现两个复数c1, c2的减法, 差作为函数cmilus的返回值*/
cpxNum cmilus(const cpxNum& c1, const cpxNum& c2);
/*实现两个复数c1, c2的乘法, 积作为函数cmultiply的返回值*/
cpxNum cmultiply(const cpxNum& c1, const cpxNum& c2);
/*实现两个复数c1, c2的乘法, 商作为函数cdivide的返回值*/
cpxNum cdivide(const cpxNum& c1, const cpxNum& c2);
5
/*复数接口函数实现示例*/
cpxNum cplus(const cpxNum& c1, const cpxNum& c2)
{
cpxNum result;
/*复数的加法:c1的实部+c2的实部、c1的虚部+c2的虚部*/
result._real = c1._real + c2._real;
result._imag = c1._imag + c2._imag;
return result;
}
( 4)复数类型"使用者"代码示例:
#include "cpxNum.h"
int _tmain(int argc, _TCHAR* argv[])
{
cpxNum c1, c2; //声明两个'复数'类型的变量
double real, imag;
cout <<"请输入第一个复数的实部和虚部: ";
cin >> real >>imag;
assign(c1, real, imag); //初始化'复数'c1
cout <<"您生成的第一个复数是: ";
print(c1);
cout << endl <<"请输入第二个复数的实部和虚部: ";
cin >> real >>imag;
assign(c2, real, imag); //初始化'复数'c2
cout <<"您生成的第二个复数是: ";
print(c2);
cout << endl;
cout << "***********复数运算测试*************"<<endl;
cout << "c1 + c2的结果是: "; print(cplus(c1, c2)); cout << endl;
cout << "c1 - c2的结果是: ";
cout << "c1 * c2的结果是: ";
cout << "c1 / c2的结果是: ";
print(cmilus(c1, c2)); cout << endl;
print(cmultiply(c1, c2)); cout << endl;
print(cdivide(c1, c2)); cout << endl;
cout << "***********复数运算测试结束*************"<<endl;
return 0;
}
测试数据】
参见《数据结构题集》page76.