一元多项式的加减
来源:互联网 发布:递推算法求韩信点兵 编辑:程序博客网 时间:2024/04/30 10:48
#include<stdio.h>
#include<stdlib.h>
typedef struct nodetype
{
float coef;
int expn;
struct nodetype *next;
}nodetype;
nodetype *creatpoly()
{
nodetype *head,*rear,*s;
float c;
int e;
head=(nodetype *)malloc(sizeof(nodetype));
head->next=NULL;
rear=head;
printf("请输入多项式的系数和指数,用空格隔开,系数为0时结束输入,指数按从小到大的顺序输入\n");
scanf("%f%d",&c,&e);
while(c!=0)
{
s=(nodetype *)malloc(sizeof(nodetype));
s->coef=c;
s->expn=e;
rear->next=s;
rear=s;
printf("请输入多项式的系数和指数,用空格隔开,系数为0时结束输入,指数按从小到大的顺序输入\n");
scanf("%f%d",&c,&e);
}
rear->next=NULL;
return (head);
}
nodetype *printpoly(nodetype *head)
{
nodetype *q;
q=head->next;
int flag=1;
if(!q)
{
putchar('0');
printf("\n");
return head;
}
while(q)
{
if(q->coef>0&&flag!=1)
putchar('+');
if(q->coef!=1&&q->coef!=-1)
{
printf("%g",q->coef);
if(q->expn==1)
putchar('X');
else if(q->expn)
printf("X^%d",q->expn);
}
else
{
if(q->coef==1)
{
if(!q->expn)
putchar('1');
else if(q->expn==1)
putchar('X');
else
printf("X^%d",q->expn);
}
if(q->coef==-1)
{
if(!q->expn)
printf("-1");
else if(q->expn==1)
printf("-X");
else
printf("-X^%d",q->expn);
}
}
q=q->next;
flag++;
}
printf("\n");
return head;
}
nodetype *addpoly(nodetype *ahead,nodetype *bhead)
{
nodetype *pa,*pb,*chead,*pc,*qc;
pa=ahead->next;
pb=bhead->next;
pc=(nodetype *)malloc(sizeof(nodetype));
pc->next=NULL;
chead=pc;
while(pa!=NULL&&pb!=NULL)
{
qc=(nodetype *)malloc(sizeof(nodetype));
if (pa->expn<pb->expn)
{
qc->coef=pa->coef;
qc->expn=pa->expn;
pa=pa->next;
}
else if(pa->expn>pb->expn)
{
qc->coef=pb->coef;
qc->expn=pb->expn;
pb=pb->next;
}
else
{
qc->coef=pa->coef+pb->coef;
qc->expn=pa->expn;
pa=pa->next;
pb=pb->next;
}
if(qc->coef!=0)
{
qc->next=pc->next;
pc->next=qc;
pc=qc;
}
else
free(qc);
}
while(pa!=NULL)
{
qc=(nodetype *)malloc(sizeof(nodetype));
qc->coef>=pa->coef;
qc->expn=pa->expn;
pa=pa->next;
qc->next=pc->next;
pc->next=qc;
pc=qc;
}
while(pb!=NULL)
{
qc=(nodetype *)malloc(sizeof(nodetype));
qc->coef>=pb->coef;
qc->expn=pb->expn;
qc->next=pc->next;
pb=pb->next;
pc->next=qc;
pc=qc;
}
return chead;
}
nodetype *jianpoly(nodetype *ahead,nodetype *bhead)
{
nodetype *h,*p,*chead;
h=bhead;
p=bhead->next;
while(p!=NULL)
{
p->coef=p->coef*(-1);
p=p->next;
}
chead=addpoly(ahead,h);
for(p=h->next;p;p=p->next)
p->coef*=-1;
return chead;
}
int main(void)
{
nodetype *ahead,*bhead,*chead;
int choice;
printf("建立A多项式\n");
ahead=creatpoly();
printf("建立B多项式\n");
bhead=creatpoly();
printf("多项式a为\n");
ahead=printpoly(ahead);
printf("多项式b为\n");
bhead=printpoly(bhead);
printf("请选择您要进行的运算,进行加法请按‘1’,进行减法请按2,如要退出请按0\n");
printf("请输入您的选择\n");
scanf("%d",&choice);
while(choice!=0)
{
if(choice==1)
{
chead=addpoly(ahead,bhead);
chead=printpoly(chead);
}
else if(choice==2)
{
chead=jianpoly(ahead,bhead);
chead=printpoly(chead);
}
else
{
printf("输入错误请重新输入\n");
scanf("%d",&choice);
}
printf("请输入您的选择\n");
scanf("%d",&choice);
}
return 0;
}
- 一元多项式的加减
- 一元多项式的建立及加减
- 一元多项式的加减乘数实现
- 一元多项式的加减乘运算
- 一元多项式的加减乘运算
- 一元多项式的加减以及求导
- 一元稀疏多项式加减
- 一元多项式加减
- 数据结构-一元多项式加减程序
- C语言实现一元多项式的加减运算
- 工程实践《一元多项式的加减乘和求导》源代码
- 一元多项式的表示及加减乘法运算
- 单链表模拟一元多项式加减乘运算
- c++实现一元稀疏多项式加减
- 多项式的加减乘
- 多项式的加减
- 一元多项式的实现
- 一元多项式的运算
- 019 Remove Nth Node From End of List
- 每日一练--抽奖
- android系统级别硬件访问服务程序
- 二叉树的高度 java 利用递归和层次遍历两种方法
- 【集合框架】4. Set容器
- 一元多项式的加减
- mysql 常用命令
- Linux网络编程---I/O复用模型之poll
- 【集合框架】5. Collections类
- android 开发 -- NavigationView和DrawerLayout实现 侧滑栏(Material Design)
- 时间序列分析这件小事(六)--非平稳时间序列与差分
- 基于JQuery 的分页控件
- java调用spark的借口运行WordCount
- 面向切面编程AOP实战