《多项式c语言编程》由会员分享,可在线阅读,更多相关《多项式c语言编程(5页珍藏版)》请在金锄头文库上搜索。
1、文档供参考,可复制、编制,期待您的好评与关注! #include stdlib.h#include stdio.htypedef struct nodedouble coef; /系数int exp; /指数struct node *next;Polynode,*Polynomial; void error(char *s)fprintf(stderr,%sn,s);exit(1);Polynode* createNode(double coef,int exp)/ 为结点分配空间Polynode *p=(Polynode*)malloc(sizeof(Polynode);if(!p)erro
2、r(分配失败);p-coef=coef;p-exp=exp;p-next=NULL; return p;void insertNode(Polynomial p,Polynode *newnode)Polynode *q=p;/找到链表的末尾,循环结束时,p指向最后一个结点while(q-next!=NULL)q=q-next;q-next=newnode; Polynomial createPolynomial(int m)double coef;int exp,i=1;Polynode *newnode;Polynomial p;/ 创建头结点newnode=createNode(0,0)
3、;/ p指向头结点p=newnode;/ 依次创建多项式各项对应的结点while(inext)q=q-next;/ 复制currentnode指向的每一个结点,链入p的末尾while(currentnode)newnode=createNode(currentnode-coef,currentnode-exp);q-next=newnode;q=q-next;currentnode=currentnode-next;void outputPolynomial(Polynomial p)Polynode *currentnode;currentnode=p-next;if(!currentnod
4、e)error(Polynomial is null);/ 输出第一项printf(%lfx%d,currentnode-coef,currentnode-exp);currentnode=currentnode-next;while(currentnode)if(currentnode-coef0)printf(+);printf(%lfx%d,currentnode-coef,currentnode-exp);currentnode=currentnode-next; printf(n);void freePolynomial(Polynomial p)Polynode *q; while
5、(p) q=p;p=p-next;free(q); Polynomial addPolynomial(Polynomial pa,Polynomial pb)Polynomial pc;Polynode *currenta,*currentb,*newnode;double coef;currenta=pa-next;currentb=pb-next;newnode=createNode(0,0);/ 创建链表pc的头结点pc=newnode;/pc指向头结点while(currenta¤tb) if(currenta-expcurrentb-exp) newnode=create
6、Node(currentb-coef,currentb-exp);insertNode(pc,newnode);currentb=currentb-next;else if(currenta-expexp)newnode=createNode(currenta-coef,currenta-exp);insertNode(pc,newnode);currenta=currenta-next;else / 代表currenta-exp=currentb-exp coef=currenta-coef+currentb-coef;if(coef!=0) newnode=createNode(coef,
7、currenta-exp);insertNode(pc,newnode); currenta=currenta-next;currentb=currentb-next; / 将pa中剩余的节点加入pc中if(currenta)append(pc,currenta);/ 将pb中剩余的节点加入pc中if(currentb)append(pc,currentb);return pc;void derivate(Polynomial p)Polynode *currentnode=p-next;while(currentnode)currentnode-coef=currentnode-coef*c
8、urrentnode-exp;currentnode-exp=currentnode-exp-1;currentnode=currentnode-next;void showMenu()printf(-n);printf( 1.求和n);printf( 2.求导n);printf( 3.退出n);printf(-n);printf(请输入要进行的操作1或2或3:); void main() Polynomial pa,pb,pc;int choice,num;while(true)showMenu();scanf(%d,&choice);printf(n); switch(choice) /
9、求和case 1:printf(请输入多项式1的项数:);scanf(%d,&num);printf(按照指数从小到大的次序,输入多项式1的系数和指数n);pa=createPolynomial(num); printf(请输入多项式2的项数:);scanf(%d,&num);printf(按照指数从小到大的次序,输入多项式2的系数和指数n);pb=createPolynomial(num);pc=addPolynomial(pa,pb);printf(多项式1:);outputPolynomial(pa);printf(多项式2:);outputPolynomial(pb);printf(求
10、和的结果:);outputPolynomial(pc);/ 释放空间freePolynomial(pa);freePolynomial(pb);freePolynomial(pc);break;/ 求导case 2:printf(请输入多项式的项数:); scanf(%d,&num);printf(按照指数从小到大的次序,输入多项式的系数和指数n);pc=createPolynomial(num); printf(输入的多项式:); outputPolynomial(pc); derivate(pc); printf(求导的结果:); outputPolynomial(pc);freePolynomial(pc); break; / 退出case 3: exit(0);/ 错误的输入default:printf(输入错误n);exit(0); /