数据结构中: 一元多项式的运算(相加,相减,相乘)------用C语言 / C++来实现。 数据结构线性表的操作和应用(顺序存储)

1.实验题目:

线性表的操作和应用(顺序存储)。用顺序存储实现一元多项式,并进行加、减、乘运算。

2.实验步骤:

(1)一元多项式结构体创建  (2)初始化

(3)一元多项式赋值             (4)打印一元多项式

(5)加法运算                        (6)减法运算

(7)乘法运算

3.代码实践:

   全部代码:

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdlib.h>
#include <stdio.h>
#define MAX 100 
//用顺序存储实现一元多项式,并进行加,减,乘运算

// 一个系数 ,一个指数 --- 指数用数组元素下标代替
typedef struct
{
	int elem[MAX];      //静态数组分配
	int length;
}Sqlist, * Linklist;


//检查初始化
void Initlist(Linklist L1L2)
{
	if (L1L2)
	{
		printf("初始化成功\n");
		L1L2->length = 0;
	}
	else
	{
		printf("初始化失败\n");
	}
}


//输入一元多项式系数   +   实际确定length值    (直接给length赋值也可以,就不用多次一举)
Creatlist(Linklist L1L2, int len12)
{
	for (int n = 0; n < len12; n++)
	{
		printf("请输入第%d位多项式 X^%d 的系数: ", n + 1, n);
		int m;
		scanf("%d", &m);
		L1L2->elem[n] = m;
		L1L2->length += 1;
	}
	printf("\n");
}


//打印一元多项式
void print(Linklist L, int len)
{
	for (int n = 0; n < len; n++)
	{
		printf("%dX^%d ", L->elem[n], n);
		if (n != len - 1)
			printf("+ ");
	}
	printf("\n");
}


//加法运算
void AddPolyn(Linklist L1, Linklist L2, Linklist L3, int len3)
{        //判断L1,L2 数组下标是否相同,相同的系数相加
	printf("一元多项式的加法运算:\n");
	for (int n = 0; n < L3->length; n++)
	{
		L3->elem[n] = L1->elem[n] + L2->elem[n];
	}
	printf("L1+L2= L3: F(X)= ");
	print(L3, L3->length);
}


//减法运算
SubPolyn(Linklist L1, Linklist L2, Linklist L3, int len3)
{		//判断L1,L2数组元素下标是否相同,相同的则系数相加
	printf("一元多项式的减法运算:\n");       	
	//L1 - L2
	for (int n = 0; n < L3->length; n++)
	{
		L3->elem[n] = L1->elem[n] - L2->elem[n];
	}
	printf("L1-L2= L3: F(X)= ");
	print(L3, L3->length);
	//L2 - L1
	for (int n = 0; n < L3->length; n++)
	{
		L3->elem[n] = L2->elem[n] - L1->elem[n];
	}
	printf("L2-L1= L3: F(X)= ");
	print(L3, L3->length);
}


//乘法运算
MultiplyPolyn(Linklist L1, Linklist L2, Linklist L3, int len3)
{
	printf("一元多项式的乘法运算:\n");
	for (int n = 0; n < L3->length; n++)
	{
		L3->elem[n] = L1->elem[n] * L2->elem[n];
	}
	printf("L1*L2= L3: F(X)= ");
	print(L3, L3->length);
}



int main()
{
	//创建顺序表L1,L2,L3
	Linklist L1 = (Sqlist*)malloc(sizeof(Sqlist));    //L1,L2,L3 是 指针  ,没初始化不好用
	Linklist L2 = (Sqlist*)malloc(sizeof(Sqlist));   // L1,L2,L3 的初始化 并不代表 数组 的初始化
	Linklist L3 = (Sqlist*)malloc(sizeof(Sqlist));
	//检查初始化是否成功
	printf("L1 ");
	Initlist(L1);
	printf("L2 ");
	Initlist(L2);
	printf("L3 ");
	Initlist(L3);


	//设定结构体的 length 值
	printf("请设定L1 的length的值:");
	int len1;
	scanf("%d", &len1);
	printf("请设定L2 的length的值:");
	int len2;
	scanf("%d", &len2);
	if (len1 >= len2)
		L3->length = len1;
	else
		L3->length = len2;


	//数组赋值 + 实际确定length值
	printf("请给 L1 输入一元多项式的值\n");
	Creatlist(L1, len1);
	printf("请给 L2 输入一元多项式的值\n");
	Creatlist(L2, len2);


	//打印L1,L2的内容
	printf("一元多项式L1: \n      F(X)= ");
	print(L1, len1);
	printf("一元多项式L2: \n      F(X)= ");
	print(L2, len2);


	//合成版块
	int input =1;
	printf("\n*****  输入0:退出程序   *****\n");
	printf("*****  输入1:加法运算   *****\n");
	printf("*****  输入2:减法运算   *****\n");
	printf("*****  输入3:乘法运算   *****\n");
	while (input)
	{
		scanf("%d", &input);
		switch (input)
		{
		case 0:
			printf("退出程序\n");
			break;
		case 1:            //加法运算
			AddPolyn(L1, L2, L3, L3->length);
			break;
		case 2:			   //减法运算
			SubPolyn(L1, L2, L3, L3->length);
			break;
		case 3:			   //乘法运算
			MultiplyPolyn(L1, L2, L3, L3->length);
			break;
		default:
			printf("输入错误,请重新输入\n");
			break;
		}
	}
}

