多项式加减法C++源码
更新时间:2023-08-27 12:34:01 阅读量: 教育文库 文档下载
多项式加减法C++源码
《程序设计实践》课程实验报告
学号:126040594姓名:王乾帅
程序名称:多项式加法
一:程序源码:
#include<iostream>
#include<string>
using namespace std;
int NUM=0;//全局变量,控制结构体下标,大小代表多项式的项数;
int mt=0;
struct Data //结构体,用来存放单个项的系数和幂,分别为x,y;
{
int x;
int y;
};
Data Da[1000];
bool cmp(Data a,Data b) //为了使用sort对结构体进行排序,自定义cmp函数; {
return a.y>b.y;
}
void run(string &a); //自定义函数,用来对字符串进行处理,提取出字符串中的单个项; int main()
{
int i,stop,sig,sig2=0;
string a,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++; }
多项式加减法C++源码
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;} } else if(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 { int sum=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;}
多项式加减法C++源码
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;}
}
else if(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;
return 0;
}
void run(string &a) //自定义函数的函数体
{
int b[100],i,j;
int sum1,sum2;
for(i=0;i<a.length();i++)
{
if(a[i]=='x') //以X为关键字进行搜索带有X的项
{
sum1=1;
int k=i;
多项式加减法C++源码
} } int w=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++;
多项式加减法C++源码
for(i=0;i<a.length();) //搜索不含X的单个数字项 { int sum3=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]=='-')) //输入有一个数字并且在在{
多项式加减法C++源码
stop=k;
for(j=i;j<stop;j++)
{
sum3=sum3*10+(a[j]-'0');
}
if(a[i-1]=='-') sum3=-sum3;
i=stop+1;
}
else i++;
}
else i++;
if(sum3!=0)
{
if(mt==1)
{
Da[NUM].x=-sum3;
Da[NUM].y=0;
}
else
{
Da[NUM].x=sum3;
Da[NUM].y=0;
}
NUM++;
}
}
}
二:程序测试 1. 2.
多项式加减法C++源码
3. 4. 5. 6. 7.
多项式加减法C++源码
8.
三:编程过程中注意事项:
输入:1.注意紧含数字时的处理(数字在开头,中间,结尾) 输出:1.注意系数为1,-1的情况
2.注意次数为1,为0的情况
3.注意输出开头不能有+
4.注意若为0,则不输出,除非仅仅输出出一个0.
正在阅读:
多项式加减法C++源码08-27
小学生关于放风筝的作文600字06-14
物业管理-工程部岗位服务流程与规范本科论文 - 图文03-09
解决民营企业融资问题的对策09-06
航天信息A3A6财务软件报价06-01
课程论文评分标准12-31
部编版道德与法治三年级下册第二单元《我的家在这里》教案04-30
分享我的求职经验05-17
普通拍片机升级平板DR方案03-06
2011安徽省驾校考试科目一C2包过题库03-22
- exercise2
- 铅锌矿详查地质设计 - 图文
- 厨余垃圾、餐厨垃圾堆肥系统设计方案
- 陈明珠开题报告
- 化工原理精选例题
- 政府形象宣传册营销案例
- 小学一至三年级语文阅读专项练习题
- 2014.民诉 期末考试 复习题
- 巅峰智业 - 做好顶层设计对建设城市的重要意义
- (三起)冀教版三年级英语上册Unit4 Lesson24练习题及答案
- 2017年实心轮胎现状及发展趋势分析(目录)
- 基于GIS的农用地定级技术研究定稿
- 2017-2022年中国医疗保健市场调查与市场前景预测报告(目录) - 图文
- 作业
- OFDM技术仿真(MATLAB代码) - 图文
- Android工程师笔试题及答案
- 生命密码联合密码
- 空间地上权若干法律问题探究
- 江苏学业水平测试《机械基础》模拟试题
- 选课走班实施方案
- 多项式
- C++
- 加减法
- 源码