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

📄 xxx.cpp

📁 对输入的一元多项式进行整理
💻 CPP
字号:
#include<stdio.h>
#include<stdlib.h>
#define NULL 0
typedef struct node
{
	float data1;
	int data2;
	struct node *next;
}Lnode;//建立struct node节点类型,包含数据域data1,data2以及指针域next.

Lnode *input()
{
	Lnode *h,*p;
	int i=1,k;
    float j=1;

	h=(Lnode*)malloc(sizeof(Lnode));//建立头结点h
	h->next=NULL;
	printf("请输入第%d个数据的系数___指数___ 并以0结束输入\n",i++);
		scanf("%f%d",&j,&k);//输入系数及指数,分别用j、k来存储.
		p=(Lnode*)malloc(sizeof(Lnode));//建立p结点.

	  while(j!=0)
	  {
		
		p->data1=j;
		p->data2=k;
		p->next=h->next;
		h->next=p;	//用链表存储
		printf("请输入第%d个数据的系数___指数___ 并以0结束输入\n",i++);
		scanf("%f%d",&j,&k);//输入系数及指数,分别用j、k来存储.
		p=(Lnode*)malloc(sizeof(Lnode));//建立p结点.

		}

		
	    return(h);
}

Lnode *order(Lnode *h)//对链表排序的子函数
{ Lnode *k,*s;
  int t;
  float x;
  k=h->next;
  s=k->next;//s指向k之后的结点,在循环跳出后指向最后一个结点
  while(s!=NULL)
  {
	  if(s->data2>k->data2)
		{
		  x=k->data1;
	     k->data1=s->data1;
		 s->data1=x;//对系数进行排序

		 t=k->data2;
		 k->data2=s->data2;
		 s->data2=t;//对指数进行排序
	  }
		 k=k->next;
		 s=s->next;//s指向最后一个结点
	  
  };
  return(h);
}
		 
void add()//负责完成两个多项式合并的子函数
{ Lnode *pa,*pb,*p,*q,*pc,*k,*r;
  pa=input();
  pa=order(pa);
  pb=input();
  pb=order(pb);
  p=pa->next;
  q=pb->next;
  
  /*while(p!=NULL)
  {
	  printf("%f %d\n",p->data1,p->data2);
	  p=p->next;
  }
  while(q!=NULL)
  {
	  printf("%f %d\n",q->data1,q->data2);
	  q=q->next;
  } */                                            //两个while语句用来测试输入的正确性                         
  pc=(Lnode*)malloc(sizeof(Lnode));
  k=pc;                              //k指向pc头节点
  while(p!=NULL&&q!=NULL)
  {
	  r=(Lnode*)malloc(sizeof(Lnode));
	  r->next=NULL;
	  if(p->data2<q->data2)
	  {r->data1=q->data1;
	   r->data2=q->data2;
	   q=q->next;
	  }
	  else
		  if(p->data2==q->data2)
			{r->data1=p->data1+q->data1;
			 r->data2=p->data2;
			 
			 p=p->next;
			 
			 q=q->next;
			 }
	  else
		  if(p->data2>q->data2)
			{r->data1=p->data1;
			 r->data2=p->data2;
			 
			 p=p->next;
	  }

		 
		 k->next=r;
		 k=r;
  }
  while(p!=NULL)
  {r=(Lnode*)malloc(sizeof(Lnode));
	r->next=NULL;
	r->data1=p->data1;
	r->data2=p->data2;
	p=p->next;
	k->next=r;
	k=r;
  }
 while(q!=NULL)
	{r=(Lnode*)malloc(sizeof(Lnode));
	r->next=NULL;
	r->data1=q->data1;
	r->data2=q->data2;
	q=q->next;
	k->next=r;
	k=r;
	}

    k->next=NULL;
  
	
	k=pc->next;

	if(k!=NULL)
	{  printf("Answer=");
	   printf("%.1fx^%d",k->data1,k->data2);
	   k=k->next;
	 }
	else printf("0");
	while(k!=NULL)
	{
		
		if(k->data1>0)//如果系数为正,则前面带“+”号
			printf("+%.1fx^%d",k->data1,k->data2);
		else
			printf("%.1fx^%d",k->data1,k->data2);
		k=k->next;
	}
    printf("\n");


 
  /*while(p!=NULL)
  {printf("%d %d\n",p->data1,p->data2);
   p=p->next;
  }

  printf("Answer=");
  if()
    printf("%d x^%d",p->data1,p->next->data2);
	p=p->next;
	while(p->next!=NULL)
	{ if(p->next->data1>0)
	    printf("+%d x^%d",p->next->data1,p->next->data2);
	  else
		printf("%d x^%d",p->next->data1,p->next->data2);
		  
		//通过循环输出结果
	    p=p->next;
	}*/
}

