c++ 多项式类 加减运算 (比较有难度,但是一定重赏)

c++ 多项式类 加减运算 (比较有难度,但是一定重赏),第1张

#include <stdio.h>

#include <string.h>

#include <stdlib.h>

void case_1(int number)

{

    int result[10]= {0}

    int i

    for(i=0 i<=9 i++)

    {

        result[i]=number%2

        number/=2

    }

    printf("转换后的数字是:")

    for(i=9 i>=0 i--)

    {

        printf("%d",result[i])

    }

    printf("\n")

}

void case_2()

{

    printf("请输入你要转换的数字:")

    int number

    scanf("%X",&number)

    printf("转换后的数字是:%d\n",number)

}

void 山清case_3()

{

    int num

    char str[33]

    printf("请输入你要转换的数字:")

    scanf("%o",&num)

    itoa(num, str, 2)

    printf("转换后的数字是:%s\n",str)

}

int main()

{

    while(1)

    {

        printf("欢迎使用进制转换系统\n1.\t10-->2\n2.\t16-->10\n3.\t8-->2\n请输入序号:\t")

        int i

        scanf("%d",&i)

        switch(i)

        {

        case 1:

            printf("请输入你要转换的数核乎字:\t")

            int number

            scanf("%d",&number)

            case_1(number)

            break

        case 2:

            case_2()

            break

        case 3:

            case_3()

            break

        default :

            printf("输入异常,程序自动退出。")

            return 0

        }

    }

 改唯悉   return 0

}

matlab多项式加减乘除的运算,可以按下返圆列方法来求解:

如棚仿f(x)=2*x³+5*x²+10x+5,g(x)=5*x³+7*x²+2x+8,则

1、多项式加法,

syms x

f(x) = 2*x^3 + 5*x^2 + 10*x + 5g(x) = 5*x^3 + 7*x^2 + 2*x + 8

f+g  %7*x^3 + 12*x^2 + 12*x + 13

2、多项式减法,

 f-g %- 3*x^3 - 2*x^2 + 8*x - 3

3、多项式乘法,使用conv()函数求解

p1=[2, 5,10, 5]%f(x)的系数

p2=[5,7,2, 8]   %g(x)的系数

w = conv(p1,p2) %w为多项式系数 % 10 链世纤   39    89   121    95    90    40,即

y=10 *x^6 +39*x^5 +89*x^4 +121*x^3 +95*x^2 +90*x + 40

4、多项式除法,使用deconv()函数求解

[q,r]=deconv(p1,p2) %商 为q 和余数为 r

//要求:多项式按降幂排列

#include<stdafx.h>

#include<iostream.h>

struct node

{

int coef//系数

int exp//指数

node * next

}

node * h1=NULL//第一个多项式的头指针

node * h2=NULL//第二个多项式的头指针

node * insert(int c,int e)//创建一个系数为c,指数为e的结点,并返回其地困配悄址

{

node * newnode=new node//创建新结点

newnode->coef=c//系数等于c

newnode->exp=e//指数等于e

newnode->next=NULL

return newnode

}

node * create(node * h)

{

int coef

int exp

char c

cout<<"请输入系数:"

cin>>coef

cout<<"请输入指数:"

cin>>exp

h=insert(coef,exp)

cout<<"是否输入完毕?(Y/N)"

cin>>c

if(c=='y'||c=='Y')

{

return h//如果输入完毕,返回头指针地址

}

else

{

h->next=create(h->next)//否则递归建立下一个结点

return h//返回头指针地址

}

}

node * copy(node * source)//将一个结点的内汪渣容复制到另一个结点,并返回该结点地址

{

if(source!=NULL)//如果源结点不为空

{

node * des=new node//创建新结点

des->coef=source->coef//新结点的系数等于源结点的系数

des->exp=source->exp//新结点的指数等于源结点的指数

des->next=NULL

return des//返回新结点地址

}

return NULL

}

void print(node * head)//输出头指针为head的多项式链表

