文档库 最新最全的文档下载
当前位置:文档库 › C语言一元多项式加法

C语言一元多项式加法

C语言一元多项式加法
C语言一元多项式加法

//C语言数据结构_一元多项式加法

#include

#include

#include

#define OK 1

#define ERROR 0

typedef int Status;

typedef int ElemType;

typedef struct LNode //定义结构体

{

ElemType coef;

ElemType exp;

struct LNode *next;

}LNode,*Linklist;

Status CreateList_L(Linklist &L) //初始化链表

{

L=(Linklist)malloc(sizeof(LNode));

L->next=NULL;

return OK;

}

Status InsertList_L(Linklist &L,int i,ElemType c,ElemType e) //在链表中i位置插入元素e {

Linklist p=L,s;

int j=0;

while(p->next!=NULL&&j

{

p=p->next;

j++;

}

s=(Linklist)malloc(sizeof(LNode));

s->coef=c;

s->exp=e;

s->next=p->next;

p->next=s;

return OK;

}

Status AddList_L(Linklist &La,Linklist Lb,int len) //将b中的所有项加到a中

{

Linklist p=Lb;

int j=len;

while(p->next!=NULL)

{

p=p->next;

InsertList_L(La,j,p->coef,p->exp);

j++;

}

return OK;

}

Status GetLength(Linklist L,int &len) //检查链表长度

{

Linklist p=L;

while(p->next!=NULL)

{

p=p->next;

len++;

}

return OK;

}

Status PrintList_L(Linklist L) //输出链表

{

Linklist p=L;

if(p==NULL) return ERROR;

printf("两多项式的和为\n");

while(p->next!=NULL)

{

p=p->next;

if(p->coef!=0)

printf("%d,%d ",p->coef,p->exp);

}

putchar('\n');

return OK;

}

Status ReorderList_L(Linklist &L) //将链表按指数从小到大排序{

Linklist p=L,q=L;

ElemType temp;

for(p=L;p->next!=NULL;p=p->next)

for(q=p;q!=NULL;q=q->next)

{

if(p->exp>q->exp)

{

temp=p->exp;

p->exp=q->exp;

q->exp=temp;

temp=p->coef;

p->coef=q->coef;

q->coef=temp;

}

}

return OK;

}

Status CheckList_L(Linklist &L) //按指数由小到大排序后,合并同类项{

Linklist p=L,s;

ReorderList_L(p);

p=p->next;

while(p->next!=NULL)

{

if(p->next->exp==p->exp)

{

p->coef+=p->next->coef;

s=(Linklist)malloc(sizeof(LNode));

s=p->next;

p->next=s->next;

free(s);

}

else

{

p=p->next;

}

}

return OK;

}

void main()

{

Linklist La,Lb;

CreateList_L(La);

CreateList_L(Lb);

int lena=0,i=0;

ElemType tempcoef,tempexp;

printf("请逐项输入系数与指数,格式为a,b(a为系数,b为指数)。输入0,0结束\n");

printf("请输入第一个一元多项式\n");

while(1)

{

scanf("%d,%d",&tempcoef,&tempexp);

if(tempcoef==0&&tempexp==0)

break;

if(tempcoef!=0)

{

i++;

InsertList_L(La,i,tempcoef,tempexp);

}

}

i=0;

printf("请输入第二个一元多项式\n");

while(1)

{

scanf("%d,%d",&tempcoef,&tempexp);

if(tempcoef==0&&tempexp==0)

break;

if(tempcoef!=0)

{

i++;

InsertList_L(Lb,i,tempcoef,tempexp);

}

}

GetLength(La,lena);

AddList_L(La,Lb,lena);

CheckList_L(La);

PrintList_L(La);

free(La);

free(Lb);

}

一元多项式的相加减复习过程

