永发信息网

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

答案:3  悬赏:30  手机版
解决时间 2021-12-16 04:05
  • 提问者网友:請叫我丶偏執狂
  • 2021-12-15 20:16
设计复数结构,并编写程序,完成复数的加减乘除算法
其中P4.c是测试主程序,测试cmplx.h和cmplx.c中定义的复数计算程序是否正确
cmplx.h是头文件,定义复数数据结构和函数
cmplx.c是实现文件,实现复数处理函数
根据题意将P4.c、cmplx.h、cmplx.c三个文件补充完全
先以P4.c为基础创建默认工程文件,再将cmplx.h和cmplx.c添加到工程中,组成完整的复数计算程序
最佳答案
  • 五星知识达人网友:蓝天白裙少女梦
  • 2021-12-15 21:25
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类型在任何环境下都是可选的。目前的编译器对这两种类型的支持都不太好。
全部回答
  • 1楼网友:野性不改
  • 2021-12-16 00:13
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 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); 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; }
  • 2楼网友:邪性美少女
  • 2021-12-15 22:38
是用c89还是用c99?如果用c89的话,必须自己定义一个复数;如果用c99(或c89的修订案,即c95)的话,可以用c标准中已经定义好的复数类型complex。你是想怎么做?不过,如果是c99的话,没有必须做复数的加减乘除了,因为c标准库中已经有。当然,如果是为了作业什么的,标准库中的东西是不能用的,只能自己来写了!
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