C语言用头文件实现复数加减法 30

设计复数结构,并编写程序,完成复数的加减乘除算法其中P4.c是测试主程序,测试cmplx.h和cmplx.c中定义的复数计算程序是否正确cmplx.h是头文件,定义复数数... 设计复数结构,并编写程序,完成复数的加减乘除算法
其中P4.c是测试主程序,测试cmplx.h和cmplx.c中定义的复数计算程序是否正确
cmplx.h是头文件,定义复数数据结构和函数
cmplx.c是实现文件,实现复数处理函数
根据题意将P4.c、cmplx.h、cmplx.c三个文件补充完全
先以P4.c为基础创建默认工程文件,再将cmplx.h和cmplx.c添加到工程中,组成完整的复数计算程序
展开
 我来答
tattackor
2015-10-27 · TA获得超过3.5万个赞
知道大有可为答主
回答量:5083
采纳率:94%
帮助的人:798万
展开全部
1、_Complex是一种新增的数据类型,用来表示复数。C99 新增了复数类型(_Complex)和虚数类型(_Imaginary)。简单来说,C99 提供了三种复数类型:float _Complex,double _Complex,和 long double _Complex。对于 float _Complex类型的变量来说,它包含两个 float类型的值,一个用于表示复数的实部(real part),另一个用于表示虚部(imaginary part)。类似地,double _Complex 包含两个 double类型的值。C99 也提供了三种虚数类型:float _Imaginary,double _Imaginary,以及 long double _Imaginary。虚数类型只有虚部,没有实部。

2、包含标准头文件 complex.h 后,就可以用 complex来代表 _Complex,用imaginary来代表 _Imaginary,以及用 I来代表虚数单位 i,也就是 -1的平方根。例如:
#include <complex.h>
double _Complex x = 5.2;
double complex y = 5.0 * I;
double complex z = 5.2 – 5.0 * I;

3、注意:_Complex类型对于独立式环境(freestanding environment)来说是可选的。可选的意思是,不强制必须支持这种类型。而所谓独立式环境,是指 C 程序可以在没有操作系统的情况下运行。_Imaginary类型在任何环境下都是可选的。目前的编译器对这两种类型的支持都不太好。
Eric2422
2009-04-24
知道答主
回答量:12
采纳率:0%
帮助的人:0
展开全部
in cmplx.h
#ifndef CMPLX1_H_
#define CMPLX1_H_

#ifdef __cplusplus
extern "C"
{
#endif

typedef struct _CMPLX
{
float c_real;
float c_vir;
}CMPLX, *PCMPLX;

CMPLX CMPLX_(float real, float vir);

//operations between CMPLX
CMPLX C_add(CMPLX c_l, CMPLX c_r);
CMPLX C_sub(CMPLX c_l, CMPLX c_r);
CMPLX C_mul(CMPLX c_l, CMPLX c_r);
CMPLX C_div(CMPLX c_l, CMPLX c_r);
void C_out(CMPLX data);
#ifdef __cplusplus
}
#endif

#endif /* CMPLX1_H_ */

in cmplx.c
#include <stdio.h>
#include <string.h>
#include "cmplx.h"

CMPLX CMPLX_(float real, float vir)
{
CMPLX d;
d.c_real = real;
d.c_vir = vir;
return d;
}

CMPLX C_add(CMPLX c_l, CMPLX c_r)
{
c_l.c_real += c_r.c_real;
c_l.c_vir += c_r.c_vir;
return c_l;
}

CMPLX C_sub(CMPLX c_l, CMPLX c_r)
{
c_l.c_real -= c_r.c_real;
c_l.c_vir -= c_r.c_vir;
return c_l;
}
CMPLX C_mul(CMPLX c_l, CMPLX c_r)
{
int rl = c_l.c_real;
int vl = c_l.c_vir;
int rr = c_r.c_real;
int vr = c_r.c_vir;

c_l.c_real = rl*rr - vl*vr;
c_l.c_vir = rl*vr + rr*vl;

return c_l;
}
CMPLX C_div(CMPLX c_l, CMPLX c_r)
{
CMPLX c_r_r = CMPLX_(c_r.c_real, -c_r.c_vir);/*a-b*i*/
float c_d = (c_r.c_real*c_r.c_real + c_r.c_vir*c_r.c_vir);
if(c_d == 0)
{
memset(&c_l, 0x00, sizeof(CMPLX));
return c_l;
}
c_l = C_mul(c_l, c_r_r);

c_l.c_real /= c_d;
c_l.c_vir /= c_d;
return c_l;
}

void C_out(CMPLX data)
{
if(data.c_real!=(float)0.0 && data.c_vir!=(float)0.0)
printf("%f%c%fi\n", data.c_real,data.c_vir<0?('-'):('+'), data.c_vir<0?(-data.c_vir):(data.c_vir));
else if(data.c_real == (float)0)
printf("%fi\n", data.c_vir);
else if(data.c_vir == (float)0)
printf("%f\n", data.c_real);
}

in P4.c

#include <stdio.h>
#include "cmplx.h"

int test()
{
CMPLX dat1 = CMPLX_(2, 1);
CMPLX dat2 = CMPLX_(1, 1);

CMPLX dat_sum = C_add(dat1, dat2);
CMPLX dat_sub = C_sub(dat1, dat2);
CMPLX dat_mul = C_mul(dat1, dat2);
CMPLX dat_div = C_div(dat1, dat2);

C_out(dat_sum);
C_out(dat_sub);
C_out(dat_mul);
C_out(dat_div);
return 1;
}

int main()
{
test();
return 0;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式