实验一一元多项式的表示和相减、相乘 一、实验目的 1.掌握链表的存储方式 2.掌握一元多项式的存储及运算。 二、实验内容 已知一元多项式P(x)和Q(x)已存在,求P(x)-Q(x)和P(x)* Q(x)并输出。 要求: 1.通过键盘随机输入两多项式P(x)和Q(x)的内容。 2.输出结果要有P(x)和Q(x)的以及它们的差P(x)-Q(x)和乘积P(x)* Q(x)。 三、实验步骤: 1.创建一元多项P(x)和Q(x)。 2.求P(x)-Q(x),P(x)* Q(x)。 3.输出P(x)、Q(x)、P(x)-Q(x),P(x)* Q(x)。 四、算法说明 首先,定义一元多项式的存储方式,然后从键盘输入P(x)和Q(x)对应多项式的各对系数和指数,建立相应的一元多项式 五、测试结果参考下图 多项式相减 多项式相乘

六、源代码 1.多项式的相减 # include # include typedef struct{ float coef; //系数 int expn; //指数 }ElemType; typedef struct LNode{ //结点类型 ElemType data; struct LNode *next; }*LinkList; void MakeNode(LinkList &s,ElemType e){ //生成结点 s=(LinkList)malloc(sizeof(LNode)); s->data=e; }

