#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))
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)