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

news2024/11/28 10:39:45

题目:一元多项式运算

基本要求:

    (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);
}

运行结果

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MarkDown基础

一、MarkDown标题 1.使用和-表示一级标题 2.使用#、##、###、####、######、######表示一级至六级标题 一级标题 二级标题 一级标题 二级标题 三级标题 四级标题 五级标题 六级标题 二、MarkDown标题 1.Markdown 段落没有特殊的格式&#xff0c;直接编写文字就好&#xff0c;…

全网最全!25届最近5年上海理工大学自动化考研院校分析

上海理工大学 目录 一、学校学院专业简介 二、考试科目指定教材 三、近5年考研分数情况 四、近5年招生录取情况 五、最新一年分数段图表 六、历年真题PDF 七、初试大纲复试大纲 八、学费&奖学金&就业方向 一、学校学院专业简介 二、考试科目指定教材 1、考试…

【Linux系统】多线程

本篇博客继上一篇《线程与线程控制》&#xff0c;又整理了多线程相关的线程安全问题、互斥与锁、同步与条件变量、生产消费模型、线程池等内容&#xff0c;旨在让读者更加深刻地理解线程和初步掌握多线程编程。&#xff08;欲知线程的相关概念、线程控制的相关接口等&#xff0…

Ansible 自动化运维实践

随着 IT 基础设施的复杂性不断增加&#xff0c;手动运维已无法满足现代企业对高效、可靠的 IT 运维需求。Ansible 作为一款开源的自动化运维工具&#xff0c;通过简洁易用的 YAML 语法和无代理&#xff08;agentless&#xff09;架构&#xff0c;极大简化了系统配置管理、应用部…

Depth Anything V2:抖音开源高性能任何单目图像深度估计V2版本,并开放具有精确注释和多样化场景的多功能评估基准

&#x1f4dc;文献卡 题目&#xff1a; Depth Anything V2作者: Lihe Yang; Bingyi Kang; Zilong Huang; Zhen Zhao; Xiaogang Xu; Jiashi Feng; Hengshuang ZhaoDOI: 10.48550/arXiv.2406.09414摘要: This work presents Depth Anything V2. Without pursuing fancy technique…

前端 JS 经典:通用性函数封装思路

前言&#xff1a;设计通用性函数&#xff0c;我们需要考虑两个方面&#xff0c;一个是函数传参的可能性&#xff0c;如果可能性很多&#xff0c;我们可以将处理参数的方法暴露出去&#xff0c;让使用者去设计。为了调用的方便性&#xff0c;我们还可以做参数的归一化。 举个例…

计算机组成原理笔记-第3章 系统总线

第三章 系统总线 笔记PDF版本已上传至Github个人仓库&#xff1a;CourseNotes&#xff0c;欢迎fork和star&#xff0c;拥抱开源&#xff0c;一起完善。 该笔记是最初是没打算发网上的&#xff0c;所以很多地方都为了自我阅读方便&#xff0c;我理解了的地方就少有解释&#xf…

RockChip Android12 System之MultipleUsers

一:概述 System中的MultipleUsers不同于其他Preference采用system_dashboard_fragment.xml文件进行加载,而是采用自身独立的xml文件user_settings.xml加载。 二:Multiple Users 1、Activity packages/apps/Settings/AndroidManifest.xml <activityandroid:name="S…

Android集成高德天气API 天气预报

1.新建工程项目WeatherForecast。 2.在AndroidManifest文件中添加网络访问相关权限。 <uses-permission android:name"android.permission.INTERNET"/> 3.设计页面布局activity_main.xml&#xff0c;界面效果如图所示。 4.注册高德开放平台&#xff0c;查阅…

代码签名证书有什么作用?有哪些申请步骤?