void InsAfter(LinkList p,LinkList s){ //插入结点 s->next=p->next; p->next=s; } int compare(ElemType e1,ElemType e2){ //比较 if(e1.expn>e2.expn) return 1; else if(e1.expnnext,s; while(q){ int n=compare(e,q->data); if(n<0){ MakeNode(s,e); InsAfter(p,s);break; } else if(n==0) { q->data.coef=q->data.coef+e.coef; if(q->data.coef==0){p->next=q->next;free(q);} break; }

一元多项式加减乘除运算

中国计量学院实验报告 实验课程:算法与数据结构实验名称:一元二项式班级:学号: 姓名:实验日期: 2013-5-7 一.实验题目: ①创建2个一元多项式 ②实现2个多项式相加 ③实现2个多项式相减 ④实现2个多项式相乘 ⑤实现2个多项式相除 ⑥销毁一元多项式 实验成绩:指导教师:

二.算法说明 ①存储结构:一元多项式的表示在计算机内可以用链表来表示,为了节省存储 空间,只存储多项式中系数非零的项。链表中的每一个结点存放多项式的一个系数非零项,它包含三个域,分别存放该项的系数、指数以及指向下一个多项式项结点的指针。创建一元多项式链表,对一元多项式的运算中会出现的各种可能情况进行分析,实现一元多项式的相加、相减操作。 ②加法算法

三.测试结果 四.分析与探讨 实验数据正确,部分代码过于赘余,可以精简。 五.附录:源代码#include<> #include<> #include<> typedef struct Polynomial { float coef; int expn; struct Polynomial *next; }*Polyn,Polynomial; 出多项式a和b\n\t2.多项式相加a+b\n\t3.多项式相减a-b\n"); printf("\t4.多项式相除a*b\n\t5.多项式相除a/b\n\t6.销毁多项式\n"); printf("\t7.退出

\n*********************************** ***********\n"); printf("执行:"); scanf("%d",&flag); switch(flag) { case(1): printf("多项式a:");PrintPolyn(pa); printf("多项式b:");PrintPolyn(pb);break; case(2): pc=AddPolyn(pa,pb); printf("多项式a+b:");PrintPolyn(pc); DestroyPolyn(pc);break; case(3): pd=SubtractPolyn(pa,pb); printf("多项式a-b:");PrintPolyn(pd); DestroyPolyn(pd);break; case(4): pf=MultiplyPolyn(pa,pb); printf("多项式a*b:");PrintPolyn(pf); DestroyPolyn(pf);break; case(5): DevicePolyn(pa,pb); break; case(6): DestroyPolyn(pa); DestroyPolyn(pb); printf("成功销毁2个一元二项式\n"); printf("\n接下来要执行的操作:\n1 重新创建2个一元二项式 \n2 退出程序\n"); printf("执行:"); scanf("%d",&i); if(i==1) { // Polyn pa=0,pb=0,pc,pd,pf;//定义各式的头指针,pa与pb在使用前付初值NULL printf("请输入a的项数:"); scanf("%d",&m); pa=CreatePolyn(pa,m);// 建立多项式a printf("请输入b的项

多项式的运算(c语言实现)

#include"stdio.h" #include"stdlib.h" #include"conio.h" typedef struct Item{ double coef;//系数 int expn;//指数 struct Item *next; }Item,*Polyn; #define CreateItem(p) p=(Item *)malloc(sizeof(Item)); #define DeleteItem(p) free((void *)p); /************************************************************/ /* 判断选择函数 */ /************************************************************/ int Select(char *str) { char ch; printf("%s\n",str); printf("Input Y or N:"); do{ ch=getch(); }while(ch!='Y'&&ch!='y'&&ch!='N'&&ch!='n'); printf("\n"); if(ch=='Y'||ch=='y') return(1); else return(0); } /************************************************************/ /* 插入位置定位函数 */ /**************************************************************/ int InsertLocate(Polyn h,int expn,Item **p) { Item *pre,*q; pre=h; q=h->next; while(q&&q->expnnext; } if(!q) { *p=pre; return(1); } else if(q->expn==expn) { *p=q; return(0); } else { *p=pre; return(-1); } } /************************************************************/ /* 插入结点函数 */ /************************************************************/ void insert(Item *pre,Item *p) {

数据结构一元多项式的计算

课程设计成果 学院: 计算机工程学院班级: 13计科一班 学生姓名: 学号: 设计地点(单位): 设计题目:一元多项式的计算 完成日期:年月日 成绩(五级记分制): _________________ 教师签名:_________________________ 目录 1 需求分析 ......................................................................... 错误!未定义书签。 2 概要设计 ......................................................................... 错误!未定义书签。 2.1一元多项式的建立 ............................................................... 错误!未定义书签。 2.2显示一元多项式 ................................................................... 错误!未定义书签。 2.3一元多项式减法运算 ........................................................... 错误!未定义书签。 2.4一元多项式加法运算 ........................................................... 错误!未定义书签。 2.5 设计优缺点.......................................................................... 错误!未定义书签。3详细设计 .......................................................................... 错误!未定义书签。 3.1一元多项式的输入输出流程图........................................... 错误!未定义书签。 3.2一元多项式的加法流程图................................................... 错误!未定义书签。 3.3一元多项式的减法流程图.................................................. 错误!未定义书签。 3.4用户操作函数....................................................................... 错误!未定义书签。4编码 .................................................................................. 错误!未定义书签。5调试分析 .......................................................................... 错误!未定义书签。4测试结果及运行效果...................................................... 错误!未定义书签。5系统开发所用到的技术.................................................. 错误!未定义书签。参考文献 ............................................................................. 错误!未定义书签。附录全部代码................................................................... 错误!未定义书签。

数据结构课程设计-一元多项式的加法、减法、乘法的实现

一、设计题目 一元多项式的加法、减法、乘法的实现。 二、主要内容 设有一元多项式A m(x)和B n(x). A m(x)=A0+A1x1+A2x2+A3x3+… +A m x m B n(x)=B0+B1x1+B2x2+B3x3+… +B n x n 请实现求M(x)= A m(x)+B n(x)、M(x)= A m(x)-B n(x)和M(x)= A m(x)×B n(x)。要求: 1) 首先判定多项式是否稀疏 2) 采用动态存储结构实现; 3) 结果M(x)中无重复阶项和无零系数项; 4) 要求输出结果的升幂和降幂两种排列情况 三、具体要求及应提交的材料 1.每个同学以自己的学号和姓名建一个文件夹,如:“312009*********张三”。里面应包括:学生按照课程设计的具体要求所开发的所有源程序(应该放到一个文件夹中)、任务书和课程设计说明书的电子文档。 2.打印的课程设计说明书(注意:在封面后夹入打印的“任务书”以后再装订)。 四、主要技术路线提示 为把多个小功能结合成一个完整的小软件,需使用“菜单设计”技术(可以是控制台方式下的命令行形式,若能做成图形方式则更好)。 五、进度安排 共计两周时间,建议进度安排如下: 选题,应该在上机实验之前完成 需求分析、概要设计可分配4学时完成

