用C语言编写多项式相加的程序,下面图中前两个是要相加的多项式 第三个是相加后的结果,求好心人拜托了

图片发错了 是这个图片

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

#define EPS 1E-6

typedef struct item {
double coefficient;
int power;
struct item *next;
} *POLYNOMIAL,*pItem;

POLYNOMIAL Create() { // 创建多项式
pItem head,p;
double coe;
int pwr;
head = p = (pItem)malloc(sizeof(item));
while(1) {
printf("系数 幂次(0 0结束) : ");
scanf("%lf%d",&coe,&pwr);
if(fabs(coe) <= EPS && !pwr) break;
p->next = (pItem)malloc(sizeof(item));
p->next->coefficient = coe;
p->next->power = pwr;
p = p->next;
}
p->next = NULL;
return head;
}

void Sort(POLYNOMIAL head) { // 按幂次降排序
pItem pt,q,p = head;
while(p->next) {
q = p->next;
while(q->next) {
if(p->next->power < q->next->power) {
pt = p->next;
p->next = q->next;
q->next = p->next->next;
p->next->next = pt;
}
else q = q->next;
}
p = p->next;
}
}

void Show(POLYNOMIAL head) { // 显示多项式
POLYNOMIAL p = head->next;
int flag = 1;
if(p == NULL) return;
while(p) {
if(flag) {
if(fabs(p->coefficient) >= EPS) {
if(p->power == 0) printf("%.2lf ",p->coefficient);
else if(p->power == 1) {
if(p->coefficient == 1.0) printf("x ");
else if(p->coefficient == -1.0) printf("-x ");
else printf("%.2lfx ",p->coefficient);
}
else if(p->coefficient == 1.0) printf("x^%d ",p->power);
else if(p->coefficient == -1.0) printf("-x^%d ",p->power);
else printf("%.2lfx^%d ",p->coefficient,p->power);
flag = 0;
}
}
else if(p->coefficient > 0.0 && fabs(p->coefficient) >= EPS) {
if(p->power == 0) printf("+ %.2lf ",p->coefficient);
else if(p->power == 1) {
if(p->coefficient == 1.0) printf("+ x ");
else printf("+ %.2lfx ",p->coefficient);
}
else if(p->coefficient == 1.0) printf("+ x^%d ",p->power);
else printf("+ %.2lfx^%d ",p->coefficient,p->power);
}
else if(p->coefficient < 0.0 && fabs(p->coefficient) >= EPS) {
if(p->power == 0) printf("- %.2lf ",-p->coefficient);
else if(p->power == 1) {
if(p->coefficient == -1.0) printf("- x ");
else printf("- %.2lfx ",-p->coefficient);
}
else if(p->coefficient == -1.0) printf("- x^%d ",p->power);
else printf("- %.2lfx^%d ",-p->coefficient,p->power);
}
p = p->next;
}
printf("\n");
}

double Power(double x,int n) {
double value = 1.0;
int i;
for(i = 0; i < n; ++i) value *= x;
return value;
}

double Value(POLYNOMIAL head,double x) { // 多项式求值
POLYNOMIAL p;
double value = 0.0;
for(p = head->next; p; p = p->next)
value += p->coefficient * Power(x,p->power);
return value;
}

POLYNOMIAL Copy(POLYNOMIAL A) {
POLYNOMIAL head,t,p;
head = t = (pItem)malloc(sizeof(item));
for(p = A->next; p; p = p->next) {
t->next = (pItem)malloc(sizeof(item));
t->next->coefficient = p->coefficient;
t->next->power = p->power;
t = t->next;
}
t->next = NULL;
return head;
}

POLYNOMIAL Additive(POLYNOMIAL A, POLYNOMIAL B) { // 多项式相加
POLYNOMIAL head,p,q,t;
head = Copy(A);
for(p = B; p->next; p = p->next) {
q = head;
while(q->next) {
if(p->next->power == q->next->power) {
q->next->coefficient += p->next->coefficient;
if(fabs(q->next->coefficient) <= EPS) {
t = q->next;
q->next = t->next;
free(t);
}
break;
}
q = q->next;
}
if(q->next == NULL) {
q->next = (pItem)malloc(sizeof(item));
q->next->coefficient = p->next->coefficient;
q->next->power = p->next->power;
q->next->next = NULL;
}
}
Sort(head);
return head;
}

POLYNOMIAL Subtract(POLYNOMIAL A, POLYNOMIAL B) { // 多项式相减
POLYNOMIAL head,p,q,t;
head = Copy(A);
for(p = B; p->next; p = p->next) {
q = head;
while(q->next) {
if(p->next->power == q->next->power) {
q->next->coefficient -= p->next->coefficient;
if(fabs(q->next->coefficient) <= EPS) {
t = q->next;
q->next = t->next;
free(t);
}
break;
}
q = q->next;
}
if(q->next == NULL) {
q->next = (pItem)malloc(sizeof(item));
q->next->coefficient = -p->next->coefficient;
q->next->power = p->next->power;
q->next->next = NULL;
}
}
Sort(head);
return head;
}

POLYNOMIAL Multiplication(POLYNOMIAL A, POLYNOMIAL B) { // 多项式相乘
POLYNOMIAL head,t,p,q;
head = t = (pItem)malloc(sizeof(item));
for(p = A->next; p; p = p->next) { // 完成相乘过程
for(q = B->next; q; q = q->next) {
t->next = (pItem)malloc(sizeof(item));
t->next->coefficient = p->coefficient * q->coefficient;
t->next->power = p->power + q->power;
t = t->next;
}
}
t->next = NULL;
Sort(head); // 排序
p = head;
while(p->next) { // 合并同类项
q = p->next;
while(q->next) {
if(p->next->power == q->next->power) {
p->next->coefficient += q->next->coefficient;
t = q->next;
q->next = t->next;
free(t);
}
else q = q->next;
}
p = p->next;
}
return head;
}

