已知稀疏多项式C语言版,一元稀疏多项式计算器(c语言版本) 急!!!!!!...

/*:--------------一元稀疏多项式计算(部分)--------------*

基本功能:

(1)输入并建立多项式;

(2)多项式输出,以 c1,e1,c2,e2,...输出

其中ci为系数,ei为指数;

(3)多项式相加,c=a+b。

说明:(1)多项式一指数升序排序,但输入时不检查    (2)以带头指针的单链表存储。

*-------------------------------------------------------*/

#define OK    1

#define FAILE    0

#define ERROR    0

#define OVERFLOW 0

#include

using namespace std;

typedef struct PolynNode {    /*某一项*/

double coef;    /*系数*/

int expn;    /*指数*/

} ElemType,term;

typedef struct LNode {

ElemType data;

struct LNode *next;

}LNode,*LinkList;

typedef LinkList Polyn;    /*带头结点*/

int init_polyn(Polyn head,int n)

{

/*创建有n项的多项式,n应大于0,但不作检查*/

/*指数e1

Polyn p,q = head;

double coef;

int expn,count=0;

if(head == NULL)

return ERROR;

if((p = (Polyn)malloc(sizeof(LNode))) == NULL)

return OVERFLOW;

printf("Please input n pairs of coef and expn.\n");

for(count = 0;count < n;count++) {

q->next = p;

q = p;

scanf("%f%d",&coef,&expn);

p->data.coef = coef;

p->data.expn = expn;

if((p = (Polyn)malloc(sizeof(LNode))) == NULL)

return OVERFLOW;

}

q->next = NULL;/*尾*/

return OK;

}

int print_polyn(Polyn head)

{

/*输出*/

Polyn p=head->next;

int count=0;

if(head == NULL)

return ERROR;

while(p != NULL) {

printf("%.4f  %3d",p->data.coef,p->data.expn);

count++;

if((count % 10 == 0) && (!count))

printf("\n");

p = p->next;

}

printf("\n");

return OK;

}

int add_polyn(Polyn ha,Polyn hb,Polyn hc)

{

/*多项式相加*/

Polyn p1 = ha,p2 = ha,q1 = hb,q2 = hb;

hc = ha;

while( (p1 != NULL) && (q1 != NULL)) {

if(p1->data.expn < q1->data.expn) {    /*p1指数

p2 = p1;

p1 = p1->next;

}

else {

if(p1->data.expn == q1->data.expn) {    /*q1指数==p1指数*/    if(!(p1->data.coef + q1->data.coef)) {/*系数之和为0*/    p1 = p1->next;    free(p2->next);    p2->next = p1;    q1 = q1->next;    free(q2->next);    q2->next =q1;    }    else {    /*系数之和不为0*/    p1->data.coef += q1->data.coef;    p2 = p1;    p1 = p1->next;    q1 = q1->next;    free(q2->next);    q2->next =q1;    }

}

else {    /*q1指数next = q1;    q1->next = p1;    p2 = p2->next;    q1 = q1->next;    q2->next = q1;

}

}

}

if(p1 == NULL) {    /*p1结束了,q1未结束*/

p2->next = q1;

}

ha->next = NULL;

free(ha);

free(hb);

return OK;

}

int main()

{

int creat_polyn(Polyn head);

int init_polyn(Polyn head,int n);

int print_polyn(Polyn head);

int add_polyn(Polyn ha,Polyn hb,Polyn hc);

LNode polyn1,polyn2;

Polyn ha = &polyn1,hb = &polyn2,hc;

int n;

printf("How many terms do you want to initial the polynomial ha? Input a number.\n");

scanf("%d",&n);

init_polyn(ha,n);

print_polyn(ha);

printf("How many terms do you want to initial the polynomial hb? Input a number.\n");

scanf("%d",&n);

init_polyn(hb,n);

print_polyn(hb);

add_polyn(ha,hb,hc);

print_polyn(hc);

return 0;

}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值