📄 多项式.cpp
字号:
#include<iostream.h>
struct celltype{
double element;
double element1;
celltype *next;
};
typedef celltype *list;
typedef celltype* position;
void insert(double x,double x1,position p,list &l);//插入结点
void dele(position p,list &l);//删除结点
void and_sub(position p,list &l,position p1,list &l1,int i);//加减操作,i为1为加
void mul1(list &l,list &l1,list &l3);//乘法操作
void dele_l(list &l);//删除链至头结点
void copy_l(list &l1,list l,double n,double m);//复制链,且第一个数乘n,第二个数加m
void div1(list &l,list &l1,list &l2,list &l3);//除法操作
//此程序输入以 0 0结尾
void main()
{
double num1,num2;
char x;
list l,l1,l2,l3;
position p,p1,p2;
l=new celltype;
l->next=NULL;
p=l;
l1=new celltype;
l1->next=NULL;
p1=l1;
l2=new celltype;
l2->next=NULL;
l3=new celltype;
l3->next=NULL;
p2=l2;
cout<<"输入多项式,降幂排列,以0 0结尾\n";//输入
do{
cin>>num1;
cin>>num2;
if(num1!=0)
{
insert(num1,num2,p,l);
p=p->next;
}
}while(num1!=0||num2!=0);
p=l;
cout<<"输入第二个多项式,降幂排列,以0 0结尾\n";
do{
cin>>num1;
cin>>num2;
if(num1!=0)
{
insert(num1,num2,p1,l1);
p1=p1->next;
}
}while(num1!=0||num2!=0);
p1=l1;
cout<<"输入运算符(+ - * /)\n";
cin>>x;
switch (x)//运算
{
case'+':
and_sub(p,l,p1,l1,1);
break;
case'-':
and_sub(p,l,p1,l1,0);
break;
case'*':
mul1(l,l1,l3);
break;
case'/':
if(l1->next!=NULL)
div1(l,l1,l3,l2);
break;
}
p=l;
if(x=='/')//输出
{
if(p2->next==NULL)
{
cout<<"除数为零,错误:\n";
}
else
{
cout<<"商为:\n";
while(p2->next!=NULL)
{
cout<<p2->next->element<<' ';
cout<<p2->next->element1<<'\n';
p2=p2->next;
}
cout<<"余数为:\n";
if(p->next==NULL)
cout<<"0\n";
while(p->next!=NULL)
{
cout<<p->next->element<<' ';
cout<<p->next->element1<<'\n';
p=p->next;
}
}
}
else
{
cout<<"结果为:\n";
if(p->next==NULL)
cout<<"0\n";
while(p->next!=NULL)
{
cout<<p->next->element<<' ';
cout<<p->next->element1<<'\n';
p=p->next;
}
}
dele_l(l);
delete(l);
dele_l(l1);
delete(l1);
dele_l(l2);
delete(l2);
dele_l(l3);
delete(l3);
}
void insert(double x,double x1,position p,list &l)
{
position q;
q=new celltype;
q->element=x;
q->element1=x1;
q->next=p->next;
p->next=q;
}
void dele(position p,list &l)
{
position q;
if(p->next!=NULL)
{
q=p->next;
p->next=q->next;
delete q;
}
}
void and_sub(position p,list &l,position p1,list &l1,int i)
{
double n,num,num1;
while(p1->next!=NULL)
{ if(i==0)
num1=0-p1->next->element;
else
num1=p1->next->element;
if(p->next!=NULL)
{
n=p->next->element1-p1->next->element1;
if(n==0)
{
num = p->next->element+num1;
if(num==0)
dele(p,l);
else
{
p->next->element=num;
p=p->next;
}
p1=p1->next;
}
else if(n>0)
{
p=p->next;
}
else
{
insert(num1,p1->next->element1,p,l);
p1=p1->next;
}
}
else
{
insert(num1,p1->next->element1,p,l);
p1=p1->next;
}
}
}
void mul1(list &l,list &l1,list &l2)
{
double num,num1;
list l3;
position p,p1,p2,p3;
p=l;
p1=l1;
l3=new celltype;
l3->next=NULL;
p2=l2;
p3=l3;
while(p1->next!=NULL)
{
while(p->next!=NULL)
{
num=p1->next->element*p->next->element;
num1=p1->next->element1+p->next->element1;
insert(num,num1,p3,l3);
p3=p3->next;
p=p->next;
}
p2=l2;
p3=l3;
and_sub(p2,l2,p3,l3,1);
p1=p1->next;
p=l;
dele_l(l3);
}
dele_l(l);
l=l2;
l2=p;
dele_l(l3);
delete(l3);
}
void div1(list &l,list &l1,list &l3,list &l2)
{
position p,p1,p2,p3;
p=l;
p1=l1;
p2=l2;
p3=l3;
double n,m;
while(p->next!=0&&(m=p->next->element1-p1->next->element1)>=0)
{
n=p->next->element/p1->next->element;
copy_l(l3,l1,n,m);
and_sub(p,l,p3,l3,0);
insert(n,m,p2,l2);
p2=p2->next;
dele_l(l3);
}
}
void dele_l(list &l)
{
position p;
p=l;
while(p->next!=NULL)
{
dele(p,l);
}
}
void copy_l(list &l1,list l,double n,double m)
{
position p,p1;
p=l;
p1=l1;
while(p->next!=NULL)
{
insert(n*p->next->element,m+p->next->element1,p1,l1);
p1=p1->next;
p=p->next;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -