㈠ 在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