当前位置:首页 » 编程语言 » 用C语言实现多项式加减
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

用C语言实现多项式加减

发布时间: 2022-06-17 22:27:19

Ⅰ 求助:用c语言实现多项式的加减法

这个内容有点多,没法回答,其实相当于编个计算器

Ⅱ C语言写多项式相加怎么写求解

分都不给。。。算了,以前写了个就给你吧。/*此程序结构比较清晰,用单链表实现了多项式的加法。具体原理可以参考清华大学严蔚敏数据《结构C语言版》第二章注意:此程序假设输入的多项式已经排好序(从低到高)程序在VC6下编译通过*/#includenbsp;amp;lt;stdio.hamp;gt;#includenbsp;amp;lt;stdlib.hamp;gt;#includenbsp;amp;lt;malloc.hamp;gt;#includenbsp;amp;lt;conio.hamp;gt;nbsp;/*getchnbsp;function*/typedefnbsp;structnbsp;NODEnbsp;{nbsp;floatnbsp;nbsp;coef;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;//系数为实数nbsp;intnbsp;nbsp;nbsp;nbsp;expn;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;//指数为整数nbsp;structnbsp;NODEnbsp;*next;nbsp;nbsp;}NODE;NODEnbsp;*Creat(intnbsp;n);voidnbsp;print(NODEnbsp;*head);NODEnbsp;*AddPolyn(NODEnbsp;*head1,nbsp;NODEnbsp;*head2);NODEnbsp;*Delfirst(NODEnbsp;*head,nbsp;NODEnbsp;*q);voidnbsp;InsertBefore(NODEnbsp;*p1,nbsp;NODEnbsp;*p2);intnbsp;nbsp;compare(intnbsp;a,nbsp;intnbsp;b);main(){nbsp;NODEnbsp;*head1,nbsp;*head2,nbsp;*head3;nbsp;intnbsp;n1,nbsp;n2;nbsp;printf(“
请输入第一个多项式的项数nbsp;n1:“);nbsp;scanf(“%d“,nbsp;amp;n1);nbsp;head1nbsp;=nbsp;Creat(n1);nbsp;printf(“
第一个多项式为:
“);nbsp;print(head1);nbsp;nbsp;nbsp;nbsp;nbsp;printf(“
请输入第二个多项式的项数nbsp;n2:“);nbsp;scanf(“%d“,nbsp;amp;n2);nbsp;head2nbsp;=nbsp;Creat(n2);nbsp;printf(“
第二个多项式为:
“);nbsp;print(head2);nbsp;head3nbsp;=nbsp;AddPolyn(head1,nbsp;head2);nbsp;printf(“
相加结果为:
“);nbsp;getch();}/*创建链表*/NODEnbsp;*Creat(intnbsp;n){nbsp;NODEnbsp;*current,nbsp;*previous,nbsp;*head;nbsp;intnbsp;i;nbsp;headnbsp;=nbsp;(NODEnbsp;*)malloc(sizeof(NODE));nbsp;/*创建头结点*/nbsp;previousnbsp;=nbsp;head;nbsp;nbsp;for(inbsp;=nbsp;0;nbsp;inbsp;amp;lt;nbsp;n;nbsp;i++)nbsp;{nbsp;nbsp;currentnbsp;=nbsp;(NODEnbsp;*)malloc(sizeof(NODE));nbsp;nbsp;nbsp;nbsp;printf(“请输入项数%d的系数和指数nbsp;:nbsp;“,i+1);nbsp;nbsp;scanf(“%f%d“,nbsp;amp;current-amp;gt;coef,nbsp;amp;current-amp;gt;expn);nbsp;nbsp;previous-amp;gt;nextnbsp;=nbsp;current;nbsp;nbsp;previousnbsp;=nbsp;current;nbsp;nbsp;}nbsp;previous-amp;gt;nextnbsp;=nbsp;NULL;nbsp;returnnbsp;head;}/*nbsp;一元多项式的加法nbsp;,总体考虑,可分qa的指数比qb小i组成一部分*/NODEnbsp;nbsp;*AddPolyn(NODEnbsp;*head1,nbsp;NODEnbsp;*head2){nbsp;NODEnbsp;*ha,nbsp;*hb,nbsp;*qa,nbsp;*qb;nbsp;intnbsp;a,nbsp;b;nbsp;floatnbsp;sum;nbsp;hanbsp;=nbsp;head1;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;/*ha和hb指向头结点*/nbsp;hbnbsp;=nbsp;head2;nbsp;qanbsp;=nbsp;ha-amp;gt;next;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;/*qa和qb指向头结点的下一个结点*/nbsp;qbnbsp;=nbsp;hb-amp;gt;next;nbsp;while(qanbsp;amp;amp;nbsp;qb)nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;/*qa和qb均非空*/nbsp;{nbsp;nbsp;anbsp;=nbsp;qa-amp;gt;expn;nbsp;nbsp;nbsp;bnbsp;=nbsp;qb-amp;gt;expn;nbsp;nbsp;switch(compare(a,nbsp;b))nbsp;{nbsp;nbsp;casenbsp;-1nbsp;: 查看原帖>>

Ⅲ C语言用链表实现多项式的加减法,减法处理过程中出现的问题。

你把B移到链表末尾去了,你要用一个指针记录B链表头,用指针移动操作*(-1)。

Ⅳ C语言写一个程序,用链表实现多项式相加相减

//要求:多项式按降幂排列
#include<stdafx.h>
#include<iostream.h>

structnode
{
intcoef;//系数
intexp;//指数
node*next;
};

node*h1=NULL;//第一个多项式的头指针
node*h2=NULL;//第二个多项式的头指针

node*insert(intc,inte)//创建一个系数为c,指数为e的结点,并返回其地址
{
node*newnode=newnode;//创建新结点
newnode->coef=c;//系数等于c
newnode->exp=e;//指数等于e
newnode->next=NULL;
returnnewnode;
}

node*create(node*h)
{
intcoef;
intexp;
charc;
cout<<"请输入系数:";
cin>>coef;
cout<<"请输入指数:";
cin>>exp;

h=insert(coef,exp);
cout<<"是否输入完毕?(Y/N)";
cin>>c;
if(c=='y'||c=='Y')
{
returnh;//如果输入完毕,返回头指针地址
}
else
{
h->next=create(h->next);//否则递归建立下一个结点
returnh;//返回头指针地址
}
}

node*(node*source)//将一个结点的内容复制到另一个结点,并返回该结点地址
{
if(source!=NULL)//如果源结点不为空
{
node*des=newnode;//创建新结点
des->coef=source->coef;//新结点的系数等于源结点的系数
des->exp=source->exp;//新结点的指数等于源结点的指数
des->next=NULL;
returndes;//返回新结点地址
}
returnNULL;
}

voidprint(node*head)//输出头指针为head的多项式链表
{
node*h=head;

if(h==NULL)
{
cout<<"0";//如果链表为空,输出0
}
else
{
while(h->next!=NULL)//否则,当其下一个结点不为空时
{
if(h->exp==0)//如果指数为0,即常数
{
if(h->coef>0)//如果系数大于0
{
cout<<h->coef;//输出系数
}
else
{
cout<<""<<h->coef;//否则,退一格(消除前面的+号),输出系数
}
}
elseif(h->exp==1)//否则,如果指数为1
{
if(h->coef>0)//如果系数大于0
{
if(h->coef==1)//如果系数等于1
{
cout<<"x"<<"+";//输出x+
}
else
{
cout<<h->coef<<"*x"<<"+";//否则,输出相应的系数
}
}
else
{
if(h->coef==-1)//否则,如果系数等于-1
{
cout<<""<<"-x"<<"+";//退一格,输出-x
}
else
{
cout<<""<<h->coef<<"*x"<<"+";//否则,退一格,输出相应的系数
}
}
}
else//否则,指数大于1
{
if(h->coef>0)//如果系数大于0
{
if(h->coef==1)//如果系数等于1
{
cout<<"x"<<h->exp<<"+";
}
else
{
cout<<h->coef<<"*x"<<h->exp<<"+";
}
}
else
{
if(h->coef==-1)//否则,如果系数等于-1
{
cout<<""<<"-x"<<h->exp<<"+";
}
else
{
cout<<""<<h->coef<<"*x"<<h->exp<<"+";
}
}
}
h=h->next;
}
//输出最后一项
if(h->exp==0)//如果指数为0,即常数
{
if(h->coef>0)//如果系数大于0
{
cout<<h->coef;//输出系数
}
else
{
cout<<""<<h->coef;//否则,退一格,输出系数
}
}
elseif(h->exp==1)//否则,如果指数为1
{
if(h->coef>0)//如果系数大于0
{
if(h->coef==1)//如果系数等于1
{
cout<<"x";//输出x
}
else
{
cout<<h->coef<<"*x";
}
}
else
{
if(h->coef==-1)//否则,如果系数等于-1
{
cout<<""<<"-x";//退一格,输出-x
}
else
{
cout<<""<<h->coef<<"*x";
}
}
}
else//否则,指数大于1
{
if(h->coef>0)//如果系数大于0
{
if(h->coef==1)//如果系数等于1
{
cout<<"x"<<h->exp;
}
else
{
cout<<h->coef<<"*x"<<h->exp;
}
}
else
{
if(h->coef==-1)//否则,如果系数等于-1
{
cout<<""<<"-x"<<h->exp;
}
else
{
cout<<""<<h->coef<<"*x"<<h->exp;
}
}
}
}
}

voidprints(node*p1,node*p2,node*r)//输出相加结果,形如p1+p2=r
{
print(p1);
cout<<endl<<"+"<<endl;
print(p2);
cout<<endl<<"="<<endl;
print(r);
cout<<endl;
}

charcompare(node*n1,node*n2)//比较两个结点的指数大小
{
if(n1->exp==n2->exp)
{
return'=';
}
elseif(n1->exp>n2->exp)
{
return'>';
}
else
{
return'<';
}
}

node*add(node*p1,node*p2)//计算两个多项式相加,返回结果链表首地址
{
node*fr;
//如果有一个为空,就把另外一个链表其后的部分复制到结果链表的尾部
if(p1==NULL)
{
node*x=(p2);
node*temp=x;
while(p2!=NULL)
{
x->next=(p2->next);
x=x->next;
p2=p2->next;
}
returntemp;
}
elseif(p2==NULL)
{
node*x=(p1);
node*temp=x;
while(p1!=NULL)
{
x->next=(p1->next);
x=x->next;
p1=p1->next;
}
returntemp;
}
//如果都不为空
else
{
switch(compare(p1,p2))//比较两个结点的指数大小
{
case'='://相等
if(p1->coef+p2->coef!=0)//如果系数和不为0
{
fr=insert(p1->coef+p2->coef,p1->exp);//新结点的系数为两个结点的系数和,指数为这两个结点的指数
fr->next=add(p1->next,p2->next);
returnfr;
}
else
{
fr=add(p1->next,p2->next);//否则,新结点地址为这两个结点之后的部分链表的和链表的首地址
returnfr;
}
case'>'://大于
fr=(p1);//新结点的内容与p1相同
fr->next=add(p1->next,p2);//以p1->next为新的p1,递归调用add,创建链表余下的部分
returnfr;
case'<'://小于
fr=(p2);//新结点的内容与p2相同
fr->next=add(p1,p2->next);//以p2->next为新的p2,递归调用add,创建链表余下的部分
returnfr;
default:
returnNULL;
}
}
}

voidmain(void)
{
cout<<"先建立第一个多项式:"<<endl;
h1=create(h1);
cout<<"再建立第二个多项式:"<<endl;
h2=create(h2);
cout<<"和:"<<endl;
prints(h1,h2,add(h1,h2));
}

Ⅳ C语言实现的一元多项式的表示及相减


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

typedef struct Node
{
int data;
struct Node *next;
}Node;//链表结点

typedef struct LinkList//定义链表数据类型
{
Node *head;//表头结点
void PrintMform()//输出多项式
{
Node *p=head->next;
int exp = head->data-1;
while(p!=NULL)
{
if(exp==head->data-1)
printf("%dX^%d",p->data,exp);
else
{
if(p->data>0)
printf("+%dX^%d",p->data,exp);
if(p->data==0)
printf("+0");
if(p->data<
0)
printf("%dX^%d",p->data,exp);
}
exp--;
p=p->next;
}
printf("\n");
}
void CreateByInput(int length)//通过输入元素建立链表
{
head=(Node *)malloc(sizeof(Node));
head->data=0;//表头节点存储链表真实长度
head->next=NULL;
int i,temp;
Node *p,*cur = head;
for(i=1;i<=length;i++)
{
printf("structing LinkList,Please input the value:\n");
scanf("%d",&temp);
p = (Node *)malloc(sizeof(Node));
p->data=temp;
p->next=cur->next;
cur->next=p;
cur = cur->next;
head->data++;

}
}
}LinkList;

void main()
{
LinkList L1,L2;
int length;//就是多项式的项数
printf("Please input the first LinkList's length:\n");
scanf("%d",&length);
printf("begin to struct the first LinkList\n");//开始构造第一个多项式
L1.CreateByInput(length);
printf("begin to struct the second LinkList\n");//开始构造第二个多项式
L2.CreateByInput(length);
printf("the first oxiangshi is:\n");
L1.PrintMform();//输出第一个多项式
printf("the second oxiangshi is:\n");
L2.PrintMform();//输出第二个多项式
Node *p = L1.head->next;/////////////////从这里开始
Node *q = L2.head->next;//是计算多项式L1-L2,结果存入L1
while(p!=NULL)
{
p->data-=q->data;
p=p->next;
q=q->next;
}/////////////////////////////////////到这里结束
printf("the substract is:\n");
L1.PrintMform();
system("pause");
}

Ⅵ c语言怎么用堆栈实现多项式的加法运算

//已经帮忙调整,对比下代码吧,就知道是什么问题了

typedefstructPolyNode*Polynomial;
structPolyNode{
intcoef;
intexpon;
Polynomiallink;

};

PolynomialReadPoly();
PolynomialPolyAdd(PolynomialP1,PolynomialP2);
voidAttach(intc,inte,Polynomial*pRear);
intCompare(intp1,intp2);//未定义函数,自己写实现

intmain()
{
PolynomialP1,P2,PP,PS;

P1=ReadPoly();
P2=ReadPoly();
// PP=Mult(P1,P2);
// PrintPoly(PP);
PS=PolyAdd(P1,P2);
// PrintPoly(PS);

return0;

}

PolynomialReadPoly()
{
PolynomialP,Rear,t;
intc,e,N;

scanf("%d",&N);
P=(Polynomial)malloc(sizeof(structPolyNode));
P->link=NULL;
Rear=P;

while(N--){
scanf("%d%d",&c,&e);
Attach(c,e,&Rear);
}

t=P;P=P->link;
free(t);
//retrunP;//return写错
returnP;
}

voidAttach(intc,inte,Polynomial*pRear)
{
PolynomialP;

P=(Polynomial)malloc(sizeof(structPolyNode));
P->coef=c;
P->expon=e;
P->link=NULL;
(*pRear)->link=P;
*pRear=P;

}

PolynomialPolyAdd(PolynomialP1,PolynomialP2)

{

Polynomialfront,rear,temp;
intsum;
rear=(Polynomial)malloc(sizeof(structPolyNode));
front=rear;
while(P1&&P2);

switch(Compare(P1->expon,P2->expon)){//这里要用指针->

case1:
Attach(P1->coef,P1->expon,&rear);//这里要用指针->
P1=P1->link;
break;
case-1:
Attach(P2->coef,P2->expon,&rear);//这里要用指针->
P2=P2->link;
break;
case0:
sum=P1->coef+P2->coef;//这里要用指针->
if(sum)Attach(sum,P1->expon,&rear);//这里要用指针->
P1=P1->link;
P2=P2->link;
break;

}
for(;P1;P1=P1->link)Attach(P1->coef,P1->expon,&rear);
for(;P2;P2=P2->link)Attach(P2->coef,P2->expon,&rear);
rear->link=NULL;
temp=front;
front=front->link;
free(temp);
returnfront;

}

Ⅶ 如何用C语言实现两个一元多项式的相加和相乘

没有别的好办法,你看这样行不行,不行你自己再想想吧
#include
void
main()
{
int
a1,b1,c1,d1,e1,f1,a2,b2,c2,d2,e2,f2;
printf("ax^5+bx^4+cx^3+dx^2+ex+f=0\n");
printf("请输入:a
b
c
d
e
f\n");
printf("第一个:");
scanf("%d%d%d%d%d%d",&a1,&b1,&c1,&d1,&e1,&f1);
printf("第二个:");
scanf("%d%d%d%d%d%d",&a2,&b2,&c2,&d2,&e2,&f2);
printf("两式相加后得:\n");
printf("%dx^5+%dx^4+%dx^3+%dx^2+%dx+%d=0\n",a1+a2,b1+b2,c1+c2,d1+d2,e1+e2,f1+f2);
}
由于变量太多!输出时要注意哦
希望回答对你有帮助!

Ⅷ 用C语言链表实现多元多项式及其乘法,加法。

用C语言链表实现多项式, 例如f(x_{i,k}^{l})=3+x_{1,2}^2x_{3,2}+x_{1,3}x_{4,3}^3 (变量x_{i,k}^{l}有3个指标i,k,l, i,k,l可以取遍1到n的整数)。要求多项式由键盘输入,用链表存储单项式(节点是x_{i,k}^{l}),用链表存储多项式(节点是单项式)。编写3个函数分别是实现多项式加法,乘法的函数,以及输出多项式的函数。

Ⅸ C语言:用单链表实现任意两个一元多项式的加、减法运算

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define N 7
typedef enum { add, nul, sub, div1, yu, l, r }OP;
int a[N][N] = {
{ 0, 0, -1, -1, -1, 1, 2 },
{ 0, 0, -1, -1, -1, 1, 2 },
{ 1, 1, 0, 0, 0, 1, 2 },
{ 1, 1, 0, 0, 0, 1, 2 },
{ 1, 1, 0, 0, 0, 1, 2 },
};

int top;
OP beg;
int b[1024];
OP op[1024];

void init_nu( ){ top = 0; }
void push_nu( int term ){ b[top++] = term; }
int pop_nu( ){ return b[--top]; }
int is_empty_nu( ){ return top == 0; }
void destory_nu( ) { top = 0; }

void init_sign( ){ beg = 0; }
void push_sign( OP sign ){ op[beg++] = sign; }
void destory_sign( ){ beg = 0; }
OP pop_sign( ){ return op[--beg];}
OP get_sign( ){ return op[beg - 1]; }
int is_empty_sign( ){return beg == 0; }
int eval()
{
int i, j;
i = pop_nu();
j = pop_nu();
switch( pop_sign() )
{
case '+': push_nu( j + i ); break;
case '-': push_nu( j - i ); break;
case '*': push_nu( j * i ); break;
case '/': push_nu( j / i ); break;
case '%': push_nu( j & i ); break;
defult: break;
}
}
int change( char *s )
{
int i;
int n = strlen( s );
for( i = 0; i < n; i++ )
{
if( s[i] >= '0' && s[i] <= '9' )
push_nu( 0 );
while( s[i] >= '0' && s[i] <= '9' )
push_nu( 10 * pop_nu() + s[i++] - '0' );
switch( s[i] )
{
case '+': while( a[add][get_sign()] <= 0 )

eval();
push_sign( add ); break;
case '-': while( a[nul][get_sign()] <= 0 )
eval();
push_sign( nul ); break;
case '*': while( a[sub][get_sign()] <= 0 )
eval();
push_sign( sub ); break;
case '/': while( a[div1][get_sign()] <= 0 )
eval();
push_sign( div1 ); break;
case '%': while( a[yu][get_sign()] <= 0 )
eval();
push_sign( yu ); break;
case '(': push_sign( l ); break;
case ')': while( (get_sign()) != l )
eval();
pop_sign();
break;
defult: break;
}

}
return pop_nu();
}
int main( void )
{
char *s = "((5-3)*2+4/2&2+1)";
init_nu();
init_sign();
printf( "%d\n", change( s ));
destory_nu();
destory_sign();
return 0;
}

以前编的,希望对你有帮助。

别忘了给我分。

Ⅹ 如何用C语言实现多项式的加法和乘法

按题目要求应该是(1+X)*(1+X)=X2+1吧
可以用单链表表示多项的指数,比如1+X可以表示为0,1
X2+1可以表示为2,0,Xn+X(n-1)+...+1即n,n-1,.....0
所有的指数建议按大小排序,可以在单链表插入时进行。
加法,可以新建一个链表C做为结果,把链表A的内容复制到C,然后把另一个链表B中的每一项插入C,如果要插入的项已存在,则不插入并且删除这个结点。
乘法,新建一个链表C作为结果,要用2层循环遍历A和B中的每一项,对AB中的每个项都要算个加法,把和插入C中,如果这个和已存在,则不插入并且删除这个结点。