社区
C语言
帖子详情
求助:求高手关于一元多项式计算的算法
jeffer365
2005-09-06 02:05:22
刚学c不久,求一元多项式计算的算法。
要求:能够按照指数降序排列建立并输出多项式;
能够完成两个多项式的相加、减,并输出结果。
...全文
273
5
打赏
收藏
求助:求高手关于一元多项式计算的算法
刚学c不久,求一元多项式计算的算法。 要求:能够按照指数降序排列建立并输出多项式; 能够完成两个多项式的相加、减,并输出结果。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
5 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
jeffer365
2005-09-06
打赏
举报
回复
感谢你们的指点~~!
snowbirdfly
2005-09-06
打赏
举报
回复
你最好看看书本,链表的一般操作,诸如插入结点\删除结点~~
应该不是太难~~~
snowbirdfly
2005-09-06
打赏
举报
回复
#include <stdio.h>
#include "conio.h"
#include <stdlib.h>
#include "malloc.h"
#define M 3//可以改变输入的多项式的项数
#define N 2
typedef struct poly *polytype;
struct poly{
float coef;
int exp;
polytype next;
};
polytype Create_Empty_Node(int );
void Input_Values(polytype ,int );
void Insert_Node(polytype ,float ,int );
void Add_Poly(polytype ,polytype );
void Sub_Poly(polytype ,polytype );
void OutPut_Results(polytype);
void OutPut_Values(polytype);
int Infact(int ,int);/*计算阶乘*/
int main()
{
polytype pa,pb;
pa = Create_Empty_Node(M);//对加法进行操作
printf("Please Input ListPoly pa:%d\n",M);
Input_Values(pa,M);
printf("A(x) =\t");
OutPut_Results(pa->next);
pb = Create_Empty_Node(N);
printf("Please Input ListPoly pb:%d\n",N);
Input_Values(pb,N);
printf("B(x) =\t");
OutPut_Results(pb->next);
Add_Poly(pa,pb);
printf("Add Results Are:\n");
printf("C(x) = A(x) + B(x) =\t");
OutPut_Results(pa->next);/*从第一个结点输出*/
OutPut_Values(pa->next);
pa = Create_Empty_Node(M);//对减法进行操作
printf("Please Input ListPoly pa:%d\n",M);
Input_Values(pa,M);
printf("A(x) =\t");
OutPut_Results(pa->next);
pb = Create_Empty_Node(N);
printf("Please Input ListPoly pb:%d\n",N);
Input_Values(pb,N);
printf("B(x) =\t");
OutPut_Results(pb->next);
Sub_Poly(pa,pb);
printf("Sub Results Are:\n");
printf("D(x) = A(x)-B(x) =\t");
OutPut_Results(pa->next);
OutPut_Values(pa->next);
/*pa = Create_Empty_Node(M);//对乘法进行操作
printf("Please Input ListPoly pa:%d\n",M);
Input_Values(pa,M);
printf("A(x) =\t");
OutPut_Results(pa->next);
pb = Create_Empty_Node(N);
printf("Please Input ListPoly pb:%d\n",N);
Input_Values(pb,N);
printf("B(x) =\t");
OutPut_Results(pb->next);
By_Poly(pa,pb);
printf("E(x) =\t");
OutPut_Results(pa->next);/*从第一个结点输出*/
/*OutPut_Values(pa->next);*/
getchar();
return 0;
}
polytype Create_Empty_Node(int n)
{
polytype p;
p = (polytype)malloc(sizeof(struct poly));
if(p != NULL){
p->coef = (float)n;
p->exp = -1;
p->next = NULL;
}
else
printf("Failed To malloc!");
return
p;
}
void Input_Values(polytype p,int t)
{
float m;
int n;
for(int i = 0 ;i < t;i++)
{
scanf("%f",&m);
scanf("%d",&n);
Insert_Node(p,m,n);
}
}
void Insert_Node(polytype p,float coef,int exp)
{
polytype q,r;
q = p;
while(q->next != NULL )/*找到链表的结尾*/
q = q->next;
r = (polytype)malloc(sizeof(struct poly));
if(r == NULL)
{
printf("The Memory Is Full!");
exit(1);
}
else{
r->coef = coef;
r->exp = exp;
r->next = NULL;
q->next = r;
}
}
void Add_Poly(polytype pa,polytype pb)
{
float x = 0;
polytype p,q,pre,u;
p = pa->next;
q = pb->next;
pre = pa;
while(p && q)
{
if(p->exp < q->exp){
pre = p;
p = p->next;
}
else if(p->exp == q->exp){
x = p->coef+q->coef;
if(x){
p->coef = x;
pre = p;
}
else{
pre->next = p->next;
free(p);
}
p = pre->next;
u = q;
q = q->next;
free(u);
}
else{
u = q->next;
q->next = p;
pre ->next = q;
pre = q;
q = u;
}
}
if(q)
pre->next = q;
free(pb);
}
void Sub_Poly(polytype pa,polytype pb)
{
float x = 0;
polytype p,q,pre,u;
p = pa->next;
q = pb->next;
pre = pa;
while(p && q)
{
if(p->exp < q->exp){
pre = p;
p = p->next;
}
else if(p->exp == q->exp){
x = p->coef-q->coef;
if(x){
p->coef = x;
pre = p;
}
else{
pre->next = p->next;
free(p);
}
p = pre->next;
u = q;
q = q->next;
free(u);
}
else{//p->coef > q->coef
u = q->next;
q->next = p;
q->coef = -q->coef;
pre ->next = q;
pre = q;
q = u;
}
}
if(q){
pre->next = q;
q->coef = -q->coef;
}
free(pb);
}
/*void By_Poly(polytype pa,polytype pb)
{*/
void OutPut_Results(polytype pa)
{
polytype p;
for(p = pa;p->next != NULL;p = p->next)
{
printf("%.1fX^%d\t+",p->coef,p->exp);
}
printf("%.1fX^%d\n",p->coef,p->exp);
}
void OutPut_Values(polytype pa)
{
polytype p;
int x;
float Sum;
Sum = 0;
printf("Please Input X:\n");
scanf("%d",&x);
for(p = pa;p != NULL;p = p->next)
{
Sum += p->coef*Infact(x,p->exp);
}
printf("The Results Is :\n");
printf("%.1f\n",Sum);
}
int Infact(int m,int n)
{
int Fact;
Fact = 1;
for(int t = 0;t < n;t++)
Fact = Fact * m;
return Fact;
}
snowbirdfly
2005-09-06
打赏
举报
回复
是啊~
就是链表的一般操作~~
最好自己写~~
zhouhuahai
2005-09-06
打赏
举报
回复
用链表啊.
楼主应该再去看看数据结构的书
一元多项式
计算
算法
与实现.zip
多项式是由变量和系数构成的代数表达式,其一般形式可以表示为 ( a_nx^n + a_{n-1}x^{n-1} + ... + a_1x + a_0 ),其中 ( a_i ) 是系数,( x ) 是变量,( n ) 是非负整数,表示多项式的最高次数。多项式的特点包括:...
求
助
--PTA数据结构与
算法
题目集7-2
一元多项式
的乘法与加法运算
求
助
--PTA数据结构与
算法
题目集7-2
一元多项式
的乘法与加法运算
PAT 乙级 1010题(为什么有测试点不对,
求
助
)
题目:
一元多项式
求
导设计函数
求
一元多项式
的导数。(注:xn(n为整数)的一阶导数为nxn−1。
C语言程序设计-多项式乘法系统模拟系统01
求
它们的乘积多项式S(X)=sm+n-2Xm+n-2+……+s1X+s0. 【测试数据】 由读者根据实际情况指定。 【实现提示】 【进一步完成内容】 (1)将界面换成简易英文可以让更多人使用。 (2) 在退出界面内设定一个检查,如果链表不...
神经网络
算法
有哪些模型,神经网络预测模型实例
神经网络就像多项式或者线性模型一样,是个看不见表达式的模型,它的表达式就是网络,它比一般模型具有更高的自由度和弹性;同时它是一个典型的黑箱模型方法...对于这个具体的寻找过程就涉及到
算法
问题,就是如何
计算
。
C语言
70,035
社区成员
243,244
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章