多项式的合并代码 c语言

合集下载

多项式相加c语言

多项式相加c语言
Print(&sum);
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语言实验一(多项式求和)

☆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语言实现多项式源代码

数据结构C语言实现多项式源代码

一、一元稀疏多项式计算器#include<stdio.h>#include<stdlib.h>#include<malloc.h>#define OK 1#define ERROR 0#define OVERFLOW -1typedef int Status;#define LIST_INIT_SIZE 51 //假设次数不超过50typedef struct{//coef表示系数,expo表示指数。

float coef;int expo;}ElemType;typedef struct LNode{ //结点类型ElemType data;struct LNode *next;}LNode,*LinkList;//记:Link与Position均为指向LNode的指针类型typedef LinkList Polynomail;//在单链表的基础上定义并实现//多项式用链表存储Status CreateList_L(LinkList &L){int n;printf("请输入需创建的多项式的长度:\n");scanf("%d",&n);LNode *CurPtr,*PrePtr;//创建递增链表L=(LinkList) malloc(sizeof(LNode));L->next=NULL;if(!L) exit(OVERFLOW);PrePtr=L;for(int i=1;i<=n;++i){CurPtr=(LNode *)malloc(sizeof(LNode));printf("请输入不同的多项式的非0系数:");scanf("%f",&(CurPtr->data).coef );printf("请输入不同的多项式的指数:");scanf("%d",&(CurPtr->data).expo );CurPtr->next=NULL;PrePtr->next=CurPtr;PrePtr=PrePtr->next;//插入到表头}CurPtr->next =L;//冒泡排序法对多项式按指数由大到小排列。

多项式求和,C语言,链表

多项式求和,C语言,链表

计算机科学与工程学院《算法与数据结构》试验报告[二]专业班级10级计算机工程02 试验地点计算机大楼计工教研室学生学号1005080222 指导教师蔡琼学生姓名肖宇博试验时间2012-4-7试验项目算法与数据结构试验类别基础性()设计性()综合性(√)其它()试验目的及要求(1)熟练掌握链表结构及有关算法的设计;(2掌握用链表表示特定形式的数据的方法,并能编写出有关运算的算法。

成绩评定表类别评分标准分值得分合计上机表现积极出勤、遵守纪律主动完成设计任务30分程序与报告程序代码规范、功能正确报告详实完整、体现收获70分备注:评阅教师:日期:年月日试验内容一、实验目的和要求1、实验目的:(1)掌握用VC++上机调试线性表的基本方法;(2)掌握顺序表的存储结构以及基本运算的实现。

2、实验内容把任意给定的两个一元多项式P(x),Q(x)输入计算机,计算它们的和并输出计算结果。

3、实验要求:用链表实现。

二、设计分析一元多项式可以用单链表表示,结点结构图示如下:coef exp next一元多项式链表的结点结构一元多项式算法伪代码如下:1. 工作指针p、q初始化;2. while(p存在且q存在)执行下列三种情形之一2.1 如果p->exp<q->exp,则指针p后移;2.2 如果p->exp>q->exp,则2.2.1 将结点q插入到结点p之前;2.2.2 指针q指向原指结点的下一个结点;2.3 如果p->exp=q->exp,则2.3.1 p->coef =p->coef+q->coef;2.3.2 如果p->coef ==0,则执行下列操作,否则,指针p后移;2.3.2.1 删除结点p;2.3.2.2 使指针p指向它原指结点的下一个结点;2.3.3 删除结点q;2.3.4 使指针q指向它原指结点的下一个结点;3. 如果q不为空,将结点q链接在第一个单链表的后面;三、源程序代码#include<stdio.h>#include<stdlib.h>#define MAXSIZE 100typedef struct pnode{float coef; //多项式系数int exp; //多项式指数struct pnode *next;}polynode;void Inipnode(polynode *&p) //初始化{p=(polynode *)malloc(sizeof(polynode));p->next=NULL;}void Creatpnode_R(polynode *&p) //尾插法建立头结点{int len=0;polynode *s,*r;p=(polynode *)malloc(sizeof(polynode));r=p;label: printf("请输入您要输入多少个多项式");printf("\n");scanf("%d",&len);if(len<=0){printf("*********************************************************** *");printf("\n");printf("\t\t输入有误! 请重新输入!");printf("\n");printf("*********************************************************** *");printf("\n");goto label;}else{for(int i=0;i<len;i++){s=(polynode *)malloc(sizeof(polynode));label2: printf("请输入第%d项的系数",i+1);scanf("%f",&(s->coef));if(s->coef==0){printf("零输入它干嘛!重新输入!");printf("\n");goto label2;}printf("请输入第%d项的指数",i+1);scanf("%d",&(s->exp));r->next=s;r=s;}r->next=NULL;}}void Dispnode(polynode *p){polynode *s=p->next;if(s==NULL) //如果所有的项都被消去{printf("您输入的多项式为F(a)=0");printf("\n");}else //如果还有多项式{printf("您输入的多项式为F(a)=");while(s!=NULL){if(s->next!=NULL) //如果数据接点不是最终的接点,就要一个加号{printf("%.1fa%d+",s->coef,s->exp);}else //如果数据接点是最终的接点,不要加号{printf("%.1fa%d",s->coef,s->exp);}s=s->next; //指向下一个接点}printf("\n");}}void Addpnode(polynode *polya,polynode *polyb,polynode *&polyc){polynode *r,*p,*q,*m;polyc=(polynode *)malloc(sizeof(polynode)); //用尾插法创建第三个链表polyc->next=NULL;r=polyc;p=polya->next; //p,q 是数据接点q=polyb->next;while(p!=NULL&&q!=NULL){if(p->exp>q->exp){r->next=p;r=p;p=p->next;}else if(p->exp<q->exp){r->next=q;r=q;q=q->next;}else if(p->exp==q->exp){m=(polynode *)malloc(sizeof(polynode));m->next=NULL;m->coef=p->coef+q->coef;m->exp=p->exp;if(m->coef!=0){r->next=m;r=m;}p=p->next;q=q->next;}}while(q!=NULL){r->next=q;q=q->next;}while(p!=NULL){r->next=p;p=p->next;}}void main(){polynode *p1;polynode *p2;polynode *p3;Inipnode(p1);Inipnode(p2);Inipnode(p3);Creatpnode_R(p1);Creatpnode_R(p2);Dispnode(p1);Dispnode(p2);printf("-------------------------------------------------");printf("\n");Addpnode(p1,p2,p3);Dispnode(p3);}四、测试用例(尽量覆盖所有分支)1.正常状态下,输入无错误后的运行程序如下:2.当输入的多项式系数如果为负或者为零时:3.当输入的多项式,有的项为零时,约去该项的情况如图:4.当所有的输入项都为零的时候:5.当两个相加的项数不一样多的时候:五、实验总结先后学习了C/C++,对编程语言基本上有一些了解,但在数据结构试验程序设计过程中还是学到了很多。

两多项式求和(C语言版)

两多项式求和(C语言版)

两多项式求和(C语言版)#include "stdlib.h"#include "stdio.h"# define OVERFLOW -2typedef struct term{ float coef; //多项式系数int expn; //多项式指数struct term *next;} node;node *Create(int n)//创建一个n个结点的链表,并给每//个节点数据域赋值{ node *head, *p, *q;//int i;head=(node *)malloc(sizeof(node));if(!head) { printf("分配内存失败!");exit(OVERFLOW);}for(i=0;i<n;i++)< p="">{ p=(node *)malloc(sizeof(node));if(!p){ printf("分配内存失败!");exit(OVERFLOW);}printf("请输入第%d项系数:\n",i+1);//从键盘读取数据scanf("%f",&p->coef);printf("请输入第%d项指数:\n",i+1);scanf("%d",&p->expn);//从键盘读取数据if(i==0)//如果是第一个节点,则指针q、head同时指向该第一个实节点head->next=q=p;else //否则一个节点一个节点往后接{ q->next=p;p->next=NULL;q=p;}}return(head);//返回所建链表头指针}int cmp (node *m,node *n )//比较两个指数大小,并返回-1或0或1 { if(m->expnexpn)return -1;else if(m->expn==n->expn)return 0;elsereturn 1;}float Sum(node *m,node *n)//求多项式两个系数之和{ return m->coef+n->coef;}node *Add (node *a,node *b )//两个多项式相加{ node *ha,*hb,*pa,*pb,*tmpb;int t;ha=a;hb=b;while(ha->next!=NULL) {pa=ha->next;pb=hb->next;tmpb=hb;while(tmpb->next!=NULL){t=cmp(pa,pb);if(t==0){ (pa->coef)+=(pb->coef);pb=pb->next;tmpb->next=pb;}if(t!=0){tmpb=pb;pb=pb->next;}}ha=ha->next;}if(hb->next!=NULL)//如果多项式b还有某些项未执行相加操作,//则将其接到结果多项式a后面ha->next=hb->next;return a;//返回结果多项式}int main(){ node *x,*y,*p,*hp;int m=0,n=0;char c1,c2;printf("请输入第一个多项式的项数!\n");scanf("%d",&m);printf("请输入第一个多项式\n\n");x=Create(m);printf("请输入第二个多项式的项数!\n");scanf("%d",&n);printf("请输入第二个多项式\n\n");y=Create(n);p=Add(x,y );printf("两个多项式相加成功,其结果如下:\n"); while(p->next!=NULL)//输出相加所得的多项式{ printf("%5.1f",p->next->coef);if(p->next->expn!=0)printf(" * X(%d)",p->next->expn);p=p->next;if(p->next!=NULL)printf(" + ");}c1=getchar();c2=getchar();if(c2=='\n')printf("\n");return 0;}</n;i++)<>。

数据结构多项式合并.

数据结构多项式合并.

多项式合并代码:#include <iostream>#include <list>#include <iterator>using namespace std;class Term{public:int coef; //系数int exp; //指数Term(){};Term(int c,int e){coef = c;exp = e;}};void show(list<Term> slist)//显示链表{list<Term>::iterator iter = slist.begin();cout<<(*iter).coef<<"x^"<<(*iter).exp;iter++;while(iter!= slist.end()){cout<<"+"<<(*iter).coef<<"x^"<<(*iter).exp;iter++;}cout<<endl;}void merge(list<Term> alist,list<Term> blist)//合并链表{list<Term>::iterator iter1 = alist.begin();list<Term>::iterator iter2 = blist.begin();list<Term> mergeList;list<Term>::iterator iterMerge = mergeList.begin();while(iter1!=alist.end() && iter2!=blist.end()){if((*iter1).exp == (*iter2).exp){Term temp = Term((*iter1).coef +(*iter2).coef,(*iter1).exp);mergeList.push_back(temp);iter1++;iter2++;}else if((*iter1).exp > (*iter2).exp){ mergeList.push_back(*iter1);iter1++;}else{mergeList.push_back(*iter2);iter2++;}}if(iter1==alist.end()){while(iter2!=blist.end()){mergeList.push_back(*iter2);iter2++;}}else if(iter2==blist.end()){while(iter1!=alist.end()){mergeList.push_back(*iter1);iter1++;}}cout<<"H(x)=F(x)+G(x)=";show(mergeList);}void main(void){list<Term> f;list<Term> g;int arry1[]={8,7,3,5,9,2,5,1,2};int arry2[]={7,4,2,0,6,5,4,1,0};for(int i=0;i<4;i++){Term t;t=Term(arry1[i],arry2[i]);f.push_back(t);}for(int j=4;j<9;j++){Term t;t=Term(arry1[j],arry2[j]);g.push_back(t);}cout<<"F(x)=";show(f);cout<<"G(x)=";show(g);merge(f,g);}截图:。

多项式求和,源代码

多项式求和,源代码
//多项式的表示和相加
#include<stdio.h>
#include<malloc.h>
# define NULL 0
struct polyn
{
float xishu;
int zhishu;
struct polyn *next;
};
typedef struct polyn polyn;
/*函数功能:建立一个表示一元多项式的有序链表P
else
printf("%.2fX^%d ",p->xishu,p->zhishu);
p=p->next;
while (p!=NULL)
{
if (p->zhishu==0)
printf("+ %.2f ",p->xishu);
else if(p->zhishu==1&&p->xishu!=1)
printf("+ %.2fX ",p->xishu);
{
pb->next=p->next;
p->next=pb;
return pa;
}
else
p=p->next;
}
return NULL;
}
/*函数功能:将多项式p,q相加
函数参数:p,q的头结点指针head1,head2(保证head1的最高指数>head2的最高指数)
函数返回值:相加所得的多项式链表头结点指针
print(head1);
printf("\n请输入多项式q(x)的项数:\n");

数据结构 多项式求和

数据结构  多项式求和

#include<stdio.h>#include<malloc.h>#include<stdlib.h>#define NULL 0typedef struct NODE {float coef; //系数int expn; //指数struct NODE *next;}NODE;NODE *Creat(int n);void print(NODE *head);NODE *AddPolyn(NODE *head1, NODE *head2); NODE *Delfirst(NODE *head, NODE *q);void InsertBefore(NODE *p1, NODE *p2);int compare(int a, int b);main(){NODE *head1, *head2, *head3;int n1, n2;printf("请输入你需要的多项数的数目n1 : "); scanf("%d", &n1);head1 = Creat(n1);printf("第一个多项式的显示: \n");print(head1);printf("\n请输入你需要的多项数的数目n2 : "); scanf("%d", &n2);head2 = Creat(n2);printf("\n第二个多项式的显示: \n");print(head2);head3 = AddPolyn(head1, head2);printf("\n合并后的多项式的显示: \n");print(head3);printf("\n");}/*创建链表*/NODE *Creat(int n){NODE *current, *previous, *head;int i;head = (NODE *)malloc(sizeof(NODE)); /*创建头结点*/previous = head;for(i = 0; i < n; i++){current = (NODE *)malloc(sizeof(NODE));printf("请输入系数和指数: ");scanf("%f%d", &current->coef, &current->expn);previous->next = current;previous = current;}previous->next = NULL;return head;}/*一元多项式的想加,总体考虑,可分qa的指数比qb小,或等于pb(如果系数相加等于0和不等于0),或大于pb里面由InsertBefore和Delfirst两个小模块组成一部分*/NODE *AddPolyn(NODE *head1, NODE *head2){NODE *ha, *hb, *qa, *qb;int a, b;float sum;ha = head1; /*ha和hb指向头结点*/hb = head2;qa = ha->next; /*qa和qb指向头结点的下一个结点*/qb = hb->next;while(qa && qb) /*qa和qb均非空*/{a = qa->expn;b = qb->expn;switch(compare(a, b)) {case-1 : /*qa->expn < qb->expn*/ha = qa;qa = qa->next;break;case 0 :sum = qa->coef + qb->coef; /*系数的和*/if(sum != 0.0) {/*如果不是0.0*/qa->coef = sum; /*改变系数*/ha = qa;}else{free(Delfirst(ha, qa));}free(Delfirst(hb, qb));qa = ha->next;qb = hb->next; /*qb释放后要重新赋值*/break;case 1 : /*如果qa-> expn > qb -> expn*/ Delfirst(hb, qb);InsertBefore(ha, qb); /*把qb插入到ha下一个结点之前*/qb = hb->next;ha = ha->next;break;}}if(qb)ha->next = qb; /*插入剩余的pb*/free(head2);return head1;}/*比较*/int compare(int a, int b){if(a < b)return-1;else if(a > b)return 1;elsereturn 0;}/*删除结点q*/NODE *Delfirst(NODE *p1, NODE *q){p1 -> next = q -> next;return (q);}/*插入结点,引入结点p,可以让p插入到p2和p1之间*/void InsertBefore(NODE *p1, NODE *p2){NODE *p;p = p1->next;p1->next = p2;p2->next = p;}/*打印,为了美观程序分开打印*/void print(NODE *head){NODE *current;current = head->next;while(current->next != NULL){printf("%0.f * x^%d + ", current->coef, current->expn); current = current -> next;}printf("%0.f * x^%d", current->coef, current->expn);}。

c语言实现两多项式相乘,并排序,合并同类项

c语言实现两多项式相乘,并排序,合并同类项

#include<stdio.h>typedef struct Node{int coef;//系数int exp;//指数struct Node *next;}PolyNode;PolyNode *Creatpoly()//创建多项式的单链表{PolyNode *h,*p,*q;h=(PolyNode *)malloc(sizeof(PolyNode));p=h;p->next=NULL;printf("请输入多项式的系数及其指数a,b,当系数输入0时停止输入\n");q=(PolyNode *)malloc(sizeof(PolyNode));scanf("%d,%d",&q->coef,&q->exp);while(q->coef!=0){p->next=q;p=q;q=(PolyNode *)malloc(sizeof(PolyNode));scanf("%d,%d",&q->coef,&q->exp);}p->next=NULL;return(h);}void Prin_poly(PolyNode *h)//将多项式输出函数{PolyNode *p;p=h->next;while(p!=NULL){if(p->coef>0&&p!=h->next){if(p->exp>0)printf("+%dx^%d",p->coef,p->exp);else if(p->exp<0)printf("+%dx^(%d)",p->coef,p->exp);elseprintf("+%d",p->coef);}else if(p->coef<0&&p!=h->next){if(p->exp>0)printf("%dx^%d",p->coef,p->exp);else if(p->exp<0)printf("%dx^(%d)",p->coef,p->exp);elseprintf("%d",p->coef);}else{if(p->exp>0)printf("%dx^%d",p->coef,p->exp);else if(p->exp<0)printf("%dx^(%d)",p->coef,p->exp);elseprintf("%d",p->coef);}p=p->next;}}void Insort(PolyNode *h)//排序函数,使多项式中的各项按X的升幂排列{PolyNode *s,*p;int t,m;for(p=h->next;p!=NULL;p=p->next)//类似于冒泡排序{for(s=h->next;s->next!=NULL;s=s->next){if(s->exp>s->next->exp){t=s->exp;m=s->coef;s->coef=s->next->coef;s->exp=s->next->exp;s->next->coef=m;s->next->exp=t;}}}}void UnitePoly(PolyNode *h)//合并同类项{PolyNode *p1,*p2,*q1,*q2,*temp;q1=h;while(p1!=NULL){p2=p1->next;q2=p1;while(p2!=NULL){if(p1->exp==p2->exp){p1->coef=p1->coef+p2->coef;if(p1->coef==0){temp=p2;q2->next=p2->next;free(temp);temp=p1;q1->next=p1->next;p1=q1;free(temp);break;}else{temp=p2;q2->next=p2->next;p2=p2->next;free(temp);}}else{q2=p2;p2=p2->next;}}q1=p1;p1=p1->next;}}PolyNode *polymuti(PolyNode *h1,PolyNode *h2)//多项式相乘{PolyNode *h,*p,*p1,*p2,*q;p1=h1->next;h=p=(PolyNode *)malloc(sizeof(PolyNode));while(p1){p2=h2->next;while(p2){q=(PolyNode *)malloc(sizeof(PolyNode));q->coef=p1->coef*p2->coef;q->exp=p1->exp+p2->exp;p->next=q;p=q;p2=p2->next;}p1=p1->next;}p->next=NULL;return(h);}main(){PolyNode *h1,*h2,*h;h1=Creatpoly();printf("该多项式为P1(x)=");UnitePoly(h1);Insort(h1);Prin_poly(h1);printf("\n");h2=Creatpoly();printf("该多项式为P2(x)=");UnitePoly(h2);Insort(h2);Prin_poly(h2);printf("\n");printf("按任意键查看两多项式相乘结果\n");getch();printf("相乘后的多项式为P(x)=");h=polymuti(h1,h2);UnitePoly(h);Insort(h);Prin_poly(h);printf("\n");}上文已完。

多项式的加法和乘法计算c语言代码

多项式的加法和乘法计算c语言代码

多项式的加法和乘法计算C语言代码多项式是代数学中常见的一种数学表达式形式,通常表示为:P(x) = a0 + a1*x + a2*x^2 + a3*x^3 + ... + an*x^n其中a0, a1, a2,...,an是多项式P(x)的系数,x是变量,n是多项式的次数。

在实际的编程开发中,我们经常需要实现多项式的加法和乘法计算。

下面我们将介绍如何使用C语言来实现多项式的加法和乘法计算。

一、多项式的表示与存储在C语言中,可以使用结构体来表示多项式,并使用数组来存储多项式的系数。

假设我们要表示一个最高次数为n的多项式,可以定义结构体如下:```ctypedef struct {int coeff[MAX_SIZE]; // 存储多项式系数的数组int degree; // 多项式的最高次数} Polynomial;其中MAX_SIZE是一个常数,用来表示多项式的最大阶数。

在实际使用中,可以根据需要进行调整。

二、多项式的加法多项式的加法实质上是将两个多项式的对应系数相加,并将结果存储在一个新的多项式中。

下面是多项式加法的C语言代码实现:```cPolynomial addPolynomial(Polynomial poly1, Polynomial poly2) {Polynomial result;int i;// 确定结果多项式的最高次数result.degree = (poly1.degree > poly2.degree) ?poly1.degree : poly2.degree;// 将对应系数相加for (i = 0; i <= result.degree; i++) {result.coeff[i] = poly1.coeff[i] + poly2.coeff[i];return result;}```以上代码通过遍历多项式的系数数组,将对应位置的系数相加,并将结果存储在result中。

编写程序实现多项式求和

编写程序实现多项式求和

编写程序实现多项式求和多项式求和是指对多个多项式进行求和运算。

在编写程序实现多项式求和时,我们需要定义多项式的结构,实现多项式的输入和输出,以及多项式的求和运算。

首先,我们可以定义一个多项式的结构体,包括系数和指数两个成员变量。

我们可以通过定义一个数组来存储多项式的一系列项,每一项由系数和指数构成。

```C++typedef structdouble coefficient; // 系数int exponent; // 指数} Term;```接下来,我们可以实现多项式的输入和输出函数。

输入函数可以根据用户的输入来构建多项式的项数组,输出函数可以按照多项式的形式输出多项式的每一项。

```C++void inputPolynomial(Term polynomial[], int *terms)printf("请输入多项式的项数:");scanf("%d", terms);printf("请输入多项式的每一项(系数和指数,空格分隔):\n");for (int i = 0; i < *terms; i++)printf("第 %d 项:", i + 1);scanf("%lf %d", &(polynomial[i].coefficient),&(polynomial[i].exponent));}void outputPolynomial(Term polynomial[], int terms)printf("多项式为:");for (int i = 0; i < terms; i++)printf(" %.2fx^%d", polynomial[i].coefficient,polynomial[i].exponent);if (i != terms - 1)printf(" +");}printf("\n");```在多项式输入函数中,首先要询问用户输入的是多项式的项数。

C++一元多项式合并实验报告

C++一元多项式合并实验报告

实验二一元多项式相加问题本实验的目的是进一步熟练掌握应用链表处理实际问题的能力。

一、问题描述一元多项式相加是通过键盘输入两个形如P0+P1X1+P2X2+···+PnX n的多项式,经过程序运算后在屏幕上输出它们的相加和。

二、数据结构设计分析任意一元多项式的描述方法可知,一个一元多项式的每一个子项都由“系数—指数”两部分组成,所以可将它抽象成一个由“系数—指数对”构成线性表,由于对多项式中系数为0的子项可以不记录他的数值,对于这样的情况就不再付出存储空间来存放它了。

基于这样的分析,可以采取一个带有头结点的单链表来表示一个一元多项式。

具体数据结构定义为:typedef struct node{float ce; //系数域float ex; //指数域struct node *next; //指针域}lnode,*linklist;三功能(函数)设计1、输入并建立多项式的功能模块此模块要求按照指数递增的顺序和一定的输入格式输入各个系数不为0的子项的“系数—指数对”,输入一个子项建立一个相关的节点,当遇到输入结束标志时结束输入,而转去执行程序下面的部分。

屏幕提示:input ce & ex and end with 0:ce=1ex=2ce=0ex=0 //输入结束标志input ce & ex and end with 0:ce=2ex=2ce=0ex=0 //输入结束标志输入后程序将分别建立两个链表来描述两个一元多项式:A=X^2B=2X^2这两个多项式的相加的结果应该为:C=3X^22、多项式相加的功能模块此模块根据在1中建立的两个多项式进行相加运算,并存放在以C为头指针的一个新建表中。

可以采用以下方法进行设计:开始时a,b分别指向A,B的开头,如果ab不为空,进行判断:如果a所指的结点的指数和b所指的结点的指数相同,将它们的系数相加做成C式中的一项,如果不一样则将小的一项加到C中。

c++多项式求和

c++多项式求和

c++多项式求和C++多项式求和在计算机编程中,多项式求和是一项常见的任务。

C++作为一种高级编程语言,提供了丰富的工具和功能,使得多项式求和变得简单而高效。

本文将为您介绍如何使用C++来实现多项式求和,并提供一些实用的技巧和建议。

首先,我们需要了解多项式的基本概念。

多项式是由一系列项组成的代数表达式,每一项由一个系数和一个指数组成。

例如,多项式3x^2 + 2x + 1有三个项,分别为3x^2、2x和1。

在C++中,我们可以使用数组或链表等数据结构来表示多项式。

接下来,我们需要实现多项式的输入和存储。

可以通过用户输入或从文件中读取多项式的系数和指数,并将其存储在数组或链表中。

在C++中,可以使用数组或动态内存分配来实现多项式的存储。

然后,我们需要实现多项式的求和算法。

多项式求和的基本原理是将相同指数的项的系数相加。

可以使用循环来遍历多项式的每一项,并将相同指数的项的系数相加。

在C++中,可以使用for循环或while循环来实现多项式求和算法。

在实现多项式求和算法时,还需要注意处理系数为零的情况。

如果某一项的系数为零,则可以将其从多项式中删除,以减少计算量和存储空间。

可以使用条件语句来判断某一项的系数是否为零,并相应地进行处理。

此外,为了提高多项式求和的效率,可以考虑使用优化技巧。

例如,可以对多项式的项按指数进行排序,以便更快地找到相同指数的项。

可以使用排序算法如快速排序或归并排序来对多项式的项进行排序。

最后,我们需要输出求和后的多项式结果。

可以将多项式的项按照指数降序排列,并输出每一项的系数和指数。

在C++中,可以使用循环和格式化输出来实现多项式结果的输出。

综上所述,C++提供了丰富的功能和工具,使得多项式求和变得简单而高效。

通过实现多项式的输入、存储、求和算法和结果输出,我们可以轻松地完成多项式求和的任务。

希望本文能够帮助您理解和掌握C++多项式求和的方法和技巧。

祝您编程愉快!。

c语言多项式求和

c语言多项式求和

c语言多项式求和本篇文章将介绍C语言中如何实现多项式求和。

1、定义结构体在C语言中,我们通常用结构体来表示多项式。

定义一条多项式时,我们需要定义它的次数,系数和指数。

下面是一个多项式结构体的定义:```#define MAX_N 100struct polynomial {int degree; // 多项式次数double coef[MAX_N]; // 多项式系数,最高项为系数数组的第0项int expon[MAX_N]; // 多项式指数,最高项为指数数组的第0项};```2、输入多项式我们可以定义一个函数来读取多项式的系数和指数,然后将它们保存到结构体中。

```void read_poly(struct polynomial *poly) {printf("Enter the degree of the polynomial: ");scanf("%d", &poly->degree);printf("Enter the coefficients:\n");for (int i = 0; i <= poly->degree; ++i) {scanf("%lf", &poly->coef[i]);}printf("Enter the exponents:\n");for (int i = 0; i <= poly->degree; ++i) {scanf("%d", &poly->expon[i]);}}```这个函数首先要求用户输入多项式的次数,然后依次读取多项式的系数和指数。

我们也可以定义一个函数来输出多项式。

这个函数将多项式的系数和指数格式化输出到标准输出流中。

这个函数首先以标准的方式输出第1项,然后对于每一项,它都以类似“+ax^b”的方式输出。

多项式的合并代码c语言

多项式的合并代码c语言

/*-----------------------------------------------------------------------------时间:2011年9月28日文件功能:实现了动态建立一个学生信息的链表包括链表的创建、插入、删除、和打印输出学生信息包括姓名和分数本链表是带有头结点的,头结点的内容为空内容-----------------------------------------------------------------------------*/ /*-------------------------包含头文件------------------------------------*/ #include<>#include<>#include<>#include<>/*-------------------------结构体定义部分------------------------------*/ struct Node{char name[10];int score;struct Node *next;};typedef struct Node ListNode;/*----------------------------函数声明部分------------------------------*/ /*---------------------------函数实现部分-------------------------------*/ /*-----------------------------创建链表---------------------------------*/ /*在链表的末端插入新的节点,建立链表*/ListNode *CreateList(int n){ListNode *head;n");else{j=0;p=h;n");elseof insert element:");scanf("%d",&i);printf("input name of the student:");scanf("%s",name);printf("input score of the student:");scanf("%d",&score);InsertList(h,i,name,score,n);printf("list elements is:\n");PrintList(h);break;case 3:printf("input the position of delete element:"); scanf("%d",&i);DeleteList(h,i,name,score,n);printf("list elements in : \n");PrintList(h);break;case 4:printf("list element is : \n");PrintList(h);break;case 0:return;break;default:printf("ERROR!Try again!\n"); }}}。

两个多项式的和程序

两个多项式的和程序

//两个多项式的和#include<stdio.h>#include<stdlib.h>#include<malloc.h>struct List{float c;int e;struct List *Next;};typedef struct List Node;typedef Node *link;void Printf_list(link Head) /*链表的输出*/ {link p;p=Head;printf("输出和多项式为:\n");while(p!=NULL){printf("%f,%d\n",p->c,p->e);p=p->Next;}}link Create_list(link Head) /*新建链表*/ {float c0;int e0;link New;link p;Head=(link)malloc(sizeof(Node));if(Head==NULL)printf("ERROR\n");else{scanf("%f,%d",&c0,&e0);Head->c=c0;Head->e=e0;Head->Next=NULL;p=Head;while(1){New=(link)malloc(sizeof(Node));scanf("%f,%d",&c0,&e0);if(c0==0) break; /*0键结束输入*/New->c=c0;New->e=e0;New->Next=NULL;p->Next=New;p=New;}}return(Head);}void Free_list(link Head) /*链表的释放*/{link p;while(Head!=NULL){p=Head;Head=Head->Next;free(p);}}void Delate_jiedian(link Head) /*删除系数为0的节点*/ {link p=Head;link q=Head;while(p!=NULL){q=p;if(p->c==0){if(p==Head)Head=p->Next;elseq->Next=p->Next;}p=p->Next;}}void main() /*主函数*/{link head1=NULL;link head2=NULL;link head3,p1,p2,p3,New;printf("请按升幂输入第一个多项式:\n");head1=Create_list(head1);printf("请按升幂输入第二个多项式:\n");head2=Create_list(head2);p1=head1;p2=head2;head3=(link)malloc(sizeof(Node)); /*新建第三个和链表*/if(head3==NULL)printf("ERROR");else{if(p1->e<p2->e){head3->c=p1->c;head3->e=p1->e;p1=p1->Next;}else if(p1->e>p2->e){head3->c=p2->c;head3->e=p2->e;p2=p2->Next;}else{head3->c=p1->c+p2->c;head3->e=p1->e;p1=p1->Next;p2=p2->Next;}}head3->Next=NULL;p3=head3;while(p1!=NULL&&p2!=NULL){New=(link)malloc(sizeof(Node));if(p1->e<p2->e){New->c=p1->c;New->e=p1->e;p1=p1->Next;}else if(p1->e>p2->e){New->c=p2->c;New->e=p2->e;p2=p2->Next;}else{New->c=p1->c+p2->c;New->e=p1->e;p1=p1->Next;p2=p2->Next;}New->Next=NULL;p3->Next=New;p3=New;}if(p1==NULL)p3->Next=p2;if(p2==NULL)p3->Next=p1; Delate_jiedian(head3); Printf_list(head3); Free_list(head1); Free_list(head2);}。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

/*-----------------------------------------------------------------------------时间:2011年9月28日文件功能:实现了动态建立一个学生信息的链表包括链表的创建、插入、删除、和打印输出学生信息包括姓名和分数本链表是带有头结点的,头结点的内容为空内容-----------------------------------------------------------------------------*//*-------------------------包含头文件------------------------------------*/#include<stdio.h>#include<stdlib.h>#include<malloc.h>#include<string.h>/*-------------------------结构体定义部分------------------------------*/struct Node{char name[10];int score;struct Node *next;};typedefstruct Node ListNode;/*----------------------------函数声明部分------------------------------*//*---------------------------函数实现部分-------------------------------*//*-----------------------------创建链表---------------------------------*//*在链表的末端插入新的节点,建立链表*/ListNode *CreateList(int n){ListNode *head;//指向头结点指针ListNode *p,*pre;inti;head=(ListNode *)malloc(sizeof(ListNode));//为头节点分配内存空间head->next=NULL;//将头结点的指针域清空pre=head;//先将头结点首地址赋给中间变量prefor(i=1;i<=n;i++)//通过for循环不断加入新的结点{printf("input name of the %d student:",i);//打印出第几个人的名字p=(ListNode *)malloc(sizeof(ListNode));//为要插入的节点分配//内存空间p指向新插入结点的首地址scanf("%s",&p->name);//输入姓名printf("input score of the %d student:",i);scanf("%d",&p->score);//输入分数pre->next=p;//将p指向新结点插入链表也就是头结点指针域指向//下个结点//第一个结点就是p指向的,因为头结点内容为空pre=p;//这个起着指向下一个结点的作用}p->next=NULL;//最后将最后一个结点的指针域清空了return head;//返回这个链表的首地址}/*-------------------------输出链表-----------------------------------*/void PrintList(ListNode *h){ListNode *p;p=h->next;while(p){printf("%s,%d",p->name,p->score);p=p->next;printf("\n");}}/*----------------------插入链表结点--------------------------* //*--------------------------------------------------------------------函数名称:InsertList(ListNode *h,inti,char name[],inte,int n) 函数功能:插入链表结点入口参数: h: 头结点地址i:插入到第几个结点name:插入结点的姓名e:插入结点的分数n:链表中结点的个数除下头结点外的个数出口参数:--------------------------------------------------------------------*/void InsertList(ListNode *h,inti,char name[],inte,int n) {ListNode *q,*p;//先定义2个指向一个结点的指针int j;if(i<1 || i>n+1)printf("Error! Please input again.\n");else{j=0;p=h;//将指针p指向要链表的头结点while(j<i-1){p=p->next;j++;}q=(ListNode *)malloc(sizeof(ListNode));/*为要插入的结点分配内存空间*///----赋值操作---------strcpy(q->name,name); //将名字拷到要插入的节点内q->score=e; //将要插入的节点中分数赋值//调整指针域q->next = p->next; /*这个是将新插入的结点指针域指向上一个结点指针域指向的结点地址即为p->next*/p->next=q;/*将要插入结点位置前面的结点指针域指向现在插入的结点首地址*/}}/*--------------------------------------------------------------------函数名称:DeleteList(ListNode *h, inti, int n)函数功能:删除链表结点入口参数: h: 头结点地址i:要删除的结点所在位置n:链表中结点的个数除下头结点外的个数出口参数:--------------------------------------------------------------------*/void DeleteList(ListNode *h, inti, int n){ListNode *p,*q;//首先定义2个指向结点型结构体的指针int j;char name[10];int score;if(i<1 || i>n)//如果位置超出了1和n的范围的话则打印出错误printf("Error! Please input again.\n");else//没有超出除头结点外的1到n 的范围的话那么执行删除操作 {j=0;p=h;//将指针指向链表的头结点首地址while(j<i-1){p=p->next;j++;}q=p->next; /*q指向要删除的位置之前的那个结点指针域指向的地址q指向的结点就是要删除的结点*/p->next=q->next;/*这个就是将要删除的结点的前面那个结点的指针域指向要删除的结点指针域中存放的下个结点的首地址从而实现了删除第i个结点的作用*/strcpy(name,q->name);score=q->score;free(q);//释放q指向的结点printf("name=%s,score=%d\n",name,score);}}/*--------------------------主函数-------------------------------*/void main(){ListNode *h;//h指向结构体NODEinti = 1, n, score;char name [10];while ( i ){/*输入提示信息*/printf("1--建立新的链表\n");printf("2--添加元素\n");printf("3--删除元素\n");printf("4--输出当前表中的元素\n");printf("0--退出\n");scanf("%d",&i);switch(i){case 1:printf("n="); /*输入创建链表结点的个数*/scanf("%d",&n);h=CreateList(n);/*创建链表*/printf("list elements is : \n");PrintList(h);break;case 2:printf("input the position. of insert element:"); scanf("%d",&i);printf("input name of the student:");scanf("%s",name);printf("input score of the student:");scanf("%d",&score);InsertList(h,i,name,score,n);printf("list elements is:\n");PrintList(h);break;case 3:printf("input the position of delete element:"); scanf("%d",&i);DeleteList(h,i,name,score,n);printf("list elements in : \n"); PrintList(h);break;case 4:printf("list element is : \n"); PrintList(h);break;case 0:return;break;default:printf("ERROR!Try again!\n"); }}}。

相关文档
最新文档