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

📄 text2 polyn.cpp

📁 实现多项式加法发非常非常好用的一个学生文件实现了多项式的简单相加
💻 CPP
字号:
# include<malloc.h>
# include<stdio.h>
# define NULL 0
# define LEN sizeof(struct polyn)
struct polyn{											//创建(带头结点,头结点只有next的信息)
	float coef;//系数
	int expn;//指数
	struct polyn *next;
	};
int n;//计数器
struct polyn *creatpolyn (void){
	struct polyn *head;//头结点
	struct polyn *p1,*p2,*r;//r是辅助指针
	n=0;
	head=(struct polyn*)malloc(LEN);//为头结点开辟空间(不储存数据信息,只保留next的信息)
	p1=p2=(struct polyn*)malloc(LEN);
	scanf("%f%d",&p1->coef,&p1->expn);
	while(p1->coef!=0)//当指数不为零
		{
		 n=n+1;
		 if(n==1) r=p1;//r存放第一个数据的指针
		 else p2->next=p1;
		 p2=p1;  p1=(struct polyn*)malloc(LEN);
		 scanf("%f%d",&p1->coef,&p1->expn);
		}
    p2->next=NULL;	head->next=r;//此时head作为头指针
	return(head);//返回头指针
}//creatpolyn

struct polyn *copy(struct polyn *head){						//复制,以下运算都不直接使用原来的链表,避免破坏原来的结构
	struct polyn *p1,*p2,*c_head,*r,*q; int flat=0;//计数器
		r=head->next;//指示指针
		c_head=(struct polyn*)malloc(LEN);//复制后链表的头指针
		p1=p2=(struct polyn*)malloc(LEN);
		p1->coef=r->coef; p1->expn=r->expn;
		r=r->next;
	while(r){
		flat=flat+1;
		if(flat==1)  q=p1;//保存第一个结点的位置信息
		else p2->next=p1;
		p2=p1;	p1=(struct polyn*)malloc(LEN);
		p1->coef=r->coef;	p1->expn=r->expn;	r=r->next;
	}
	p2->next=p1;	p1->next=NULL;	c_head->next=q;
	return(c_head);//返回头指针
}//copy

void print(struct polyn *head){		//打印
	struct polyn *p;
	printf("\nthe result is:\n");
	p=head->next;
	if(head!=NULL)	do{
						printf("(%.2fX^%d)+",p->coef,p->expn);
						p=p->next;
					   }while(p!=NULL);
	else printf("input false\n");
}//print(打印) 

int compare(int a,int b){//比较两结点的指数
	if(a>b) return(1);
	if(a<b) return(-1);
	if(a==b) return(0);
}//compare


struct polyn *add(struct polyn *headA,struct polyn *headB){		//相加     与相减同理
	struct polyn *pa,*pb,*pc,*r,*q,*heada,*headb;
	heada=copy(headA);	headb=copy(headB);
	pc=heada;	pa=heada->next;	pb=headb->next; 
	while(pa&&pb){
		switch(compare(pa->expn,pb->expn)){
			case  1:	pc->next=pa;pc=pa;pa=pa->next;  break;
			case -1:	pc->next=pb;pc=pb;pb=pb->next;  break;
			case  0:	if(pa->coef+pb->coef<0.001){//两系数相反,则删除两个结点
								r=pa;pa=pa->next;free(r);
								q=pb;pb=pb->next;free(q);
						}//if
						else{
								pa->coef=pa->coef+pb->coef;
								pc->next=pa; pc=pa; pa=pa->next; pb=pb->next;
						}//else
						break;

		}//switch
	}//while
		if(pa==NULL)	pc->next=pb;
 		else	pc->next=pa;
		return(heada);
}//add(相加)



main(){
	struct polyn *headA,*headB,*head;
	int a;	char c;
	printf("请按降幂输入两个多项式A和B,以两个零作为结束标志\n");
  	headA=creatpolyn();
	print(headA);
	printf("\n");
	headB=creatpolyn();
	print(headB);
	printf("\n");
	signal:	printf("请选择你想要的操作:1相加\n");//操作菜单,signal为语句标号
	scanf("%d",&a);
	switch(a){
	  case 1:		head=add(headA,headB);
					printf("加法");			print(head);
					fflush(stdin);
					printf("\n继续操作请按y,退出请按n\n");
					scanf("%c", &c);
					if(c=='y')	goto signal;
					break;

	}//switch
	
	
}//main

⌨️ 快捷键说明

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