일원 여러 다항식 의 사 칙 연산
#include
#include
#define Error 1
#define Ok 0
typedef int Status;
typedef int ElemType;
typedef struct term{
float coef;
int expn;
struct term *next;
}term,*Linklist; // coef , expn
Linklist Ini_Polynomial () //
{
Linklist L;
L=(term*)malloc(sizeof(Linklist));
L->expn=-1;
L->next=NULL;
if(!L) exit(1);
return L;
}
Status Creat_Polynomial(Linklist L) //
{
Linklist p,q;
p=L;
q=(term*)malloc(sizeof(Linklist));
printf(" n ( , )( 0 )");
scanf("%f,%d",&q->coef,&q->expn);
while(q&&(q->coef!=0||q->expn!=0))
{
p->next=q;
p=q;
q=(term*)malloc(sizeof(Linklist));
scanf("%f,%d",&q->coef,&q->expn);
}
p->next=NULL;
if(!q) printf(" "); return Error;
return Ok;
}
Status GetElem_linklist(Linklist L,int i , int *e ) // i
{
Linklist p; int j;j=0;
p=L->next;
while(p&&(jnext;++j;
}
if (!p||(j>i)) {printf(" "); return Error;}
*e=p->expn;
return (*e);
}
int cmp(int a,int b) // a,b ab) return 1;
}
}
Status equal(Linklist s, Linklist Lc) // Lc s
{
Linklist p;
p=Lc->next;
while(p)
{
if(p->expn==s->expn)
{
return 1;
}
p=p->next;
}
return 0;
}
Status Insert_Polynomial(Linklist s,Linklist Lc) // lc
{
if(s->coef==0) free(s);
else
{
Linklist lc1;
lc1=Lc;
//lc2=Lc->next;
if(lc1->next==NULL) {lc1->next=s; lc1=lc1->next; lc1->next=NULL;}
else
{
lc1=lc1->next;
switch(equal(s,Lc)) // Lc s
{
case 0: // ,
while(s->expn>lc1->expn&&lc1->next!=NULL&&s->expn>lc1->next->expn)
{
lc1=lc1->next;
}
s->next=lc1->next;
lc1->next=s;
lc1=s;
break;
case 1: // ,
while(lc1->expn!=s->expn&&lc1->next!=NULL)
{
lc1=lc1->next;
}
lc1->coef=lc1->coef+s->coef;
break;
}
}
}
return Ok;
}
int Abs(int i)
{
if(i<0)
{
i=-i;
return i;
}
else
return i;
}
Status AddPolyn(Linklist pa,Linklist pb,Linklist pc) //
{
Linklist la,lb,lc;int i,j,a,b; float sum;
Linklist s;
i=0;j=0;
la=pa->next;lb=pb->next;lc=pc;
while(la&&lb)
{
s=(term*)malloc(sizeof(Linklist));
a=GetElem_linklist(pa,i,&a); // a,b
b=GetElem_linklist(pb,j,&b);
switch (cmp(a,b)) //
{
case -1: // la lb la lc
s->coef=la->coef;
s->expn=la->expn;
lc->next=s;
lc=s;
la=la->next;
i++;
break;
case 0: // la lb la lb lc
sum=la->coef+lb->coef;
if(sum!=0)
{
s->coef=sum;
s->expn=la->expn;
lc->next=s;
lc=s;
la=la->next;lb=lb->next;
i++;j++;
}
else{ i++;j++; }
break;
case 1: // la lb lb lc
s->coef=lb->coef;
s->expn=lb->expn;
lc->next=s;
lc=s;
lb=lb->next;
j++;
break;
}
}
if(!la&&lb) // la lb lb
{
s=(term*)malloc(sizeof(Linklist));
s->coef=lb->coef;
s->expn=lb->expn;
lc->next=s;
lc=s;
lb=lb->next;
lc->next=NULL;
}
else
if(la&&!lb) // lb lb la
{
s=(term*)malloc(sizeof(Linklist));
s->coef=la->coef;
s->expn=la->expn;
lc->next=s;
lc=s;
la=la->next;
lc->next=NULL;
}
else
return Ok;
}
Status SubtractionPolyn(Linklist pa,Linklist pb,Linklist pc) //
{
Linklist la,lb,lc;int i,j,a,b; float sum;
Linklist s;
i=0;j=0;
la=pa->next;lb=pb->next;lc=pc;
while(la&&lb)
{
s=(term*)malloc(sizeof(Linklist));
a=GetElem_linklist(pa,i,&a);
b=GetElem_linklist(pb,j,&b); // a,b
switch (cmp(a,b))
{
case -1: //
s->coef=la->coef;
s->expn=la->expn;
lc->next=s;
lc=s;
la=la->next;
i++;
break;
case 0:
sum=la->coef-lb->coef;
if(sum!=0)
{
s->coef=sum;
s->expn=la->expn;
lc->next=s;
lc=s;
la=la->next;lb=lb->next;
i++;j++;
}
else{ i++;j++; }
break;
case 1:
s->coef=-lb->coef;
s->expn=lb->expn;
lc->next=s;
lc=s;
lb=lb->next;
j++;
break;
}
}
if(!la&&lb)
{
s=(term*)malloc(sizeof(Linklist));
s->coef=-lb->coef;
s->expn=lb->expn;
lc->next=s;
lc=s;
lb=lb->next;
lc->next=NULL;
}
else
if(la&&!lb)
{
s=(term*)malloc(sizeof(Linklist));
s->coef=la->coef;
s->expn=la->expn;
lc->next=s;
lc=s;
la=la->next;
lc->next=NULL;
}
else
return Ok;
}
Linklist MultplyPolynomial(Linklist pa ,Linklist pb,Linklist w) //
{
Linklist qa;Linklist qb,y;
qa=pa->next;qb=pb->next;
while(qa)
{
while(qb) // qa qb
{
y=(term*)malloc(sizeof(Linklist));
y->coef=qa->coef*qb->coef;
y->expn=qa->expn+qb->expn; //y qa*qb
Insert_Polynomial(y,w); // w
qb=qb->next;
}
qa=qa->next;
qb=pb->next;
}
return w;
}
Linklist DivisionPolynomial(Linklist pa ,Linklist pb,Linklist w) //
{
Linklist qa;Linklist qb,y;
qa=pa->next;qb=pb->next;
while(qa)
{
while(qb)
{
y=(term*)malloc(sizeof(Linklist));
y->coef=qa->coef/qb->coef;
y->expn=qa->expn-qb->expn;
Insert_Polynomial(y,w);
qb=qb->next;
}
qa=qa->next;
qb=pb->next;
}
return w;
}
void Start()
{
printf("***************************************
");
printf("****** *******
");
printf("*********0. **************
");
printf("*********1. ****************
");
printf("*********2. ****************
");
printf("*********3. ****************
");
printf("*********4. ****************
");
}
void print(Linklist L)
{
Linklist p;
p=L->next;
printf("y=");
while(p!=NULL)
{
if(p->coef!=0)
{ if(p->expn==1)
{
if(p->coef==1)
{
printf("X");
}
else if(p->coef==-1)
{
printf("-x");
}
else
printf("%.1fX",p->coef);
if(p->next!=NULL)
{
if(p->next->coef<0) printf("");
else printf("+");
}
}
else
if(p->expn==0)
{
printf("%.1f",p->coef);
if(p->next!=NULL)
{
if(p->next->coef<0) printf("");
else printf("+");
}
}
else
{
if(p->coef==1)
{
printf("X^%d",p->expn);
}
else if(p->coef==-1)
{
printf("-X^%d",p->expn);
}
else
printf("%.1fX^%d",p->coef,p->expn);
if(p->next!=NULL)
{
if(p->next->coef<0) printf("");
else printf("+");
}
}
}
p=p->next;
}
printf("
");
printf("
");
}
void Choose(Linklist pa,Linklist pb,Linklist pc,int i)
{
Linklist p1,p2,p3,p4;
p1=p2=p3=p4=pc;
switch(i)
{
case 1: //
AddPolyn(pa,pb,p1);
printf(" :
");
print(pc);
break;
case 2: //
SubtractionPolyn(pa,pb,p2);
printf(" :
");
print(pc);
break;
case 3: //
MultplyPolynomial(pa,pb,p3);
printf(" :
");
print(pc);
break;
case 4: //
DivisionPolynomial(pa,pb,p4);
printf(" :
");
print(pc);
break;
}
}
void main()
{
int i;Linklist pa,pb,pc;
Start();
printf(" ");
scanf("%d",&i);
while(i!=0)
{
pc=Ini_Polynomial();
pa=Ini_Polynomial();
Creat_Polynomial(pa);
printf(" :
");
print(pa);
pb=Ini_Polynomial();
Creat_Polynomial(pb);
printf(" :
");
print(pb);
Choose(pa,pb,pc,i);
Start();
printf(" ");
scanf("%d",&i);
}
if(i==0)
{
printf(" !!!( )");
}
getchar();
getchar();
}
이 일원 n 차 다항식 의 사 칙 연산 은 구상 조사 자료 에서 최종 실현 까지 일주일 차이 가 나 지 않 았 을 것 이다. 왜냐하면 당시 반 에서 몇 사람 이 하지 않 았 기 때문이다. 그 당시 에 만 들 었 을 때 첫 번 째 로 바로 이 즐거움 을 나 눈 것 은 제 여자친 구 였 습 니 다. 비록 그녀 는 잘 모 르 겠 지만 그녀 와 나 눈 후에 저 는 더욱 기 뻤 습 니 다. 항상 제 가 그녀 에 게 좋 은 미래 를 줄 수 있 는 것 과 한 걸음 가 까 워 졌 다 는 것 을 느 꼈 습 니 다. 그러나 시간 이 덧 없 이 흘러 그 순간 부터 반년 이 넘 지 않 았 습 니 다. 이미 사물 이 옳 고 그 름 이 생 겼 습 니 다. 제자리 에 남 은 것 은 저 혼자 일 뿐 입 니 다. 사실 이 프로그램 은 많은 알고리즘 이 없다. 바로 다항식 중의 모든 항목 의 상수 항 과 지 수 를 링크 에 간단하게 저장 한 다음 에 연산 에서 연산 원리 에 따라 가감 곱 하기, 마지막 으로 새로운 링크 가 존재 하고 정렬 하 는 것 이다. 그 중에서 이 프로그램의 등장 형식 과 곱셈 알고리즘 은 인터넷 에 있 는 한 친구 의 과정 디자인 을 참고 한 것 이다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
정수 반전Udemy 에서 공부 한 것을 중얼거린다 Chapter3【Integer Reversal】 (예) 문자열로 숫자를 반전 (toString, split, reverse, join) 인수의 수치 (n)가 0보다 위 또는 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.