void MultiPolyn(polynomial &Pa,polynomial &Pb){ LNode *qa = Pa->next; LNode *qb = Pb->next; LNode *qd = (LNode*)malloc(sizeof(LNode)); qd->next = NULL; while(qb){ LNode *qc = (LNode *)malloc(sizeof(LNode)); qc->next = NULL; LNode *p = qc; qa = Pa->next; while(qa){ LNode *node = (LNode *)malloc(sizeof(LNode)); term t; t.coef = qb->data.coef * qa->data.coef; t.expn = qb->data.expn + qa->data.expn; node->data = t; node->next = p->next; p->next = node; p = p->next; qa = qa->next; } AddPolyn(qd,qc); qb = qb->next; } Pa = qd; free(Pb); }
void main() { polynomial p,q; int m; printf("请输入第一个一元多项式的非零项的个数:"); scanf("%d",&m); CreatPolyn(&p,m); printf("请输入第二个一元多项式的非零项的个数:"); scanf("%d",&m); CreatPolyn(&q,m); AddPolyn(&p,&q); printf("两个一元多项式相加的结果:\n"); PrintPolyn(p); printf("请输入第三个一元多项式的非零项的个数:"); scanf("%d",&m); CreatPolyn(&q,m); AddPolyn1(&p,&q); printf("两个一元多项式相加的结果(另一种方法):\n"); PrintPolyn(p); printf("请输入第四个一元多项式的非零项的个数:"); scanf("%d",&m); CreatPolyn(&q,m); SubtractPolyn(&p,&q); printf("两个一元多项式相减的结果:\n"); PrintPolyn(p); printf("请输入第五个一元多项式的非零项的个数:"); scanf("%d",&m); CreatPolyn(&q,m); MultiplyPolyn(&p,&q); printf("两个一元多项式相乘的结果:\n"); PrintPolyn(p); DestroyPolyn(&p); }
int main() { int result; poly p; poly b; Elem dat,dat1,dat2; createElem(&dat,0.0,0); createElem(&dat1,0.2,2); createElem(&dat2,0.3,3); create(&p); create(&b); //insertHead(p,dat1); //insertTail(p,dat2); OrderInsert(p,dat2,compareExpn); OrderInsert(p,dat1,compareExpn); traverse(p,print); LocElem(p, dat1, compareBoth,&result,"compareBoth"); createElem(&dat2,0.1,3); OrderInsert(p,dat2,compareExpn); traverse(p,print); createElem(&dat2,-0.1,2); OrderInsert(p,dat2,compareExpn); traverse(p,print); printf("---------------------------------------\n"); createElem(&dat2,-0.3,5); OrderInsert(p,dat2,compareExpn); traverse(p,print); printf("---------------------------------------\n"); //createElem(&dat2,0.5,1); createElem(&dat2,0.4,4); OrderInsert(b,dat2,compareExpn); createElem(&dat2,-0.1,2); OrderInsert(b,dat2,compareExpn); createElem(&dat2,-0.5,8); OrderInsert(b,dat2,compareExpn); createElem(&dat2,-0.9,7); OrderInsert(b,dat2,compareExpn); createElem(&dat2,-0.4,3); OrderInsert(b,dat2,compareExpn); traverse(b,print); printf("---------------------------------------\n"); AddPolyn(p,b); traverse(p,print); printf("---------------------------------------\n"); destroy(&p); destroy(&b); return OK; }
//主函数 int main() { int m; float x; polynomial p1,p2;//建立新链表 p1.head=NULL; p1.tail=NULL; p1.len=0; p2.head=NULL; p2.tail=NULL; p2.len=0; printf("请输入关于x的多项式1中x的最高次幂:"); scanf("%d",&m); if(m<0) { printf("输入值非法!\n"); } CreatePolyn(&p1,m);//创建多项式 printf("多项式1"); PrintPolyn(&p1);//显示多项式1 printf("请输入关于x的多项式2中x的最高次幂:"); scanf("%d",&m); if(m<0) { printf("输入值非法!\n"); } CreatePolyn(&p2,m);//创建多项式 printf("多项式2"); PrintPolyn(&p2);//显示多项式 AddPolyn(&p1,&p2); printf("和多项式"); PrintPolyn(&p1);//输出和多项式 printf("输入x的值:"); scanf("%f",&x); printf("多项式在x=%g时,值为%g",x,ComputeValue(&p1,x));//输出多项式求值 DestroyPolyn(&p1);//销毁多项式 return 0; }
void SubtractPolyn(polynomail *pa, polynomail *pb) { ListTraverse(*pb, inverse); AddPolyn(pa, pb); }