当前位置:首页 » 编程语言 » c语言复数运算库
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

c语言复数运算库

发布时间: 2023-03-20 05:16:30

‘壹’ c语言函数题 复数的运算

定义成结构体 实部和虚部分别定义成double,然后在自己定义运算……
如果是C++的话,可以重载+、-、*、\操作符的方式

‘贰’ c语言复数四则运算

我们设计一个可进行复数运算的演示程序。要求实现下列六种基本运算
:1)由输入的实部和虚部生成一个复数
;2)两个复数求和;
3)两个复数求差;
4)两个复数求积,
5)从已知复数中分离出实部;
6)从已知复数中分离出虚部。
运算结果以相应的复数或实数的表示形式显示(最好用结构体的方法)
要是能用c++和stl,可以这样写#include <complex>#include <iostream>void main(){ using namespace std; complex<double> a(3, 2); complex<double> b(5, 6); complex<double> result(0,0); result = a*b/(a+b); cout << result;}
下面是具体的操作:

stdio.h>
#include<conio.h>
#include<stdlib.h>
#define ERR -1
#define MAX 100 /*定义堆栈的大小*/
int stack[MAX]; /*用一维数组定义堆栈*/
int top=0; /*定义堆栈指示*/

int push(int i) /*存储运算数,入栈操作*/
{
if(top<MAX)
{
stack[++top]=i; /*堆栈仍有空间,栈顶指示上移一个位置*/
return 0;
}
else
{
printf("The stack is full");
return ERR;
}
}
int pop() /*取出运算数,出栈操作*/
{
int var; /*定义待返回的栈顶元素*/
if(top!=NULL) /*堆栈中仍有元素*/
{
var=stack[top--]; /*堆栈指示下移一个位置*/
return var; /*返回栈顶元素*/
}
else
printf("The stack is empty!\n");
return ERR;
}
void main()
{
int m,n;
char l;
int a,b,c;
int k;
do{
printf("\tAriothmatic Operate simulator\n"); /*给出提示信息*/
printf("\n\tPlease input first number:"); /*输入第一个运算数*/
scanf("%d",&m);
push(m); /*第一个运算数入栈*/
printf("\n\tPlease input second number:"); /*输入第二个运算数*/
scanf("%d",&n);
push(n); /*第二个运算数入栈*/
printf("\n\tChoose operator(+/-/*//):");
l=getche(); /*输入运算符*/
switch(l) /*判断运算符,转而执行相应代码*/
{
case '+':
b=pop();
a=pop();
c=a+b;
printf("\n\n\tThe result is %d\n",c);
printf("\n");
break;
case '-':
b=pop();
a=pop();
c=a-b;
printf("\n\n\tThe result is %d\n",c);
printf("\n");
break;
case '*':
b=pop();
a=pop();
c=a*b;
printf("\n\n\tThe result is %d\n",c);
printf("\n");
break;
case '/':
b=pop();
a=pop();
c=a/b;
printf("\n\n\tThe result is %d\n",c);
printf("\n");
break;
}
printf("\tContinue?(y/n):"); /*提示用户是否结束程序*/
l=getche();
if(l=='n')
exit(0);
}while(1);
}

‘叁’ c语言负数运算

/*
c语言复数运算
*/
#include<stdio.h>
#include<stdlib.h>
typedefstruct
{
doubler,i; //r为实部,i为虚部

}complex;

complex*add(complex*a,complex*b);//复数a+复数b
complex*minus(complex*a,complex*b); //复数a-复数b
complex*multiply(complex*a,complex*b);//复数a*复数b
voidprintComplex(complex*a);//输出
complex*add(complex*a,complex*b){
complex*add;
add->r=a->r+b->r;
add->i=a->i+b->i;
returnadd;
}
complex*minus(complex*a,complex*b)
{
complex迅简帆*minus;
minus->r=a->r-b->r;
minus->i=a->i-b->i;
returnminus;
}
complex*multiply(complex*a,complex*b)
{
complex*multiply;
multiply->r=a->r*b->r-a->i*b->i;
multiply->i=a->i*b->r+a->r*b->i;
returnmultiply;
}
voidprintComplex(complex*a)//输出要注意虚部有负数的情况
{
if(a->r!=0)
printf("%.2lf",a->r); //不要断行,先输出实部
else
printf("0.00");
if(a->i>0) //大于0,正常输出+虚部
printf("+%.2lfi ",a->i);
elseif(a->i<0) //虚部是负数,不用输出+号了,直接输出负数
printf("%.2lfi ",a->i);
else
printf("+0.00i ");//虚部为0
}

帮你亩雹改了下,再去试试吧。一时之间我也想不出还有什么漏洞了。祝好运。如果是自己写主函数的话,改一改那个输入吧,输入很容易会造成问题的

这一句:咐梁 scanf("...%f %c ",...,c),一个不好输入就会出错,c可能会获取到空白。

‘肆’ C语言 复数表示与求和

在数学中一个复数可以定义为 (z=a + bi) 的形式。 C 语言在 ISO C99 时就引入了复数类型。它是通过 complex.h 中定义的。 我们可以使用 complex , __complex__ , 或 _ComplexI 类型符号来表示。

在C语言中有三种复数类型,分别为 float complex , double complex , long double complex 。他们之间 的区别就是表示复数中实部和虚步的数的数据类型不同。 complex 其实就是一个数组,数组中有两个元素,一个表示复数的实部,一个表示复数的虚部。

源代码如下:

#include <stdio.h>

#include <math.h>

#include <stdlib.h>

double sum(double* x);

void main()
{

double *a,s=0.0;
a=(double*)malloc(sizeof(double));
*a=5;
s=sum(a);

printf("求和的结果是: %lf ",s);

}double sum(double* x)

{

int j=0;
double s=0.0;

for(j=0;j<=3;j++)
{
s=s+pow(*x,j);
}

s=s*2;

return s;
}

(4)c语言复数运算库扩展阅读

输入任意两个复数差与商的源代码如下

typedefstruct{

floatr;

floatim;

Complex;

Complexres;

Complex*add(Complex*a,Complex*b){

res.r=a->r+b->r;

res.im=a->im+b->im;

return&res;
}
Complex*div(Complex*a,Complex*b){

floatd=(b->r*b->r+b->im*b->im);

res.r=(a->r*b->r+a->im*b->im)/d;

res.im=(a->im*b->r-a->r*b->im)/d;

return&res;

‘伍’ 在C语言环境下实现复数运算

ISO C(C99)默认支持复数运算,而ANSI C(C89)则不支持,需要自编算法。

‘陆’ 在C语言环境下实现复数运算

乱七八糟写了一个,肯定有很多不对的地方,懒得找了,如果你找到了发QQ(252290278)给我吧
#include
<stdio.h>
#include<string.h>
int
ope(char
num[])//计算有几个符号
{
int
count=0;
for(int
i=0;num[i]!='\0';i++)
if('+'==num[i]
||
'-'==num[i])
count++;
return
count;
}
void
inone(double
&a,double
&b)//输入一个复数
{
int
i,j,l;
char
num[100];
scanf("%s",num);
l=strlen(num);
if('i'==num[l-1])//有虚部
{
if(ope(num))//如果有符号
{
i=0;
if(2==ope(num))//有两个符号
{
if('+'==num[0])//如果实部是正数
{
for(i=1;i<l;i++)//将整数部分的值存放到整数a中
if('+'==num[i]
||
'-'==num[i])
{
for(j=1;j<i;j++)
a=a*10+num[j]-'0';
break;
}
}
else
if('-'==num[0])//如果实部是负数
{
for(i=1;i<l;i++)//将整数部分的值存放到整数a中
if('+'==num[i]
||
'-'==num[i])
{
for(j=1;j<i;j++)
a=a*10-(num[j]-'0');
break;
}
}
}
else
if(1==ope(num))//一个符号,即实部为正数或者没有实部
{
for(i=0;i<l;i++)//将整数部分的值存放到整数a中
if('+'==num[i]
||
'-'==num[i])
{
for(j=0;j<i;j++)
a=a*10+(num[j]-'0');
break;
}
}
//将虚数部分的值存放到整数b中
if('+'==num[i])//如果虚部是正数
for(j=i+1;j<l-1;j++)
b=b*10+num[j]-'0';
else
if('-'==num[i])
for(j=i+1;j<l-1;j++)
b=b*10-(num[j]-'0');
}
else//没有符号
for(i=0;i<l-1;i++)
b=b*10+num[j]-'0';
}
else//没有虚部
{
if('-'==num[0])//实部是负数
for(i=1;i<l;i++)//将整数部分的值存放到整数a中
a=a*10-(num[i]-'0');
else
{
i=0;
if('+'==num[0])//实部是正数
i++;
for(;i<l;i++)
a=a*10+num[i]-'0';
}
}
}
void
intwo(double
&a,double
&b,double
&c,double
&d)//输入两个复数
{
a=b=c=d=0;
printf("请输入第一个复数:\n");
inone(a,b);
printf("请输入第二个复数:\n");
inone(c,d);
}
void
pri(double
a,double
b)//输出
{
if(0==a
&&
0==b)
{
printf("0\n");
return;
}
if(a)
printf("%d",a);
if(b)
{
if(b>0)
printf("+");
printf("%di",b);
}
printf("\n");
}
void
add()//加
{
double
a,b,c,d;
intwo(a,b,c,d);
printf("这两个复数相加的结果为:");
pri(a+c,b+d);
}
void
sub()//减
{
double
a,b,c,d;
intwo(a,b,c,d);
printf("这两个复数相减的结果为:");
pri(a-c,b-d);
}
void
mul()//乘
{
double
a,b,c,d;
intwo(a,b,c,d);
printf("这两个复数相乘的结果为:");
pri(a*c-b*d,b*c+a*d);
}
void
exc()//除
{
double
a,b,c,d;
intwo(a,b,c,d);
if(c==0
&&
d==0)
{
printf("错误,除数为零!\n");
return;
}
printf("这两个复数相除的结果为:");
pri((a*c+b*d)/(c*c+d*d),(b*c-a*d)/c*c+d*d);
}
void
vei()//幂
{
int
n;
double
a,b,c,d;
intwo(a,b);
c=a;d=b;
printf("请出入n次幂(只能为整数!):\n");
scanf("%d",&n);
for(i=1;i<n;i++)
{
a=a*c-b*d;
b=b*c+a*d;
}
printf("这个复数相减的结果为:");
pri(a,b);
}
int
main()
{
int
n;
char
ch;
while(1)
{
printf("请选择需要的运算:\n");
printf("0.退出\n");
printf("1.加运算\n");
printf("2.减运算\n");
printf("3.乘运算\n");
printf("4.除运算\n");
printf("5.幂运算\n");
scanf("%c",&ch);
while('
'==ch
||
'\n'==ch)
scanf("%c",&ch);
if(ch<'0'
||
ch>'9')
{
printf("输入错误请重新输入!\n");
continue;
}
n=ch-'0';
switch(n)
{
case
0:
return
0;
case
1:
add();
break;
case
2:
sub();
break;
case
3:
mul();
break;
case
4:
exc();
break;
case
5:
vei();
break;
default:
printf("输入错误,请重新输入\n");
break;
}
}
return
0;
}

‘柒’ C语言中复数的运算怎么实现

C语言的话,C99标准是支持复数运算的.需要包含头文件complex.h,
里面几乎包含了所有复数计算会用到的基本初等函数, 比如三角函数,幂函数,对数函数等等.

gcc是个常见的支持C99标准的编译器,

‘捌’ 数据结构c语言复数运算

1、首先打开vc6.0, 新建一个项目。

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

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

‘拾’ 用c语言 如何编写两个复数的运算啊 都含有虚部 谢谢啊

定义一个struct作为复数,然后分别定义加减剩除运算。可以增加一个函数printcomplex来在主函数中以数学的形式输出复数。
typedef struct complex
{
double real; //实部
double image; //虚部
} COMPLEX;

COMPLEX add(COMPLEX a,COMPLEX b) //加法
{
COMPLEX sum;
sum.real = a.real+b.real;
sum.image = a.image+b.image;
return sum;
}

COMPLEX sub(COMPLEX a,COMPLEX b) //减法
{
COMPLEX diff;
diff.real = a.real-b.real;
diff.image = a.image-b.image;
return diff;
}

COMPLEX mul(COMPLEX a,COMPLEX b) //乘法
{
COMPLEX acc;
acc.real = a.real*b.real-a.image*b.image;
acc.image = a.real*b.image+a.image*b.real;
return acc;
}

COMPLEX divi(COMPLEX a,COMPLEX b) //除法
//除法去分母可以转换为乘法
{
COMPLEX quo;
double den = b.real*b.real+b.image*b.image; //分母
/* 先判断除数是否为0,因为均为double型,所以不能 直接与0作比较,而要用绝对值是否小于某个极小值e(读伊夫西龙???)来判断是否为0,这里取e=10e-10 */
if ((abs(b.real)<10e-10) && (abs(b.image)<10e-10))
{
printf("Divivd by Zero");
exit(0); //强制退出程序
}

quo.real = a.real*b.real+a.image*b.image;
quo.real /= den;
quo.image = a.image*b.real+a.real*b.image;
quo.image /= den;
return quo;
}

void printcom(COMPLEX a) //输出复数a
{
printf("%lf+%lfi",a.real,a.image);
}