详细设计可分配4学时 调试和分析可分配10学时。 2学时的机动,可用于答辩及按教师要求修改课程设计说明书。 注:只用课内上机时间一般不能完成设计任务,所以需要学生自行安排时间做补充。 六、推荐参考资料(不少于3篇) [1]苏仕华等编著,数据结构课程设计,机械工业出版社,2007 [2]严蔚敏等编著,数据结构(C语言版),清华大学出版社,2003 [3]严蔚敏等编著,数据结构题集(C语言版),清华大学出版社,2003 指导教师签名日期年月日 系主任审核日期年月日 摘要 分析了matlab,mathmatic,maple等数学软件对一元多项式的计算过程,步骤后。由于这些软件比较大功能齐全,但是实用性不强。因此,利用microsoft visual studio 6.0开发工具,编程实现了一元多项式的加法、减法、乘法的计算器系统,该系统具有一元多项式的加法、减法、乘法等功能。 关键词:一元多项式; 软件; 计算

一元多项式求和

一元多项式求和——链表编程 一.实验名称:一元多项式求和——链表编程。 二.实验环境:Windows Xp ,Vc++6.0。 三.实验目的: 1.掌握一元多项式的链表式存储算法; 2.掌握链表的结构定义; 3.采用尾插法生成单链表。 四.实验内容: 1.一元多项式的表示: 一元多项式可按升幂的形式表示为 12012()n e e e n n P x p p x p x p x =++++…… 其中:i e 为第i 项的指数,i p 是指数i e 的项的系数,且 121i n e e e e <=<=<=<=<=<=……。 则多项式()n P x 可以用一个线性表P 来表示:01(,)m P p p p =, ;同理,多项式 ()n Q x 可表示为01(,,)n Q q q q =…(mcodf=c;

多项式加法(C语言实现)

多项式加法 #include #include #define Max_Size 100 typedef 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;icoef=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; }

曲线拟合C语言程序

^ #include<> #include<> void nihe(); void gs(); void main() { int i,j,m,n; float o[50]; \ float x[50] , y[50] ,a[50][50]; printf("输入数据节点数 n = ",n); scanf("%d",&n); for( i=1;i<=n;i++) { printf(" i = %d\n",i); } printf("各节点的数据 x[i] \n"); 、 for(i=1;i<=n;i++) { printf("x[%d] = ",i); scanf("%f",&x[i]); } printf("各节点的数据 y[i] \n"); for(i=1;i<=n;i++) { ¥ printf("y[%d] = ",i); scanf("%f",&y[i]); } printf("\n"); printf("拟合的多项式次数 m = ", m); scanf("%d",&m); ¥ } void nihe(float x[50], float y[50], int m ,int n) { int i,j,k=0,c=1,w=1;

float f,a[50][50] , o[50];; ~ do { f=0; for(i=1;i<=n;i++) { f=f+pow( x[i] , k)*pow( x[i] , k); } … a[c][c]=f ; a[c+1][c-1]=f; a[c-1][c+1]=f; c++; k++; }while(k<=m); , k=1;c=1; do { f=0; for(i=1;i<=n;i++) { f=f+pow( x[i] , k); } * a[c+1][c]=f; a[c][c+1]=f; c++; k++; k++; }while(k<=m+1); ) k=0;c=1; do { f=0; for(i=1;i<=n;i++)

一元多项式的计算数据结构课程设计

一元多项式的计算—加,减 摘要(题目)一元多项式计算 任务:能够按照指数降序排列建立并输出多项式; 能够完成两个多项式的相加、相减,并将结果输入; 目录 1.引言 2.需求分析 3.概要设计 4.详细设计 5.测试结果 6.调试分析 7.设计体会 8.结束语 一:引言: 通过C语言使用链式存储结构实现一元多项式加法、减法和乘法的运算。按指数

降序排列。 二:需求分析 建立一元多项式并按照指数降序排列输出多项式,将一元多项式输入并存储在内存中,能够完成两个多项式的加减运算并输出结果 三:概要设计 存储结构:一元多项式的表示在计算机内可以用链表来表示,为了节省存储空间,只存储多项式中系数非零的项。链表中的每一个结点存放多项式的一个系数非零项,它包含三个域,分别存放该项的系数、指数以及指向下一个多项式项结点的指针。创建一元多项式链表,对一元多项式的运算中会出现的各种可能情况进行分析,实现一元多项式的相加、相减操作。 1.单连表的抽象数据类型定义: ADT List{ 数据对象:D={ai|ai∈ElemSet,i=1,2,…,n,n≥0} 数据关系:R1={| ai-1, ai∈D,i=2,…,n} 基本操作: InitList(&L) //操作结果:构造一个空的线性表 CreatPolyn(&L) //操作结果:构造一个以单连表存储的多项试 DispPolyn(L) //操作结果:显示多项试 Polyn(&pa,&pb) //操作结果:显示两个多项试相加,相减的结果 } ADT List 2.本程序包含模块: typedef struct LNode //定义单链表 { }LNode,*LinkList; void InitList(LinkList &L) //定义一个空表 { } void CreatPolyn(LinkList &L) //用单链表定义一个多项式 { } void DispPolyn(LinkList L) //显示输入的多项式

一元多项式相加完整实验报告

一元多项式相加实验报告 一元多项式的相加

一实验内容 根据所学的数据结构中线性结构(线性表)的逻辑特性和物理特性及相关算法,应用于求解一个具体的实际问题----------两个多项式相加 二需求分析 1掌握线性结构的逻辑特性和物理特性。 2建立一元多项式。 3将一元多项式输入,并存储在内存中,并按照指数降序排列输出多项式。 4能够完成两个多项式的加减运算,并输出结果。 三概要设计 1 本程序所用到的抽象数据类型: typedef OrderedLinkList polynomial; // 用带表头结点的有序链表表示多项式 结点的数据元素类型定义为: typedef struct { // 项的表示 float coef; // 系数 int expn; // 指数 term, ElemType; V oid AddPolyn(polynomail&Pa,polynomail&Pb) Position GetHead() Position NextPos(LinkList L,Link p) Elem GetCurElem(Link p) int cmp(term a term b) Status SetCurElem(Link&p, ElemType e) Status DelFirst(Link h, Link &q) Status ListEmpty(LinkList L) Status Append(LinkList&L, Link S) FreeNode() 2 存储结构

一元多项式的表示在计算机内用链表来实现,同时为了节省存储空间,只存储其中非零的项,链表中的每个节点存放多项式的系数非零项。它包含三个域,分别存放多项式的系数,指数,以及指向下一个项的指针。 创建一元多项式链表,对运算中可能出现的各种情况进行分析,实现一元多项式的相加相减操作。 3 模块划分 a) 主程序;2)初始化单链表;3)建立单链表; 4)相加多项式 4 主程序流程图 四详细设计 根据一元多项式相加的运算规则:对于两个一元多项式中所有指数相同的项,对应系数相加,若其和不为零,则构成“和多项式”中的一项,对

