c语言线性指针与隐性指针,一元多项式的表示及相加【实验目的】掌握C语言中结构类型和指针类型,指针是逻辑关系的映像.掌握线性链表的操作特点和动态产生、输出单链表的方法.掌握单链表的插入、删除操作的特点...

这是一个使用C语言编写的程序,用于实现一元多项式的相加操作。程序通过创建链表结构存储多项式,并使用尾插法建立多项式链表。在多项式相加过程中,程序比较并合并相同指数的项,处理系数相加,并删除不必要的零系数项。最后,程序可以打印出相加后的结果。
摘要由CSDN通过智能技术生成

7d14a2b81882cfe4494b096a84150b2a.png 优质解答

#include

#include

#include

#define LEN sizeof(node)

typedef struct polynode /*用单链表存储多项式的结点结构*/

{

int coef; /*多项式的系数*/

int exp; /*指数*/

struct polynode *next; /*next是struct polynode类型中的一个成员,它又指向

struct polynode类型的数据,以此建立链表*/

}node;/*若定为"node,*list;",意即node*与list同为结构指针类型*/

node * create(void) /*指针函数,返回指针类型;用尾插法建立一元多项式的链表的函数*/

{

node *h,*r,*s;

int c,e;

h=(node *)malloc(LEN); /*建立多项式的头结点,为头结点分配存储空间*/

r=h; /*r指针始终动态指向链表的当前表尾,以便于做尾插入,其初值指向头结点*/

printf("coef:");

scanf("%d",&c); /*输入系数*/

printf("exp: ");

scanf("%d",&e); /*输入指针*/

while(c!=0) /*输入系数为0时,表示多项式的输入结束*/

{

s=(node *)malloc(LEN); /*申请新结点*/

s->coef=c; /*申请新结点后赋值*/

s->exp=e; /*申请新结点后赋值*/

r->next=s; /*做尾插,插入新结点*/

r=s; /*r始终指向单链表的表尾*/

printf("coef:");

scanf("%d",&c);

printf("exp: ");

scanf("%d",&e);

}

r->next=NULL; /*将表的最后一个结点的next置NULL,以示表结束*/

return(h);

}

void polyadd(node *polya, node *polyb)/*一元多项式相加函数,用于将两个多项式相加,然后将和多项式存放在多项式polya中,并将多项式ployb删除*/

{

node *p,*q,*pre,*temp;

int sum;

p=polya->next;/*令p和q分别指向polya和polyb多项式链表中的第一个结点*/

q=polyb->next;

pre=polya; /*位置指针,指向和多项式polya*/

while(p!=NULL&&q!=NULL) /*当两个多项式均未扫描结束时,执行以下操作*/

{

if(p->expexp) /*若p指向的多项式指数小于q指的指数*/

{

pre->next=p; /*将p结点加入到和多项式中*/

pre=pre->next;

p=p->next;

}

else if(p->exp==q->exp) /*若指数相等,则相应的系数相加*/

{

sum=p->coef+q->coef;

if(sum!=0)

{

p->coef=sum;

pre->next=p;pre=pre->next;p=p->next;

temp=q;q=q->next;free(temp);

}

else /*如果系数和为零,则删除结点p与q,并将指针指向下一个结点*/

{

temp=p->next;free(p);p=temp;

temp=q->next;free(q);q=temp;

}

}

else /*若p指数大于q指数*/

{

pre->next=q; /*p结点不动,将q结点加入到和多项式中*/

pre=pre->next;

q=q->next;

}

}

if(p!=NULL) /*多项式A中还有剩余,则将剩余的结点加入到和多项式中*/

pre->next=p;

else /*否则将B的结点加入到和多项式中*/

pre->next=q;

}

void print(node * p) /*输出函数,打印出一元多项式*/

{

while(p->next!=NULL)

{

p=p->next;

printf(" %d*x^%d",p->coef,p->exp);

}

}

main() /*主函数*/

{

node * polya,* polyb;

printf("Welcome to use!\n");

printf("\nPlease input the ploya include coef && exp:\n");

polya=create(); /*调用建立链表函数,创建多项式A*/

print(polya);

printf("\nPlease input the ployb include coef && exp:\n");

polyb=create(); /*同理,创建B*/

print(polyb);

printf("\nSum of the poly is:\n");

polyadd(polya,polyb); /*调用一元多项式相加函数*/

print(polya); /*调用输出函数,打印结果*/

printf("\n");

一元多项式相加程序(C语言)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值