qq_40398881
叶知安
2017-11-07 13:21

输入两个多项式的系数和幂次,进行简单的加减乘。这个程序可以运行没有报错,但是一到选择运算就死了

  • c
  • 链表
  • 指针

#include
#include
#include
#define SHI sizeof(struct duoxiangshi)
#define NULL 0
struct duoxiangshi
{
int xishu,zhishu;
struct duoxiangshi*next;
};
struct duoxiangshi*create()
{
struct duoxiangshi*head,*p1,*p2;
int n;
n=0;
head=NULL;
p2=NULL;
p1=NULL;
p1=(struct duoxiangshi*)malloc(SHI);
scanf("%d %d",&p1->xishu,&p1->zhishu);
while(p1->xishu!=NULL)
{
++n;
if(n==1)
{
head=p1;p2=p1;
}
else{p2->next=p1;p2=p1,p2->next=NULL;
}
p1=(struct duoxiangshi*)malloc(SHI);
scanf("%d %d",&p1->xishu,&p1->zhishu);
p1->next=NULL;
}
free(p1);
return (head);
}

void paixu(struct duoxiangshi*head)
{
struct duoxiangshi*p1,*p2;
int t=0;
p1=head;
p2=head;
for( ; ;p1=p1->next)
{
if(p1->next==NULL)
break;
for(p2=p1->next; ;p2=p2->next)
{
if(p1->zhishu>p2->zhishu)
{
t=p1->zhishu;
p1->zhishu=p2->zhishu;
p2->zhishu=t;
t=p1->xishu;
p1->xishu=p2->xishu;
p2->xishu=t;
}

    if(p2->next==NULL)
        break;
    }
}

}
struct duoxiangshi*add(struct duoxiangshi*head1,struct duoxiangshi*head2)
{
struct duoxiangshi*p1,*p2,*s,*p3,*head3;
int n=1;
p1=head1;
p2=head2;
head3=NULL;
p3=NULL;
while(p1!=NULL&&p2!=NULL)
{
s=(struct duoxiangshi*)malloc(SHI);
++n;
if(n==1) head3=s;
if(p1->zhishu>p2->zhishu)
{
s->zhishu=p2->zhishu;
s->xishu=p2->xishu;
p2=p2->next;
}
else if(p1->zhishuzhishu)
{
s->zhishu=p1->zhishu;
s->xishu=p1->xishu;
p1=p1->next;
}
else
{
s->zhishu=p1->zhishu;
s->xishu=p1->xishu+p2->xishu;
p1=p1->next;
p2=p2->next;
}
p3->next=s;
p3=s;

}
p3->next=NULL;
if(p1!=NULL)
p3->next=p1;
if(p2!=NULL)
p3->next=p2;
return (head3);

}
struct duoxiangshi* minus(struct duoxiangshi*head1,struct duoxiangshi*head2)
{
struct duoxiangshi*p2;
p2=head2;
while(p2!=NULL)
{
p2->xishu=(-1)*p2->xishu;
p2=p2->next;
}
return (add(head1,head2));
}
struct duoxiangshi* multiply(struct duoxiangshi*px,struct duoxiangshi*py)
{
int n=0,i=0,j=0;
struct duoxiangshi*heada,*headb,*pa,*pb,*lasta,*lastb,*p2,*p1;
p1=heada=headb=pa=pb=lasta=lastb=NULL;
p2=py;

while (p2!=NULL)
{
    n++;
    if(n==1)
    {
        p1=px;
while(p1!=NULL)

{i++;
pa=(struct duoxiangshi*)malloc(SHI);
if(i==1) heada=pa;
else lasta->next=pa;
lasta=pa;
pa->xishu=p1->xishu*p2->xishu;
pa->zhishu=p1->zhishu+p2->zhishu;
pa->next=NULL;
p1=p1->next;
}
}
else
{p1=px;
while(p1!=NULL)
{
j++;
pb=(struct duoxiangshi*)malloc(SHI);
if(j==1) headb=pb;
else lastb->next=pb;
lastb=pb;
pb->xishu=p1->xishu*p2->xishu;
pb->zhishu=p1->zhishu+p2->zhishu;
pb->next=NULL;
p1=p1->next;
}

}
p2=p2->next;
if(n!=1)heada=add(heada,headb);
}
return(heada);
}
void print (struct duoxiangshi*head3)
{
struct duoxiangshi*p3;
p3=head3;

do
{
    if(p3->zhishu==0)
    {printf("%d",p3->xishu);
    p3=p3->next;
    continue;
}
else if(p3==head3)
{
    printf("%dx%d",p3->xishu,p3->zhishu);
    p3=p3->next;
    continue;
}
else if(p3->xishu<0)
printf("%dx%d",p3->xishu,p3->zhishu);
else if(p3->xishu>0)
printf("+%dx%d",p3->xishu,p3->zhishu);
p3=p3->next;
}
while(p3!=NULL);
printf("\n\n");

}
void main()
{
struct duoxiangshi*p1,*p2,*p3;
int c=0;
char d;
do
{
printf("please input A:\n");
p1=create();
paixu(p1);
printf("\nthe A is:");
print(p1);
printf("please input B:\n");
p2=create();
paixu(p2);
printf("\nthe B is:");
print(p2);

    printf("\n      please choice :\n");
    printf("*********************************\n");
    printf("1.add     2.minu     3.multiply\n");
    printf("*********************************\n");
    scanf("%d",&c);
switch(c)
{
    case 1:p3=add(p1,p2);
    break;
    case 2:p3=minus(p1,p2);
    break;
    case 3:p3=multiply(p1,p2);
    break;
    default:printf("\nerror");
}
    printf("\nthe result is :");
    print(p3);
    printf("do you still have anything to do?(y/n):\n");
    scanf("%c",&d);
    getchar();
    system("cls");
    }
while(d!='n'&&d!='N');

}

  • 点赞
  • 回答
  • 收藏
  • 复制链接分享

0条回答