【C++实验】多项式加减

题目:一元多项式运算

基本要求:

    (1) 输入并建立多项式;

    (2) 输出多项式;

    (3) 多项式加法

    (4) 多项式减法。

测试数据:


 代码展示:

#include<iostream>
using namespace std;
class LinkedNode
{
public:
	LinkedNode(double COEF, double INDEX, LinkedNode *ptr = NULL)
	{
		this->coef = COEF;
		this->index = INDEX;
		this->next = ptr;
	}
	double coef;
	double index;
	LinkedNode *next;
};

class LinkedList
{
public:
	LinkedList()
	{
		this->head = NULL;
		this->tail = NULL;
	}
	void create_polumerization(); //创建多项式  并且进行排序和重复次方的合并 
	void add_polumerization(LinkedList *p, char a); //多项式的运算 
	void print_result(LinkedList *p);  //打印输出多项式 
	void sort_polumerization();  //多项式的	排序	 
	void delete_samenode();//相同次方进行合并 
private:
	LinkedNode *head;
	LinkedNode *tail;
};
void LinkedList::create_polumerization()
{
	double index, coef;
	cout << "开始输入多项式(默认系数 为0时结束)" << endl;
	for (int i = 0;;i++)
	{
		printf("\n请输入第%d项的系数:", i + 1);
		cin >> coef;
		if (coef == 0) break;
		printf("\n请输入第%d项的指数:", i + 1);
		cin >> index;
		if (tail == NULL)
		{
			tail = new LinkedNode(coef, index);
			head = tail;
		}
		else
		{
			LinkedNode *temp = new LinkedNode(coef, index);
			tail->next = temp;
			tail = temp;
		}
	}
	//进行排序
	sort_polumerization();
	delete_samenode();
};
void LinkedList::sort_polumerization()
{
	LinkedNode *pre=NULL, *p=NULL, *t = NULL;
	if (head != NULL)
	{
		while (head->next != t)
		{
			pre = head;
			p = head->next;
			while (p != t)
			{
				if (pre->index > p->index)
				{
					swap(pre->coef, p->coef);
					swap(pre->index, p->index);
					pre = p;
					p = p->next;
				}
				else
				{
					pre = p;
					p = p->next;
				}
			}
			t = pre;
		}
	}
	
};
void LinkedList::delete_samenode()
{
	if (head == NULL) return;
	for (LinkedNode* temp = head;temp != NULL && temp->next != NULL;)
	{
		if (temp->index == temp->next->index)
		{
			LinkedNode *p = temp;
			temp = temp->next;
			while (p->index == temp->index)
			{
				p->coef += temp->coef;
				p->next = temp->next;
				delete temp;
				temp = p->next;
			}
		}
		else temp = temp->next;
	}
}
void LinkedList::print_result(LinkedList *p)
{
	double count = 0;
	for (LinkedNode *temp = p->head->next;temp != NULL;temp = temp->next)
	{
		if (temp == p->head->next)
		{
			if (temp->coef == 0) continue;
			else
			{
				count += temp->coef;
				if(temp->index!=0) cout << temp->coef << "x^" << temp->index;
				else cout << temp->coef;
			}
		}
		else
		{
			if (temp->coef == 0) continue;
			else
			{
				if (temp->coef > 0)
				{
					count += temp->coef;
					if(temp->index!=0) cout << "+" << temp->coef << "x^" << temp->index;
					else cout<<"+" << temp->coef;
				}
				else
				{
					count += temp->coef;
					if(temp->index!=0) cout << temp->coef << "x^" << temp->index;
					else cout << temp->coef;
				}
			}
		}
	}
	if (count == 0) cout << count;
}
void LinkedList::add_polumerization(LinkedList *p, char a)
{
	LinkedNode *h1 = this->head;
	LinkedNode *h2 = p->head;
	LinkedList *result = new LinkedList();
	LinkedNode *h = new LinkedNode(0, 0);
	result->head = h;
	result->tail = result->head;
	cout << endl;
	if (a == '+')
	{
		while (h1 != NULL && h2 != NULL) 
		{
			if (h1->index < h2->index)
			{
				LinkedNode *temp = new LinkedNode(h1->coef, h1->index);
				result->tail->next = temp;
				result->tail = temp;
				h1 = h1->next;
			}
			else if (h2->index < h1->index)
			{
				LinkedNode *temp = new LinkedNode(h2->coef, h2->index);
				result->tail->next = temp;
				result->tail = temp;
				h2 = h2->next;
			}
			else 
			{
				LinkedNode *temp = new LinkedNode(h1->coef + h2->coef, h1->index);
				result->tail->next = temp;
				result->tail = temp;
				h1 = h1->next;
				h2 = h2->next;
			}
		}
		while (h1 != NULL)
		{
			LinkedNode *temp = new LinkedNode(h1->coef, h1->index);
			result->tail->next = temp;
			result->tail = temp;
			h1 = h1->next;
		}
		while (h2 != NULL)
		{
			LinkedNode *temp = new LinkedNode(h2->coef, h2->index);
			result->tail->next = temp;
			result->tail = temp;
			h2 = h2->next;
		}
	}
	else
	{
		while (h1 != NULL && h2 != NULL)
		{
			if (h1->index < h2->index)
			{
				LinkedNode *temp = new LinkedNode(h1->coef, h1->index);
				result->tail->next = temp;
				result->tail = temp;
				h1 = h1->next;
			}
			else if (h2->index < h1->index)
			{
				LinkedNode *temp = new LinkedNode(-h2->coef, h2->index);
				result->tail->next = temp;
				result->tail = temp;
				h2 = h2->next;
			}
			else 
			{
				LinkedNode *temp = new LinkedNode(h1->coef - h2->coef, h1->index);
				result->tail->next = temp;
				result->tail = temp;
				h1 = h1->next;
				h2 = h2->next;
			}
		}
		while (h1 != NULL)
		{
			LinkedNode *temp = new LinkedNode(h1->coef, h1->index);
			result->tail->next = temp;
			result->tail = temp;
			h1 = h1->next;
		}
		while (h2 != NULL)
		{
			LinkedNode *temp = new LinkedNode(-h2->coef, h2->index);
			result->tail->next = temp;
			result->tail = temp;
			h2 = h2->next;
		}
	}

	print_result(result);
}
int main()
{
	char a;
	LinkedList l1;
	cout << "开始输入第一个多项式" << endl;
	l1.create_polumerization();
	cout << endl << "开始输入第二个多项式" << endl;
	LinkedList l2;
	l2.create_polumerization();
	cout << "请输入两个多项式之间的运算关系('+'或'-'):";
	cin >> a;
	l1.add_polumerization(&l2, a);
}