数据结构(C语言)用单链表存储一元多项式,并实现两个多项式的相加运算

#include #include #include 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");

一元多项式的运算

数据结构课程设计实验报告 专业班级: 学号: 姓名: 2011年1月1日

题目:一元多项式的运算 1、题目描述 一元多项式的运算在此题中实现加、减法的运算,而多项式的减法可以通过加法来实现(只需在减法运算时系数前加负号)。 在数学上,一个一元n次多项式P n(X)可按降序写成: P n(X)= P n X^n+ P(n-1)X^(n-1)+......+ P1X+P0 它由n+1个系数惟一确定,因此,在计算机里它可以用一个线性表P来表示: P=(P n,P(n-1),......,P1,P0) 每一项的指数i隐含在其系数P i的序号里。 假设Q m(X)是一元m次多项式,同样可以用一个线性表Q来表示: Q=(q m,q(m-1),.....,q1,q0) 不是一般性,假设吗吗m

数据结构 一元多项式的计算

项目一一元多项式的计算问题 1.1设计题目与要求 1.1.1设计题目 1)一元多项式计算 任务:能够按照指数降序排列建立并输出多项式;能够完成两个多项式的相加、相减,并将结果输入; 基本要求:在上交资料中请写明:存储结构、多项式相加的基本过程的算法(可以使用程序流程图)、源程序、测试数据和结果、算法的时间复杂度、另外可以提出算法的改进方法;本程序关键点是如何将输入的两个多项式相加、相减操作。 ①如何将输入的一元多项式按指数的降序排列 ②如何确定要输入的多项式的项数; ③如何将输入的两个一元多项式显示出来。 ④如何将输入的两个一元多项式进行相加操作。 ⑤如何将输入的两个一元多项式进行相减操作。 本程序是通过链表实现一元多项式的相加减操作。 1.1.2、任务定义 此程序需要完成如下的要求:将多项式按照指数降序排列建立并输出,将两个一元多项式进行相加、相减操作,并将结果输入。 a:输入多项式的项数并建立多项式; b:输出多项式,输出形式分别为浮点和整数序列,序列按指数升序排列; c:多项式a和b相加,建立多项式a+b; d:多项式a和b相减,建立多项式a-b。 e:多项式的输出。 1.2 数据结构的选择和概要设计: 1.2.1数据结构的选用 A:基于链表中的节点可以动态生成的特点,以及链表可以灵活的添加或删除节点的数据结构,为了实现任意多项式的加法,减法,因此选择单链表的结构体,它有一个系数,指数,下一个指针3个元属;例如,图1中的两个线性链表分别表示一元多项式 和一元多项式。从图中可见,每个结点表示多项式中的一项。