(1)主函数 模块

int main()
{
	//创建顺序表L1,L2,L3
	Linklist L1 = (Sqlist*)malloc(sizeof(Sqlist));    //L1,L2,L3 是 指针  ,没初始化不好用
	Linklist L2 = (Sqlist*)malloc(sizeof(Sqlist));   // L1,L2,L3 的初始化 并不代表 数组 的初始化
	Linklist L3 = (Sqlist*)malloc(sizeof(Sqlist));
	//检查初始化是否成功
	printf("L1 ");
	Initlist(L1);
	printf("L2 ");
	Initlist(L2);
	printf("L3 ");
	Initlist(L3);


	//设定结构体的 length 值
	printf("请设定L1 的length的值:");
	int len1;
	scanf("%d", &len1);
	printf("请设定L2 的length的值:");
	int len2;
	scanf("%d", &len2);
	if (len1 >= len2)
		L3->length = len1;
	else
		L3->length = len2;


	//数组赋值 + 实际确定length值
	printf("请给 L1 输入一元多项式的值\n");
	Creatlist(L1, len1);
	printf("请给 L2 输入一元多项式的值\n");
	Creatlist(L2, len2);


	//打印L1,L2的内容
	printf("一元多项式L1: \n      F(X)= ");
	print(L1, len1);
	printf("一元多项式L2: \n      F(X)= ");
	print(L2, len2);


	//合成版块
	int input =1;
	printf("\n*****  输入0:退出程序   *****\n");
	printf("*****  输入1:加法运算   *****\n");
	printf("*****  输入2:减法运算   *****\n");
	printf("*****  输入3:乘法运算   *****\n");
	while (input)
	{
		scanf("%d", &input);
		switch (input)
		{
		case 0:
			printf("退出程序\n");
			break;
		case 1:            //加法运算
			AddPolyn(L1, L2, L3, L3->length);
			break;
		case 2:			   //减法运算
			SubPolyn(L1, L2, L3, L3->length);
			break;
		case 3:			   //乘法运算
			MultiplyPolyn(L1, L2, L3, L3->length);
			break;
		default:
			printf("输入错误,请重新输入\n");
			break;
		}
	}
}

(2)一元多项式结构体创建版块

// 一个系数 ,一个指数 --- 指数用数组元素下标代替
typedef struct
{
	int elem[MAX];      //静态数组分配
	int length;
}Sqlist, * Linklist;

(3)检查初始化版块

//检查初始化
void Initlist(Linklist L1L2)
{
	if (L1L2)
	{
		printf("初始化成功\n");
		L1L2->length = 0;
	}
	else
	{
		printf("初始化失败\n");
	}
}

(4)一元多项式赋值 模块

//输入一元多项式系数   +   实际确定length值    
Creatlist(Linklist L1L2, int len12)
{
	for (int n = 0; n < len12; n++)
	{
		printf("请输入第%d位多项式 X^%d 的系数: ", n + 1, n);
		int m;
		scanf("%d", &m);
		L1L2->elem[n] = m;
		L1L2->length += 1;
	}
	printf("\n");
}

(5)一元多项式打印 模块

//打印一元多项式
void print(Linklist L, int len)
{
	for (int n = 0; n < len; n++)
	{
		printf("%dX^%d ", L->elem[n], n);
		if (n != len - 1)
			printf("+ ");
	}
	printf("\n");
}

(6)加法运算 版块

//加法运算
void AddPolyn(Linklist L1, Linklist L2, Linklist L3, int len3)
{        //判断L1,L2 数组下标是否相同,相同的系数相加
	printf("一元多项式的加法运算:\n");
	for (int n = 0; n < L3->length; n++)
	{
		L3->elem[n] = L1->elem[n] + L2->elem[n];
	}
	printf("L1+L2= L3: F(X)= ");
	print(L3, L3->length);
}

(7)减法运算 模块

//减法运算
SubPolyn(Linklist L1, Linklist L2, Linklist L3, int len3)
{		//判断L1,L2数组元素下标是否相同,相同的则系数相加
	printf("一元多项式的减法运算:\n");       	
	//L1 - L2
	for (int n = 0; n < L3->length; n++)
	{
		L3->elem[n] = L1->elem[n] - L2->elem[n];
	}
	printf("L1-L2= L3: F(X)= ");
	print(L3, L3->length);
	//L2 - L1
	for (int n = 0; n < L3->length; n++)
	{
		L3->elem[n] = L2->elem[n] - L1->elem[n];
	}
	printf("L2-L1= L3: F(X)= ");
	print(L3, L3->length);
}

(8)乘法运算 模块

//乘法运算
MultiplyPolyn(Linklist L1, Linklist L2, Linklist L3, int len3)
{
	printf("一元多项式的乘法运算:\n");
	for (int n = 0; n < L3->length; n++)
	{
		L3->elem[n] = L1->elem[n] * L2->elem[n];
	}
	printf("L1*L2= L3: F(X)= ");
	print(L3, L3->length);
}

4.代码运行结果

  • 8
    点赞
  • 56
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值