运行结果

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/733760.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

1.1 数据采集总览

正所谓巧妇难为无米之炊&#xff0c;数据采集是数据处理的第一步。 什么是数据采集 数据采集&#xff0c;也称为数据收集&#xff0c;是将原始数据从各种来源获取并存储起来的过程。这个过程是数据分析和数据仓库建设的第一步&#xff0c;涉及到从不同的数据源中提取数据&…

Redis-数据类型-Hash

文章目录 1、查看redis是否启动2、通过客户端连接redis3、切换到db3数据库4、插入新数据返回15、获取指定哈希&#xff08;hash&#xff09;对象的所有字段&#xff08;field&#xff09;名6、获取存储在指定哈希&#xff08;hash&#xff09;对象中的所有字段&#xff08;fiel…

51单片机STC89C52RC——6.3 定时器/计数器 实现计时功能(定时器+中断系统+LCD1602液晶显示器)

目录 目的/效果 一&#xff0c;STC单片机模块 二&#xff0c;定时器 中断系统LCD1602显示 三&#xff0c;创建Keil项目 四&#xff0c;代码 五&#xff0c;代码编译、下载到51单片机 ​ 目的/效果 用定时器实现系统中断&#xff0c;计时信息显示在LCD1602上。效果如下 …

最优化第六讲练习题

使用牛顿法 def f(vec):x1,x2vec[0],vec[1]return x1*x1/22*x2*x2def first_order(vec):x1,x2vec[0],vec[1]return np.array((x1,4*x2))x0np.array((2,1)) #初始点 secnp.array([[1,0],[0,4]]) #二阶导 try:invnp.linalg.inv(sec) except:print("矩阵不存在逆矩阵")…

如何让表格标题栏具有粘性?

让表格标题栏具有粘性 什么意思呢&#xff1f; 就是当表格的内容&#xff08;行数&#xff09;比较多的时候&#xff0c; 滚动屏幕&#xff0c;看下面的内容的时候&#xff0c; 表格标题栏可以一直显示在屏幕最上方&#xff0c; 以前呢&#xff0c; 我会通过JSCSS 的 pos…

ffmpeg音视频开发从入门到精通——ffmpeg实现音频抽取

文章目录 FFmpeg 实现音频流抽取1. 包含FFmpeg头文件与命名空间声明2. 主函数与参数处理3. 打开输入文件4. 获取文件信息5. 查找音频流6. 分配输出文件上下文7. 猜测输出文件格式8. 创建新的音频流9. 打开输出文件10. 写入文件头信息11. 读取并写入音频数据12. 写入文件尾部信息…

STM32读取芯片内部温度

基于stm32f103cbt6这款芯片&#xff0c;原理部分请参考其他文章&#xff0c;此文章为快速上手得到结果&#xff0c;以结果为导向。 1.基础配置 打开stm32cubemx只需要勾选中 ADC1 Temperature Sensor Channel 2.代码分析 /** 函数名&#xff1a;float GetAdcAnlogValue(voi…

05 - matlab m_map地学绘图工具基础函数 - 设置比例尺指北针

