资源预览内容
第1页 / 共5页
第2页 / 共5页
第3页 / 共5页
第4页 / 共5页
第5页 / 共5页
亲,该文档总共5页全部预览完了,如果喜欢就下载吧!
资源描述
文档供参考,可复制、编制,期待您的好评与关注! #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)error(分配失败);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);/ 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(!currentnode)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(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=createNode(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,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*currentnode-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) / 求和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(求和的结果:);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); /
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号