多项式c语言编程
#include "stdlib.h"#include "stdio.h"typedefstruct node{double coef; //系数int exp; //指数struct node *next;}Polynode,*Polynomial; void error(char *s){fprintf(stderr,"%s\n",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;intexp,i=1;Polynode *newnode;Polynomial p;// 创建头结点newnode=createNode(0,0);// p指向头结点p=newnode;// 依次创建多项式各项对应的结点while(i<=m){printf("系数=");scanf("%lf",&coef);printf("指数=");scanf("%d",&exp);newnode=createNode(coef,exp);insertNode(p,newnode);i=i+1;}return p;}void append(Polynomial p,Polynode *currentnode){Polynode *newnode,*q;// 找到链表p的尾结点qq=p;while(q->next)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->coef>0)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,Polynomialpb){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->exp>currentb->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,newno