图1 多项式表的单链存储结构 B:本设计使用了以下数据结构: typedef struct node{ int xs; /*系数*/ int zs; /*指数*/ struct node * next; /*next指针*/ }Dnode,* Dnodelist; C:设计本程序需用到八个模块,用到以下八个子函数如下: 1.Dnodelist Creat_node(void) /*链表初始化*/ 2.int Insert_node(Dnodelist D,int xs,int zs) /*插入函数*/ 3.Dnodelist Creat_Dmeth(int length) /*创建多项式*/ 4.Dnodelist Addresult(Dnodelist D1,Dnodelist D2) /*多项式相加*/ 5.Dnodelist Subresult(Dnodelist D1,Dnodelist D2) /*多项式相减*/ 6.Dnodelist select(Dnodelist D1,Dnodelist D2) /*选择函数*/ 7void Show(Dnodelist D) /*显示(输出)函数*/ 8void main()主程序模块调用链一元多项式的各种基本操作模块。 1.2.2 多项式的输入 先输入多项式的项数,采用尾插法的方式,输入多项式中一个项的系数和指数,就产生一个新的节点,建立起它的右指针,并用头节点指向它; 1.2.3 两个多项式的加法 “和多项式”链表中的结点无需另生成,而应该从两个多项式的链表中摘取。其运算规则如下: 假设指针A和B分别指向多项式a和多项式b中当前进行比较的某个结点,则比较两个结点中的指数项,有下列3种情况: ①指针A所指结点的指数值<指针B所指结点的指数值,则应摘取A指针所指结点插入到“和多项式”链表中去; ②指针A所指结点的指数值>指针B所指结点的指数值,则应摘取指针A所指结点插入到“和多项式”链表中去; ③指针A所指结点的指数值=指针B所指结点的指数值,则将两个结点中的系数相加, 若和数不为零,则修改A所指结点的系数值,同时释放B所指结点;反之,从多项式A的链表中删除相应结点,并释放指针A和B所指结点。例如,由图2中的两个链表表示的多项式相加得到的“和多项式”链表如图2所示,图中的长方框表示已被释放的结点。

