⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 yydxs.txt

📁 本程序用C语言编写
💻 TXT
字号:
#include<iostream.h>
#include<stdlib.h>
#include<stdio.h>
#include<math.h>
                      //结点结构
typedef struct LNode
{
	double coef;                                      //系数
	int exp;                                         //指数
	struct LNode *next;
}LNode,*link;

typedef struct
{
	link head,tail;
	int len;
}linklist;
                    //声明函数原型
linklist *InitL();
linklist *INITL(linklist *L1,linklist *L2);
linklist *fun(linklist *T);
linklist *xyz(linklist *T);
linklist *mul(linklist *L1,linklist *L2);
void outplay(linklist *PL);
                    //主函数
void main()
{
	linklist *La,*Lb,*pa,*pb;
	char ch;
	                     //输入第一个多项式
loop: cout<<"请输入第一个多项式(输入格式如:若要输入\"3X^2-5X^3\"就请输入\"3 2 -5 3 0\")。"<<endl
		  <<"注意:不能把项系数输为0,因为0表示输入结束!"<<endl;
	La=InitL();
	                        //输入第二个多项式
	cout<<"请输入第二个多项式(输入格式如:若要输入\"3X^2-5X^3\"就请输入\"3 2 -5 3 0\")。"<<endl
		<<"注意:不能把项系数输为0,因为0表示输入结束!"<<endl;
	Lb=InitL();
	                      //开始进行加减运算
	cout<<"请输入运算符,\"+\"\"-\"或\"*\""<<endl;
	cin>>ch;
	switch(ch)
	{
	case '+':                  //加法
		{
			pa=INITL(La,Lb);
			pb=fun(pa);
			outplay(pb);
			break;
		}
	case '-':                 //减法
		{
			Lb=xyz(Lb);
		    pa=INITL(La,Lb);
		    pb=fun(pa);
		    outplay(pb);
		    break;
		}
	case '*':                //乘法
		{
			pa=mul(La,Lb);
			pb=fun(pa);
			outplay(pb);
			break;
		}
	default :cout<<"无此运算符!";break;
	}
	                                         //若还要继续进行两个一元多项式的运算,继续
	cout<<endl<<endl;
	cout<<"如果还要继续两个任意一元多项式的加、减或乘运算,请按enter键,否则请按其他键。"<<endl;
	if(ch=getchar()=='\n')
	    goto loop;
	system("pause");
}

linklist *InitL()                                //建立一个一元多项式的链表
{
	int i=0;
	link p1=0,p2=0;
	linklist *p;

	if(!(p=new linklist)) return 0;
	p->len=0;p->head=p->tail=0;

	if(!(p1=new LNode)) return 0;                 //建立表头节点
	p1->coef=p1->exp=0;
	p1->next=0;

	p->head=p1;
	for (;;i++)                                  //输入一元多项式
	{
		if(i%2==0)
		{
		    if(!(p2=new LNode)) return 0;
			cin>>p2->coef;
		    p2->next=0;
			if(p2->coef==0)
				break;
		}
		else
		{
			cin>>p2->exp;
		    p1->next=p2;
			p1=p2;
		}
	}
	p->tail=p1;
	p->len=i/2;
	return p;
}

linklist *INITL(linklist *L1,linklist *L2)            //把两个一元多项式合并成一个
{
	L1->tail->next=L2->head->next;
	delete L2->head;
	L1->tail=L2->tail;
	L1->len+=L2->len;
	delete L2;
	return L1;
}
linklist *fun(linklist *T)              //对链表进行排序且进行相加运算
{
	int i,j;
	bool exchange;
	link p1,p2,p3;
	                                     //对一元多项式进行排序
	for(i=0;i<T->len-1;i++)
	{
		exchange=false;
		p1=T->head->next;p2=p1->next;p3=T->head;
		for(j=1;j<=T->len-i-1;j++)
		{
			if(p1->exp>p2->exp)
			{
				p3->next=p2;
				p3=p2;
				p1->next=p2->next;
				p2->next=p1;
				p2=p1->next;
				exchange=true;
			}
			else
			{
			    p3=p1;p1=p2;p2=p2->next;
			}
		}
		if(!exchange)
			break;
	}
	                                             //把排序后的一元多项式中批数相同的项进行合并
	p1=T->head->next;p2=p1->next;j=T->len;
	for(i=0;i<j-1;i++)
	{
		if(p1->exp==p2->exp)
		{
			p1->coef+=p2->coef;
			p1->next=p2->next;
			p3=p2;
			p2=p2->next;
			T->len--;
			delete p3;
		}
		else
		    p1=p1->next;p2=p1->next;
	}
	return T;
}

linklist *xyz(linklist *T)                                  //把第二个一元多项式的各项系数求反
{
	int i;
	link p=T->head->next;
	for(i=0;i<T->len;i++)
	{
		p->coef*=-1;
		p=p->next;
	}
	return T;
}

linklist *mul(linklist *L1,linklist *L2)                 //求出计算两个一元多项式的乘积所构成的链表
{
	int i,j;
	linklist *LP;

	LP=new linklist;
	LP->len=L1->len*L2->len;LP->head=LP->tail=0;
	                                              //建立表头结点
	LP->head=new LNode;
	LP->head->coef=LP->head->exp=0;LP->head->next=0;

	link pa=L1->head->next,pb,pc=LP->head,pd=0,p=0;
	delete L1->head;
	                                           //此循环进行多项式的乘法运算
	for (i=0;i<L1->len;i++)
	{
		pb=L2->head->next;
		for(j=0;j<L2->len;j++)
		{
			pd=new LNode;
			pd->coef=pd->exp=0;
			pd->coef=pa->coef*pb->coef;
			pd->exp=pa->exp+pb->exp;
			pd->next=0;
			pc->next=pd;
			pc=pd;
			pb=pb->next;
		}
		p=pa;
		pa=pa->next;
		delete p;
	}
	LP->tail=pc;
	p=L2->head;
	delete L1;
	                          //此循环对不用的链表所占的内存空间进行释放
	for(i=0;i<=L2->len;i++)
	{
		pc=p;
		p=p->next;
		delete pc;
	}
	delete L2;
	return LP;
}

void outplay(linklist *PL)                            //输出计算后的一元多项式
{
	cout<<"输出计算后的一元多项式:"<<endl;
	int i;
	link p=PL->head->next;
	for(i=0;i<PL->len;i++)
	{
		if(p->exp==0)
		    cout<<"+"<<p->coef;
		else if(p->coef==0)
		{
			p=p->next;
			continue;
		}
		else if(p->exp==1)
		{
			if(p->coef<0)
				cout<<p->coef<<"X";
			else
			    cout<<"+"<<p->coef<<"X";
		}
		else if(p->coef<0)
			cout<<p->coef<<"X^"<<"("<<p->exp<<")";
		else
			cout<<"+"<<p->coef<<"X^"<<"("<<p->exp<<")";
		p=p->next;
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -