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

这篇具有很好参考价值的文章主要介绍了数据结构中: 一元多项式的运算(相加,相减,相乘)------用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.代码运行结果

一元多项式的相加,相减和相乘数据结构,数据结构,数据结构,c语言,c++,c#文章来源地址https://www.toymoban.com/news/detail-789094.html

到了这里,关于数据结构中: 一元多项式的运算(相加,相减,相乘)------用C语言 / C++来实现。 数据结构线性表的操作和应用(顺序存储)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【数据结构】一元多项式的表示及相加

    📒博客主页: 程序员好冰 🎉欢迎 【点赞👍 关注🔎 收藏⭐️ 留言📝】 📌本文由 程序员好冰 原创,CSDN 首发! 📆入站时间: 🌴2022 年 07 月 13 日🌴 ✉️ 是非不入松风耳,花落花开只读书。 💭推荐书籍:📚《Java编程思想》,📚《Java 核心技术卷》 💬参考在线编程网

    2024年02月11日
    浏览(35)
  • 题02-线性结构2 一元多项式的乘法与加法运算(C语言)

    设计函数分别求两个一元多项式的乘积与和。 输入格式: 输入分2行,每行分别先给出多项式非零项的个数,再以指数递降方式输入一个多项式非零项系数和指数(绝对值均为不超过1000的整数)。数字间以空格分隔。 输出格式: 输出分2行,分别以指数递降方式输出乘积多项式

    2024年02月07日
    浏览(27)
  • 【数据结构】15 队列应用实例:多项式加法运算

    我们准备采用不带头节点的单向链表结构表示一元多项式,并按照指数递减的顺序排列各项。 对列表存放的两个多项式进行加法运算时,可以使用两个指针p1和p2。初始时的p1和p2分别指向这两个多项式第1个节点(指数的最高项)。通过循环不断比较p1和p2所指的节点,比较结

    2024年02月21日
    浏览(26)
  • 【ZZULI数据结构实验一】多项式的三则运算

    📃 博客主页: 小镇敲码人 🚀 欢迎关注:👍点赞 👂🏽留言 😍收藏 🌏 任尔江湖满血骨,我自踏雪寻梅香。 万千浮云遮碧月,独傲天下百坚强。 男儿应有龙腾志,盖世一意转洪荒。 莫使此生无痕度,终归人间一捧黄。🍎🍎🍎 ❤️ 什么?你问我答案,少年你看,下一

    2024年04月15日
    浏览(37)
  • 南京邮电大学数据结构实验一(线性表的基本运算及多项式的算术运算)(代码篇)

    小伙伴们要多多体会,不要全部借鉴哦!

    2024年02月08日
    浏览(35)
  • PTA 习题3.6 一元多项式的乘法与加法运算

    设计函数分别求两个一元多项式的乘积与和。 输入格式: 输入分2行,每行分别先给出多项式非零项的个数,再以指数递降方式输入一个多项式非零项系数和指数(绝对值均为不超过1000的整数)。数字间以空格分隔。 输出格式: 输出分2行,分别以指数递降方式输出乘积多项式

    2024年02月07日
    浏览(27)
  • 第39关:基于链表的两个一元多项式的基本运算

    任务描述 本关任务:给定两个一元多项式A(x)与B(x),利用链表表示A(x)与B(x),实现A(x)与B(x)的加法、减法、乘法和求导运算。 编程要求 输入 输入多组数据,总计n*( a+b+2)+1行。其中,第一行整数n代表总计有n组数据,之后依次输入n组数据。每组数据包括a+b+2行,其中第一行是两

    2024年02月06日
    浏览(28)
  • 【链表应用】| 一元多项式的操作

    专栏推荐:写文章刚刚起步,各个专栏的知识点后续会补充完善,不断更新好文,希望大 家支持一下。 专栏 名字 Elasticsearch专栏 es spring专栏 spring开发 redis专栏 redis学习笔记 项目专栏 项目集锦 修bug专栏 bug修理厂 设有两个一元多项式: p(x)=p0+p1x+p2x2+···+pnxn q(x)=q0+q1x+q2x2+··

    2024年02月06日
    浏览(28)
  • 一元多项式相加问题(两种方法)

    一元多项式的相加问题,主要运用了线性结构的合并,在合并线性结构的基础上,增加判断,所以我们可以将这个问题理解为一个复杂的线性表合并问题  目录 问题描述 一、顺序表法 1.1 初始化并创建顺序表 1.2 一元多项式相加算法 1.3 完整代码 二、单链表法 1.1 初始化并创

    2024年02月06日
    浏览(33)
  • Python做曲线拟合(一元多项式拟合及任意函数拟合)

    目录 1. 一元多项式拟合 使用方法 np.polyfit(x, y, deg) 2. 任意函数拟合 使用 curve_fit() 方法 实例: (1)初始化 x 和 y 数据集 (2)建立自定义函数 (3)使用自定义的函数生成拟合函数绘图  polyfig 使用的是最小二乘法,用于拟合一元多项式函数。 参数说明: x 就是x坐标,

    2024年02月02日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包