//一元多项式的求导
#include<stdio.h>
#include<malloc.h>//动态申请空间的函数的头文件
typedef struct node //定义节点类型
{float coef; //多项式的系数int expn; //多项式的指数struct node * next; //结点指针域
}PLOYList;
void insert(PLOYList *head,PLOYList *input) //查找位置插入新链节的函数,且让输入的多项式呈降序排列
{PLOYList *pre,*now;int signal=0;pre=head;if(pre->next==NULL) {pre->next=input;} //如果只有一个头结点,则把新结点直接连在后面else {now=pre->next;//如果不是只有一个头结点,则设置now指针while(signal==0){if(input->expn < now->expn){if(now->next==NULL){now->next=input;signal=1;}else{pre=now;now=pre->next;//始终让新输入的数的指数与最后一个结点中的数的指数比较,小于则插在其后面}}else if( input->expn > now->expn ){input->next=now;pre->next=input;signal=1;}//若新结点中指数比最后一个结点即now中的指数大,则插入now之前else//若指数相等则需合并为一个结点,若相加后指数为0则释放该结点{now->coef=now->coef+input->coef;signal=1;free(input);if(now->coef==0){pre->next=now->next;free(now);}}//else} //while}//else
}//voidPLOYList *creat(char ch) //输入多项式
{PLOYList *head,*input;float x;int y;head=(PLOYList *)malloc(sizeof(PLOYList)); //创建链表头head->next=NULL;scanf("%f %d",&x,&y);//实现用户输入的第一个项,包括其指数和系数while(x!=0)//当用户没有输入结束标志0时可一直输入多项式的项,且输入一个创建一个结点{input=(PLOYList *)malloc(sizeof(PLOYList)); //创建新链节input->coef=x;input->expn=y;input->next=NULL;insert(head,input); //每输入一项就将其排序,是的链表中多项式呈降序排列scanf("%f %d",&x,&y);}
return head;
}
PLOYList *der(PLOYList *head)//多项式求导
{PLOYList *p;p = head -> next;while (p){p -> coef = p -> coef * p -> expn;p -> expn = p -> expn--;p = p -> next;}return head;
}//将多项式的每项系数和指数相乘得到新的系数,指数减一得到新的指数即完成求导void print(PLOYList *fun) //输出多项式,fun指要输出的多项式链表的表头
{PLOYList *printing;int flag=0;printing=fun->next;if(fun->next==NULL)//若为空表,则无需输出{printf("0\n");return;}while(flag==0){if(printing->coef>0&&fun->next!=printing)printf("+");if(printing->coef==1);else if(printing->coef==-1)printf("-");elseprintf("%f",printing->coef);if(printing->expn!=0) printf("x^%d",printing->expn);else if((printing->coef==1)||(printing->coef==-1))printf("1");if(printing->next==NULL)flag=1;elseprinting=printing->next;}
printf("\n");
}
void main()
{PLOYList *f;printf(" 注:输入多项式格式为:系数1 指数1 系数2 指数2 …… ,并以0 0 结束:\n");printf("请输入一个一元多项式:");f = creat('f');printf("这个多项式为:f(x)= ");print(f);printf("求导结果为:F(x)=f'(x)= ");f=der(f);print(f);printf("\n\n");}
wordpress主页音乐/seo关键词优化怎么收费
转载于:https://www.cnblogs.com/zhuhengjie/p/5966949.html