{

node * h=head

if(h==NULL)

{

cout<<"0"//如果链表为空,输出0

}

else

{

while(h->next!=NULL)//否则,当其下一个结点不为空时

{

if(h->exp==0)//如果指数为0,即常数

{

if(h->coef>0)//如果系数大于0

{

cout<<h->coef//输出系数

}

else

{

cout<<"\b"<<h->coef//否则,退一格(消除前面的+号),输出系数

}

}

else if(h->exp==1)//否则,如果指数为1

{

if(h->coef>0)//如果系数大于0

{

if(h->coef==1)//如果系数等于1

{

cout<<"x"<<"+"//输出x+

}

else

{

cout<<h->coef<<"*x"<<"+"//否则,输出相应的系数

}

}

else

{

if(h->coef==-1)//否则,如果系数等于-1

{

cout<<"\b"<<"-x"<<"+"//退一格,输出-x

}

else

{

cout<<"\b"<<h->coef<<"*x"<<"+"//否则,退一格,卖纤输出相应的系数

}

}

}

else//否则,指数大于1

{

if(h->coef>0)//如果系数大于0

{

if(h->coef==1)//如果系数等于1

{

cout<<"x"<<h->exp<<"+"

}

else

{

cout<<h->coef<<"*x"<<h->exp<<"+"

}

}

else 

{

if(h->coef==-1)//否则,如果系数等于-1

{

cout<<"\b"<<"-x"<<h->exp<<"+"

}

else

{

cout<<"\b"<<h->coef<<"*x"<<h->exp<<"+"

}

}

}

h=h->next

}

//输出最后一项

if(h->exp==0)//如果指数为0,即常数

{

if(h->coef>0)//如果系数大于0

{

cout<<h->coef//输出系数

}

else

{

cout<<"\b"<<h->coef//否则,退一格,输出系数

}

}

else if(h->exp==1)//否则,如果指数为1

{

if(h->coef>0)//如果系数大于0

{

if(h->coef==1)//如果系数等于1

{

cout<<"x"//输出x

}

else

{

cout<<h->coef<<"*x"

}

}

else

{

if(h->coef==-1)//否则,如果系数等于-1

{

cout<<"\b"<<"-x"//退一格,输出-x

}

else

{

cout<<"\b"<<h->coef<<"*x"

}

}

}

else//否则,指数大于1

{

if(h->coef>0)//如果系数大于0

{

if(h->coef==1)//如果系数等于1

{

cout<<"x"<<h->exp

}

else

{

cout<<h->coef<<"*x"<<h->exp

}

}

else

{

if(h->coef==-1)//否则,如果系数等于-1

{

cout<<"\b"<<"-x"<<h->exp

}

else

{

cout<<"\b"<<h->coef<<"*x"<<h->exp

}

}

}

}

}

void prints(node * p1,node * p2,node * r)//输出相加结果,形如p1+p2=r

{

print(p1)

cout<<endl<<"+"<<endl

print(p2)

cout<<endl<<"="<<endl

print(r)

cout<<endl

}

char compare(node * n1,node * n2)//比较两个结点的指数大小

{

if(n1->exp==n2->exp)

{

return '='

}

else if(n1->exp>n2->exp)

{

return '>'

}

else

{

return '<'

}

}

node * add(node * p1,node * p2)//计算两个多项式相加,返回结果链表首地址

{

node * fr

//如果有一个为空,就把另外一个链表其后的部分复制到结果链表的尾部

if(p1==NULL)

{

node * x=copy(p2)

node * temp=x

while(p2!=NULL)

{

x->next=copy(p2->next)

x=x->next

p2=p2->next

}

return temp

}

else if(p2==NULL)

{

node * x=copy(p1)

node * temp=x

while(p1!=NULL)

{

x->next=copy(p1->next)

x=x->next

p1=p1->next

}

return temp

}

//如果都不为空

else

{

switch(compare(p1,p2))//比较两个结点的指数大小

{

case '='://相等

if(p1->coef+p2->coef!=0)//如果系数和不为0

{

fr=insert(p1->coef+p2->coef,p1->exp)//新结点的系数为两个结点的系数和,指数为这两个结点的指数

fr->next=add(p1->next,p2->next)

return fr

}

else

{

fr=add(p1->next,p2->next)//否则,新结点地址为这两个结点之后的部分链表的和链表的首地址

return fr

}

case '>'://大于

fr=copy(p1)//新结点的内容与p1相同

fr->next=add(p1->next,p2)//以p1->next为新的p1,递归调用add,创建链表余下的部分

return fr

case '<'://小于

fr=copy(p2)//新结点的内容与p2相同

fr->next=add(p1,p2->next)//以p2->next为新的p2,递归调用add,创建链表余下的部分

return fr

default:

return NULL

}

}

}

void main(void)

{

cout<<"先建立第一个多项式:"<<endl

h1=create(h1)

cout<<"再建立第二个多项式:"<<endl

h2=create(h2)

cout<<"和:"<<endl

prints(h1,h2,add(h1,h2))

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12552614.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-26
下一篇 2023-05-26

发表评论

登录后才能评论

评论列表(0条)

保存