多项式加减法C++源码_第1页
多项式加减法C++源码_第2页
多项式加减法C++源码_第3页
多项式加减法C++源码_第4页
多项式加减法C++源码_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

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

文档简介

《程序设计实践》课程实验报告学号:126040594姓名:王乾帅程序名称:多项式加法一:程序源码:#include<iostream>#include<string>usingnamespacestd;intNUM=0;//全局变量,控制结构体下标,大小代表多项式的项数;intmt=0;structData //结构体,用来存放单个项的系数和幂,分别为x,y;{intx;inty;};DataDa[1000];boolcmp(Dataa,Datab)//为了使用sort对结构体进行排序,自定义cmp函数;{returna.y>b.y;}voidrun(string&a);//自定义函数,用来对字符串进行处理,提取出字符串中的单个项;intmain(){ inti,stop,sig,sig2=0; stringa,b; cout<<"多项式加减法运算器\n"<<"请输入需要选择的运算(1加法.2减法.)\n"; cin>>sig; cout<<"请输入第一个多项式:";//多项式输入 cin>>a; cout<<"请输入第二个多项式:"; cin>>b; run(a);//处理多项式1,将数据存入结构体中; if(sig==2)mt=1; run(b);//处理多项式2; sort(Da,Da+NUM,cmp);//对结构体按照y(即单个项的幂)的大小排序 for(i=0;i<NUM;)//以下为输出部分 { stop=i+1;//搜索幂相同的结构体,将x相加,在进行各种判断,进而输出 while(Da[i].y==Da[stop].y&&stop<NUM+1) { stop++; } if(stop-i-1==0)//只搜索到一项的输出 { if(Da[i].y==0) { //判断输出是否为第一项,判断输出为正数还是负数,分别进行输出; if(Da[i].x>0&&i!=0&&sig2==1){cout<<"+"<<Da[i].x;sig2=1;} if(Da[i].x>0&&i!=0&&sig2!=1){cout<<Da[i].x;sig2=1;} if(Da[i].x>0&&i==0){cout<<Da[i].x;sig2=1;} if(Da[i].x<0){cout<<Da[i].x;sig2=1;} } elseif(Da[i].y==1) { if(Da[i].x>1&&i!=0&&sig2==1){cout<<"+"<<Da[i].x;sig2=1;cout<<"x";} if(Da[i].x>1&&i!=0&&sig2!=1){cout<<Da[i].x;sig2=1;cout<<"x";} if(Da[i].x>1&&i==0){cout<<Da[i].x;sig2=1;cout<<"x";} if(Da[i].x==1&&i!=0&&sig2==1){cout<<"+";sig2=1;cout<<"x";} if(Da[i].x==1&&i!=0&&sig2!=1){sig2=1;cout<<"x";} if(Da[i].x==1&&i==0){sig2=1;cout<<"x";} if(Da[i].x<-1){cout<<Da[i].x;sig2=1;cout<<"x";} if(Da[i].x==-1){cout<<"-";sig2=1;cout<<"x";} } else//搜索到多个项的输出 { if(Da[i].x>1&&i!=0&&sig2==1){cout<<"+"<<Da[i].x<<"x^"<<Da[i].y;sig2=1;} if(Da[i].x>1&&i!=0&&sig2!=1){cout<<Da[i].x<<"x^"<<Da[i].y;sig2=1;} if(Da[i].x>1&&i==0){cout<<Da[i].x<<"x^"<<Da[i].y;sig2=1;} if(Da[i].x==1&&i!=0&&sig2==1){cout<<"+"<<"x^"<<Da[i].y;sig2=1;} if(Da[i].x==1&&i!=0&&sig2!=1){cout<<"x^"<<Da[i].y;sig2=1;} if(Da[i].x==1&&i==0){cout<<"x^"<<Da[i].y;sig2=1;} if(Da[i].x<-1){cout<<Da[i].x<<"x^"<<Da[i].y;sig2=1;} if(Da[i].x==-1){cout<<"-"<<"x^"<<Da[i].y;sig2=1;} } } else { intsum=0,j; for(j=i;j<stop;j++) { sum+=Da[j].x; } if(Da[i].y==0) { //判断输出是否为第一项,判断输出为正数还是负数,分别进行输出; if(sum>0&&i!=0&&sig2==1){cout<<"+"<<sum;sig2=1;} if(sum>0&&i!=0&&sig2!=1){cout<<sum;sig2=1;} if(sum>0&&i==0){cout<<sum;sig2=1;} if(sum<0){cout<<sum;sig2=1;} } elseif(Da[i].y==1) { if(sum>1&&i!=0&&sig2==1){cout<<"+"<<sum<<"x";sig2=1;} if(sum>1&&i!=0&&sig2!=1){cout<<sum<<"x";sig2=1;} if(sum>1&&i==0){cout<<sum<<"x";sig2=1;} if(sum==1&&i!=0&&sig2==1){cout<<"+"<<"x";sig2=1;} if(sum==1&&i!=0&&sig2!=1){cout<<"x";sig2=1;} if(sum==1&&i==0){cout<<"x";sig2=1;} if(sum<-1){cout<<sum<<"x";sig2=1;} if(sum==-1){cout<<"-"<<"x";sig2=1;} } else { if(sum>1&&i!=0&&sig2==1){cout<<"+"<<sum<<"x^"<<Da[i].y;sig2=1;} if(sum>1&&i!=0&&sig2!=1){cout<<sum<<"x^"<<Da[i].y;sig2=1;} if(sum>1&&i==0){cout<<sum<<"x^"<<Da[i].y;sig2=1;} if(sum==1&&i!=0&&sig2==1){cout<<"+"<<"x^"<<Da[i].y;sig2=1;} if(sum==1&&i!=0&&sig2!=1){cout<<"x^"<<Da[i].y;sig2=1;} if(sum==1&&i==0){cout<<"x^"<<Da[i].y;sig2=1;} if(sum<-1){cout<<sum<<"x^"<<Da[i].y;sig2=1;} if(sum==-1){cout<<"-"<<"x^"<<Da[i].y;sig2=1;} } } i=stop; } if(sig2==0)cout<<"0"; cout<<endl; return0;}voidrun(string&a)//自定义函数的函数体{ intb[100],i,j; intsum1,sum2; for(i=0;i<a.length();i++) { if(a[i]=='x')//以X为关键字进行搜索带有X的项 { sum1=1; intk=i; intw=0; if(a[i-1]=='-')sum1=-1; if(a[k-1]>='0'&&a[k-1]<='9') { sum1=0; while(a[k-1]>='0'&&a[k-1]<='9')//将字符串转化为数字 { w++; b[w]=a[k-1]-'0'; k--; } for(j=w;j>=1;j--) { sum1=sum1*10+b[j]; } if(a[k-1]=='-')sum1=0-sum1; } sum2=1; if(a[i+1]=='^') { sum2=0; k=i; w=0; while(a[k+2]>='0'&&a[k+2]<='9') { w++; b[w]=a[k+2]-'0'; k++; } for(j=1;j<=w;j++) { sum2=sum2*10+b[j]; } } if(mt==1) { Da[NUM].x=-sum1;Da[NUM].y=sum2; } else {Da[NUM].x=sum1;Da[NUM].y=sum2;} NUM++; } } for(i=0;i<a.length();)//搜索不含X的单个数字项 { intsum3=0,stop,k; if(a[i]>='0'&&a[i]<='9') { k=i; while(a[k]>='0'&&a[k]<='9'&&k<=a.length()) { k++; } if(k==a.length()&&i==0)//输入仅有一个数字 { stop=k; for(j=i;j<stop;j++) { sum3=sum3*10+(a[j]-'0'); } i=stop+1; } if((a[k]=='+'||a[k]=='-')&&i==0)//输入有一个数字并且在在字符串开头 { stop=k; for(j=i;j<stop;j++) { sum3=sum3*10+(a[j]-'0'); } i=stop+1; } if((a[i-1]=='+'||a[i-1]=='-')&&k==a.length())//输入有一个数字并且在在字符串结尾 { stop=k; for(j=i;j<stop;j++) { sum3=sum3*10+(a[j]-'0'); } if(a[i-1]=='-')sum3=-sum3; i=stop+1; } if((a[k]=='+'||a[k]=='-')&&(a[i-1]=='+'||a[i-1]=='-'))//输入有一个数字并且在在字符串中央 { stop=k; for(j=i;j<stop;j++) { sum3=sum3*10+(a[j]-'0'); } if(a[i-1]=='-')sum3=-sum3; i=stop+1; } elsei++; } elsei++; if(su

温馨提示

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

评论

0/150

提交评论