哪位高手帮偶改下这个程序啊(关于多项式的),小弟不胜感激!

时间:2021-09-20 14:13:29
这是我用C写的一个关于多项式乘法的程序(编译已经通过),小弟不太会C++,哪为高手能帮我把它改成C++并创建一个多项式类(class PolyNomial)并重载一下加法和乘法操作符啊,小弟不胜感激!

#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#include <conio.h>

typedef struct node
{
float coef; 
    int expn; 
    struct node * next; 
} PolyNode;

PolyNode * Create_Poly(char ch)           //输入多项式

PolyNode * p, *s,*r;
    float x; int y;
    p=(PolyNode *)malloc(sizeof(PolyNode));
    p->next=NULL;
    printf("请输入一元多项式%c:(格式:系数 指数,指数递增,以0 0结束.)\n",ch);
    scanf("%f %d",&x,&y);
    while(x!=0)

s=(PolyNode *)malloc(sizeof(PolyNode));
        s->coef=x;
        s->expn=y;
        s->next=NULL;
        if(p->next==NULL)
{
p->next=s;
            r=s;
}
        else

    r->next=s;
            r=s;
}
        scanf("%f %d",&x,&y);
}
    return p;
}

PolyNode * Add_Poly(PolyNode * f,PolyNode * g) //多项式相加

PolyNode * fg;
    PolyNode *t,*q,*s,*r;
    float m;
    t=f->next;
    q=g->next;
    fg=r=(PolyNode*)malloc(sizeof(PolyNode));
    fg->next=NULL;
    while(t&&q)

if(t->expn==q->expn) //指数相等时系数相加

m=t->coef+q->coef;
            if(m!=0) //系数为不0时加到结果中去
{
    s=(PolyNode *)malloc(sizeof(PolyNode));
                s->coef=m;
    s->expn=t->expn;
    s->next=NULL;  
}
    t=t->next;
    q=q->next; 
}
else //指数小的加到结果中去再后移
            if(t->expn<q->expn)
{
s=(PolyNode *)malloc(sizeof(PolyNode));
                s->coef=t->coef;
                s->expn=t->expn;
                s->next=NULL;
                t=t->next; 
}
            else 
{
s=(PolyNode *)malloc(sizeof(PolyNode));
                s->coef=q->coef;
                s->expn=q->expn;
                s->next=NULL;
                q=q->next;
}

        if(fg->next==NULL)

fg->next=s;
            r=s; 
}
        else
{
r->next=s;
            r=s;

}//while
    r->next=t?t:q; //把没加完的接上
    return fg;
}


void Out_Poly(PolyNode * f) //输入多项式
{
PolyNode *t;
    t=f->next;
if(!f->next){
printf("0\n");  return;
}
    while(t)
{   if(t->coef>0&&f->next!=t) printf("+");
if(t->expn==0)
            printf("%f",t->coef);
        else
            printf("%f*X^%d",t->coef,t->expn);
        t=t->next;
}
   printf("\n");
}



PolyNode * Mul_Poly(PolyNode *f,PolyNode *g)//多项式相乘
{
PolyNode *h;
    PolyNode *t,*q,*s,*r;
h=(PolyNode *)malloc(sizeof(PolyNode));
h->next=NULL;
r=(PolyNode *)malloc(sizeof(PolyNode));
r->next=NULL;
for(t=f->next;t;t=t->next) //相乘时把第一项多项式的每一项
{ //与第二个多项式中的每一项相乘
for(q=g->next;q;q=q->next) //用双重循环实现
{
s=(PolyNode *)malloc(sizeof(PolyNode));
r->next=s;
s->coef=q->coef*t->coef;
s->expn=q->expn+t->expn;
s->next=NULL;
h=Add_Poly(r,h); //把每项相乘结果加起来
}

}
return h;
}

void Open() //用户选择界面
{
printf("*****************************\n");
printf("    一元多项式相加与相乘\n");
printf("    中山大学 03信管 叶伟鑫\n");
printf("*****************************\n");
printf("请选择操作:\n");
printf("0.退出\n");
printf("1.两个一元多项式相加\n");
printf("2.两个多项式相乘\n");
printf("3.用户手册\n");
}


void Readme()
{
printf("**********用户手册***********\n");
printf("1.输入时只输入多项式的系数与指数,以0 0结束.\n");
printf("2.请按指数升幂形式输入.\n");
printf("3.例如输入 \"1 1 2 2 0 0\" 表示 \"1*X^1+2*X^2\"\n");
printf("4.感谢你的使用!哈哈^_^\n");
}


void main()
{
    Open();
PolyNode * f,* g,* fg;
int i=-1; //设置标志
while(i!=0) 
{
scanf("%d",&i);
getchar();
switch(i)
{
case 0:
return; //退出
case 1:  
//clrscr(); //清屏
printf("你选择的操作是多项式相加:\n");
f=Create_Poly('A'); //输入多项式A
printf("A=");
Out_Poly(f);
g=Create_Poly('B'); //输入多项式B
printf("B=");
Out_Poly(g);
printf("A+B=");
fg=Add_Poly(f,g);
Out_Poly(fg);
i=-1; //复位标志
//clrscr(); //清屏
Open(); //回复用户选择界面
break;
case 2:
//clrscr(); //清屏
printf("你选择的操作是多项式相乘:\n");
f=Create_Poly('A'); //输入多项式A
printf("A=");
Out_Poly(f);
g=Create_Poly('B'); //输入多项式B
printf("B=");
Out_Poly(g);
printf("A*B=");
fg=Mul_Poly(f,g);
Out_Poly(fg);
i=-1; //复位标志
//clrscr(); //清屏
Open(); //回复用户选择界面
break;
case 3:
//clrscr(); //清屏
Readme();
i=-1; //复位标志
//clrscr(); //清屏
Open(); //回复用户选择界面
break;
default:
//clrscr(); //清屏
printf("输入有误!请重新选择操作!\n");//选择错误,返回选择界面
Open();
}
}
  
}

3 个解决方案

#1


实在不好意思我已经没分了

#2


:)
要不帮你转到新手乐园去吧。
那儿人比这儿多。

#3


你是版主吗,可以帮我做一下吗

#1


实在不好意思我已经没分了

#2


:)
要不帮你转到新手乐园去吧。
那儿人比这儿多。

#3


你是版主吗,可以帮我做一下吗