一元多项式加减法[1].doc_第1页
一元多项式加减法[1].doc_第2页
一元多项式加减法[1].doc_第3页
一元多项式加减法[1].doc_第4页
一元多项式加减法[1].doc_第5页
已阅读5页,还剩1页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

#include #include typedef struct node/定义节点类型 float coef; int expn; struct node * next; PLOY; void start()/用户选择界面 printf(*n); printf( 两个一元多项式的相加/相减,相乘:n); printf(*n); printf(请选择操作:n); printf(0.退出n); printf(1.两个一元多项式相加n); printf(2.两个一元多项式相乘n); printf(3.两个一元多项式相减n); void insert(PLOY *head,PLOY *inpt)/查找位置插入新链节程序 PLOY *pre,*now; int signal=0; pre=head;/pre定义为现在的前一个链节 if(pre-next=NULL) pre-next=inpt; else now=pre-next; while(signal=0) if(inpt-expnexpn)/当新链节小于现在的连接时向后移一个链节 if(now-next=NULL) now-next=inpt; signal=1; else pre=now; now=pre-next; else if(inpt-expnnow-expn)/如果发现比现在的链节大了就插入到这个连接的前面 inpt-next=now; pre-next=inpt; signal=1; else now-coef=now-coef+inpt-coef; signal=1; free(inpt);/与当前链节相等指数 if(now-coef=0) pre-next=now-next; free(now); PLOY *creat(char ch)/输入多项式 PLOY *head,*inpt; float x; int y; head=(PLOY *)malloc(sizeof(PLOY);/创建链表头 head-next=NULL; printf(请输入一元多项式%c:(格式是:系数 指数;以0 0 结束!)n,ch); scanf(%f %d,&x,&y); while(x!=0) inpt=(PLOY *)malloc(sizeof(PLOY);/创建新链节 inpt-coef=x; inpt-expn=y; inpt-next=NULL; insert(head,inpt);/不然就查找位置并且插入新链节 printf(请输入一元多项式%c的下一项:(以0 0 结束!)n,ch); scanf(%f %d,&x,&y); return head; PLOY *addPLOY(PLOY *head,PLOY *pre)/多项式相加 PLOY *inpt; int flag=0; while(flag=0) if(pre-next=NULL) flag=1;/当现在指向空时跳出循环 else pre=pre-next; inpt=(PLOY *)malloc(sizeof(PLOY);/创建新链节 inpt-coef=pre-coef; inpt-expn=pre-expn; inpt-next=NULL; insert(head,inpt); /否则把当前g(x)的链节插入到y(x)中 return head; PLOY *minusPLOY(PLOY *head,PLOY *pre)/多项式相加 PLOY *inpt; int flag=0; while(flag=0) if(pre-next=NULL) flag=1;/当现在指向空时跳出循环 else pre=pre-next; inpt=(PLOY *)malloc(sizeof(PLOY);/创建新链节 inpt-coef=0-pre-coef; inpt-expn=pre-expn; inpt-next=NULL; insert(head,inpt); /否则把当前g(x)的链节插入到y(x)中 return head; PLOY *byPLOY(PLOY *head1,PLOY *head2)/多项式相乘 PLOY *inpt,*res,*pre; int flag=0; res=(PLOY *)malloc(sizeof(PLOY);/创建链表头 res-next=NULL; head1=head1-next; pre=head2; while(flag=0) if(pre-next=NULL) pre=head2;/当现在指向空时跳出循环 head1=head1-next; continue; if(head1=NULL) flag=1;/当现在指向空时跳出循环 continue; pre=pre-next; inpt=(PLOY *)malloc(sizeof(PLOY);/创建新链节 inpt-coef=pre-coef*head1-coef; inpt-expn=pre-expn+head1-expn; inpt-next=NULL; insert(res,inpt);/把当前g(x)的链节插入到y(x)中 return res; void print(PLOY *fun)/输出多项式 PLOY *printing; int flag=0; printing=fun-next;/正在被打印的链节 if(fun-next=NULL)/如果函数为空打印0 printf(0n); return; while(flag=0) if(printing-coef0&fun-next!=printing) printf(+);/为正数时打印+号 if(printing-coef=1);/如果为1就不用打印系数了 else if(printing-coef=-1) printf(-);/如果为-1就打印-号就行了 else printf(%f,printing-coef);/其余情况都得打印 if(printing-expn!=0) printf(x%d,printing-expn);/如果指数为0不打印指数项 else if(printing-coef=1)|(printing-coef=-1) printf(1); if(printing-next=NULL) flag=1;/如果现在的链节没有下一个就结束 else printing=printing-next; printf(n); void main() PLOY *f,*g; int sign=-1;/设置标志 start(); while(sign!=0) scanf(%d,&sign); switch(sign) case 0: break;/退出 case 1: printf(你选择的操作是多项式相加:n); f=creat(f);/输入多项式f(x) printf(f(x)=); print(f); g=creat(g);/输入多项式g(x) printf(g(x)=); print(g); printf(F(x)=f(x)+g(x)=); f=addPLOY(f,g);/两个多项式相加 print(f); sign=-1;/复位标志 start();/回复用户选择界面 break; case 2: printf(你选择的操作是多项式相乘:n); f=creat(f);/输入多项式f(x) printf(f(x)=); print(f); g=creat(g);/输入多项式g(x) printf(g(x)=); print(g); printf(F(x)=f(x)*g(x)=); f=byPLOY(f,g);/两个多项式相加 print(f); sign=-1;/复位标志 start();/回复用户选择界面 break; case 3: printf(你选择的操作是多项式相减:n); f=creat(f);/输入多项式f(x) printf(f(x)=); print(f); g=creat(g);/输入多项式g(x) printf

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论