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

作者&投稿:柴赖 (若有异议请与网页底部的电邮联系)
编写一个C语言程序,计算复数的加减乘!(用头文件做)~

是用C89还是用C99?如果用C89的话,必须自己定义一个复数;如果用C99(或C89的修订案,即C95)的话,可以用C标准中已经定义好的复数类型complex。你是想怎么做?不过,如果是C99的话,没有必须做复数的加减乘除了,因为C标准库中已经有。当然,如果是为了作业什么的,标准库中的东西是不能用的,只能自己来写了!


#includetypedef struct{ float real; float image;} complex ;void initcomplex(complex &l){ l.real=0; l.image=0;}complex getcomplex(float a,float b,complex &l){ l.real=a; l.image=b; return l;}complex addcomplex(complex &s,complex t){ s.real=s.real+t.real; s.image=s.image+t.image; return s;}complex subtractcomplex(complex s,complex t){ s.real=s.real-t.real; s.image=s.image-t.image; return s;}complex multiplycomplex(complex s,complex t){ s.real=s.real*t.real; s.image=s.image*t.image; return s;}complex dividecomplex(complex s,complex t){ s.real=s.real/t.real; s.image=s.image/t.image; return s;}void printcomplex(complex l){ printf("%g%+-gi
",l.real,l.image);}int main(){ float a,b; complex l,m; printf("输入复数的实部和虚部
"); scanf("%g%g",&a,&b); // initcomplex(l); getcomplex(a,b,l); printcomplex(l); printf("输入另一个复数的实部和虚部:
"); scanf("%g%g",&m.real,&m.image); addcomplex(m,l); printcomplex(m); return 0;}

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类型在任何环境下都是可选的。目前的编译器对这两种类型的支持都不太好。

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;
}


C语言的头文件是什么?
当然,如果你不包含 stdio,仍然可以使用 printf 或者 scanf 函数,因为它们是 C 语言自带的几个基础函数之一,但是你会收到编译器的警告,因为编译器没有发现这些函数的原型,也就是相当于你没有声明这些函数。而且,一些在头文件中定义的变量和类型你也无法使用。所以,一般会主动包含 stdio.h 头文件...

vc6.0编写c语言时,把头文件,实现,主文件分开后,编译连接时提示重复定义...
include "shixian.cpp"把这一行去了试试。

c语言strcpy()用法
C语言中strcpy的用法 用法概述:strcpy是C语言中的一个标准库函数,用于复制字符串。该函数将源字符串复制到目标字符串中。详细解释:1. 函数原型:在C语言中,strcpy函数的原型通常定义在头文件中。其函数原型为:char *strcpy;2. 参数说明:- `char *dest`:目标字符串的指针,即要将源字符串复制...

C++语言中常用头文件有哪些?举例?
include <fstream>   \/\/文件输入/输出 include <functional> \/\/STL 定义运算函数(代替运算符)include <limits> \/\/定义各种数据类型最值常量 include <list>\/\/STL 线性列表容器 include <locale> \/\/本地化特定信息 include \/\/STL 映射容器 include <memory> \/\/STL通过分配器进行的内存...

C语言头文件
头文件 在C语言家族程序中,头文件被大量使用。一般而言,每个C++\/C程序通常由头文件(header files)和定义文件(definition files)组成。头文件作为一种包含功能函数、数据接口声明的载体文件,用于保存程序的声明(declaration),而定义文件用于保存程序的实现 (implementation)。C++\/C程序的头文件以“.h”为...

c语言中windows.h头文件有什么作用?如何正确使用?
一、头文件作用 C语言里,每个源文件是一个模块,头文件为使用该模块的用户提供接口。接口指一个功能模块暴露给其他模块用以访问具体功能的方法。使用源文件实现模块的功能,使用头文件暴露单元的接口。用户只需包含相应的头文件就可使用该头文件中暴露的接口。通过头文件包含的方法将程序中的各功能模块...

C语言头文件里面应该写什么东西?
2、C语言头文件 (1)在C语言家族程序中,头文件被大量使用。一般而言,每个C++\/C程序通常由头文件(header files)和定义文件(definition files)组成。头文件作为一种包含功能函数、数据接口声明的载体文件,主要用于保存程序的声明(declaration),而定义文件用于保存程序的实现 (implementation)。 .c就是你...

C语言中的头文件一般分为几类?
在C语言中,头文件有两种主要形式,它们是:系统头文件: 这些头文件通常是C标准库或操作系统提供的,用于包含标准函数、宏和数据类型的声明。例如,<stdio.h> 包含了与输入和输出有关的函数,<stdlib.h> 包含了内存分配和其他常见函数的声明。这些头文件通常以尖括号 < > 包围,例如 #include <...