C语言多项式加法

C语言题目-多项式加法 多项式加法(10分) 题目内容: 一个多项式可以表达为x的各次幂与系数乘积的和,比如: 2x6+3x5+12x3+6x+20 现在,你的程序要读入两个多项式,然后输出这两个多项式的和,也就是把对应的幂上的系数相加然后输出。 程序要处理的幂最大为100。 输入格式: 总共要输入两个多项式,每个多项式的输入格式如下: 每行输入两个数字,第一个表示幂次,第二个表示该幂次的系数,所有的系数都是整数。第一行一定是最高幂,最后一行一定是0次幂。注意第一行和最后一行之间不一定按照幂次降低顺序排列;如果某个幂次的系数为0,就不出现在输入数据中了;0次幂的系数为0时还是会出现在输入数据中。 输出格式: 从最高幂开始依次降到0幂,如: 2x6+3x5+12x3-6x+20 注意其中的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 代码 #include //此程序需要分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;

} 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 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); //输出的式子不是第一个式子

一元多项式的加法减法乘法的实现

福建农林大学计算机与信息学院 课程设计报告 课程名称:数据结构 课程设计题目:一元多项式的加法减法乘法的实现姓名: 系:软件工程系 专业:软件工程专业 年级:2014 学号: 指导教师:黄思先 职称:副教授 完成起止日期:2016.6.5 - 2016.7.1 2016年07月1日

福建农林大学计算机与信息学院课程设计结果评定

目录 一、问题分析和任务定义 (1) 二、程序设计内容 (1) 三、程序调试与测试 (7) 四、实验心得 (9) 五、程序编码 (9)

一、问题分析及任务定义 顺序结构、动态链表结构下的一元多项式的加法、减法、乘法的实现。 【问题描述和基本要求】设有一元多项式Am(x)和Bn(x). Am(x)=A0+A1x1+A2x2+A3x3+… +Amxm Bn(x)=B0+B1x1+B2x2+B3x3+… +Bnxn 请实现求M(x)= Am(x)+Bn(x)、M(x)= Am(x)-Bn(x)和M(x)= Am(x)×Bn(x)。 要求: 1) 首先判定多项式是否稀疏 2) 分别采用顺序和动态存储结构实现; 3) 结果M(x)中无重复阶项和无零系数项; 4) 要求输出结果的升幂和降幂两种排列情况 二、课程设计的内容 2.1函数 多项式创建函数PolyNode *Creatpoly() 多项式输出函数void Prin_poly(PolyNode *h) 多项式升序排列函数void Insortup(PolyNode *h) 多项式降序排列函数void Insortdown(PolyNode *h) 多项式合并函数void UnitePoly(PolyNode *h) 多项式相乘函数PolyNode *polymuti(PolyNode *h1,PolyNode *h2) 多项式相加函数PolyNode *addition(PolyNode *ha, PolyNode *hb) 多项式相减函数PolyNode *subduction (PolyNode *ha, PolyNode *hb) 2.2设计各个模块的流程图 (1)main()

两个一元多项式相加-c++版

《数据结构》实验报告 ——两个一元多项式相加 一、实验题目:两个一元多项式相加 二、实验内容: 根据所学的数据结构中线性结构(线性表)的逻辑特性和物理特性及相关算法,应用于求解一个具体的实际问题----------两个多项式相加 三、设计思想: (1)建立两个顺序列表,分别用来表示两个一元多项式;顺序列表奇数位,存储该多项式的系数;顺序列表的偶数位,存储该相应多项式的指数。 (2)用成员函数merg(qList&l2)实现两多项式的相加。实现的大致方法为:比较第二个多项式列表与第一个多项式列表的偶数位的数值大小(指数),如果 相同,则将他们的前一位数(系数)相加;如果不同,就将他的前一位数(系 数)及它自己(指数)插入第一个多项式列表的后面。 (3)建立函数shu(double a[],int j)实现多项式的输入。 四、源程序代码 #include "stdafx.h" #include using namespace std; template class List { private: Telem * elem; int curlen; int maxlen; public: List(int maxsz=100):maxlen(maxsz) { curlen=0; elem=new Telem{maxlen}; }; List(Telem a[],int n,int maxsz=100):maxlen(maxsz) { curlen=n; elem=new Telem[maxlen]; for(int i=0;i

