一元多项式的计算环境c++,c.docx_第1页
一元多项式的计算环境c++,c.docx_第2页
一元多项式的计算环境c++,c.docx_第3页
一元多项式的计算环境c++,c.docx_第4页
一元多项式的计算环境c++,c.docx_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

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

文档简介

一元多项式计算环境阅读书中 2.4节 完成如下任务1. 建立文本文件,polyIn.txt,在其中输入任意多个一元多项式,多项式之间用;分隔,表示模式为:项数 系数 指数 系数 指数 ,例如,3 1 0 1 1 1 2 ;表示 1 + x + x2; 3 2 0 3 2 7 9 ;表示 2 +3*x2+7*x9;3 90 0 78 4 8 8; 表示90+78*x4+8*x8;2. 从根据文件poly.txt的内容,创建若干多项式;3. 将所有多项式输出至屏幕;形如a 1+x+x2b 2 +3*x2+7*x9c 2 +3*x2+7*x9d 4. 开发多项式计算环境,允许用户通过输入算式,对上述表达式进行计算,并将计算结果同时输出至屏幕和文件 (polyout.txt),如:若用户输入 a+b,则系统应输出 a+b = (1+x+x2) + (1+3*x2+7*x9) = 最终计算结果;若用户输入 a-b则系统应输出:a-b = = (1+x+x2) - (1+3*x2+7*x9) = 最终计算结果;若用户输入 a*b则系统应输出:a*b = (1+x+x2) * (1+3*x2+7*x9) = 最终计算结果;若用户输入 (a+b)*c 则系统应输出:(a+b)*c = 最终计算结果用户输入 quit 则退出计算环境。提示1) 实现并使用链表的基本操作,Init, Insert, delete, destroy等2) 加法和减法的本质上是一样的3) 乘法可以看成是多次简单乘法的和;(a+b)*(c+d) = a*(c+d) + b(c+d); 4) 可用栈解析多项式计算表达式5) 类型定义 代码如下:#includestdio.h#include stdlib.htypedef struct Polynomail float coef; int exp; struct Polynomail *next;*Polyn,Polynomail;Polyn CreatePolyn(Polyn head,int m); /构造多项式void Insert(Polyn p,Polyn h); /向多项式中插入新结点int PrintPolyn(Polyn P); /打印多项式void menu(); /菜单Polyn AddPolyn(Polyn pa,Polyn pb); /两多项式相加Polyn SubtractPolyn(Polyn pa,Polyn pb); /两多项式相减Polyn MultiplyPoly(Polyn pa,Polyn pb); /两多项式相乘void DestroyPoly(Polyn p); /销毁void SavePoly1(Polyn p,int n); /保存void SavePoly2(Polyn p,int n); /保存#includepolynomail.h#includestdio.hvoid menu() printf(_n); printf( 菜单 n); printf(n); printf( 1.创建一个多项式n); printf( 2.打印n); printf( 3.多项式相加n); printf( 4.多项式相减n); printf( 5.多项式相乘n); printf( 6.退出n); printf(n); printf(_n); printf(请输入您的选择:); getch();void Insert(Polyn p,Polyn h) /把p插入链表h中 if (p-coef=0) free(p); /系数为0的话释放结点 else Polyn q1,q2; q1=h; q2=h-next; while (q2&p-expexp) /查找插入位置 q1=q2; q2=q2-next; if (q2&p-exp=q2-exp) /将指数相同相合并 q2-coef+=p-coef; free(p); if (!q2-coef) /系数为0的话释放结点 q1-next=q2-next; free(q2); else /指数为新时将结点插入 p-next=q2; q1-next=p; /InsertPolyn CreatePolyn(Polyn head,int m) /建立一个头指针为head、项数为m的一元多项式 int i; Polyn p,q; head=(Polyn)malloc(sizeof(struct Polynomail); p=head; q=p; head-next=NULL; for (i=0;icoef,&p-exp); p-next=head-next; head-next=p; head=p; return q;/CreatePolynint PrintPolyn(Polyn P) Polyn q; q=P-next; int count=1;/记住打印的项数 if (!q) /若多项式为空,输出0 printf(0n); return 0; while (q) if (q-coef0&count!=1) printf(+); /系数大于0且不是多项式的第一项 if (q-coef!=1&q-coef!=-1) /系数不是1和-1的一般情况 printf(%.0f,q-coef); if (q-exp=1) printf(X); else if (q-exp) printf(X%d,q-exp); else if (q-coef=1) if (!q-exp) printf(1); /系数为1,指数为0 else if (q-exp=1) printf(X); else printf(X%d,q-exp); if (q-coef=-1) if (!q-exp) printf(-1); /系数为-1,指数为0 else if (q-exp=1) printf(-X); else printf(-X%d,q-exp); q=q-next; count+; /while return(count-1);/PrintPolynPolyn AddPolyn(Polyn pa,Polyn pb) /求解并建立多项式pa+pb=pc,返回其头指针 Polyn qa,qb,qc,pc,he,tempa,tempb; /用pc表示相加后的链表 qa=pa-next; qb=pb-next; tempa=qa; tempb=qb; pc=(Polyn)malloc(sizeof(struct Polynomail);/建立头结点 pc-next=NULL; qc=pc; he=qc; /用he记住和链表的头 while (qa&qb) qc=(Polyn)malloc(sizeof(struct Polynomail); if (qa-exp=qb-exp) /指数相同时 qc-coef=(qa-coef)+(qb-coef); qc-exp=qa-exp; Insert(qc,pc); qa=qa-next; qb=qb-next; else if (qa-expqb-exp) /链表pa的系数大于pb的系数 qc-coef=qa-coef; qc-exp=qa-exp; Insert(qc,pc); qa=qa-next; else /链表pb的系数大于pa的系数 qc-coef=qb-coef; qc-exp=qb-exp; Insert(qc,pc); qb=qb-next; while (qa) /pa有剩余 qc=(Polyn)malloc(sizeof(struct Polynomail); qc-coef=qa-coef; qc-exp=qa-exp; Insert(qc,pc); qa=qa-next; while (qb) /pb有剩余 qc=(Polyn)malloc(sizeof(struct Polynomail); qc-coef=qb-coef; qc-exp=qb-exp; Insert(qc,pc); qb=qb-next; qa=tempa; qb=tempb; return he;/AddPolynPolyn SubtractPolyn(Polyn pa,Polyn pb) /求解并建立多项式a+b,返回其头指针 Polyn h,p,pd; /用pd表示相减后的链表 p=pb-next; h=pb; while (p) /将pb的系数取反 p-coef*=-1; p=p-next; pd=AddPolyn(pa,h); p=h-next; while (p) /恢复pb的系数 p-coef*=-1; p=p-next; return pd;/SubtractPolynPolyn MultiplyPoly(Polyn pa,Polyn pb) /求解并建立多项式a*b,返回其头指针 Polyn qa,qb,qf,pf,he,tempa,tempb,ji; /用pf表示相乘后的链表 qa=pa-next; qb=pb-next; tempa=qa; tempb=qb; pf=(Polyn)malloc(sizeof(struct Polynomail);/建立头结点 pf-next=NULL; qf=pf; ji=qf; /用ji记住积链表的头 while (qa) while (qb) qf=(Polyn)malloc(sizeof(struct Polynomail); qf-coef=(qa-coef)*(qb-coef); qf-exp=(qa-exp)+(qb-exp); Insert(qf,pf); qb=qb-next; qa=qa-next; qb=tempb; qa=tempa; qb=tempb; return ji;void DestroyPoly(Polyn p) Polyn q1,q2; q1=p-next; q2=q1-next; while (q1-next) free(q1); q1=q2;/指针后移 q2=q2-next; void SavePoly1(Polyn p,int n) Polyn q; char ch=; q=p-next; FILE *fp=fopen(E:polynomail.txt,w); if (fp) fprintf(fp,%d ,n); while (q) fprintf(fp,%.0f %d ,q-coef,q-exp); q=q-next; fprintf(fp,%cn,ch); fclose(fp); printf(n已将文件保存至E:polynomail.txt!n); getch();void SavePoly2(Polyn p,int n) Polyn q; char ch=; q=p-next; FILE *fp=fopen(E:polynomail.txt,a+); if (fp) fprintf(fp,%d ,n); while (q) fprintf(fp,%.0f %d ,q-coef,q-exp); q=q-next; fprintf(fp,%cn,ch); fclose(fp); printf(n已将文件保存至E:polynomail.txt!n); getch();#includestdio.h#includepolynomail.cint main() int n,m,choice,m1,m2,m3,m4,m5; Polyn pa,pb,pc,pd,pf;/定义各式的头指针 for (;) system(cls); menu(); scanf(%d,&choice); switch (choice) case 1: system(cls); printf(注意:输入的指数必须为大于等于0的数!n); printf(请输入多项式A的项数:); scanf(%d,&n); pa=CreatePolyn(pa,n); printf(请输入多项式B的项数:); scanf(%d,&m); pb=CreatePolyn(pb,m); printf(press any key to continue!n); break; case 2: system(cls); printf(多项式A:); m1=PrintPolyn(pa); SavePoly1(pa,m1); printf(n多项式B:); m2=PrintPolyn(pb); SavePoly2(pb,m2); printf(npress any key to continue!n); break; case 3: system(cls); printf(a+b=(); PrintPolyn(pa); printf()+(); PrintPolyn(pb); printf()n=); pc=AddPolyn(pa,pb); m3=PrintPolyn(pc); SavePoly2(pc,m3); printf(npress any key to continue!n); break; case 4: system(cls); printf(a-b=(); PrintPolyn(pa); printf()-(); PrintPolyn(pb); printf()n=); pd=SubtractPolyn(pa,pb); m4=PrintPoly

温馨提示

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

评论

0/150

提交评论