代码签名证书是一种数字证书&#xff0c;它为软件开发者提供一种验证软件代码真实性和完整性的方法。通过使用代码签名证书&#xff0c;开发者可以确保他们的软件在发布后没有被篡改&#xff0c;并且用户可以信任软件的来源。 什么是代码签名证书&#xff1f; 代码签名证书是提…

小程序 UI 设计缔造独特魅力

小程序 UI 设计缔造独特魅力

【面试干货】抽象类的意义与应用

【面试干货】抽象类的意义与应用 1、为其他子类提供一个公共的类型2、封装子类中重复定义的内容3、定义抽象方法&#xff0c;子类虽然有不同的实现&#xff0c;但是定义时一致的4、示例代码 &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不迷路&#x1f496; 在…

jrebel安装使用教程(2022.4.1版本)

本方法适用于jrebel2022.4.1版本&#xff0c;之后的版本不再适用。 1.下载插件 下载地址 2.安装插件 可以通过idea内部安装 也可以将插件解压进idea的安装目录下的plugins。 3.激活 Team URL中填入 https://jrebel.qekang.com/{guid}这里提供两个guid生成地址&#xf…

【AI工作流-AI-Agent】FastGPT新建应用并用openai接口调用

FastGPT 简介 FastGPT是一个AI工作流搭建平台&#xff0c;它是一个开源框架&#xff0c;支持聊天&#xff0c;RAG&#xff08;知识库&#xff09;&#xff0c;工作流编排。 缺点是不支持AI搜索&#xff0c;模型支持需要依赖于第三方部署框架例如oneapi&#xff0c;ollama等。…

aardio - 【库】lock 跨进程读写锁

import win.ui; /*DSG{{*/ var winform win.form(text"aardio form";right272;bottom203;topmost1) winform.add( button{cls"button";text"无锁演示";left27;top132;right120;bottom184;z2}; button2{cls"button";text"有锁演示…

CausalMMM:基于因果结构学习的营销组合建模

1. 摘要 在线广告中&#xff0c;营销组合建模&#xff08;Marketing Mix Modeling&#xff0c;MMM&#xff09; 被用于预测广告商家的总商品交易量&#xff08;GMV&#xff09;&#xff0c;并帮助决策者调整各种广告渠道的预算分配。传统的基于回归技术的MMM方法在复杂营销场景…

修复 Android 手机卡在启动屏幕上的 7 种方法

Android 手机卡在启动屏幕上的情况并不常见。通常&#xff0c;问题出现在应用新更新或安装未知来源的应用程序后。幸运的是&#xff0c;您可以让您的 Android 手机跳过启动屏幕&#xff0c;而无需前往最近的服务中心。 当您的 Android 手机在启动屏幕上陷入无限循环时&#xf…

MSPM0G3507——PWM

在sysconfig中&#xff0c;左侧可以选择MCU的外设&#xff0c;我们找到并点击TIMER-PWM选项卡&#xff0c;在TIMER-PWM中点击ADD&#xff0c;就可以添加定时器下的PWM外设。 这里设置通道0为100Hz的频率&#xff0c;0%占空比的PWM&#xff0c;周期计数值为1000&#xff0c;比较…

有哪些骨传导耳机是比较推荐入手的?精选五款热门骨传导耳机推荐!

耳机基本是每人人手一台&#xff0c;不管是在地铁上还是在公交上&#xff0c;都可以看到很多人戴着耳机度过空余的时光&#xff0c;甚至现在人们在耳机的选择方面更加偏向于骨传导耳机&#xff0c;开放耳道的奇特设计在户外佩戴的时候可以更好的感知到周围的环境音&#xff0c;…

面试突击:深入理解 Java 中的异常

本文已收录于&#xff1a;https://github.com/danmuking/all-in-one&#xff08;持续更新&#xff09; 前言 哈喽&#xff0c;大家好&#xff0c;我是 DanMu。今天想和大家聊聊 Java 中的异常。异常处理是一种重要的概念&#xff0c;因为程序总是会出现各种意料之外的问题&…