问题描述
- 我刚刚入门,写一个一元多项式的简单计算,求帮忙解决这个加减问题,代码如下,帮忙找出错误,急急急
-
#include
#include
typedef struct node
{
float c;
int e;
struct node * next;
}lnode,*plnode;
void insert_menu();
void insert_pol(plnode &l);
void output_pol(plnode &l);
void add_pol(plnode list1, plnode list2);
void sub_pol(plnode list1, plnode list2);
void main()
{
plnode A,B,l;
int n;
A=(plnode)malloc(sizeof(lnode));
B=(plnode)malloc(sizeof(lnode));
l=(plnode)malloc(sizeof(lnode));
while(1)
{
insert_menu();
printf("输入你要选择的操作:");
do
{
scanf("%d",&n);
getchar();
if(n7)
printf("不存在该操作n请重新输入你要选择的操作:");
}while(n7);
switch(n)
{
case 1:insert_pol(A);break;
case 2:insert_pol(B);break;
case 3:output_pol(A);break;
case 4:output_pol(B);break;
case 5:add_pol(A,B);break;
case 6:sub_pol(A,B);break;
case 7:exit(0);
}
}
}
void insert_menu()
{
printf("**********************主菜单*********************n");
printf(" 1、输入并建立多项式 An");
printf(" 2、输入并建立多项式 Bn");
printf(" 3、输出多项式 An");
printf(" 4、输出多项式 Bn");
printf(" 5、两个多项式相加,输出结果多项式n");
printf(" 6、两个多项式相减,输出结果多项式n");
printf(" 7、退出程序n");
printf("*************************************************n");
}
void insert_pol(plnode &l)
{
plnode s,p;
int i,n;
l=(plnode)malloc(sizeof(lnode));
l->next=NULL;
p=l;
printf("请输入多项式项数:");
scanf("%d",&n);
system("cls");
for(i=0;i
{
s=(plnode)malloc(sizeof(lnode));
printf("请依次输入多项式第%d项的系数和指数:n",i+1);
scanf("%f %d",&s->c,&s->e);
s->next = NULL;p->next = s;
p = s;
}
system("cls");
}
void output_pol(plnode &l)
{plnode p,s1,s2,b;
b=(plnode)malloc(sizeof(lnode));
p = l->next;
s1=p;
s2=p->next;
if (p==NULL)
{
printf("P(x,n)=0");
}
printf("P(x,n)=");
for(s1=p;s1!=NULL;s1=s1->next)
{
for(s2=s1->next;s2!=NULL;s2=s2->next)
{
if(s1->e > s2->e)
{
b->e=s1->e;
s1->e=s2->e;
s2->e=b->e;
b->c=s1->c;
s1->c=s2->c;
s2->c=b->c;
}
}
}
while (p){
printf("%f*X^%d",p->c,p->e);
p = p->next;if(p != NULL)
printf("+");
}
printf("n");
}
void add_pol(plnode list1, plnode list2)
{
plnode p,a,b;
p=(plnode)malloc(sizeof(lnode));
for(a=list1->next;a!=NULL;a=a->next)
for(b=list2;b->next!=NULL;b=b->next)
{
if(a->e == b->next->e)
{
a->c=a->c+b->next->c;
p=b->next;
b->next=p->next;
free(p);
}
}
while(1)
{
if(a->next==NULL)
{
a->next=b->next;break;
}
a=a->next;
}
output_pol(a);
}
void sub_pol(plnode list1, plnode list2)
{
plnode p,a,b,q;
p=(plnode)malloc(sizeof(lnode));
for(a=list1;a->next!=NULL;a=a->next)
for(b=list2;b->next!=NULL;b=b->next)
{
if(a->next->e == b->next->e)
{
a->next->c=a->next->c-b->next->c;
if(a->next->c==0)
{
q=a->next;
a->next=q->next;
free(q);
}
p=b->next;
b->next=p->next;
free(p);
}
}
while(1)
{
if(a->next==NULL)
{
a->next=b->next;break;
}
a=a->next;
}
while(b->next)
{
b->next->c=-b->next->c;
b=b->next;
}
output_pol(a);
}
解决方案
for(a=list1->next;a!=NULL;a=a->next)
for(b=list2;b->next!=NULL;b=b->next)
这里循环不能这么写,得写成
for (a = list1->next, b = list2; a != NULL && b->next != NULL; a = a->next, b = b->next)