?? 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 + -