资源简介

在C语言下实现多项式的四则运算及合并同类项,并按升序排序的功能,已成功运行!功能模块包括合并同类项,升序排序,创建多项式,输出多项式,加法,减法,乘法,除法。

资源截图

代码片段和文件信息


  //Polynomial_list
//功能:输入两个多项式(不要求是升幂排列,程序将自动合并同类项和排序),进行加减乘除运算
#include
#include
#include
//结点定义
typedef struct PolyNode
{
  int exp;     //指数
  float coef;    //系数
  PolyNode* next;  
}PolyNode  * PolyList;

//函数声明
PolyList  CreatePolyList(); //创建多项式链表,返回头指针
void DisplayPolyList(PolyList Poly);//显示多项式
void DestroyPolyList(PolyList L);//释放链表所用存储空间
void MergePoly(PolyList Poly);//将多项式和并同类项
void SortPoly(PolyList Poly);//将多项式按升序排列
PolyList PolyAdd(PolyList PolyA  PolyList PolyB);//多项式相加,返回和多项式链表头指针
PolyList PolySub(PolyList polya  PolyList polyb);//多项式相减,返回差多项式链表头指针
PolyList PolyMutiply(PolyList PolyA  PolyList PolyB);//多项式相乘,结果由PolyC返回
PolyList PolyDivide(PolyList PolyA  PolyList PolyB);//多项式相除,结果存到PolyC中,商和余数用系数为0的结点分开
//函数实现

//创建多项式链表,返回头指针
PolyList  CreatePolyList()
{
PolyNode *s*rear*head;
int e;        //指数
float c;     //系数
int n=1;        //计数器
head =(PolyNode *) malloc(sizeof(PolyNode));
rear = head;
//输入多项式的系数和指数,若输入系数为0退出
printf(“请输入多项式的第%d项的系数和指数(用逗号分开):“  n++);
scanf(“%f%d“  &c  &e);
while(fabs(c) > 1e-6)           
{   s = (PolyNode *)malloc(sizeof(PolyNode));
    s->exp = e;
s->coef = c;
rear->next = s;
rear = s;
printf(“请输入多项式的第%d项的系数和指数:“  n++);
scanf(“%f%d“  &c  &e);
}
 rear->next = NULL;
 return head;
}

//计算两个多项式(可不按顺序排列) , 结果存到链表PolyC中,并返回
PolyList PolyAdd(PolyList PolyA  PolyList PolyB)
{
PolyList PolyC ;
SortPoly(PolyA);
SortPoly(PolyB);
float sum=0;//存储两项系数和
PolyNode *pa  *pb  *rear  *s ;
PolyC = (PolyNode *)malloc(sizeof(PolyNode));
pa = PolyA->next;
pb = PolyB->next;
rear = PolyC;
rear->next = NULL;
while(pa && pb)
{
if(pa->exp == pb->exp)
{
sum = pa->coef+pb->coef;
if(fabs(sum)>1e-6)  //如果两两系数不为0,则将两项和存入s中,并插入PolyC尾部
{
s = (PolyNode *)malloc(sizeof(PolyNode));
s->coef = sum;
s->exp = pa->exp;
rear->next = s;
rear = s;
}
//papb指针后移
pa = pa->next;
pb = pb->next;
}
else if(pa->exp>pb->exp)   //若pa指数大于pb指数,将pa结点副本插入到PolyC尾部
{
s = (PolyNode *)malloc(sizeof(PolyNode));
s->coef = pa->coef;
s->exp = pa->exp;
rear->next = s ;
rear = s ;
pa = pa->next;
}
else   //若pb指数大于pa指数,将pb结点副本插入到PolyC尾部
{
s = (PolyNode *)malloc(sizeof(PolyNode));
s->coef = pb->coef;
s->exp = pb->exp;
rear->next = s;
pb = pb->next;
rear = s ;
}
}
//插入剩余结点
while(pa)
{
s = (PolyNode *)malloc(sizeof(PolyNode));
s->coef = pa->coef;
s->exp = pa->exp;
rear->next = s;
pa = pa->next;
rear = s ;
}
while(pb)
{
s = (PolyNode *)malloc(sizeof(PolyNode));
s->coef = pb->coef;
s->exp = pb->exp;
rear->next = s;
pb = pb->next;
rear = s ;
}
rear->next = NULL;
return PolyC;
}

//释放链表所用存储空间
void DestroyPolyList(PolyList L)
{
PolyNode * p  *temp;
p = L;
while(p!=NULL)
{temp = p ; p = p->next; free(temp); }
}

//将多项式和并同类项
void MergeP

评论

共有 条评论