📄 polyn.cpp
字号:
#include<stdio.h>
#include<stdlib.h>
#define ERROR -1
typedef struct LNode{
float coef;
int expn;
struct LNode *next;
}*Link,*Position;//结点
typedef struct {
Link head;
int len;
}polynomial;//链表
int Welcome(void);
int CreatPolyn(polynomial &p);
void PrintPolyn(polynomial p);
int AddPolyn(polynomial *a,polynomial *b);//a和b相加后,结果放进a中
int SubtractPolyn(polynomial *a,polynomial *b);
void Derivative(polynomial *a);
//void Multiply(polynomial *a,polynomial *b);
void Evaluation(polynomial p);
int main()
{
Welcome();
polynomial Pa,Pb;
int c,s=1;
while(s){
scanf("%d",&c);
switch(c)
{
case 1:
printf("Input Pa");
CreatPolyn(Pa);
printf("Pa=");
PrintPolyn(Pa);
break;
case 2:
printf("\nInput Pa");
CreatPolyn(Pa);
printf("\nPa=");
PrintPolyn(Pa);
printf("\nInput Pb");
CreatPolyn(Pb);
printf("\nPb=");
PrintPolyn(Pb);
AddPolyn(&Pa,&Pb);
printf("\nPa+Pb=");
PrintPolyn(Pa);
break;
case 3:
printf("Input Pa");
CreatPolyn(Pa);
printf("Pa=");
PrintPolyn(Pa);
printf("Input Pb");
CreatPolyn(Pb);
printf("Pb=");
PrintPolyn(Pb);
SubtractPolyn(&Pa,&Pb);
printf("\nPa-Pb=");
PrintPolyn(Pa);
break;
case 4:
printf("Input Pa");
CreatPolyn(Pa);
printf("Pa=");
PrintPolyn(Pa);
Derivative(&Pa);
printf("\nThe derivative of Pa is :");
PrintPolyn(Pa);
break;
case 5:
printf("Input Pa");
CreatPolyn(Pa);
printf("Pa=");
PrintPolyn(Pa);
Evaluation(Pa);
break;
case 6:
s=0;
break;
default:
printf("\nERROR");
break;
}
}
return 0;
}
int Welcome(void)
{
printf(" *****************POLYNOMIAL*****************\n");
printf(" *********多项式请以指数的降序排列输入*******\n\n\n");
printf("请选择以下操作:\n");
printf("[1] 输入一函数并用类数学表达式输出\n[2] 做加法运算\n");
printf("[3] 做减法运算\n[4] 做求导运算\n[5] 求x处的值\n[6] 退出\n");
return 0;
}
int CreatPolyn(polynomial &p)
{
int m;
printf("\nInput the polynomial's len ");
scanf("%d",&m);
if(m<=0)
{
printf("ERROR I AN SO SORRY! ");
system("Pause");
exit(0);
}
int i;
Link h,s;
Position q;
if(!(h=(Link)malloc(sizeof(LNode))))
return ERROR;
else
{
h->coef=0.0;
h->expn=-1;
h->next=NULL;
}
p.head=h;
p.len=m;
q=h;
for(i=1;i<=m;++i)
{
if(!(s=(Link)malloc(sizeof(LNode))))
return ERROR;
else
scanf("%f,%d",&s->coef,&s->expn);
if(q->expn!=s->expn)
{
q->next=s;
q=s;
}
else
{
(q->coef)+=(s->coef);
free(s);
}
}
q->next=NULL;
return 0;
}
void PrintPolyn(polynomial p)
{
Link t=p.head->next;
if(t->expn>0)
{
if(t->expn!=1)
{
if(t->coef!=1&&t->coef!=-1)
printf("%fx^%d",t->coef,t->expn);
else if(t->coef==1)
printf("x^%d",t->expn);
else
printf("-x^%d",t->expn);
}
else
{
if(t->coef!=1&&t->coef!=-1)
printf("%fx",t->coef);
else if(t->coef==1)
printf("x");
else
printf("-x");
}
}
else if(t->expn==0)
printf("%f",t->coef);
t=t->next;
for(;t;)
{
if(t->expn!=0)
{
if(t->expn!=1)
{
if(t->coef==-1)
printf("-x^%d",t->expn);
else if(t->coef==1)
printf("+x^%d",t->expn);
else if(t->coef>0&&t->coef!=1)
printf("+%fx^%d",t->coef,t->expn);
else if(t->coef<0&&t->coef!=-1)
printf("%fx^%d",t->coef,t->expn);
}
else
{
if(t->coef==-1)
printf("-x");
else if(t->coef==1)
printf("+x");
else if(t->coef>0&&t->coef!=1)
printf("+%fx",t->coef);
else if(t->coef<0&&t->coef!=-1)
printf("%fx",t->coef);
}
}
else
{
if(t->coef>0)
printf("+%f",t->coef);
else
printf("%f",t->coef);
}
t=t->next;
}
free(t);
printf("\n");
}
int AddPolyn(polynomial *a,polynomial *b)
{
Link ha,hb,qa,qb;
ha=a->head;
hb=b->head;
qa=ha->next;
qb=hb->next;
float sum;
while(qa&&qb)
{
if(qa->expn>qb->expn)
{
ha=qa;
qa=qa->next;
}
else if(qa->expn<qb->expn)
{
hb->next=qb->next;
ha->next=qb;
qb->next=qa;
ha=ha->next;
qb=hb->next;
}
else if(qa->expn==qb->expn)
{
sum=qa->coef+qb->coef;
if(sum!=0)
{
qa->coef=sum;
ha=qa;
}
else
{
ha->next=qa->next;
free(qa);
}
hb->next=qb->next;
free(qb);
qb=hb->next;
qa=ha->next;
}
}
if(hb->next)
{
ha->next=hb->next;
}
free(hb);
return 0;
}
int SubtractPolyn(polynomial *a,polynomial *b)
{
Link ha,hb,qa,qb;
ha=a->head;
hb=b->head;
qa=ha->next;
qb=hb->next;
float sum;
while(qa&&qb)
{
if(qa->expn>qb->expn)
{
ha=qa;
qa=qa->next;
}
else if(qa->expn<qb->expn)
{
qb->coef=-(qb->coef);
hb->next=qb->next;
ha->next=qb;
qb->next=qa;
ha=ha->next;
qb=hb->next;
}
else if(qa->expn==qb->expn)
{
sum=qa->coef-qb->coef;
if(sum!=0)
{
qa->coef=sum;
ha=qa;
}
else
{
ha->next=qa->next;
free(qa);
}
hb->next=qb->next;
free(qb);
qb=hb->next;
qa=ha->next;
}
}
if(hb->next)
{
ha->next=hb->next;
qb=ha->next;
for(;qb;)
{
qb->coef=-(qb->coef);
qb=qb->next;
}
}
free(hb);
return 0;
}
void Derivative(polynomial *a)
{
Link q;
q=a->head->next;
for(;q;)
{
(q->coef)*=(q->expn);
--(q->expn);
q=q->next;
}
free(q);
}
void Evaluation(polynomial p)
{
Link q;
q=p.head->next;
float Px,x,sum;
sum=0;
int i;
printf("\nInput x=");
scanf("%f",&x);
for(;q;)
{
Px=1.0;
for(i=1;i<=q->expn;++i)
Px*=x;
Px*=(q->coef);
sum+=Px;
q=q->next;
}
printf("\nThe evaluation of P(%f) is %f",x,sum);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -