㈠ 在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语言(有关复数)
你在VC中得不到正确的结果是因为printf函数的描述符用错了,把%d改为%f
在TC中编译错误是因为TC比VC检查要严格,是一个标准的C编译器,而VC其实是一个VC++编译器
在TC中声明了结构之后定义结构变量不能省略struct关键字,如要省略,则必须给该结构类型起个别名。对于你的程序来说,只要把复数类型声明改为如下方式即可,你试试吧:
typedef struct {
double real;
double imag;
} complex;
㈢ 用c语言编辑复数的加减乘除吗
我们设计一个可进行复数运算的演示程序。要求实现下列六种基本运算:1)由输入的实部和虚部生成一个复数;2)两个复数求和;3)两个复数求差;4)两个复数求积,5)从已知复数中分离出实部;6)从已知复数中分离出虚部。运算结果以相应的复数或实数的表示形式显示(最好用结构体的方法)要是能用c++和stl,可以这样写#include#includevoidmain(){usingnamespacestd;complexa(3,2);complexb(5,6);complexresult(0,0);result=a*b/(a+b);cout#include#include#defineERR-1#defineMAX100/*定义堆栈的大小*/intstack[MAX];/*用一维数组定义堆栈*/inttop=0;/*定义堆栈指示*/intpush(inti)/*存储运算数,入栈操作*/{if(top
㈣ 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语言函数题 复数的运算
定义成结构体 实部和虚部分别定义成double,然后在自己定义运算……
如果是C++的话,可以重载+、-、*、\操作符的方式
㈥ 数据结构c语言复数运算
1、首先打开vc6.0, 新建一个项目。
㈦ 请问C语言是怎么计算负数取余的
C语言计算负数取余:符号内的被除数决定,就是计算式中的-7,7,-7决定:比如-7%5=-2;
7%-5=2;
-7%-5=-2;
负数取余的原理:
任何一个整数n都可以表示成n=k*q+r其中0<=|r|<|q|这里的r就是n除以q的余数,即r==n%q例如:-9=(-2)*4+(-1)则-9除以4的余数为-1。
求余:取整除后的余数。
求模:基本意义和求余相同,不过要求a%b中的b不是负数。
(7)c语言复数除法扩展阅读
C语言除法运算符“/”和求余运算符“%”
除法运算符“/”。二元运算符,具有左结合性。参与运算的量均为整型时,结果为整型,舍去小数。如果运算量中有一个为实型,结果为双精度实型。
例如:
5/2=2,1/2=0
5/2.0=2.5
求余运算符“%”,二元运算符,具有左结合性。参与运算的量均为整型。求余运算的结果等于两个数相除后的余数。
㈧ C语言怎么实现复数运算
这个是一个列子,可以参考下
struct complex{
float rmz; //实部
float lmz;//虚部
};
//产生一个复数.
complex getAComplex(float a,float b){
complex Node=new complex();
Node.rmz=a;
Node.lmz=b;
return Node;}
//两个复数求和
complex addComplex(complex complex1,complex complex2)
{
complex Node=new complex();
Node.rmz=complex1.rmz+complex2.rmz;
Node.lmz=complex1.lmz+complex2.lmz;
return Node;
}
//求两个复数的差
complex subComplex(complex complex1,complex complex2)
{
complex Node=new complex();
Node.rmz=complex1.rmz-complex2.rmz;
Node.lmz=complex1.lmz-complex2.lmz;
return Node;
}
//求两个复数的积
complex proctComplex(complex complex1,complex complex2)
{
complex Node=new complex();
Node.rmz=complex1.rmz*complex2.rmz-complex1.lmz*complex2.lmz;
Node.lmz=complex1.lmz*complex2.rmz+complex2.lmz*complex2.rmz;
return Node;
}
//求实部
float getComplexRmz(complex complex1)
{
return complex1.rmz;
}
//求虚部
float getComplexLmz(complex complex1)
{
return complex1.lmz;
}
㈨ 关于C语言的题目:用结构体定义一个复数,并实现复数的加法、减法和乘法。
#include <stdio.h>
struct complex
{
int re;
int im;
};
void add(struct complex a, struct complex b, struct complex *c)
{
c->re=a.re+b.re;
c->im=a.im+b.im;
}
void minus(struct complex a, struct complex b, struct complex *c)
{
c->re=a.re-b.re;
c->im=a.im-b.im;
}
int main()
{
struct complex x,y,s,p;
scanf("%d%d",&x.re,&x.im);
scanf("%d%d",&y.re,&y.im);
add(x,y,&s);
printf(" sum=%5d+%5di ",s.re,s.im);
minus(x,y,&p);
printf(" proct=%5d+%5di ",p.re,p.im);
}
(9)c语言复数除法扩展阅读:
复数运算法则
1、加法交换律:z1+z2=z2+z1
2、乘法交换律:z1×z2=z2×z1
3、加法结合律:(z1+z2)+z3=z1+(z2+z3)
4、乘法结合律:(z1×z2)×z3=z1×(z2×z3)
5、分配律:z1×(z2+z3)=z1×z2+z1×z3