请问C语言怎么把函数放在头文件里面呢
你可以创建头文件,头文件是以".h"结尾的文件名,而main()函数所在的文件则是以".c"结尾的,".c"后缀的文件内部,也就是main函数内部主要是调用各个功能函数,函数的声明部分一般放在在".h"后缀的头文件中,这样是为了实现C语言的结构化,创建好了头文件,就可以在头文件内部实现各个函数的声明,...

用C语言实现数据结构时需要哪些头文件?
1、stdio.h,这个是用来输入输出。动态内存分配函数要用到的,所以要包含malloc.h,其他的还可能用到字符(串)处理函数(需包含string.h头文件)、数学函数(需包含math.h),包含什么头文件主要看i你想用这些数据结构实现什么功能,用到什么函数。2、C语言常用头文件:ALLOC.H 说明内存管理函数(分配...

龙里县13231538318: C语言用头文件实现复数加减法 -
赧帜天罗: 1、_Complex是一种新增的数据类型,用来表示复数.C99 新增了复数类型(_Complex)和虚数类型(_Imaginary).简单来说,C99 提供了三种复数类型:float _Complex,double _Complex,和 long double _Complex.对于 float _Complex类...

龙里县13231538318: 编写一个C语言程序,计算复数的加减乘!(用头文件做) -
赧帜天罗: 是用C89还是用C99?如果用C89的话,必须自己定义一个复数;如果用C99(或C89的修订案,即C95)的话,可以用C标准中已经定义好的复数类型complex.你是想怎么做?不过,如果是C99的话,没有必须做复数的加减乘除了,因为C标准库中已经有.当然,如果是为了作业什么的,标准库中的东西是不能用的,只能自己来写了!

龙里县13231538318: 怎样用c语言实现对数及其加减乘除的运算 -
赧帜天罗:添加头文件#include "math.h",声明双精度浮点变量,然后调用库函数log或log10就可以了.如: #include "stdio.h" #include "math.h" void main(void){double x,sum=0.0;int i;for(i=1;i<101;i++)sum+=log10(i);printf("%f\n",...

龙里县13231538318: 用C语言实现复数的加减法,我开始没用return 1的,但程序报错,用了之后能运行,但不能显示结果了 -
赧帜天罗: 你的程序是对的啊,注意输入的时候把i也输入就行了

龙里县13231538318: 复数的加法减法代码那具体是咋实现的: #include<iostream.h> class complex //复数类声明 { public: //外 -
赧帜天罗: 因为复数有实部和虚部,如果用C编写的话就需要用结构体来存储,然后分别调用其中的属性变量来对应相加减.如果是面向对象的语言,那么可以直接定义为一个来,把实部和虚部都定义为类的属性成员,然后通过类来调用,并进行加减运算

龙里县13231538318: c语言复数加减法如何实现输入型如1 - i或1+i的数据 -
赧帜天罗: 你必须有一个输入格式约定,无论简单或复杂.例如:必须有实部和虚部,格式 为 3-2i 1-i 1+i 等.然后才好处理.这里放入char str[80];了,如果是键盘输入流,也用类似格式.#include <stdio.h> main(){ char str[80]="1-i"; // 1+i 2-2i 2+3i 0-i ...

龙里县13231538318: C语言:在主函数中输入两个整数,调用以上四个函数,实现两个整数的加、减、乘、除运算. -
赧帜天罗: 【注】使用C语言实现,望采纳哦~ 有问题再问哦~ o(∩_∩) 【C语言源代码】 #include int main() { int a, b; scanf("%d%d", &a, &b);/*输入两个整数a和b*/ printf("%d\n", a + b);/*输出a和b之和~*/ return 0; }

龙里县13231538318: c++写一个复数类,完成复数的加减乘运算.应包括构造函数.编写主函数,完成对类的使用 -
赧帜天罗: 不需要亲自打,C/C++有个complex.h头文件,定义方法就是complex 名称,可以实现加减乘

龙里县13231538318: 用C语言编写程序,用结构体的方法进行两个复数的相减 -
赧帜天罗: <p>/*</p> <p>c = 1+i2</p> <p>Press any key to continue</p> <p>*/</p> #include <stdio.h> struct Complex { double m_r; double m_i; }; void main() { struct Complex c1 = {1.2,2.3},c2 = {0.2,0.3}; struct Complex c; c.m_r = c1.m_r - c2.m_r; c.m_i = c1.m_i - c2.m_i; printf("c = %g+i%g\n",c.m_r,c.m_i); }

龙里县13231538318: C语言中加减乘除在哪个头文件里? -
赧帜天罗: 解析加减乘除是编译器的工作,没有也不需要头文件.

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网