當前位置:首頁 » 編程語言 » 用堆分配實現復數加法c語言
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

用堆分配實現復數加法c語言

發布時間: 2022-06-27 09:07:45

c語言怎麼用堆棧實現多項式的加法運算

//已經幫忙調整,對比下代碼吧,就知道是什麼問題了

typedefstructPolyNode*Polynomial;
structPolyNode{
intcoef;
intexpon;
Polynomiallink;

};

PolynomialReadPoly();
PolynomialPolyAdd(PolynomialP1,PolynomialP2);
voidAttach(intc,inte,Polynomial*pRear);
intCompare(intp1,intp2);//未定義函數,自己寫實現

intmain()
{
PolynomialP1,P2,PP,PS;

P1=ReadPoly();
P2=ReadPoly();
// PP=Mult(P1,P2);
// PrintPoly(PP);
PS=PolyAdd(P1,P2);
// PrintPoly(PS);

return0;

}

PolynomialReadPoly()
{
PolynomialP,Rear,t;
intc,e,N;

scanf("%d",&N);
P=(Polynomial)malloc(sizeof(structPolyNode));
P->link=NULL;
Rear=P;

while(N--){
scanf("%d%d",&c,&e);
Attach(c,e,&Rear);
}

t=P;P=P->link;
free(t);
//retrunP;//return寫錯
returnP;
}

voidAttach(intc,inte,Polynomial*pRear)
{
PolynomialP;

P=(Polynomial)malloc(sizeof(structPolyNode));
P->coef=c;
P->expon=e;
P->link=NULL;
(*pRear)->link=P;
*pRear=P;

}

PolynomialPolyAdd(PolynomialP1,PolynomialP2)

{

Polynomialfront,rear,temp;
intsum;
rear=(Polynomial)malloc(sizeof(structPolyNode));
front=rear;
while(P1&&P2);

switch(Compare(P1->expon,P2->expon)){//這里要用指針->

case1:
Attach(P1->coef,P1->expon,&rear);//這里要用指針->
P1=P1->link;
break;
case-1:
Attach(P2->coef,P2->expon,&rear);//這里要用指針->
P2=P2->link;
break;
case0:
sum=P1->coef+P2->coef;//這里要用指針->
if(sum)Attach(sum,P1->expon,&rear);//這里要用指針->
P1=P1->link;
P2=P2->link;
break;

}
for(;P1;P1=P1->link)Attach(P1->coef,P1->expon,&rear);
for(;P2;P2=P2->link)Attach(P2->coef,P2->expon,&rear);
rear->link=NULL;
temp=front;
front=front->link;
free(temp);
returnfront;

}

⑵ 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
int r,m;
int i,flag, s;
flag = sscanf(str,"%d%di",&r,&m);
if (flag==1) {
s = 1;
for (i=0;i<strlen(str);i++) if (str[i]=='-') s= -1; else if (str[i]=='+') s=1;
m = s;
}
printf("real=%d imag=%d\n",r,m);
return 0;
}

⑶ 關於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);

}

(3)用堆分配實現復數加法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

⑷ 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語言 復數表示與求和

在數學中一個復數可以定義為 (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;
}

(5)用堆分配實現復數加法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語言環境下實現復數運算

亂七八糟寫了一個,肯定有很多不對的地方,懶得找了,如果你找到了發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語言程序

寫好了,界面很一般,可以自己改改。
程序已經在dev-c++和vs2005下調試通過,不難。
#include<stdio.h>
#include<stdlib.h>

double c,d;

void add(double x,double y,double a,double b)/* 求和 */
{
c=x+a;
d=y+b;
}

void sub(double x,double y,double a,double b)/* 求差 */
{
c=x-a;
d=y-b;
}

void proct(double x,double y,double a,double b)/* 求乘積 */
{
c=x*a-b*y;
d=x*b+a*y;
}

int main()
{
double x,y,a,b;
int i,n;
int choose;

puts("This program is about the calculation of two complexes.");/* 菜單 */
puts("1:choose + of two complexes");
puts("2:choose - of two complexes");
puts("3:choose * of two complexes");
puts("4:choose ^ of a complex");
puts("5:exit");

while(1) /* 循環計算 */
{

while(1)/* 輸入格式檢測,並輸入第一個復數 */
{
puts("Please input the real part and virtual part of first digit:");
if(scanf("%lf%lf",&x,&y)==2)
break;
fflush(stdin);
}

while(1)/* 輸入格式檢測,並輸入第二個復數 */
{
puts("Please input the real part and virtual part of second digit:");
if(scanf("%lf%lf",&a,&b)==2)
break;
fflush(stdin);
}

while(1) /* 菜單選擇 */
{
puts("Input your choose:(1-5)");
if(scanf("%d",&choose)==1)
break;
fflush(stdin);
}
switch(choose)
{
case 1:
add(x,y,a,b);
puts("The sum of two digits is:"); /* 顯示相加的結果 */
printf(d>=0?"%lf+%lfi\n":"%lf%lfi\n",c,d);
break;
case 2:
sub(x,y,a,b);
puts("The sub of two digits is:"); /* 顯示相減的結果 */
printf(d>=0?"%lf+%lfi\n":"%lf%lfi\n",c,d);
break;
case 3:
proct(x,y,a,b);
puts("The proct of two digits is:"); /* 顯示相乘的結果 */
printf(d>=0?"%lf+%lfi\n":"%lf%lfi\n",c,d);
break;
case 4:
while(1) /* 輸入格式檢測並輸入一個復數和冪次數 */
{
puts("Please input the real part and virtual part and index of a digit again:");
if(scanf("%lf%lf%d",&x,&y,&n)==3)
break;
fflush(stdin);
}
a=x;/* 求該復數的冪 */
b=y;
for(i=1;i<n;i++) /* 調用乘積函數求冪 */
{
proct(x,y,a,b);
x=c;
y=d;
}
printf("The %d power of the digit is:\n",n); /* 顯示求冪結果 */
printf(d>=0?"%lf+%lfi\n":"%lf%lfi\n",x,y);
break;
default: return 0;
}
}

system("pause");
return 0;
}

⑻ 數據結構課程:用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;}
下面是具體的操作:

#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#defineERR-1
#defineMAX100/*定義堆棧的大小*/
intstack[MAX];/*用一維數組定義堆棧*/
inttop=0;/*定義堆棧指示*/
intpush(inti)/*存儲運算數,入棧操作*/
{
if(top<MAX)
{
stack[++top]=i;/*堆棧仍有空間,棧頂指示上移一個位置*/
return0;
}
else
{
printf("Thestackisfull");
returnERR;
}
}
intpop()/*取出運算數,出棧操作*/
{
intvar;/*定義待返回的棧頂元素*/
if(top!=NULL)/*堆棧中仍有元素*/
{
var=stack[top--];/*堆棧指示下移一個位置*/
returnvar;/*返回棧頂元素*/
}
else
printf("Thestackisempty! ");
returnERR;
}
voidmain()
{
intm,n;
charl;
inta,b,c;
intk;
do{
printf(" AriothmaticOperatesimulator ");/*給出提示信息*/
printf(" Pleaseinputfirstnumber:");/*輸入第一個運算數*/
scanf("%d",&m);
push(m);/*第一個運算數入棧*/
printf(" Pleaseinputsecondnumber:");/*輸入第二個運算數*/
scanf("%d",&n);
push(n);/*第二個運算數入棧*/
printf(" Chooseoperator(+/-/*//):");
l=getche();/*輸入運算符*/
switch(l)/*判斷運算符,轉而執行相應代碼*/
{
case'+':
b=pop();
a=pop();
c=a+b;
printf(" Theresultis%d ",c);
printf(" ");
break;
case'-':
b=pop();
a=pop();
c=a-b;
printf(" Theresultis%d ",c);
printf(" ");
break;
case'*':
b=pop();
a=pop();
c=a*b;
printf(" Theresultis%d ",c);
printf(" ");
break;
case'/':
b=pop();
a=pop();
c=a/b;
printf(" Theresultis%d ",c);
printf(" ");
break;
}
printf(" Continue?(y/n):");/*提示用戶是否結束程序*/
l=getche();
if(l=='n')
exit(0);
}while(1);
}

⑼ 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語言編輯復數的加減乘除嗎

我們設計一個可進行復數運算的演示程序。要求實現下列六種基本運算: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