一元n次多项式的加、乘运算[C++编程]

1.问题描述一元n次多项式的计算是比较典型的数学问题。设计一个程序,实现对两个一元n次多项式的加法及乘法运算。2.基本要求:(1)通过键盘动态输入一元n次多项式。(2)程... 1.问题描述
一元n次多项式的计算是比较典型的数学问题。设计一个程序,实现对两个一元n次多项式的加法及乘法运算。
2.基本要求:
(1)通过键盘动态输入一元n次多项式。
(2)程序应该具有菜单选择多项式运算功能。
(3)利用顺序存储或链式存储均可。
谁可以帮我写一个,急用。在线等。。。谢谢各位大神!
展开
 我来答
匿名用户
2013-10-22
展开全部
#include <iostream>
using namespace std;
void ArrZero(int Array[10][2])//初始化数组元数为0
{
for(int i=0;i<10;i++)
{
Array[i][0]=0;
Array[i][1]=0;
}
}
int ArrLen(int Array[10][2])//长度
{
int count=0;
for(int i=0;i<10;i++)
{
if (Array[i][0]==0&&Array[i][1]==0)
{
count=i;
break;
}
}
return count;
}
//对多项式进行排序 指数从大到小
void SortArr(int Array[10][2])
{
int count=ArrLen(Array);
for(int i=0;i<count-1;i++)
{
for(int j=i+1;j<count;j++)
{
if(Array[i][0]< Array[j][0])
{
int temp;
temp=Array[i][0];
Array[i][0]=Array[j][0];
Array[j][0]=temp;
}
}
}
}
//合并数组中指数相同的项,并去掉值为0的项
void CombineArr(int Array[10][2])
{
int count=ArrLen(Array);
for(int i=0;i<count-1;i++)
{
if(Array[i][1] ==0)
{
for(int j=i;j<count-1;j++)
{
Array[j][0]=Array[j+1][0];
Array[j][1]=Array[j+1][1];
Array[j+1][0]=0;
Array[j+1][1]=0;
}
count--;
}
}
for(i=0;i<count-1;i++)
{
for(int j=i+1;j<count;j++)
{
if(Array[i][0] == Array[j][0])
{
Array[i][1]+=Array[j][1];
for(int k=j;k<count-1;k++)
{
Array[k][0]=Array[k+1][0];
Array[k][1]=Array[k+1][1];
}
Array[k][0]=0;
Array[k][1]=0;
count--;
}
}
}
}
//输入函数
void ArrInput(int Array[10][2])
{
int count;
Lable:
cout<<"请输入要多项式的项数: "<<endl;
cin >>count;
if (count > 10 || count < 1)
{
cout<<"输入的项数在1-10之内,请重新输入"<<endl;
goto Lable;
}
else
{
int index,indexPre;
index=0;
indexPre=0;
for(int i=0;i<count;i++)
{
IndexLim: //限制从大到小输入
cout<<"\n请输入第"<<(i+1)<<"项的指数: ";
cin>>index;
if (index>indexPre&&indexPre!=0)
{
cout<<"\n指数应从大到小输入,请重新输入";
goto IndexLim;
}
Array[i][0]=index;
indexPre=index;
cout<<"请输入第"<<(i+1)<<"项的系数: ";
cin>>Array[i][1];
}
}
SortArr(Array);
CombineArr(Array);
}
void ArrPrint(int Array[10][2]) //输出多项式
{
int count=ArrLen(Array);
std::string str="";
char temp[10]="";
for(int i=0;i<count;i++)
{
itoa(Array[i][1],temp,10);
str+=temp;
str+="X^";
itoa(Array[i][0],temp,10);
str+=temp;
if (i!=count-1) str+="+";
}
cout<<str.c_str()<<endl;
}
//实现多项式的加法
bool ArrAdd(int ArrayA[10][2],int ArrayB[10][2],int ArrayResult[10][2])
{
int num=0;
int k1=0,k2=0;
int lenA,lenB;
lenA=ArrLen(ArrayA);
lenB=ArrLen(ArrayB);
while(num<10)
{
if(lenA!=0&&lenB!=0)
{
if(ArrayA[k1][0]>ArrayB[k2][0])
{
ArrayResult[num][0]=ArrayA[k1][0];
ArrayResult[num][1]=ArrayA[k1][1];
k1++;
num++;
}
else if(ArrayA[k1][0]==ArrayB[k2][0])
{
ArrayResult[num][0]=ArrayA[k1][0];
ArrayResult[num][1]=ArrayA[k1][1]+ArrayB[k2][1];
k1++;
k2++;
num++;
}
else if(ArrayA[k1][0]<ArrayB[k2][0])
{
ArrayResult[num][0]=ArrayB[k2][0];
ArrayResult[num][1]=ArrayB[k2][1];
k2++;
num++;
}
}
else if(lenA==0&&lenB!=0)
{
ArrayResult[num][0]=ArrayB[k2][0];
ArrayResult[num][1]=ArrayB[k2][1];
num++;
k2++;
}
else if(lenA!=0&&lenB==0)
{
ArrayResult[num][0]=ArrayA[k1][0];
ArrayResult[num][1]=ArrayA[k1][1];
num++;
k1++;
}
else
{
return false;
}
}
return true;
}

void main()
{
int ArrayResult[10][2];
int ArrayA[10][2];
int ArrayB[10][2];
ArrZero(ArrayResult);
ArrZero(ArrayA);
ArrZero(ArrayB);
while (1)
{
cout<<"\n请输入第一个多项式"<<endl;
ArrInput(ArrayA);
cout<<"\n输入多项式为:"<<endl;
ArrPrint(ArrayA);

cout<<"\n请输入第二个多项式"<<endl;
ArrInput(ArrayB);
cout<<"\n输入多项式为:"<<endl;
ArrPrint(ArrayB);

ArrAdd(ArrayA,ArrayB,ArrayResult);
cout<<"\n两个多项式相加结果为:"<<endl;
ArrPrint(ArrayResult);

char IsGoOn[5]="";
cout<<"\nContinue?, 输入n结束,其它则继续"<<endl;
cin>>IsGoOn;
if (IsGoOn[0]=='n'||IsGoOn[0]=='N') break;
cout<<"\n继续";
}
}
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式