一元多项式

#include<stdlib.h>
#include<stdio.h>
#include<malloc.h>

#define ERROR 0;
#define OK 1;
#define FLASE 0;
#define TURE 1;
#define OVERFLOW -2;

typedef struct LNode{
	float xs;
	int zs;
	struct LNode * next;
}LNode,*LinkList;

void create(LinkList *L,int m){
	int i;
	LinkList p,q;
	*L=(LinkList)malloc(sizeof(LNode));
	p=*L;
	

	if(m<0){
		printf("出现错误!\n");
		printf("请输入大于0的项数!!\n");
			scanf("%d",&m);
		if(m<0){
			printf("结束!!!\n");		
			exit (-2);
		}
	}
	for(i=0;i<m;i++){
		q=(LinkList)malloc (sizeof(LNode));//p,q都是结构体
		printf("请输入系数和指数:");
		scanf("%f %d",&q->xs,&q->zs);
		p->next=q;
		p=q;
	}
	p->next=NULL;
}//创建链表(多项式)

void print(LinkList L){
	LinkList p;
	p=L->next;
	while(p){
		printf("%.2f*X^%d",p->xs,p->zs);
		p=p->next;
		if(p!=NULL)
			if(p->xs>=0)
				printf("+");
	}
	printf("\n");
} //输出链表(多项式)

int cmp(LinkList a,LinkList b){//判断指数大小
	if(a->zs<b->zs) 
		return -1;
	else if(a->zs==b->zs)
		return 0;
	else
		return 1;
}

LinkList add(LinkList a,LinkList b){//加法函数
	LinkList pa,pb,pc,p,s,k;
	float h;//系数和

	pa=a->next;
	pb=b->next;
	p=(LinkList)malloc(sizeof(LNode));//p申请空间,p=a+b
	pc=p;
	while(pa && pb){//当pa,pb两个链表都不为空时
		switch(cmp(pa,pb)){
		case -1:
			s=(LinkList)malloc(sizeof(LNode));
			s->xs=pa->xs;
			s->zs=pa->zs;
			s->next=NULL;
			pc->next=s;
			pc=s;
			pa=pa->next;
			break;
		case 0:
			h=pa->xs+pb->xs;
			if(h!=0){
				s=(LinkList)malloc(sizeof(LNode));
				s->xs=h;
				s->zs=pa->zs;
				s->next=NULL;
				pc->next=s;
				pc=s;
			}
			pa=pa->next;
			pb=pb->next;
			break;
		case 1:
			s=(LinkList)malloc(sizeof(LNode));
			s->xs=pb->xs;
			s->zs=pb->zs;
			s->next=NULL;
			pc->next=s;
			pc=s;
			pb=pb->next;
			break;
		}
	}
	while(pa){//pb后面为空,pa不为空
		s=(LinkList)malloc(sizeof(LNode));
		s->xs=pa->xs;
		s->zs=pa->zs;
		pc->next=s;
		pc=s;
		pa=pa->next;
	}
	while(pb){
		s=(LinkList)malloc(sizeof(LNode));
		s->xs=pb->xs;
		s->zs=pb->zs;
		pc->next=s;
		pc=s;
		pb=pb->next;
	}
	pc->next=NULL;
	return p;
}

void main(){
	LinkList a,b;
	int x,y;  //项数
	
	printf("请输入第一个多项式的项数\n");
	scanf("%d",&x);
	create(&a,x);
	print(a);
	
	printf("请输入第二个多项式项数\n");
	scanf("%d",&y);
	create(&b,y);
	print(b);

	printf("相加\n");
	print(add(a,b));//输出函数里面调用加法函数
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值