一元多项式的加减法(C语言)

要求:以文件形式输入需要进行运算的两个一元多项式,并将结果以文件的形式进行输出。

#include<stdio.h>
#include<stdlib.h>
#include<math.h>//链表的构成
typedef struct Node{float ratio;int index;struct Node* next;
}*PNode,*LinkList;//函数声明
void FILE_W();
LinkList Create_Link();
void Sort_Link(LinkList head);
void SUB_List(LinkList llist1,LinkList llist2);
void Add_List(LinkList llist1,LinkList llist2);
void print_2(LinkList head);

1.文件的写入

void FILE_W()
{	float ratio;int index;char M[10];printf("请输入文件名:");scanf("%s",&M); FILE* fp;										//文件的写入fp=fopen(M,"w");printf("请输入一元多项式:");scanf("%f%d",&ratio,&index);while(ratio!=0||index!=0){fprintf(fp,"%.2f %d ",ratio,index);scanf("%f%d",&ratio,&index);}fprintf(fp,"%.2f %d ",ratio,index);fclose(fp);
}

2.链表结点的创立

LinkList Create_Link()
{LinkList head;PNode p,q;float ratio;int index;head=(struct Node*)malloc(sizeof(struct Node));head->next=NULL;q=head;	FILE*fp;char M[10];printf("请输入要相 加/减 的一元多项式的文件名:");scanf("%s",&M);fp=fopen(M,"r");fscanf(fp,"%f%d",&ratio,&index);while(ratio!=0||index!=0){p = (struct Node*)malloc(sizeof(struct Node));p->next=NULL;q->next=p;q=p;p->index=index;p->ratio=ratio;fscanf(fp,"%f%d",&ratio,&index);	}fclose(fp);return head;
}

3.将一元多项式进行降幂或升幂的排序