05 - matlab m_map地学绘图工具基础函数 - 设置比例尺指北针 0. 引言1. 关于m_scale2. 关于m_ruler3. 关于m_northarrow4. 结语 0. 引言 本篇介绍下m_map中添加指北针(m_northarrow)、比例尺(m_ruler)和进行比例缩放(m_scale)的函数及其用法 。 1. 关于m_scale m_scale用于图件…

python库离线安装方法(pyqt5离线安装方法)

在某些情况下&#xff0c;我们的计算机是无法联网的。 网上大部分方法&#xff1a; 这些方法都有个问题&#xff0c;就是库是需要依赖其它库的&#xff0c;你不知道它需要依赖什么库&#xff0c;就是提供了依赖库的列表也麻烦&#xff0c;依赖库也是有对应版本要求的&#xf…

C++程序设计基础实践:学生信息管理系统

目录 1 系统介绍 2 系统设计 3 设计结果 4 源代码 近来有空闲&#xff0c;把前几个学期做的实验上传上来。如有错误的地方欢迎大佬批评指正&#xff0c;有更好的方法也期待您的分享~ 实验要求 本课程要完成一个学生信息管理系统的设计与实现&#xff0c;可实现对于学生信息…

kafka(五)spring-kafka(2)详解与demo

一、简单的收发消息demo 父工程pom&#xff1a; <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation&qu…

Android面试题:App性能优化之Java和Kotlin常见的数据结构

本文首发于公众号“AntDream”&#xff0c;欢迎微信搜索“AntDream”或扫描文章底部二维码关注&#xff0c;和我一起每天进步一点点 Java常见数据结构特点 ArrayList ArrayList底层是基于数组实现add、删除元素需要进行元素位移耗性能&#xff0c;但查找和修改块适合不需要频…

全面国产化信创适配改造方案说明

一、概叙 系统的全面国产化适配改造需要从多个方面进行考虑&#xff0c;改造前需要进行充分的论证&#xff0c;在满足具体业务场景的前提下&#xff0c;以确保系统的稳定性和安全性&#xff0c;同时还要考虑技术的发展&#xff0c;不断优化和更新。因此全面国产化适配改造也面临…

沙奇里再造世界波,容声注定与经典结缘

足球的世界&#xff0c;就像人生一样&#xff0c;包罗万象&#xff0c;千人千面。有人天生就是王者&#xff0c;有人怎么努力也碌碌无为&#xff0c;而有的人&#xff0c;平时看似没有那么闪耀&#xff0c;却注定为大场面而生。 比如瑞士国脚沙奇里。在对阵苏格兰的欧洲杯小组…

【CT】LeetCode手撕—415. 字符串相加

目录 题目1- 思路2- 实现⭐415. 字符串相加——题解思路 3- ACM 实现 题目 原题连接&#xff1a;415. 字符串相加 1- 思路 模式识别&#xff1a;字符串相加 逆向遍历过程模拟 数据结构 ① String res &#xff1a;记录res 、② carry 记录进位值① 定义两个整数遍历 nums1 …

【第一性原理】邓巴数字

这里写自定义目录标题 什么是邓巴数字邓巴数背后的科学历史上各个组织的人数与邓巴数字的关系在人类进化中的意义现代社会中邓巴数字的体现邓巴数字的意义其他与沟通相关的数据注意事项结论参考 罗宾邓巴教授生于1947年&#xff0c;进化心理学家&#xff0c;牛津大学教授&#…

【SkiaSharp绘图09】SKBitmap属性详解

文章目录 SKBitmap与Bitmap性能对比对比结果 构造函数SKBitmap()SKBitmap(SKImageInfo)SKBitmap(Int32, Int32, SKColorType, SKAlphaType, SKColorSpace) SKBitmap属性AlphaTypeByteCountBytesBytesPerPixelColorSpaceColorTypeDrawsNothingInfoIsEmptyIsImmutableIsNullPixel…

投资者回归理性?美股去年备受追捧的AI概念股,今年超过一半在下跌

喊两句AI就能圈钱的日子一去不复返了&#xff0c;未来企业要用实打实的业绩说话。 正文 去年备受追捧的AI概念股中&#xff0c;今年绝大多数已经开始下跌。面对越来越谨慎的投资者&#xff0c; 上市公司或许很难再打着AI的旗号圈钱。 今年&#xff0c;标普500指数中有60%的股…

动态规划:基本概念

Dynamic Programming 动态规划&#xff08;Dynamic Programming, DP&#xff09; 是一种算法设计技巧&#xff0c;通常用来解决具有重叠子问题和最优子结构性质的问题。它通过将问题分解为更小的子问题&#xff0c;逐步解决这些子问题并将结果存储起来&#xff0c;以避免重复计…

U-Net for Image Segmentation

1.Unet for Image Segmentation 笔记来源&#xff1a;使用Pytorch搭建U-Net网络并基于DRIVE数据集训练(语义分割) 1.1 DoubleConv (Conv2dBatchNorm2dReLU) import torch import torch.nn as nn import torch.nn.functional as F# nn.Sequential 按照类定义的顺序去执行模型&…