void FreeMemory(POLYNOMIAL head) {
POLYNOMIAL q,p = head;
while(p) {
q = p;
p = q->next;
free(q);
}
}

int main() {
printf("创建多项式A:\n");
POLYNOMIAL A = Create();
Sort(A);
printf("A(x) = ");Show(A);
printf("创建多项式B:\n");
POLYNOMIAL B = Create();
Sort(B);
printf("B(x) = ");Show(B);
POLYNOMIAL C = Additive(A,B);
printf("C(x) = ");Show(C);
POLYNOMIAL D = Subtract(A,B);
printf("D(x) = ");Show(D);
POLYNOMIAL E = Multiplication(A,B);
printf("E(x) = ");Show(E);
printf("A(%.2lf) = %.4lf\n",2.0,Value(A,2.0));
printf("B(%.2lf) = %.4lf\n",2.0,Value(B,2.0));
printf("C(%.2lf) = %.4lf\n",2.0,Value(C,2.0));
printf("D(%.2lf) = %.4lf\n",2.0,Value(D,2.0));
printf("E(%.2lf) = %.4lf\n",2.0,Value(E,2.0));
FreeMemory(A);
FreeMemory(B);
FreeMemory(C);
FreeMemory(D);
FreeMemory(E);
return 0;
}

温馨提示:内容为网友见解,仅供参考
无其他回答

用C语言编写多项式相加的程序,下面图中前两个是要相加的多项式 第...
*pItem;POLYNOMIAL Create() { \/\/ 创建多项式pItem head,p;double coe;int pwr;head = p = (pItem)malloc(sizeof(item));while(1) {printf("系数 幂次(0 0结束) : ");

多项式相加(C语言)
严蔚敏的数据结构上有

C语言写多项式相加怎么写?求解
在main()函数中,首先输入两个多项式的项数,并分别创建链表。然后打印输入的多项式。接着,输入第二个多项式的项数和创建链表,再打印第二个多项式。调用AddPolyn()函数实现两多项式的加法,将结果存储在第三个链表中。最后,打印相加结果并暂停程序执行。总结,通过定义链表节点结构并实现创建、打印、加法...

设计一个一元多项式计算器,输入输出,多项式相加(C语言)
include<stdio.h>\/\/两个多项式也就是两个链表,相加后的链表我们不重新建立,而是在第一个链表的基础上,增加和删除,得到相加后的链表。include<malloc.h> typedef struct node { float cofe;\/\/系数 int expn;\/\/指数 struct node *next;}node,*tie;define LEN sizeof(node)int main(){ int n...

多项式相加求值怎样用C++代码实现
\/\/q2=q1->next;} return h1;} list *Multiply(list *h1,list *h2)\/\/实现两个链表相乘 { list *p1,*p2,*q1;int c,e;p1=h1->next;p2=p1->next;q1=h2->next;do { c=p1->coef;e=p1->exp;while(q1){ p1->coef=c*q1->coef;p1->exp=e+q1->exp;if(q1->next!=NULL){ ...

用C语言实现数据结构的题目:一元多项式相加
struct poly *jisuan(struct poly *head1,struct poly *head2) \/\/多项式的相加 { struct poly *p1,*p2,*r1,*r2;r1=head1;p1=head1->next;r2=p2=head2->next;while(p1&&p2){ if(p1->zhi==p2->zhi){ p1->xi=(p1->xi)+(p2->xi);p2=p2->next;free(r2);r2=p2;r1=p1;p1=...

想用C语言编写多项式拟合的程序
\/*===n是数据个数 xy是数据值 poly_n是多项式的项数===*\/ \/*===返回a0,a1,a2,……a[poly_n],系数比项数多一(常数项)===*\/ void polyfit(int n,double x[],double y[],int poly_n,double a[]){ int i,j;double *tempx,*tempy,*sumxx,*sumxy,*ata;void gauss_solve...

C语言用单链表完成多项式相加,代码如下,麻烦帮忙修改一下
printf("输入x与y:");fflush(stdin);\/\/输入前给点提示信息,省得你不知程序运行至哪了 再清空键盘缓冲区,防止输入问题 scanf("%d%d",&x,&y);while(x!=-999||y!=-999)\/\/<<<while首字符不要大写 { ptr=(Lpoly*)malloc(sizeof(Lpoly));ptr->coef=x;ptr->exp=y;ptr->next=NULL;p...

如何用C语言实现设计和实现多项式运算?
对于A的多项式,其特征值为对应的特征多项式。线性代数包括行列式、矩阵、线性方程组、向量空间与线性变换、特征值和特征向量、矩阵的对角化,二次型及应用问题等内容。 已赞过 已踩过< 你对这个回答的评价是? 评论 收起 其他类似问题 2011-12-11 如何用C语言实现一元多项式简单计算器的设计 31 2014-12-03 用...

编写一个程序用单链表存储多项式,并实现两个多项式相加的函数?
public:int coef; \/\/多项式系数 int exp; \/\/多项式指数 \/\/初始化项的系数和指数 term( int c=0,int e=0):coef(c),exp(e){} };\/\/定义多项式类 class PolyArith { private:list<term> m_poly_list_first; \/\/存储第一个多项式 list<term> m_poly_list_second; \/\/存储第...

相似回答