c语言一元多项式相加

Python015

c语言一元多项式相加,第1张

我稍微改了一下是你的数据两项都能输出但是这个程序在La有的指数Lb也有且Lb有的指数,La也有的情况下是对的

但在这种情况下是不对的:

La:1x^1+2x^3+3x^4+4x^5+5x^6

Lb:(3,2)+(4,3)+(5,5)+(6,7)

解决办法还未想出

#include<stdio.h>

#include<stdlib.h>

typedef int datatype

typedef struct node

{

datatype xishu,zhishu,xiangshu//

struct node*next

}node,*first

//*******************//

node* jianli(node*first)

{

node *p,*q

int x=1,t=1,y

first=(node*)malloc(sizeof(node))

p=first

p->next =NULL///////////

while(x)

{

printf("请输入第%d项,例如+2 3即表示2x^3(输入0 0结束):\n",t)

scanf("%d %d",&x,&y)

if(x==0)

{

p->next=NULL

return first

}

else

{

q=(node*)malloc(sizeof(node))

q->xishu=x

q->zhishu=y

q->next =p->next

p->next=q

p=q

t++//统计有多少项

}

}

return first

}

//排序

void paixu(node*first)

{

int i,j

node *p,*max

//排序

for(max=first->nextmax->next!=NULLmax=max->next)

{

for(p=max->nextp!=NULLp=p->next)

{

if(max->zhishu<p->zhishu)//排序

{

i=max->xishu

j=max->zhishu

max->xishu=p->xishu

max->zhishu=p->zhishu

p->xishu=i

p->zhishu=j

}

}

}

}

//计算

node*jia(node*first1,node*first2,node*first3)

{

node *f1,*f2,*p,*q

int i,j

first3=(node*)malloc(sizeof(node))

p=first3

first3->next =NULL

for(f1=first1->nextf1!=NULLf1=f1->next)

{///////////////////////////////////////////

for(f2=first2->nextf2!=NULLf2=f2->next)

if(f1->zhishu==f2->zhishu)

{

i=f1->xishu+f2->xishu

j=f1->zhishu

if(i!=0)

{

q=(node*)malloc(sizeof(node))

q->xishu=i

q->zhishu=j

q->next =p->next

p->next=q//p 指向 q

p=q//p到末尾

}

}

}//////////////////////////////////////////

//f1.length<=f2.length

if(f2!=NULL)//////

{

for(f2!=NULLf2=f2->next)

{

q=(node*)malloc(sizeof(node))

q->xishu=f2->xishu

q->zhishu=f2->zhishu

p->next=q

p=q

}

p->next=NULL

return

first3

}

else////////////////////////////

return first3//////////////

}

//计算长度

int changdu(node*first)

{

node *p

int i=0

p=first->next

while(p!=NULL)

{

p=p->next

i++

}

return i

}

//输出

void shuchu(node*first)

{

node *q

q=first->next

while(q!=NULL)

{

if(q->xishu>0)

{

printf("+%dx^%d",q->xishu,q->zhishu)

q=q->next

}

else

{

printf("%dx^%d",q->xishu,q->zhishu)

q=q->next

}

}

printf("\n")

}

void main()

{

node *La,*Lb,*Lc

int i,j

abc: La=jianli(La)//多项式La Lb

Lb=jianli(Lb)

i=changdu(La)//计算La Lb的长度

j=changdu(Lb)

printf("La.length=%d,Lb,length=%d\n",i,j)

if(i<j)

Lc=jia(La,Lb,Lc)

else

Lc=jia(Lb,La,Lc)

printf("La+Lb=:")

shuchu(Lc)

paixu(Lc)

printf("排序后 La+Lb=:")

shuchu(Lc)

goto abc

}

以下以一元n次多项式X的值均为整数为例:

#include<stdio.h>

int main()

{ int i,n,x,y=0,a

printf("输入多项式有次数和X的值:\nn x=")

scanf("%d%d",&n,&x)

printf("依次输入每一项的系数:\n")

for(i=0i<=ni++)

{scanf("%d",&a)

 y=y*x+a

}

printf("%d\n",y)

return 0

}

C语言代码:

#include "stdio.h"

#include "malloc.h"

/* 链表结点结构 */

typedef struct LNode{

    double coef          /* 系数 */

    int exp              /* 指数 */

    struct LNode *next

}LNode

/* 初始化链表 */

LNode *Init()

{

    LNode *head = (LNode*)malloc(sizeof(LNode))

    head->next = NULL

    return head

}

/* 将值为data的结点插入到head链表的最后 */

void AddNode(LNode *head, double coef, int exp)

{

    LNode *pre = head->next

    LNode *temp

    temp = (LNode*)malloc(sizeof(LNode))

    temp->coef = coef

    temp->exp = exp

    temp->next = NULL

    

    if(pre == NULL)

    {

        head->next = temp

        return

    }

    for( pre->next!=NULL pre=pre->next)

    pre->next = temp

}

/* 输出head链表的所有结点的值 */

void List(LNode *head)

{

    LNode *curr

    printf("All nodes : ")

    for(curr=head->next curr!=NULL curr=curr->next)

    {

  printf("(%lf, %d)\t", curr->coef, curr->exp)

    }

    printf("\n")

}

/* 返回head链表的所有结点的数量 */

int Size(LNode *head)

{

    int len = 0

    LNode *curr

    for(curr=head->next curr!=NULL curr=curr->next,len++)

    return len

}

LNode *Add(LNode *headA, LNode *headB)

{

    LNode *currA, *currB, *headC

    double sum

    currA = headA->next

    currB = headB->next

    headC = Init()

    while(currA!=NULL && currB!=NULL)

    {

        if(currA->exp > currB->exp)

        {

            AddNode(headC, currA->coef, currA->exp)

            currA = currA->next

        }

        else if(currA->exp < currB->exp)

        {

            AddNode(headC, currB->coef, currB->exp)

            currB = currB->next

        }

        else

        {

           sum = currA->coef + currB->coef

           if(sum != 0)

           {

               AddNode(headC, sum, currA->exp)

           }

           currA = currA->next

           currB = currB->next

        }

    }

    while(currA != NULL)

    {

        AddNode(headC, currA->coef, currA->exp)

        currA = currA->next

    }

    while(currB != NULL)

    {

        AddNode(headC, currB->coef, currB->exp)

        currB = currB->next

    }

    return headC

}

void main()

{

    LNode *headA, *headB, *headC

 headA = Init()

 headB = Init()

    AddNode(headA, 1.0, 5)

    AddNode(headA, -1.0, 3)

    AddNode(headA, 1, 0)

    AddNode(headB, 0.5, 5)

    AddNode(headB, 1.0, 4)

    AddNode(headB, 1.0, 3)

    List(headA)

    List(headB)

    headC = Add(headA, headB)

    List(headC)

    

}

运行测试: