程序如下:
#include<stdio.h>
#include<malloc.h>
#include<math.h>
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
typedef struct DataType //定义数据类型
{
float coef;
int expn;
}ELemType;
typedef struct List
{
ELemType data;
struct List *prior;
struct List *next;
}LNode,*LinkList;
int CreatePolyn(LinkList L,int m)//创建多项式
{
LinkList p;
LinkList q;
int i;
float f=0.0;
q=L;
L->prior=L->next=L;
for(i=0;i<m;i++) //根据i的长度分别给多项式赋值
{
p=(LinkList)malloc(sizeof(LNode));
printf("请输入第%d项的系数和指数(用空格隔开):",i+1);
scanf("%f %d",&p->data.coef,&p->data.expn); //接收手动输入的系数和指数
q->next=p; // 将指针指向下一项,for循环给下一项分别赋值 系数和指数
p->prior=q;
q=q->next;
}
q->next=L;
L->prior=q;
return OK;
}
int PolynLength(LinkList L)//求多项式的项数
{
int i;
LinkList p;
p=L;
i=0;
while(p->next!=L) //while循环分别遍历多项式的每一项 当p的下一项等于L的时候结束循环,并且返回i(多项式项数)
{
i++;
p=p->next;
}
return i;
}
void AddPolyn(LinkList La,LinkList Lb)//两个多项式的相加
{
LinkList Pa;
LinkList Pb;
LinkList tmp;
Pa=La->next;
Pb=Lb->next;
while(Pa!=La&&Pb!=Lb) //如果两个多项式不为空
{
if(Pa->data.expn<Pb->data.expn)
Pa=Pa->next;
else if(Pa->data.expn>Pb->data.expn)
{
Pb->prior=Pa->prior;
Pa->prior->next=Pb;
Pb->next=Pa;
Pa->prior=Pb;
Pb=Pb->next;
}
else
{
if((Pa->data.coef+Pb->data.coef)!=0)
{
Pa->data.coef=Pa->data.coef+Pb->data.coef;
Pa=Pa->next;
Pb=Pb->next;
}
}
}
if(Pa==La&&Pb==Lb)
{}
else if(Pa==La)
{
Pa->prior->next=Pb;
Pb->prior=Pa->prior;
while(Pb!=Lb)
{
Pb=Pb->next;
}
Pb->prior->next=La;
La->prior=Pb->prior;
}
else
{}
}
void DestroyPolyn(LinkList L)//销毁多项式链表
{
LinkList p;
LinkList tmp;
p=L->next;
while(p)
{
tmp=p->next;
free(p);
p=tmp;
}
}
void PrintPolyn(LinkList L)//输出多项式
{
LinkList p;
float f;
p=L;
while(p->next!=L) //while循环多项式的每一项,然后格式化输出
{
printf("%.2f*x^%d",p->next->data.coef,p->next->data.expn);//格式化输出当前指针指向的项
f=p->next->data.coef; //当前项输出结束,将指针指向下一项
p=p->next;
if(p->next!=L&&f>0) //判断下一项的符号
printf("+");
}
printf("\n");
}
void main()
{
LNode La;
LNode Lb;
int length;
double value;
float x;
int m;
int n;
printf("请输入第一个多项式的项数:");
scanf("%d",&m);
CreatePolyn(&La,m); // 确定项数以后调用创建多项式的函数
length=PolynLength(&La); //调用求多项式长度的函数
printf("The length of the Poly is :%d\n",length); //打印多项式的长度
PrintPolyn(&La); //打印多项式
printf("请输入第二个多项式的项数:"); //创建第二个多项式
scanf("%d",&n);
CreatePolyn(&Lb,n);
length=PolynLength(&Lb);
printf("The length of the Poly is :%d\n",length);
PrintPolyn(&Lb);
printf("两多项式相加得到:");
AddPolyn(&La,&Lb); //调用多项式相加的函数求多项式相加的结果,并且将结果赋值给La
PrintPolyn(&La); //打印多项式La
length=PolynLength(&La); //求出相加以后的多项式长度
printf("The length of the Poly is:&d\n",length); //打印相加后的多项式的长度
}
为啥运行出来的结果是空白呢,应该怎么修改呢?
#include<stdio.h>
#include<malloc.h>
#include<math.h>
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
typedef struct DataType //定义数据类型
{
float coef;
int expn;
}ELemType;
typedef struct List
{
ELemType data;
struct List *prior;
struct List *next;
}LNode,*LinkList;
int CreatePolyn(LinkList L,int m)//创建多项式
{
LinkList p;
LinkList q;
int i;
float f=0.0;
q=L;
L->prior=L->next=L;
for(i=0;i<m;i++) //根据i的长度分别给多项式赋值
{
p=(LinkList)malloc(sizeof(LNode));
printf("请输入第%d项的系数和指数(用空格隔开):",i+1);
scanf("%f %d",&p->data.coef,&p->data.expn); //接收手动输入的系数和指数
q->next=p; // 将指针指向下一项,for循环给下一项分别赋值 系数和指数
p->prior=q;
q=q->next;
}
q->next=L;
L->prior=q;
return OK;
}
int PolynLength(LinkList L)//求多项式的项数
{
int i;
LinkList p;
p=L;
i=0;
while(p->next!=L) //while循环分别遍历多项式的每一项 当p的下一项等于L的时候结束循环,并且返回i(多项式项数)
{
i++;
p=p->next;
}
return i;
}
void AddPolyn(LinkList La,LinkList Lb)//两个多项式的相加
{
LinkList Pa;
LinkList Pb;
LinkList tmp;
Pa=La->next;
Pb=Lb->next;
while(Pa!=La&&Pb!=Lb) //如果两个多项式不为空
{
if(Pa->data.expn<Pb->data.expn)
Pa=Pa->next;
else if(Pa->data.expn>Pb->data.expn)
{
Pb->prior=Pa->prior;
Pa->prior->next=Pb;
Pb->next=Pa;
Pa->prior=Pb;
Pb=Pb->next;
}
else
{
if((Pa->data.coef+Pb->data.coef)!=0)
{
Pa->data.coef=Pa->data.coef+Pb->data.coef;
Pa=Pa->next;
Pb=Pb->next;
}
}
}
if(Pa==La&&Pb==Lb)
{}
else if(Pa==La)
{
Pa->prior->next=Pb;
Pb->prior=Pa->prior;
while(Pb!=Lb)
{
Pb=Pb->next;
}
Pb->prior->next=La;
La->prior=Pb->prior;
}
else
{}
}
void DestroyPolyn(LinkList L)//销毁多项式链表
{
LinkList p;
LinkList tmp;
p=L->next;
while(p)
{
tmp=p->next;
free(p);
p=tmp;
}
}
void PrintPolyn(LinkList L)//输出多项式
{
LinkList p;
float f;
p=L;
while(p->next!=L) //while循环多项式的每一项,然后格式化输出
{
printf("%.2f*x^%d",p->next->data.coef,p->next->data.expn);//格式化输出当前指针指向的项
f=p->next->data.coef; //当前项输出结束,将指针指向下一项
p=p->next;
if(p->next!=L&&f>0) //判断下一项的符号
printf("+");
}
printf("\n");
}
void main()
{
LNode La;
LNode Lb;
int length;
double value;
float x;
int m;
int n;
printf("请输入第一个多项式的项数:");
scanf("%d",&m);
CreatePolyn(&La,m); // 确定项数以后调用创建多项式的函数
length=PolynLength(&La); //调用求多项式长度的函数
printf("The length of the Poly is :%d\n",length); //打印多项式的长度
PrintPolyn(&La); //打印多项式
printf("请输入第二个多项式的项数:"); //创建第二个多项式
scanf("%d",&n);
CreatePolyn(&Lb,n);
length=PolynLength(&Lb);
printf("The length of the Poly is :%d\n",length);
PrintPolyn(&Lb);
printf("两多项式相加得到:");
AddPolyn(&La,&Lb); //调用多项式相加的函数求多项式相加的结果,并且将结果赋值给La
PrintPolyn(&La); //打印多项式La
length=PolynLength(&La); //求出相加以后的多项式长度
printf("The length of the Poly is:&d\n",length); //打印相加后的多项式的长度
}
为啥运行出来的结果是空白呢,应该怎么修改呢?