数据结构:一元多项式的表示与相加

实验一一元多项式的表示与相加 实验目的: 1.复习并熟练掌握数据结构所使用的程序设计语言——C语言; 2.学会单步跟踪、调试自己的程序; 3.加深对线性表特别是链表知识的理解和掌握,并能够运用相关知识来解决相关的具体问题,如一元多项式相加等; 程序流程: 1.定义一元多项式链表结构体类型; 2.输入多项式项数以分配存储空间; 3.输入多项式每项的系数和指数,将其插入当前多项式链表。同时判断是否有与当前节点指数相同的项,若存在,则将两项系数相加合并。此外,若存在系数为0的项,将其存储空间释放; 4.进行多项数加法时,新建一个存储结果的链表,分别将两多项式各项依次插入结果多项式即完成多项式相加运算; 5.进行多项数加法时,将减项多项式各项系数化为相反数后进行加法操作,即完成多项式相减运算; 6.对x赋值后,将x值代入多项式进行运算得到多项式的值; 7.输出多项式。 注意:进行完一次运算以后,应该及时销毁无用多项式以释放空间以便再次应用。 算法及注释: 1)定义一元多项式链表结构体类型 typedef struct Lnode{ float cof; //定义系数 int exp; //定义指数 struct Lnode *next; //定义指针变量指向下一个节点 }Lnode ,*Linklist; //定义新的变量类型 2)建立多项式存储线性链表头结点 void makehead(Linklist &head){ head=(Linklist)malloc(sizeof(Lnode)); //建立新的节点 head->exp=-1; head->next=NULL; //指针赋空 head->cof=1; }

[计算机]一元多项式相加完整实验报告

[计算机]一元多项式相加完整实验报告一元多项式的相加 一实验内容 根据所学的数据结构中线性结构(线性表)的逻辑特性和物理特性及相关算法,应用于求解一个具体的实际问题----------两个多项式相加 二需求分析 1掌握线性结构的逻辑特性和物理特性。 2建立一元多项式。 3将一元多项式输入,并存储在内存中,并按照指数降序排列输出多项式。 4能够完成两个多项式的加减运算,并输出结果。 三概要设计 1 本程序所用到的抽象数据类型: typedef OrderedLinkList polynomial; // 用带表头结点的有序链表表示多项式 结点的数据元素类型定义为: typedef struct { // 项的表示 oat flcoef; // 系数 int expn; // 指数 term, ElemType; Void AddPolyn(polynomail&Pa,polynomail&Pb) Position GetHead() Position NextPos(LinkList L,Link p) Elem GetCurElem(Link p) int cmp(term a term b)

Status SetCurElem(Link&p, ElemType e) Status DelFirst(Link h, Link &q) Status ListEmpty(LinkList L) Status Append(LinkList&L, Link S) FreeNode() 2 存储结构 一元多项式的表示在计算机内用链表来实现,同时为了节省存储空间,只存储其中非零的项,链表中的每个节点存放多项式的系数非零项。它包含三个域,分别存放多项式的系数,指数,以及指向下一个项的指针。 序数coef 指数exp 指针域next 创建一元多项式链表,对运算中可能出现的各种情况进行分析,实现一元多项式的相加相减操作。 3 模块划分 a) 主程序;2)初始化单链表;3)建立单链表; 4)相加多项式 4 主程序流程图 开始 申请结点空间 输入多项式各项的系数X,指数Y 输出已输出的多项式 否 是否输入正确 合并同类项 结束 四详细设计 根据一元多项式相加的运算规则:对于两个一元多项式中所有指数相

相关文档
相关文档 最新文档