一、目的与要求 :设计一个可进行复数运算的演示程序。
基本要求 :
能实现复数的相加、相减、相乘、取实部、虚部功能,运算结果以复数的表示形式显示,利用两种存储结构实现此问题。
数据结构设计将复数定义为由两个相互之间存在次序关系的实数构成的抽象数据类型,则可以利用实数的操作来实现复数的操作。
复数类型定义如下:
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;
}
输入0;0 输出 xiangjia:0+0i xiangjian:0+0i xiangcheng:0+0i 输入2.1,3.2;1.2,0 输出 xiangjia:3.3+3.2i xiangjian:1.0+3.2i xiangcheng:2.52+3.84i 输入-1.6,3.2;1.0,-0.5 输出 xiangjia:-0.6+2.7i xiangjian:-2.6+3.7i xiangcheng: 0+4.0i