C语言多项式加法
C语言实现多项式的相加

C语⾔实现多项式的相加本⽂实例为⼤家分享了C语⾔多项式相加的具体代码,供⼤家参考,具体内容如下包含带头节点的链表的初始化,输出:#define _CRT_SECURE_NO_WARNINGS#include <stdio.h>#include <stdlib.h>typedef struct Pol{int coe; // 系数int index; // 指数struct Pol *next;}Pol;int main(int argc, char *argv[]){Pol *head1 = NULL; // 第⼀个多项式Pol *head2 = NULL; // 第⼆个多项式Pol *Initiate(Pol *head1); // 声明初始化函数void Output(Pol *head); // 声明输出函数void PolAdd(Pol *head1, Pol *head2); // 声明相加函数int coe, index;char sign;Pol *p;int n = 0;// 初始化第⼀个多项式head1 = Initiate(head1);p = head1;while (1){scanf("%dx%d%c", &coe, &index, &sign);p->next = (Pol *)malloc(sizeof(Pol));p = p->next;p->coe = coe;p->index = index;p->next = NULL;if(sign == '\n')break;}printf("第⼀多项式输⼊完毕。
\n");// 初始化第⼆个多项式head2 = Initiate(head2);p = head2;while (1){scanf("%dx%d%c", &coe, &index, &sign);p->next = (Pol *)malloc(sizeof(Pol));p = p->next;p->coe = coe;p->index = index;p->next = NULL;if (sign == '\n')break;}printf("第⼆多项式输⼊完毕。
多项式加法算法

#include <stdio.h>#include <stdlib.h>#include <malloc.h>#define OK 1#define ERROR 0#define TRUE 1#define FALSE 0#include "common.h"#include "polylist.h"typedef struct Polynode{int coef;int exp;Polynode *next;}Polynode, *Polylist;void polycreate(Polylist head){Polynode *rear, *s;int c,e;rear=head; /* rear 始终指向单链表的尾,便于尾插法建表*/scanf("%d,%d",&c,&e); /*键入多项式的系数和指数项*/while(c!=0) /*若c=0,则代表多项式的输入结束*/ {s=(Polynode*)malloc(sizeof(Polynode)); /*申请新的结点*/s->coef=c;s->exp=e;rear->next=s; /*在当前表尾做插入*/rear=s;scanf("%d,%d",&c,&e);}rear->next=NULL; /*将表的最后一个结点的next置NULL,以示表结束*/}void polyadd(Polylist polya, Polylist polyb)/*此函数用于将两个多项式相加,然后将和多项式存放在多项式polya中,并将多项式ployb 删除*/{Polynode *p, *q, *pre, *temp;int sum;p=polya->next; /*令p和q分别指向polya和polyb多项式链表中的第一个结点*/q=polyb->next;pre=polya; /* r指向和多项式的尾结点*/while (p!=NULL && q!=NULL) /*当两个多项式均未扫描结束时*/{if (p->exp < q->exp)/*如果p指向的多项式项的指数小于q的指数,将p结点加入到和多项式中*/ {pre->next=p;pre=p;p=p->next;}elseif ( p->exp == q->exp) /*若指数相等,则相应的系数相加*/{sum=p->coef + q->coef;if (sum != 0){p->coef=sum;pre->next=p;pre=p;p=p->next;temp=q;q=q->next;free(temp);}else{temp=p;p=p->next;free(temp);/*若系数和为零,则删除结点p与q,并将指针指向下一个结点*/temp=q;q=q->next;free(temp);}}else{pre->next=q;pre=q; /*将q结点加入到和多项式中*/q = q->next;}}if(p!=NULL) /*多项式A中还有剩余,则将剩余的结点加入到和多项式中*/ pre->next=p;else /*否则,将B中的结点加入到和多项式中*/pre->next=q;}void main(){Polylist polya,polyb;Polynode *p;printf("请输入数据建立多项式A:(以0,0结束!)\n");polya=(Polynode *)malloc(sizeof(Polynode));polycreate(polya);p = polya->next;while(p!=NULL){printf("%d %d\n",p->coef,p->exp);p=p->next;}printf("请输入数据建立多项式B:(以0,0结束!)\n");polyb=(Polynode *)malloc(sizeof(Polynode));polycreate(polyb);p = polyb->next;while(p!=NULL){printf("%d %d\n",p->coef,p->exp);p=p->next;}polyadd(polya,polyb);printf("相加后的多项式为:\n");p = polya->next;while(p!=NULL){printf("%d %d\n",p->coef,p->exp);p=p->next;}}。
多项式加法(C语言实现)

