一元稀疏多项式计算器 【 数据结构课设 ,Java高级开发笔试题

		if (q->coef == 1)

		{

			if (q->expn == 0) printf("1");

			else if (q->expn == 1) printf("x");

			else printf("x^%d", q->expn);

		}

		if (q->coef == -1)

		{

			if (q->expn == 0) printf("-1");

			else if (q->expn == 1) printf("-x");

			else printf("-x^%d", q->expn);

		}

	}

	q = q->next;

}

printf("\n");

}

int compare(Polyn a, Polyn b)//比较两个多项式的大小

{

if (a&&b)  // 多项式a和b均不为空

{

	if (a->expn > b->expn) return 1;// a的指数大于b的指数

	else if (a->expn < b->expn) return -1;

	else return 0;

}

else if (!a&&b) return -1; //a为空,b不为空

else if (a&&!b) return 1;  //b为空,a不为空 

else if (!a&&!b)return 0;  //a,b均为空

}

Polyn addPolyn(Polyn a, Polyn b) //求解a+b,并返回头结点head

{

Polyn head ,qc;

Polyn qa = a->next;

Polyn qb = b->next;

Polyn hc=(Polyn)malloc(sizeof(Polynomial));

hc->next = NULL;

head = hc;

while (qa || qb)

{

	qc= (Polyn)malloc(sizeof(Polynomial));

	if (compare(qa, qb) == 1)

	{

		qc->coef = qa->coef;

		qc->expn = qa->expn;

		qa = qa->next;

	}

	else if (compare(qa, qb) == 0) //指数相同,直接相加

	{

		qc->coef = qa->coef + qb->coef;

		qc->expn = qa->expn ; 

		qa = qa->next;

		qb = qb->next;

	}

	else

	{

		qc->coef = qb->coef;

		qc->expn = qb->expn;

		qb = qb->next;

	}

     

	if (qc->coef != 0) //将该节点插入链表中

	{

		qc->next = hc->next;

		hc->next = qc;

		hc = qc;

	}

	else free(qc);		

}

return head;

}

Polyn subPolyn(Polyn a, Polyn b)

{

Polyn h = b;

Polyn p = b->next;

while(p)

{

	p->coef *= -1;

	p = p->next;

}

Polyn head = addPolyn(a, h);

for (Polyn i = h->next; i != 0; i = i->next)

{ 

	i->coef *= -1;

}		

return  head;

}

double value(Polyn head, int x) //计算x的值

{

double sum = 0;

for (Polyn p = head->next; p != 0; p = p->next)

{

	int tmp = 1;

	int expn = p->expn;

	while(expn != 0) //指数不为0

	{

		if (expn < 0)   tmp /= x, expn++;

		else if(expn>0) tmp *= x, expn--;

	}

	sum += p->coef*tmp;

}	

return sum;

}

int main()

{

int m;

Polyn a = 0, b = 0;

printf("请输入a的项数:");

scanf("%d", &m);

a = 
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值