一元多项式运算(顺序存储)

#include<stdio.h>
#include<iostream.h>
using namespace std;
#define MAX 100
typedef struct{
 int coefarray[MAX+1];
 int highpower;//最高项指数 
} polyarray;
//创建多项式 
void Create(polyarray *L)
{
	int i,n,coef,index;
	L->highpower=0;
	for(i=0;i<MAX+1;i++)
	{
		L->coefarray[i]=0;
	}
	cout<<"输出多项式的项数:";
	cin>>n;
	for(i=1;i<=n;i++)
	{
		cout<<"请输入第"<<i<<"项的系数和指数:";
		cin>>coef>>index;
		if(L->highpower<index);
		    L->highpower=index;
		    L->coefarray[index]=coef;
	} 
}
//输出多项式 
void Show(polyarray *L)
{
 if(L->coefarray[0]!=0)
 cout<<L->coefarray[0];
  for(int i=1;i<=L->highpower;i++)
  {
    if(L->coefarray[i]>0)
   cout<<"+"<<L->coefarray[i]<<"x^"<<i;
   else if(L->coefarray[i]<0)
    cout<<L->coefarray[i]<<"x^"<<i; 
  }}
//初始化
void Init(polyarray *L)
{
	int i;
	for(i=0;i<=MAX+1;i++)
	{
		L->coefarray[i]=0;
	}
	L->highpower=0;
}
//多项式相加 
void Add(polyarray *L1,polyarray *L2,polyarray *L3)
{
	int i;
	if(L1->highpower>L2->highpower)
	   L3->highpower=L1->highpower;
 	else
 	   L3->highpower=L2->highpower;
    for(i=0;i<=L3->highpower;i++)
    {
L3->coefarray[i]=L1->coefarray[i]+L2->coefarray[i];
    }}
//多项式相减
void Sub(polyarray *L1,polyarray *L2,polyarray *L3)
{
	int i;
	if(L1->highpower>L2->highpower)
	   L3->highpower=L1->highpower;
 	else
 	   L3->highpower=L2->highpower;
    for(i=0;i<=L3->highpower;i++)
    {
L3->coefarray[i]=L1->coefarray[i]-L2->coefarray[i];
    }} 
//多项式相乘
void Mult(polyarray *L1,polyarray *L2,polyarray *L3)
{	 
	L3->highpower=L1->highpower+L2->highpower;
	for(int i=0;i<=L1->highpower;i++)
	{
		for(int j=0;j<=L2->highpower;j++)
    {
    L3->coefarray[i+j]+=L1->coefarray[i]*L2->coefarray[j];
    }} }  
//菜单
void Menu()
{
        cout<<"\t***************************************\n";
        cout<<"\t>>>>>>>    1. 创建多项式        <<<<<<<\n";
        cout<<"\t>>>>>>>    2. 多项式加法        <<<<<<<\n";
        cout<<"\t>>>>>>>    3. 多项式减法        <<<<<<<\n";
        cout<<"\t>>>>>>>    4. 多项式乘法        <<<<<<<\n";
        cout<<"\t>>>>>>>    0. 退出系统          <<<<<<<\n"; 
        cout<<"\t***************************************\n";
} 
int main()
{
	polyarray *L1,*L2,*L3;
	L1=(polyarray*)malloc(sizeof(polyarray));
	L2=(polyarray*)malloc(sizeof(polyarray));	
	L3=(polyarray*)malloc(sizeof(polyarray));
	int num;
	Menu();
	while(1)
	{
cout<<"请输入要操作的序号:";
cin>>num;
switch(num)
{
case 1:
Create(L1);
cout<<"第一个多项式为:";
Show(L1);
cout<<endl<<endl;
Create(L2);
cout<<"第二个多项式为:";
Show(L2);
cout<<endl<<endl;
break;
case 2:
Init(L3);
Add(L1,L2,L3);
cout<<"相加后的结果为:";
Show(L3);
cout<<endl<<endl;
break;
case 3:
Init(L3);
Sub(L1,L2,L3);
cout<<"相减后的结果为:";
Show(L3);
cout<<endl<<endl;
  break;
case 4:
Init(L3);
Mult(L1,L2,L3);
cout<<"相乘后的结果为:";	
Show(L3);
cout<<endl<<endl;
break;
case 0:
exit(1);
break;
}
}
return 0;}

用五个函数分别实现一元多项式的创建、输出、加法、减法和乘法;然后在主函数中调用这些函数实现这些功能的展示(以菜单的形式呈现)。

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
一元多项式表达和相加 实验报告 1. 实验内容和目的 实验目的:掌握单链表的建立、合并和遍历操作 实验内容:1. 单链表的建立(创建一个一元多项式) 2. 单链表的遍历(一元多项式的输出、一元多项式的项数统计) 3. 单链表的合并(一元多项式的加减运算) 2. 实验原理 基本原理:使用单链表储存一元多项式的指数和系数信息。每个结点含有两个数据域 ,分别用于存放每一项的指数和系数;一个指针域用于存放下一个结点的指针。一个 完整的链表表示一个一元多项式。文档来自于网络搜索 单链表的建立: 为了后续操作的方便,本实验中创建的单链表是按指数倒序排序的。 例:创建一元多项式: 为了更好说明建立的过程,输入的过程并非按照指数降序的顺序输入。 实际的输入如下: 步骤一:把最先输入的数据作为链表的第一个结点 步骤二:用第二个数据创建一个新的结点,如果新结点指数大于某个结点,则新 的结点插在该结点的前面;否则跟后面一个再比较(源码中p和q指针向链表后移动) ;如果新的结点比前面的每一个结点都要小(即q指向链表最后一个结点),则插在 链表的末尾端。文档来自于网络搜索 下图为新结点中指数比前面每个结点的指数都要小 如果发现新结点的指数大于链表中某个特定结点时(图中红色数字表示操作顺序 ) 不断重复上述步骤,直到所有的数据都储存到单链表中。 单链表的合并(即本例中的一元多项式的加减法): 根据上述的链表创建算法,创建好的链表都具有按指数大小降序的特点。为了确 保合并以后的单链表也具有此特点,因此合并的过程中,同样会边合并,边比较大小 ,从而确保合并的结果仍然具有此特性。文档来自于网络搜索 例:多项式P1为: 多项式P2为: 多项式运算P1+P2的结果为: 从上述的链表创建算法可以创建出两个对应的链表 先利用两个指针,Pa和Pb,分别指向两个多项式的结点。 如果Pa指向结点指数大于Pb指向结点的指数,把Pa指向的结点插入到新的链表之 中。具体步骤如图 如果Pa指向结点指数小于Pb指向结点的指数,则把Pb指向的结点插入到新的链表 之中。具体步骤如图 如果Pa指向的结点指数等于Pb指向的结点指数,则先把两者指向结点指数相加, 储存到Pa指向结点中。移动Pa,Pb指针,释放原来Pb指向的结点。具体步骤如图文档 来自于网络搜索 一直重复上述操作,当其中一个链表结点已经全部插入到新的链表中时,则把另 外一个链表剩下的所有结点插入到链表之中(即只需要把剩下的结点接起来)。具体 步骤如图文档来自于网络搜索 当完成上述的操作,把Pa指针指向新链表的指向新的链表头。把旧的两个链表头释放掉 。 一元多项式的减法,实际上也是一元多项式的加法。程序对于一元多项式的减法处理如 下,A和B是两个多项式,A-B = A+(- B),也就是说,把作为减数的多项式中每一项的系数变成其相反数,然后将两个多项式 进行加法运算。文档来自于网络搜索 3. 程序流程图 4. 实验结果 4.1 程序主菜单 4.2 创建多项式 4.3 一元多项式的加法操作 4.4 一元多项式的减法操作 4.5 求一元多项式系数操作 5. 操作说明 1. 主菜单中的1(创建一元多项式)2(输出一元多项式) 5(求一元多项式操作)三个选项操作的对象是同一个一元多项式,因此,要使用输 出和求项数功能之前,需要选择1(创建一元多项式)创建多项式。文档来自于网络 搜索 2. 多项式的加减操作的操作对象是两个新的多项式,操作结束以后,进行加减运算的多 项式和结果多项式均不会保存。文档来自于网络搜索 3. 在多项式的加减运算过程中,只要其中一个多项式的创建出现问题,整个加减法运算 操作就会终止。 6. 附录:代码 #include <stdio.h> #include <stdlib.h> #define OK 0 #define ERROR 1 typedef struct LNode { int exp; // 指数 float coef; // 系数 struct LNode *next; // 指针域 } LNode; /* 基本操作的实现*/ // 向链表中插入一个新的结点(插入过程中保持指数降序排序) // hNode 头结点 // nNode 要插入的新结点 int InsertLNode(LNode *hNode, LNode *nNode) { LNode *p, *q; // 如果链表为空表,则把元素放在链表第一个位置 if (hNode->next == NULL) { hNode->next = nNode; } else { p = hNode; q = hNode->next; while (q != NULL) { // 如果新的结点指数比q 结点的指数大,则该结点插在q 结点的前面 if (nNo
一元多项式是由一系列项组成的代数表达式,每个项由系数和相应的幂次组成。要实现C语言顺序存储一元多项式计算器,我们可以使用数组来存储每个项的系数和幂次。 首先,我们可以定义一个结构体来表示一元多项式的每个项,结构体中包含两个成员:coeff表示系数,exponent表示幂次。 然后,我们可以根据用户的输入创建一个数组来存储多项式的项。用户可以输入多个项,每个项包含系数和幂次。 接下来,我们可以实现多项式的加法、减法和乘法等运算。对于加法和减法,我们可以先遍历每个输入的多项式,将同一幂次的项相加或相减。对于乘法,我们可以使用嵌套循环遍历两个多项式的每个项,相乘后将结果加入一个结果数组。 最后,我们可以提供一个菜单供用户选择需要的操作,例如输入多项式、进行运算等。 具体的代码实现可以参考以下伪代码: ``` // 定义一元多项式项的结构体 struct term { int coeff; // 系数 int exponent; // 幂次 }; // 定义一元多项式计算器结构体 struct polynomial { struct term *terms; // 数组用于存储多项式的项 int num_terms; // 多项式的项数 }; // 创建一元多项式 struct polynomial create_polynomial() { struct polynomial poly; printf("请输入多项式的项数:"); scanf("%d", &poly.num_terms); // 分配内存来存储多项式的项 poly.terms = (struct term*)malloc(sizeof(struct term) * poly.num_terms); printf("请输入多项式的每个项(系数和幂次):\n"); for (int i = 0; i < poly.num_terms; i++) { scanf("%d%d", &poly.terms[i].coeff, &poly.terms[i].exponent); } return poly; } ``` 这只是一个实现思路的伪代码,实际上还需要考虑错误处理、内存释放等问题。通过这样的顺序存储方式,我们可以实现一元多项式的计算器,方便进行多项式的各种运算

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值