📄 poly.cpp
字号:
#include<stdio.h>
#include<math.h>
#include<malloc.h>
#define OK 1;
#define MYOVERFLOW -2;
#define NULL 0
typedef struct polyterm{
int coef ;
int exp ;
struct polyterm *next;
}polyterm ,*Linklist;
typedef int status;
status head(Linklist &L){//申请节点
L=(polyterm *)malloc(sizeof(polyterm));
if(!L) return MYOVERFLOW;
L->next=NULL;
return OK;
}
status creatpolyn(Linklist &L){//创建
polyterm *p,*s;
s=L;
printf("此空间可用,请按指数升序输入多项式(系数为零时结束):\n");
head(p);
scanf("%d %d",&p->coef,&p->exp);
while(p->coef!=0){
s->next=p;
s=s->next;
head(p);
scanf("%d %d",&p->coef,&p->exp);
}
free(p);
return OK;
}
status showpolyn(Linklist &L){//显示
polyterm *p;
if (L==NULL)printf("未创建\n");
else{
p=L->next;
if(p==NULL)printf("已清空\n");
else {
while(p->next!=NULL){
printf("%dX%d+",p->coef,p->exp);
p=p->next;
}
printf("%dX%d\n",p->coef,p->exp);
}
}
return OK;
}
status copypolyn(Linklist La,Linklist &Lb){//复制
polyterm *p,*s,*m;
p=La->next;s=Lb;
while(p){
head(m);
m->exp=p->exp;
m->coef=p->coef;
p=p->next;
s->next=m;
s=m;
}
return OK;
}
status pluspolyn(Linklist La,Linklist Lb,Linklist &Lc){// 加法
polyterm *a,*b,*c,*p;
a=La->next;b=Lb->next;c=Lc;
while(a&&b){
head(p);
if(a->exp<b->exp){
p->exp=a->exp;
p->coef=a->coef;
a=a->next;
c->next=p;
c=c->next;
}
else if(a->exp>b->exp){
p->exp=b->exp;
p->coef=b->coef;
b=b->next;
c->next=p;
c=c->next;
}
else if(a->exp==b->exp&&a->coef+b->coef==0){
b=b->next;
a=a->next;
free(p);
}
else{
p->exp=b->exp;
p->coef=a->coef+b->coef;
a=a->next;
b=b->next;
c->next=p;
c=c->next;
}
}
if(a==NULL&&b!=NULL){
c->next=b;
}
else {
c->next=b;
}
return OK;
}
status conpolyn(Linklist &L){//取反
polyterm *a;a=L->next;
while(a){
a->coef=-a->coef;a=a->next;
}
return OK;
}
status destroypolyn(Linklist &L){//销毁
polyterm *p,*s;
p=L;s=L->next;
while(s){free(p);
p=s;s=p->next;
}
free(p);
L=NULL;
return OK;
}
status datapolyn(Linklist L){//求值
int sum=0,x;
polyterm *p;
p=L->next;
printf("请输入X值X=\n");
scanf("%d",&x);
while(p){
sum+=int (p->coef*pow(x,p->exp));
p=p->next;}
printf("结果是%d\n",sum);
return OK;
}
status clearpolyn(Linklist &L){//清空
polyterm *p,*s;
p=L->next;s=p->next;
while(s){free(p);
p=s;s=p->next;
}
free(p);
L->next=NULL;
return OK;
}
void main(){
int a,b,c;
polyterm * p[10]={NULL};
while(1){
printf("0 退出\n");
printf("1 创建多项式\n");
printf("2 显示多项式\n");
printf("3 复制多项式\n");
printf("4 求和\n");
printf("5 求差\n");
printf("6 求值\n");
printf("7 销毁多项式\n");
printf("8 清空多项式\n");
printf("请选择:\n");
scanf("%d",&a);
switch(a){
case 1: printf("请选择多项式创建空间,输入数字(0-9):\n");
while(1){
scanf("%d",&a);
if(p[a]==NULL){
head(p[a]);
break;
}
else if(p[a]->next==NULL)break;
else printf("此空间不可用,请重新选择空间,请输入另一数字:\n");
}
creatpolyn(p[a]);
break;
case 2: printf("请选择所要打印多项式的存储空间,输入数字(0-9)。输入0打印全部多项式:\n");
scanf("%d",&a);
printf("*********************************************************\n");
if(a==0)
for(;a<10;a++)
{printf("%d ",a);
showpolyn(p[a]);
}
else {printf("%d ",a);
showpolyn(p[a]);
}
printf("*********************************************************\n");
break;
case 3: printf("请选择原多项式和复制的多项式存储空间,输入两个数字(0-9):\n");
while (1){scanf("%d%d",&a,&b);
if(p[b]==NULL){
head(p[b]);
break;
}
else if(p[b]->next==NULL)break;
else printf("此空间不可用,请重新选择空间,改变后一数字:\n");
}
copypolyn(p[a],p[b]);
break;
case 4: printf("请选择原多项式和相加所得多项式存储空间,输入三个数字(0-9):\n");
while (1){scanf("%d%d%d",&a,&b,&c);
if(p[c]==NULL){
head(p[c]);
break;
}
else if(p[c]->next==NULL)break;
else printf("此空间不可用,请重新选择空间,改变最后一数字:\n");
}
pluspolyn(p[a],p[b],p[c]);
break;
case 5: printf("请选择原多项式和相减所得多项式存储空间,输入三个数字(0-9):\n");
while(1){
scanf("%d%d%d",&a,&b,&c);
if(p[c]==NULL){
head(p[c]);
break;
}
else if(p[c]->next==NULL)break;
else printf("此空间不可用,请重新选择空间,改变最后一数字:\n");
}
conpolyn(p[b]);
pluspolyn(p[a],p[b],p[c]);
conpolyn(p[b]);
break;
case 6: printf("请选择所要计算多项式的存储空间,输入数字(0-9):\n");
scanf("%d",&a);
datapolyn(p[a]);
break;
case 7: printf("请选择所要销毁多项式的存储空间,输入数字(0-9):\n");
scanf("%d",&a);
destroypolyn(p[a]);
break;
case 8: printf("请选择所要清空多项式的存储空间,输入数字(0-9):\n");
scanf("%d",&a);
clearpolyn(p[a]);
break;
case 0: goto loop;
}
}
loop: printf("多项式计算器关闭\n");
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -