抽象数据类型

一、目的与要求 :设计一个可进行复数运算的演示程序。

基本要求 :

能实现复数的相加、相减、相乘、取实部、虚部功能,运算结果以复数的表示形式显示,利用两种存储结构实现此问题。

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

复数类型定义如下:

typedef struct ComplexType{ 
	float realPart,imagePart; 
} ComplexType; 

算法和基本操作:
(1)复数加法运算如下:

//复数的加法运算
void add(Complex* c1, Complex* c2) {
	Complex c;
	c.realPart = c1->realPart + c2->realPart;
	c.imagePart = c1->imagePart + c2->imagePart;
	if (c.imagePart >= 0)
		printf("c1+c2=%.2f+%.2f i\n", c.realPart, c.imagePart);
	else
		printf("c1+c2=%.2f%.2f i\n", c.realPart, c.imagePart);
}

(2)复数的减法运算如下:

//复数的减法运算
void sub(Complex * c1, Complex * c2){
	Complex c;
	c.realPart = c1->realPart - c2->realPart;
	c.imagePart = c1->imagePart - c2->imagePart;
	if (c.imagePart >= 0)
		printf("c1-c2=%.2f+%.2f i\n", c.realPart, c.imagePart);
	else
		printf("c1-c2=%.2f%.2f i\n", c.realPart, c.imagePart);
}

(3)复数的乘法运算如下:

//复数的乘法运算
void multiply(Complex* c1, Complex* c2) {
	Complex c;
	c.realPart = c1->realPart * c1->realPart - c1->imagePart * c2->imagePart;
	c.imagePart = c1->realPart * c2->imagePart + c1->imagePart * c2->realPart;
	if (c.imagePart >= 0)
		printf("c1*c2=%.2f+%.2f i\n", c.realPart, c.imagePart);
	else
		printf("c1*c2=%.2f%.2f i\n", c.realPart, c.imagePart);
}

源代码及输出实例

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>

typedef struct ComplexType {
	double realPart;
	double imagePart;
}Complex;
//复数的加法运算
void add(Complex* c1, Complex* c2) {
	Complex c;
	c.realPart = c1->realPart + c2->realPart;
	c.imagePart = c1->imagePart + c2->imagePart;
	if (c.imagePart >= 0)
		printf("c1+c2=%.2f+%.2f i\n", c.realPart, c.imagePart);
	else
		printf("c1+c2=%.2f%.2f i\n", c.realPart, c.imagePart);
}
//复数的减法运算
void sub(Complex * c1, Complex * c2){
	Complex c;
	c.realPart = c1->realPart - c2->realPart;
	c.imagePart = c1->imagePart - c2->imagePart;
	if (c.imagePart >= 0)
		printf("c1-c2=%.2f+%.2f i\n", c.realPart, c.imagePart);
	else
		printf("c1-c2=%.2f%.2f i\n", c.realPart, c.imagePart);

}
//复数的乘法运算
void multiply(Complex* c1, Complex* c2) {
	Complex c;
	c.realPart = c1->realPart * c1->realPart - c1->imagePart * c2->imagePart;
	c.imagePart = c1->realPart * c2->imagePart + c1->imagePart * c2->realPart;
	if (c.imagePart >= 0)
		printf("c1*c2=%.2f+%.2f i\n", c.realPart, c.imagePart);
	else
		printf("c1*c2=%.2f%.2f i\n", c.realPart, c.imagePart);
}
int main() {
	Complex c1, c2;
	while (1) {
		printf("c1=");
		scanf("%lf %lf", &c1.realPart, &c1.imagePart);
		printf("c2=");
		scanf("%lf %lf", &c2.realPart, &c2.imagePart);
		add(&c1, &c2);
		sub(&c1, &c2);
		multiply(&c1, &c2);
	}
	return 0;
} 
输入00               输出 xiangjia:0+0i                             xiangjian:0+0i                             xiangcheng:0+0i 输入2.1,3.21.2,0     输出 xiangjia:3.3+3.2i                             xiangjian:1.0+3.2i                             xiangcheng:2.52+3.84i 输入-1.6,3.21.0,-0.5  输出 xiangjia:-0.6+2.7i                             xiangjian:-2.6+3.7i                             xiangcheng: 0+4.0i 
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值