void Sort_Link(LinkList head)			//降幂或升幂排序 
{PNode p,q;float temp1;int temp2;for(p=head->next;p!=NULL;p=p->next){for(q=p->next;q!=NULL;q=q->next){if(q->index>p->index){	    //p->index<q->index为升幂排序 temp1=q->ratio;q->ratio=p->ratio;p->ratio=temp1;temp2=q->index;q->index=p->index;p->index=temp2;}}}
}

4.加法运算

void Add_List(LinkList llist1,LinkList llist2)
{PNode p,q,pre,temp;p=llist1->next;q=llist2->next;pre=llist1;						//保留移动的前一个节点 while(p&&q){if(q->index>p->index){		//进行节点的插入	temp=q->next;q->next=p;pre->next=q;pre=q;q=temp;}else if(q->index<p->index){			//节点的移动 pre=p;p=p->next;}else {if(q->ratio+p->ratio==0){pre->next=p->next;			//删除节点 free(p);}else{p->ratio=p->ratio+q->ratio;		pre=p;}p=pre->next;temp=q;q=q->next;free(temp);}}if(q){					//第一个链表结束但第二个链表还未结束 pre->next=q;}free(llist2);	
}

5.减法运算

void SUB_List(LinkList llist1,LinkList llist2)
{PNode p,q,pre,temp;p=llist1->next;q=llist2->next;pre=llist1;						//保留移动的前一个节点 while(p&&q){if(q->index>p->index){		//进行节点的插入	if(q->ratio<0){q->ratio=fabs(q->ratio);}else{q->ratio=-q->ratio;} temp=q->next;			//第二个多项式的值第一个的下一个 q->next=p;		    //将第一个多项式的第一个值的地址赋给q->next pre->next=q;			//插入的操作 pre=q;					//覆盖操作 q=temp;}else if(q->index<p->index){			//节点的移动 pre=p;p=p->next;}else {if(q->ratio-p->ratio==0){pre->next=p->next;			//删除节点 free(p);}else{p->ratio=p->ratio-q->ratio;	pre=p;}p=pre->next;temp=q;q=q->next;free(temp);}} if(q){do{				      	//第一个链表结束但第二个链表还未结束 if(q->ratio<0){q->ratio=fabs(q->ratio);pre->next=q;}else{q->ratio=-q->ratio;pre->next=q;}q=q->next;pre=pre->next;			 //注意要记得移动pre->next }while(q);} if(p){	       				//第二个链表结束但第一个链表还未结束 do{pre=p;p=p->next;	}while(p); } free(llist2);	
}

6.输出函数

void print_2(LinkList head)
{PNode p;FILE* fp;fp=fopen("4.txt","w");printf("\nc=");fprintf(fp,"c=");for(p=head->next;p!=NULL;p=p->next){if(p->next==NULL){if(p->ratio<0){if(p->index==0){printf("%.2f",p->ratio);fprintf(fp,"%.2fx^%d ",p->ratio,p->index);}else{if(p->index==1){printf("%.2fx",p->ratio);fprintf(fp,"%.2fx^%d ",p->ratio,p->index);}else{printf("%.2fx^%d",p->ratio,p->index);fprintf(fp,"%.2fx^%d ",p->ratio,p->index);}}}else{if(p->index==0){printf("+%.2f",p->ratio);fprintf(fp,"+%.2fx^%d ",p->ratio,p->index);}else{						if(p->index==1){printf("+%.2fx",p->ratio);fprintf(fp,"+%.2fx^%d ",p->ratio,p->index);}else{printf("+%.2fx^%d",p->ratio,p->index);							fprintf(fp,"+%.2fx^%d ",p->ratio,p->index);}}}}else{if(p->ratio<0){if(p->index==0){printf("%.2f",p->ratio);fprintf(fp,"%.2fx^%d ",p->ratio,p->index);}else{if(p->index==1){printf("%.2fx",p->ratio);fprintf(fp,"%.2fx^%d ",p->ratio,p->index);}else{printf("%.2fx^%d",p->ratio,p->index);fprintf(fp,"%.2fx^%d ",p->ratio,p->index);}}}else{if(p==head->next){if(p->index==0){printf("%.2f",p->ratio);fprintf(fp,"%.2fx^%d ",p->ratio,p->index);}else{if(p->index==1){printf("%.2fx",p->ratio);fprintf(fp,"%.2fx^%d ",p->ratio,p->index);}else{printf("%.2fx^%d",p->ratio,p->index);fprintf(fp,"%.2fx^%d ",p->ratio,p->index);}}}else{if(p->index==0){printf("+%.2f",p->ratio);fprintf(fp,"+%.2fx^%d ",p->ratio,p->index);}else{if(p->index==1){printf("+%.2fx",p->ratio);fprintf(fp,"+%.2fx^%d ",p->ratio,p->index);}else{printf("+%.2fx^%d",p->ratio,p->index);fprintf(fp,"+%.2fx^%d ",p->ratio,p->index);}}}}}} 
}

7.主函数

int main()
{int m;printf("请选择你要进行的操作:1.输入一元多项式;2.进行加法运算;3.进行减法运算\n");scanf("%d",&m);switch(m){case 1: FILE_W();break;				//写入数据 case 2:{LinkList llist1=Create_Link();	//将第一个文件的数据存入第一个链表 LinkList llist2=Create_Link();	//将第二个文件的数据存入第二个链表 Sort_Link(llist1);				//将第一个链表进行降幂/升幂排序 Sort_Link(llist2);				//将第二个链表进行降幂/升幂排序 Add_List(llist1,llist2);		//将两个节点进行相加 print_2(llist1);					//输入结果 };		break;case 3:	{LinkList llist1=Create_Link();LinkList llist2=Create_Link();Sort_Link(llist1);			Sort_Link(llist2);			SUB_List(llist1,llist2); print_2(llist1);	};		break;default:printf("输入错误!");break; }return 0;
}

运行结果如下:

 

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

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

相关文章

一元多项式计算器(C语言实现)

一、实验要求 二、代码实现 以下C语言代码实现了多项式的加减法、乘法、求导和顶点求值的功能。 &#xff08;水平有限&#xff0c;代码存在不规范之处&#xff09; 编程环境&#xff1a;Window11 Visual Studio #define _CRT_SECURE_NO_WARNINGS 1 # include <stdio.h…

c语言一元多项式课程设计,一元多项式的计算数据结构课程设计.doc

一元多项式的计算数据结构课程设计.doc 一元多项式的计算加&#xff0c;减摘要题目一元多项式计算任务能够按照指数降序排列建立并输出多项式&#xff1b;能够完成两个多项式的相加、相减&#xff0c;并将结果输入&#xff1b;目录1引言2需求分析3概要设计4详细设计5测试结果6…

基于C++的一元多项式相加

资源下载地址&#xff1a;https://download.csdn.net/download/sheziqiong/85996014 资源下载地址&#xff1a;https://download.csdn.net/download/sheziqiong/85996014 1.实验目的 了解链式存储结构的基本知识&#xff1b;掌握算法思想和数据结构的描述&#xff1b;结合一元…

c语言一元多项式相加

用单链表实现一元多项式相加 #include<stdio.h> #include<stdlib.h> typedef struct Node{float coef;//系数 int exp;//项数 struct Node *next; }LNode,*Linklist;void newPolynomial(Linklist &head){LNode *p;int i,tempExp;float tempCoef;scanf("…

一元多项式的相乘操作(链表)

一元多项式的乘法运算如何实现&#xff0c;要求多项式采用链表存储结构。 目录 基本思路&#xff1a; 添加条件的分类&#xff1a; multiple()源代码&#xff1a; detach()源代码&#xff1a; 处理结果&#xff1a; 基本思路&#xff1a; 本篇博客不知觉间已经拖了好久好久…

数据结构一元多项式的相加-单链表实现

实验内容&#xff1a;把任意给定的两个一元多项式P(x) ,Q(x) 输入计算机&#xff0c;计算它们的和并输出计算结果。 一元多项式可以用单链表表示&#xff0c;结点结构图示如下&#xff1a; coef expnext 首先分析一下这个过程是如何实现的 该算法需要求A与B两个一元多项式的和&…

一元多项式加减乘实现c/c++

一、实验题目&#xff1a; 一元多项式简单的计算器 1.主要功能&#xff1a; (1)输入并建立多项式&#xff1b; (2)输出多项式&#xff1b; (3)两个多项式相加&#xff0c;建立并输出和多项式&#xff1b; (4)两个多项式相减&#xff0c;建立并输出差多项式。 (5)算法的时…

一元多项式的加法

一元多项式的加法 问题描述&#xff1a;一元多项式的加法 &#xff08;1&#xff09; 编程实现一元多项式的加法。 &#xff08;2&#xff09; 编写一个测试主函数。 分析&#xff1a; 对于任意一元多项式 可以抽象为一个由“系数—指数”对构成的线性表&#xff0c;且线性表中…

一元多项式求导

问题描述&#xff1a; 设计函数求一元多项式的导数。&#xff08;注&#xff1a;x​n​​&#xff08;n为整数&#xff09;的一阶导数为nx​n−1​​。&#xff09; #include<cstdio> int main() {int a[100000];int b[100000];int n,m;char c;//判断结束的条件scanf(&q…

一元多项式课设

代码详见 目录 一、实习任务........................................................................................... - 1 - 1.问题描述&#xff1a;.................................................................................... - 1 - 2.小组分工.........…

数据结构:一元多项式及其基本运算

1、实现方式&#xff1a;可采用线性表的顺序存储结构&#xff0c;但是当多项式的每个项的指数差别很大时&#xff0c;会浪费很多存储空间。所以采用链式存储方式表示&#xff0c;每一项可以表示成一个结点&#xff0c;结点的结构由存放系数的coef域&#xff0c;存放指数的expn域…

一元多项式计算

目录 题目的内容及要求--------------------------------------------2需求分析-------------------------------------------------------2概要设计-------------------------------------------------------2 1、存储结构------------------------------------------------…

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

文章目录 ⭐️写在前面的话⭐️一元多项式的表示及相加初始化0_1、初始化链表0_2_1、头插法插入多项式的项(没有相同项)0_2_2、将要插入的相同&#xff0c;链表中有相同项&#xff0c;对应系数相加0_3、从链表中查找是否有相同的指数项0_4、对已经创建好的一元多项式按指数大小…

数据结构(严蔚敏)【一元多项式的运算】【C语言】

1、一元多项式的运算&#xff1a;实现两个多项式加、减乘运算 设计内容&#xff1a; 用顺序存储结构实现一元多项式的加法、减法和乘法。具体要求为&#xff1a;用五个函数分别实现一元多项式的创建、输出、加法、减法和乘法&#xff1b; 设计思路&#xff1a; 将顺序表数组…

算法竞赛入门【码蹄集进阶塔335题】(MT2151-2175)

算法竞赛入门【码蹄集进阶塔335题】(MT2151-2175&#xff09; 文章目录 算法竞赛入门【码蹄集进阶塔335题】(MT2151-2175&#xff09;前言为什么突然想学算法了&#xff1f;为什么选择码蹄集作为刷题软件&#xff1f; 目录1. MT2151 权值计算2. MT2152 黑客小码哥3. MT2153 来给…

Linux基础之LVM卷管理

LVM LVM是 Logical Volume Manager&#xff08;逻辑卷管理&#xff09;的简写&#xff0c;它是Linux环境下对磁盘分区进行管理的一种机制。Linux用户安装Linux操作系统时遇到的一个常见的难以决定的问题就是如何正确地评估各分区大小&#xff0c;以分配合适的硬盘空间。普通的…

linux lvcreate,LFCS:如何使用vgcreate,lvcreate和lvextend命令管理和创建LVM - 第11部分...

因为在LFCS考试要求有效的二月变化 2&#xff0c;2016年 &#xff0c;我们增加了必要的专题到LFCS系列发表在这里。 为了准备这场考试&#xff0c;你是高度鼓励使用联邦经济竞争法系列为好。 LFCS&#xff1a;管理LVM和创建LVM分区 - 第11部分 安装Linux系统时最重要的决定之一…

lvm 制作

壹&#xff1a; 创建LVM 逻辑卷 1&#xff0c;将物理盘格式为pv卷&#xff08;物理卷&#xff09;&#xff0c;使用pvcreate 命令 pvcreate /dev/sdc 或则是 pvcreate /dev/sdc /dev/sdb pvdisplay 或pvs 命令查看 PV 物理卷得创建情况 2,创建卷组 VG 通过vgcreate 命令,将pv加…

lvcreate 常用命令举例

http://linux.cn/article-5117-1.html4 个 lvcreate 常用命令举例 2015-3-25 15:09| 查看: 2752| 评论: 3| 收藏: 3| 分享: 10 原文&#xff1a;http://www.ehowstuff.com/4-lvcreate-command-examples-on-linux/作者&#xff1a; skytech译文&#xff1a;LCTT https://linux.…

49.逻辑卷管理4,逻辑卷管理详解,lvscan,lvcreate,lvdisplay,lvextend,lvreduce,lvremove,lvresize,lvchange

逻辑卷相关操作 可以把逻辑卷想象成分区&#xff0c;那么这个逻辑卷当然也需要被格式化和挂载。另外&#xff0c;逻辑卷也是可以动态调整大小的&#xff0c;而且数据不会丟失&#xff0c;也不用卸载逻辑卷。 常用的命令有 lvscan Lvcreate Lvdisplay lvextend lvreduce Lvremov…