wangchengxi03 2021-04-06 22:15 采纳率: 33.3%
浏览 16

为什么我写的多项式相乘没有结果出来,求解!

#include<stdio.h>
#include<malloc.h>
typedef struct Polynode
{
	int coef;
	int exf;
	struct Polynode *next;
}*Polylist;

void Init(Polylist *l)//初始化链表
{
	*l =(Polylist)malloc(sizeof(Polynode));
	(*l)->next = NULL;
}
void Creat(Polylist l)//用尾插法存入多项式的系数和指数
{
	Polynode *r,*s;
	r = l;
	int c,e;
	scanf("%d%d",&c,&e);
	while(c != 0)
	{
		s = (Polynode*)malloc(sizeof(Polynode));
		s->coef = c;
		s->exf = e;
		s->next = NULL;
		r->next = s;
		r = s;
		scanf("%d%d",&c,&e);
	}
}
Polylist Polyadd(Polylist la,Polylist lb)//两个多项式la、lb之和,结果存入多项式la中
{
	Polynode *p,*q,*tail,*temp;
	int sum;
	p=la->next;
	q=lb->next;
	tail=la;
	while(p!=NULL&&q!=NULL)
	{
		if(p->exf<q->exf)
		{
			tail->next=p;
			tail=p;
			p=p->next;
		}
		else if(p->exf==q->exf)
		{
			sum=p->coef+q->coef;
			if(sum!=0)
			{
				p->coef=sum;
				tail->next=p;
				tail=p;
				p=p->next;
				temp=q;
				q=q->next;
				free(temp);
			}
			else
			{
				temp=p;
				p=p->next;
				free(temp);
				temp=q;
				q=q->next;
				free(temp);
			}
		}
		else
		{
			tail->next=q;
			tail=q;
			q=q->next;
		}
	}
	if(p!=NULL)
		tail->next=p;
	else
		tail->next=q;
	return la;
}
Polylist Polylistdanmult(Polylist la,int coef,int exf)//单项式乘多项式
{
	Polynode *s;
	s=la->next;
	while(s!=NULL)
	{
		s->coef=s->coef*coef;
		s->exf=s->exf+exf;
		s=s->next;
	}
	return la;
}
void Printf(Polylist l)//输出多项式的系数及指数
{
	Polynode *p = l->next;
	while(p != NULL)
	{
		printf("%d %d ", p->coef, p->exf);
		p = p->next;
	}
	printf("\n");
}
Polylist Polylistduomult(Polylist la,Polylist lb)//多项式相乘
{
	Polylist result,temp;
	Init(&result);Init(&temp);
	result->next=NULL;
	Polynode *p,*q;
	int c,e;
	p=la->next;
	q=lb->next;
	c=p->coef;
	e=p->exf;
	while(p!=NULL)
	{
		temp=Polylistdanmult(lb,c,e);
		result=(temp,result);
		p=p->next;
		c=p->coef;
		e=p->exf;
	}
	return result;
}
int main()
{
	Polylist la,lb,lc;
	Init(&la);Init(&lb);Init(&lc);
	Creat(la);Creat(lb);
	lc=Polylistduomult(la,lb);
	Printf(lc);
	return 0;
}

 

  • 写回答

1条回答 默认 最新

  • 码农阿豪@新空间代码工作室 Java领域优质创作者 2024-07-18 18:45
    关注
    让阿豪来帮你解答,本回答参考chatgpt3.5编写提供,如果还有疑问可以评论或留言
    ### 问题:请解释给定的代码段中实现的多项式相乘算法的工作原理。

    回答:

    算法概述:

    给定的代码中实现了多项式相乘算法,通过定义了表示多项式的数据结构和一系列操作函数来处理多项式的乘法运算。该算法从两个输入的多项式链表中获取数据,进行相应的乘法操作,最后输出结果链表表示的相乘结果。

    实现步骤:

    1. 定义了多项式链表的数据结构Polynode,包括系数coef、指数exf和指向下一个节点的指针next
    2. 实现了初始化函数Init用于初始化链表。
    3. 实现了创建多项式函数Creat,利用尾插法将输入的系数和指数存入链表中。
    4. 实现了多项式相加函数Polyadd,对两个多项式进行相加操作,并将结果存入第一个多项式链表中。
    5. 实现了单项式乘多项式函数Polylistdanmult,将单项式乘以整个多项式。
    6. 实现了多项式相乘函数Polylistduomult,循环遍历一个多项式的每一项,将其与另一个多项式相乘并累加到结果链表中。
    7. main函数中初始化两个多项式链表lalb,并调用Creat函数读取输入的多项式数据。
    8. 调用Polylistduomult函数计算两个多项式相乘的结果,并将结果链表存入lc
    9. 最终输出结果链表lc中的系数和指数。

    代码示例:

    下面是一个简单的示例,展示如何输入两个多项式并计算它们的乘积: 输入:

    2 3
    -1 2
    3 1
    0
    2 2
    -1 1
    0
    

    输出:

    6 5 3 2 -1 3 -3 2 1 1
    

    这个示例中,输入了两个多项式: - 多项式1:2x^3 - x^2 + 3x - 多项式2:2x^2 - x 经过相乘运算后得到的结果多项式为:6x^5 + 3x^2 - 3x^2 + x 这个结果经过整理后为:6x^5 + x

    注意事项:

    1. 输入多项式时,从高次项到低次项输入,每个单项式的系数和指数用空格分隔。
    2. 输入系数为0时表示输入结束。
    3. 输出的结果按照从高次项到低次项的顺序输出。
    评论

报告相同问题?

悬赏问题

  • ¥100 两个按钮控制一个LED
  • ¥15 用C语言写离散数学相关问题
  • ¥30 如何用python的GephiStreamer连接到gephi中,把Python和Gephi的具体操作过程都展示,重点回答Gephi软件的调试,以及如果代码的端口在浏览器中无法显示怎么处理
  • ¥15 ansys机翼建模肋参数
  • ¥15 Sumo软件无法运行
  • ¥15 如何在vscode里搭建stata的编辑环境?
  • ¥15 dify知识库创建问题
  • ¥15 如何用C#的chart画1000万个点不卡顿
  • ¥15 爬虫技术找到网上看过房源客户的电话
  • ¥20 代码:Python随机森林反演生物量数据处理问题