void minus()//负责完成两个多项式合并的子函数
{ Lnode *pa,*pb,*p,*q,*pc,*k,*r;
  pa=input();
  pa=order(pa);
  pb=input();
  pb=order(pb);
  p=pa->next;
  q=pb->next;
  
  /*while(p!=NULL)
  {
	  printf("%f %d\n",p->data1,p->data2);
	  p=p->next;
  }
  while(q!=NULL)
  {
	  printf("%f %d\n",q->data1,q->data2);
	  q=q->next;
  } */                                            //两个while语句用来测试输入的正确性                         
  pc=(Lnode*)malloc(sizeof(Lnode));
  k=pc;                              //k指向pc头节点
  while(p!=NULL&&q!=NULL)
  {
	  r=(Lnode*)malloc(sizeof(Lnode));
	  r->next=NULL;
	  if(p->data2<q->data2)
	  {r->data1=q->data1;
	   r->data2=q->data2;
	   q=q->next;
	  }
	  else
		  if(p->data2==q->data2)
			{r->data1=p->data1-q->data1;
			 r->data2=p->data2;
			 
			 p=p->next;
			 
			 q=q->next;
			 }
	  else
		  if(p->data2>q->data2)
			{r->data1=p->data1;
			 r->data2=p->data2;
			 
			 p=p->next;
	  }

		 
		 k->next=r;
		 k=r;
  }
  while(p!=NULL)
  {r=(Lnode*)malloc(sizeof(Lnode));
	r->next=NULL;
	r->data1=p->data1;
	r->data2=p->data2;
	p=p->next;
	k->next=r;
	k=r;
  }
 while(q!=NULL)
	{r=(Lnode*)malloc(sizeof(Lnode));
	r->next=NULL;
	r->data1=q->data1;
	r->data2=q->data2;
	q=q->next;
	k->next=r;
	k=r;
	}

    k->next=NULL;
  
	
	k=pc->next;

	if(k!=NULL)
	{   printf("Answer=");
	   printf("%.1fx^%d",k->data1,k->data2);
	   k=k->next;
	 }
	else printf("0");
	while(k!=NULL)
	{
		
		if(k->data1>0)//如果系数为正,则前面带“+”号
			printf("+%.1fx^%d",k->data1,k->data2);
		else
			printf("%.1fx^%d",k->data1,k->data2);
		k=k->next;
	}
    printf("\n");


 
  /*while(p!=NULL)
  {printf("%d %d\n",p->data1,p->data2);
   p=p->next;
  }

  printf("Answer=");
  if()
    printf("%d x^%d",p->data1,p->next->data2);
	p=p->next;
	while(p->next!=NULL)
	{ if(p->next->data1>0)
	    printf("+%d x^%d",p->next->data1,p->next->data2);
	  else
		printf("%d x^%d",p->next->data1,p->next->data2);
		  
		//通过循环输出结果
	    p=p->next;
	}*/
}



void exit()
{
	printf("byebye\n");
}


void main()//主函数
{   Lnode *i;
	Lnode *p2;
	int flag1,flag2;
	do{

	printf("请选择您要进行的操作\n");
	printf("1:输入并排序输出一个多项式 2:输入两个多项式相加 3:两个多项式相减  4:退出系统\n");
    scanf("%d",&flag1);
	if(flag1==1)
	{
	p2=input();//调用输入部分的子函数
	i=p2->next;
	p2=order(p2);//调用排序部分的子函数,并传值
	printf("Answer=");
    printf("%.2f x^%d",i->data1,i->data2);
	i=i->next;
	while(i!=NULL)
	{ if(i->data1>0)
	    printf("+%.2f x^%d",i->data1,i->data2);
	  else
		printf("%.2f x^%d",i->data1,i->data2);
		  
		//通过循环输出结果
	    i=i->next;
	}
	printf("\n");//以上功能完成输入并对一个多项式排序
    printf("重新选择请按0\n");
	scanf("%d",&flag2);
	}
    else
		if(flag1==2)
		{
			 add();
			 printf("重新选择请按0\n");
				scanf("%d",&flag2);
 
		}
		else
			if(flag1==3)
			{
              minus();
			  printf("重新选择请按0\n");
				scanf("%d",&flag2);
			}
			if(flag1==4)
			{
				exit();
				break;
			}
			
    	
	}while(flag2==0);

   
}

⌨️ 快捷键说明

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