多项式加法#include <stdio.h>#include <stdlib.h>#define Max_Size 100typedef struct node{float coef;int expn;struct node *next;}PolyNode;int CreCoeStr(float C[]){char flag;int i=0;do{scanf("%f",&C[i++]);scanf("%c",&flag);} while (flag!='#');return(i);}void CreExpStr(int E[]){int i=0;char flag;do{scanf("%d",&E[i++]);scanf("%c",&flag);} while (flag!='#');}void InitPolyList(PolyNode **sq){if((*sq=(PolyNode *)malloc(sizeof(PolyNode)))==NULL) exit(1);(*sq)->next=NULL;}void CreatPolyList(PolyNode **sq,float C[],int E[],int num){int i;PolyNode *s,*r=*sq;for(i=0;i<num;i++){if((s=(PolyNode *)malloc(sizeof(PolyNode)))==NULL) exit(1);s->coef=C[i];s->expn=E[i];r->next=s;r=s;}r->next=NULL;}void InsertSortPoly(PolyNode **sq){PolyNode *p,*q,*r,*u;p=(*sq)->next;(*sq)->next=NULL;while (p){r=*sq;q=(*sq)->next;while (q&&q->expn<=p->expn){r=q;q=q->next;}u=p->next;p->next=r->next;r->next=p;p=u;}}void DispList(PolyNode *sq){PolyNode *p=sq->next;while(p){printf("(%7.2f,%d)",p->coef,p->expn);p=p->next;}printf("\n");}PolyNode *AddPoly(PolyNode *sq_a,PolyNode *sq_b){PolyNode *p_1=sq_a->next,*p_2=sq_b->next,*tc,*p,*s,*pc;InitPolyList(&pc);tc=pc;while (p_1&&p_2){if(p_1->expn<p_2->expn){if((s=(PolyNode *)malloc(sizeof(PolyNode)))==NULL) exit(1);s->coef=p_1->coef;s->expn=p_1->expn;s->next=NULL;tc->next=s;tc=s;p_1=p_1->next;}else if(p_1->expn>p_2->expn){if((s=(PolyNode *)malloc(sizeof(PolyNode)))==NULL) exit(1);s->coef=p_2->coef;s->expn=p_2->expn;s->next=NULL;tc->next=s;tc=s;p_2=p_2->next;}else{if(p_1->coef+p_2->coef){if((s=(PolyNode *)malloc(sizeof(PolyNode)))==NULL) exit(1);s->coef=p_1->coef+p_2->coef;s->expn=p_1->expn;s->next=NULL;tc->next=s;tc=s;}p_1=p_1->next;p_2=p_2->next;}}if(p_1) p=p_1;else p=p_2;while (p){if((s=(PolyNode *)malloc(sizeof(PolyNode)))==NULL) exit(1);s->coef=p->coef;s->expn=p->expn;tc->next=s;tc=s;p=p->next;}tc->next=NULL;return pc;}void main(){PolyNode *sq_1,*sq_2,*sq_3;float C_1[Max_Size],C_2[Max_Size];int E_1[Max_Size],E_2[Max_Size],num_1,num_2;printf("\n\t\t两个多项式相加运算\n");printf("\n");printf("\n");printf("请输入多项式A 的各项系数(以‘#’结束): ");num_1=CreCoeStr(C_1);printf("\n请输入多项式A 的各项幂数(以‘#’结束): ");CreExpStr(E_1);printf("\n请输入多项式B 的各项系数(以‘#’结束): ");num_2=CreCoeStr(C_2);printf("\n请输入多项式B 的各项幂数(以‘#’结束): ");CreExpStr(E_2);InitPolyList(&sq_1);InitPolyList(&sq_2);CreatPolyList(&sq_1,C_1,E_1,num_1);CreatPolyList(&sq_2,C_2,E_2,num_2);printf("\n原多项式A :\n");DispList(sq_1);printf("\n原多项式B :\n");DispList(sq_2);InsertSortPoly(&sq_1);InsertSortPoly(&sq_2);printf("\n排列后的多项式A : \n");DispList(sq_1);printf("\n排列后的多项式B : \n");DispList(sq_2);sq_3=AddPoly(sq_1,sq_2);printf("\n多项式相加结果: \n");DispList(sq_3);printf("\n");}。
数据结构(C语言)用单链表存储一元多项式,并实现两个多项式的相加运算

#include<stdio.h>#include<stdlib.h>#include<malloc.h>typedef int ElemType;/*单项链表的声明*/typedef struct PolynNode{int coef; // 系数int expn; // 指数struct PolynNode *next;}PolynNode,*PolynList;/*正位序(插在表尾)输入n个元素的值,建立带表头结构的单链线性表*/ /*指数系数一对一对输入*/void CreatePolyn(PolynList &L,int n){int i;PolynList p,q;L=(PolynList)malloc(sizeof(PolynNode)); // 生成头结点L->next=NULL;q=L;printf("成对输入%d个数据\n",n);for(i=1;i<=n;i++){p=(PolynList)malloc(sizeof(PolynNode));scanf("%d%d",&p->coef,&p->expn); //指数和系数成对输入q->next=p;q=q->next;}p->next=NULL;}// 初始条件:单链表L已存在// 操作结果: 依次对L的每个数据元素调用函数vi()。
一旦vi()失败,则操作失败void PolynTraverse(PolynList L,void(*vi)(ElemType, ElemType)){PolynList p=L->next;while(p){vi(p->coef, p->expn);if(p->next){printf(" + "); //“+”号的输出,最后一项后面没有“+” }p=p->next;}printf("\n");}/*ListTraverse()调用的函数(类型要一致)*/void visit(ElemType c, ElemType e){if(c != 0){printf("%dX^%d",c,e); //格式化输出多项式每一项}}/* 多项式相加,原理:归并 *//* 参数:两个已经存在的多项式 *//* 返回值:归并后新的多项式的头结点 */PolynList MergeList(PolynList La, PolynList Lb){PolynList pa, pb, pc, Lc;pa = La->next;pb = Lb->next;Lc = pc = La; // 用La的头结点作为Lc的头结点while(pa&&pb){if(pa->expn < pb->expn){pc->next = pa; //如果指数不相等,pc指针连上指数小的结点,pc = pa;pa = pa->next; //指向该结点的指针后移}else if(pa ->expn > pb->expn ){pc->next = pb; //pc指针连上指数小的结点,pc = pb;pb = pb->next; //指向该结点的指针后移}else//(pa ->expn = pb->expn ){pa->coef = pa->coef + pb->coef; //指数相等时,系数相加 pc->next = pa;pc = pa;pa = pa->next; //两指针都往后移pb = pb->next;}}pc->next = pa ? pa:pb; // 插入剩余段return Lc;}void main(){PolynList ha,hb,hc;printf("非递减输入多项式ha, ");CreatePolyn(ha,5); // 正位序输入n个元素的值printf("非递减输入多项式hb, ");CreatePolyn(hb,5); // 正位序输入n个元素的值printf("多项式ha :");PolynTraverse(ha, visit); printf("\n");printf("多项式hb :"); PolynTraverse(hb, visit); printf("\n");hc = MergeList(ha,hb); PolynTraverse(hc, visit); }。
数据结构C语言实现之一元多项式的表示及相加(2)

数据结构 C 语言实现之一元多项式的表示及相加(2)
一元多项式的表示及相加 对于符号多项式的各种操作,实际上都可以利用线性表来处理。比较典型的是关于一元多项式的处理。在
} } e>next; /*将 q 结点加入到和多项式中*/ q =q->next; } }
} if(p!=NULL)/*多项式 A 中还有剩余,则将剩余的结点加入到和多项式中*/
pre->next=p;
else /*否则,将 B 中的结点加入到和多项式中*/ pre->next=q; }
算法 2.24 多项式相加 假设 A 多项式有 M 项,B 多项式有 N 项,则上述算法的时间复杂度为 O(M+N) 图 2.20 所示为图 2.19 中两个多项式的和,其中孤立的结点代表被释放的结点。
通过对多项式加法的介绍,我们可以将其推广到实现两个多项式的相乘,因为乘法可以分解为一系列的加 法运算。
“中的结点无需另生成,则可看成是将多项式 B 加到多项式 A 中,由此得到下列运算规则(设 p、q 分别 指向多项式 A,B 的一项,比较结点的指数项)
若 p->exp< q->exp,则结点 p 所指的结点应 是“和多项式”中的一项,令指针 p 后移;若 p>exp>q->exp,则结点 q 所指的结点应是“和多项式”中的一项,将结点 q 插入在结点 p 之前, 且令指针 q 在原来的链表上后移;
(1)用单链表存储多项式的结点结构如下: struct Polynode { int coef; int exp; Polynode *next; } Polynode , * Polylist;
多项式相加c语言

reset(&p);
reset(&q);
reset(&sum);
return 0;
}
```
在上述代码中,首先定义了一个`Node`结构体,包含多项式的系数和指数,并通过链表的方式存储多项式的每一项。然后,实现了一系列函数,包括多项式的增加、输出、相加和消除。在`main`函数中,调用这些函数来完成多项式的输入、相加和输出。
请注意,这只是一个简单的示例,实际应用中可能需要考虑更多的边界情况和错误处理。
以下是一个简单的 C 语言示例,展示了如何实现多项式相加:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义结构的数据部分
struct poly {it zhishu;float xishu;
};
// 定义一个多项式结构
typedef struct node {
s->date.xishu = s->date.xishu + s->next->date.xishu;
s->next = s->next->next;
} else {
s = s->next;
}
}
d = d->next;
}
}
// 链表的消除函数
void reset(Node *pList) {
Node *p = pList;
while (p->next) {
if (flog == 1)
printf(" + ");
else {
☆C语言实验一(多项式求和)

1、参看书P48表3-3和二级考试软件的第三章单选第1题,验证字符变量赋字符B的六种不同常量表示方式:'B';66;0x42;0102;'\x42';'\102';参考参考调试程序:思考和和验证:1、如果char x=’B’改成char x=66; 或char x=0x42; 或char x=0102;或char x=’\x42’或char x=’\102’; 显示结果是什么?2、如果char x=’B’改为char x=128;则显示什么?数值129-255分别赋给x时,各显示什么?有什么规律可遵循?3、对于TC30 int y=32768;显示什么?赋值32768-65535各显示什么?有什么规律可遵循?4、验证用小写的书上P365关键字作“标识符(P39)”来代替上述主函数中变量x,会产生什么后果?用大写关键字作为标识符,编译(Compiling)会成功吗?5、按照P38-P39对C语言”标识符”的规定,用上述主函数验证江苏省高校计算机二级考试C语言考题练习软件中的第三章选择题第9,11,15、20题的正确标识符答案是什么?2、查阅ftp://219.219.96.234/基础部教学空间/江苏省高校计算机二级考试C语言考题练习软件“单选题”的正确答案第一章单选题(2、4、7、8、9、10);第三章部份关于标识符规定和数据定义的题目(9、11、15、20、22) 。
[要求]机械0822班在下周课上回答1-5 1-2、46-10 1-7、811-15 1-9、1016-20 3-9、1121-25 3-15、2226-32 3-12、221、阅读书45、48页关于整型常量、浮点型常量、字符型常量的表示方式,以及相应的变量声明方式。
用软件的第三章选择题第3、16题来验证之。
2、C语言算术表达式:阅读书54、书55、书56页C语言运算符及附录C“运算符及其结合性”(P365)用软件的第三章填空题第5、6、7、15、17、18、19、21题来验证之。
(C语言)加法运算实验报告

cout<<"两个多项式之和为:"<<endl;
cout<<"A+B=";
result(add(A,B));
cout<<endl;
return 0;
}
//当 p 不为空时进行循环;
{
PolyLink A,B;
A=Ini_polynode();
B=Ini_polynode();
cout<<"输入第一个多项式:"<<endl;
input(A);
cout<<"A=";
result(A);
cout<<"输入第二个多项式:"<<endl;
input(B);
cout<<"B=";
result(B);
2、 测试结果:
①输入 A=x+3x^6-8x^11
输入 B=6-3x^6+21x^9
输出 A+B=6+x+21x^9-8x^11
②输入 A=x+x^3
输入 B=-x-x^3
输出 A+B=0
③输入 A=x+x^100
输入 B=x^100+x^200
输出 A+B=x+2x^100+x^200
④输入 A=x+x^2+x^3
一元多项式的加法运算
一、 需求分析
1、 程序的基本功能 1 按照指数升序次序,输入并建立多项式 A 与 B。 2 计算多项式 A 与 B 的和,即建立多项式 A+B。 3 按照指数升序次序,输出多项式 A、B、A+B。 2、 输入输出要求: 1 输入多项式;
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
注意其中的x是小写字母x,而且所有的符号之间都没有空格,如果某个幂的系数为0则不需要有那项。
输入样例:
6 2
5 3
3 12
1 6
0 20
6 2
5 3
2 12
1 6
0 20
输出样例:
4x6+6x5+12x3+12x2+12x+40
时间限制:500ms内存限制:32000kb
}
}
else{
if (a[1]==-1)
printf("-x");
else
printf("%dx",a[1]);
}
}
if (a[0]>0){
if (flag==0){
printf("%d",a[0]);
flag=1;
}
else
printf("+%d",a[0]);
}
if (a[0]<=0){
printf("%d",a[0]);
}
printf("\n");
return 0;
}
代码
#include <stdio.h> //此程序需要分3种情况,一、幂为0;二、幂为1;三、幂大于1
int a[105],b[105];
int main(){
int x,y;
while (~scanf("%d%d",&x,&y)){//存储第一个多项式的数据,当幂为0时停止输入
a[x]=y;
if (x==0) break;
}
}
}
if (a[1]){
if (a[1]>0){
if (a[1]==1){
if (flag==0){
printf("x");
flag=1;
}
else printf("+x");
}
else{
if (flag==0){
printf("%dx",a[1]);
flag=1;
}
else printf("+%dx",a[1]);
}
else{ //系数大于1的情况
if (flag==0){
printf("%dx%d",a[i],i);
flag=1;
}
else printf("+%dx%d",a[i],i);
}
}
else{ //系数小于0的情况
if (a[i]==-1)
printf("-x%d",i);
else printf("%dx%d",a[i],i);
C语言题目-多项式加法
多项式加法(10分)
题目内容:
一个多项式可以表达为x的各次幂与系数乘积的和,比如:
????2x6+3x5+12x3+6x+20
现在,你的程序要读入两个多项式,然后输出这两个多项式的和,也就是把对应的幂上的系数相加然后输出。
程序要处理的幂最大为100。
输入格式:
总共要输入两个多项式,每个多项式的输入格式如下:
每行输入两个数字,第一个表示幂次,第二个表示该幂次的系数,所有的系数都是整数。第一行一定是最高幂,最后一行一定是0次幂。
注意第一行和最后一行之间不一定按照幂次降低顺序排列;如果某个幂次的系数为0,就不出现在输入数据中了;0次幂的系数为0时还是会出现在输入数据中。
输出格式:
从最高幂开始依次降到0幂,如:
for (int i=20;i>1;i--){
if (a[i]){ //系数不为0
if (a[i]>0){来自//系数大于0的情况if (a[i]==1){ //系数等于1的情况
if (flag==0){//输出的式子是第一个式子
printf("x%d",i);
flag=1;
}
else printf("+x%d",i); //输出的式子不是第一个式子
}
while (~scanf("%d%d",&x,&y)){//存储第二个多项式的数据,当幂为0时停止输入
b[x]=y;
if (x==0) break;
}
for (int i=0;i<=100;i++)
a[i]=a[i]+b[i]; //将两个多项式的系数相加保存到数组a[i]中
int flag=0; //用此数来区分输出的式子是否是第一个数字,是第一个式子flag就为0,不是第一个式子flag就为1