0.1 复数四则运算
一 需求分析
- 本演示程序中,需要用户在键盘上输入相应数据和指定程序命令。
- 基本要求包括以下六种运算:
- 由输入的实部和虚部生成一个复数
- 两个复数求和
- 两个复数求差
- 两个复数求积
- 从已知复数中分离出实部
- 从已知复数中分离出虚部
- 输入格式:
第一行,输入数字(1~6),分别对应上述六种操作。
第二行,
a
1
b
1
a
2
b
2
a_1\;b_1\;a_2\;b_2
a1b1a2b2其中
a
1
,
a
2
a_1,a_2
a1,a2代表输入复数的实部,
b
1
,
b
2
b_1,b_2
b1,b2代表输入复数的虚部。
- 输出格式:
如第一行输入数字1,则第二行只需输入
a
1
b
1
a_1\;b_1
a1b1,输出格式为
a
1
+
i
b
1
a_1+ib_1
a1+ib1。
如第一行输入数字2-4,则第二行需要输入2组数据,输出格式为运算后的复数。
如第一行输入数字5-6,则第二行只需输入
a
1
b
1
a_1\;b_1
a1b1,输出结果为
a
1
a_1
a1或
b
1
b_1
b1。
二 概要设计
为实现上述程序功能,需要设计一个抽象数据类型:复数。
ADT Plural {
数据对象:D={a,b|a,b∈NumSet}
数据关系:R={}
基本操作:
InitPlural(&P)
操作结果:生成一个复数
AddPlural(P1,P2,&P3)
操作结果:返回复数求和
DelPlural(P1,P2,&P3)
操作结果:返回复数求差
MulPlural(P1,P2,&P3)
操作结果:返回复数求积
SepReal(P)
操作结果:返回复数的实部
SepImag(P)
操作结果:返回复数的虚部
} ADT Plural
三 详细设计
实现概要设计中的所有数据类型,对每个操作进行代码编写。
typedef struct Plural
{
float a; //实部
float b; //虚部
}Plural;
//初始化一个实部与虚部均为0的复数
Plural InitPlural(Plural& P)
{
P.a = 0;
P.b = 0;
return P;
}
//返回复数P1,P2求和
Plural AddPlural(Plural P1, Plural P2, Plural& P3)
{
P3.a = P1.a + P2.a;
P3.b = P1.b + P2.b;
return P3;
}
//返回复数P1,P2求差
Plural DelPlural(Plural P1, Plural P2, Plural& P3)
{
P3.a = P1.a - P2.a;
P3.b = P1.b - P2.b;
return P3;
}
//返回复数P1,P2求积
Plural MulPlural(Plural P1, Plural P2, Plural& P3)
{
P3.a = P1.a * P2.a - P1.b * P2.b;
P3.b = P1.a * P2.b + P1.b * P2.a;
return P3;
}
//返回复数的实部
float SepReal(Plural P)
{
return P.a;
}
//返回复数的虚部
float SepImg(Plural P)
{
return P.b;
}
四 调试分析
内容包括:
- 调试过程中遇到的问题以及解决方法
- 算法的时空分析
- 经验体会
- 变量参数标识“&”,作为传址符号, 适用于需要修改原始数据或者希望通过函数返回多个值的情况,可以直接操作原始数据。
- 函数较为简单,算法时空复杂度均为O(1)。
五 用户使用说明
- 本程序的运行环境为Windows11操作系统,执行文件由Visual Studio2022本地Windows调试器打开。
- 按照需求分析所说明的输入格式进行输入,结束符为“回车符”。
- 接受不同命令将返回不同结果。
2
5 6 1 3
6+i9
六 测试结果
- 执行命令1:键入5 6,按下回车后,输出结果5+i6。
- 执行命令2:键入5 6 1 3,按下回车后,输出结果6+i9。
- 执行命令3:键入5 6 1 3,按下回车后,输出结果4+i3。
- 执行命令4:键入5 6 1 3,按下回车后,输出结果-13+i21。
- 执行命令5:键入5 6,按下回车后,输出结果5。
- 执行命令6:键入1 3,按下回车后,输出结果3。
七 附录
带注释的源程序。