📄 yiyuanduxiangshi.c
字号:
#include<stdio.h>
#include<malloc.h>
typedef struct node{
float coef;
int expn;
struct node * next;
}PLOY;
void start()
{
printf("************************************\n");
printf("两个一元多项式相加\n");
printf("************************************\n");
printf("请选择操作:\n");
printf("0.退出\n");
printf("1.两个一元多项式相加\n");
}
void insert(PLOY *head,PLOY *inpt)
{
PLOY *pre,*now;/*两个指针,在其中间插入要加入的结点*/
int signal=0;
pre=head;
if(pre->next==NULL) {pre->next=inpt;}/*只有头结点时*/
else {now=pre->next;
while(signal==0)
{
if(inpt->expn<now->expn)/*当插入结点的指数小于now时*/
{
if(now->next==NULL)/*now为最后一个结点*/
{
now->next=inpt;
signal=1;
}
else /*pre,now分别向后移一位*/
{
pre=now;
now=pre->next;
}
}
else
if(inpt->expn>now->expn)/*插入结点指数大于now,插入*/
{
inpt->next=now;
pre->next=inpt;
signal=1;
}
else /*有相同指数项两者相加*/
{
now->coef=now->coef+inpt->coef;
signal=1;
free(inpt);
if(now->coef==0)/*和为0时*/
{
pre->next=now->next;
free(now);
}
}
}
}
}
PLOY *creat(char ch)
{
PLOY *head,*inpt;
float x;
int y;
head=(PLOY *)malloc(sizeof(PLOY));/*创建链表头*/
head->next=NULL;
printf("请输入一元多项式%c:(格式是:系数 指数;以0 0 结束!)\n",ch);
scanf("%f %d",&x,&y);
while(x!=0) /*当系数不等于0时*/
{
inpt=(PLOY *)malloc(sizeof(PLOY));
inpt->coef=x;
inpt->expn=y;
inpt->next=NULL;
insert(head,inpt);
scanf("%f %d",&x,&y);
}
return head;
}
PLOY *addPLOY(PLOY *head,PLOY *pre)
{
PLOY *inpt;
int flag=0;
while(flag==0)
{
if(pre->next==NULL)
flag=1;
else
{
pre=pre->next;
inpt=(PLOY *)malloc(sizeof(PLOY));/*创建新链节*/
inpt->coef=pre->coef;
inpt->expn=pre->expn;
inpt->next=NULL;
insert(head,inpt);
}
}
return head;
}
void print(PLOY *fun)
{
PLOY *printing;
int flag=0;
printing=fun->next;/*正在被打印的链节*/
if(fun->next==NULL) /*函数为空打印0*/
{
printf("0\n");
return;
}
while(flag==0)
{
if(printing->coef>0&&fun->next!=printing)
printf("+");
if(printing->coef==1);/*系数为1就不用打印系数*/
else if(printing->coef==-1)
printf("-");
else
printf("%f",printing->coef);/*其余情况都得打印*/
if(printing->expn!=0) printf("x^%d",printing->expn);/*指数为0不打印,不为0打印*/
else if((printing->coef==1)||(printing->coef==-1))
printf("1");
if(printing->next==NULL)
flag=1;
else
printing=printing->next;
}
printf("\n");
}
void main()
{
PLOY *f,*g;
int sign=-1;
start();
while(sign!=0)
{
scanf("%d",&sign);
switch(sign)
{
case 0:
break;
case 1:
{
f=creat('f');
printf("f(x)=");
print(f);
g=creat('g');
printf("g(x)=");
print(g);
printf("F(x)=f(x)+g(x)=");
f=addPLOY(f,g);
print(f);
sign=-1;
start();
break;
}
default:
{
printf("输入有误!请重新选择操作!\n");
start();
break;
}
}
}
printf("谢谢使用!\n");
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -