一元多项式计算


目录

  • 题目的内容及要求--------------------------------------------2
  • 需求分析-------------------------------------------------------2
  • 概要设计-------------------------------------------------------2

1、存储结构-----------------------------------------------------------2

2、主程序结构图-----------------------------------------------------3

3、程序函数构成详细设计--------------------------------------4

1、读取-----------------------------------------------------------------4

2、排列-----------------------------------------------------------------5

3、输出-----------------------------------------------------------------6

4、加法-----------------------------------------------------------------6

5、减法------------------------------------------------------------------7

  • 源代码-----------------------------------------------------------8
  • 运行结果及分析-----------------------------------------------17

七、收获及体会,总结--------------------------------------------20

一、题目的内容及要求

【问题描述】

1.能够按照指数降序排列建立并输出多项式;

2.能够完成两个多项式的相加、相减,并将结果输入;

【任务要求】

1.存储结构;

2.多项式相加的基本过程的算法(可以使用程序流程图)

3.可以提出算法的改进方法;

【测试数据】

自行设定,注意边界等特殊情况。

、需求分析

而需要做的就是能够按照指数降序排列,建立并输出多项式;能够完成两个多项式的相加、相减,并将结果输出        

三、概要设计

1、存储结构

在数学上,一元多项式P(x)的表示为:

                            P(x)=a0+a1x+a2x2+…+anxn

其中,n为大于或等于0的整数,表示x的幂:a0,a1,…an为系数,an≠0,a0,a1,…,an-1可以为0,也可以不为0根据一元多项式相加的运算规则:

对于两个一元多项式中所有指数相同的项,对应指数相加(减),若其和(差)不为零,则构成“和(差)多项式”中的一项对于两个一元多项式中所有指数不相同的项,则分别写到“和(差)多项式”中去。此程序的数据结构是选择用不带头结点的单链表存储多项式。虽然一元多项式可以采用顺序和链式两种存储结构,因为多项式指数最高项以及项数是不确定的,使用顺序表就会浪费巨大的存储空间,因此采用线性链表的存储结构便于实现一元多项式的运算。单链表的结构体可以用来存储多项式系数,指数和指向下一个节点的指针。

                   系数域                                    指数域                               指针域

coef

exp

next

typedef struct pnode

{

   float coef;

   int exp;

   struct pnode *next;

}pnode;

2、主程序功能结构图

3、程序函数构成

pnode *creat()读取并创建一个多项式链表

void sort(pnode *head)对多项式进行排列

pnode * add(pnode *heada,pnode *headb)多项式和的计算

pnode * sub(pnode *heada,pnode *headb)多项式差的计算

void outlink(pnode *head)存储一个多项式链表

void display(pnode *head)输出一个多项式链表

void add_main()加法函数

void sub_main()减法函数

void showmenu菜单函数

void main主函数主要负责输出界面的指引语句,并合理地调用各个函数,还要有适当的循环操作以及停止循环的语句,以致可以方便地达到合并两个一元多项式的功能。

四、详细设计

1、读取

从文件中读取多项式的系数与指数并存入链表。当创建多项式时,利用for循环从文件读出数据后,插入尾部的方式将多项式的数据连接起来,直到遍历完所有数据时停止。

pnode *creat1()

{

   FILE *fp;

   int item,i;

   char filename[20];

   pnode *tail, *Temp;

   tail=&head;

   Temp=&head;

   printf("请输入文件名");

   gets(filename);

   fp=fopen(filename,"r");

   fscanf(fp,"%d",&item);

   for(i=0;i<item;i++)

   {   

pnode *p=(pnode *)malloc(sizeof(pnode));

fscanf(fp,"%f%d",&(p->coef),&(p->exp));

tail->next=p;

p->next=NULL;

tail=p;

    }

    fclose(fp);

    return Temp->next;

}                 

读取函数的流程图:

 

2、排列

根据要求对指数进行降序排列,先定义三个临时指针和一个用来交换数据的变量,利用简单选择排序的思想,从n个数据通过指针中找到最大值,通过变量temp来交换两个结点中的数据,把最大的放在链表最首端,再从剩下的n-1个数据中找最大值,然后放在n-1个数据的链表最首位

void sort(pnode *head)

{

  pnode *p,*q,*t;

  float temp;

  p=head;

  while(p!=NULL)

  {

    q=p;

    t=q->next;

    while(t!=NULL)

    {

       if(t->exp>q->exp)

       q=t;

       t=t->next;

     }

       temp=p->coef;p->coef=q->coef;q->coef=temp;

       temp=p->exp;p->exp=q->exp;q->exp=temp;

       p=p->next;

   }

}

这个算法缺点也很明显,虽然“简单”,但效率不高,原因主要在于大量的冗余比较。因为简单选择排序并不能记住每次比较的结果,如果已经知道a<b并且b<c,再比较c和c是没意义的。另外,一旦确定两个元素的大小,那么再进行重复比较也是没意义的。

3、输出

为了直观地了解链表的内容,我们设计出依次输出链表结点的函数。由于该题目对链表的输出格式又有了一定的要求,因此该函数设计也有着不一样的地方。依题意得;首先输出系数,系数后面紧跟着一个符号”X”;再输出指数,指数的前面带有符号”^”;而且相邻的结点都要用”+”或”-”链接起来,因此我们还要对系数的正负进行判断(由于头地址比较特殊,所以头地址除外)。系数为正,要输出符号”+”;系数为负时,编译时会自动加入符号”-”,所以不必再输出符号”-”

1) 建立一个新的指针变量,并把头指针赋给它;

2) 如果为空,则打印出”全空”的语句;

3) 由于该程序没有删除结点的函数,所以碰到系数为”0”时,我们直接跳到步骤7;

4) 否则,先以”系数x ^指数”的形式输出头结点的成员;

5) 若还要继续输出结点,就判断系数的正负;

若系数为正,以”+ 系数x ^指数” 的形式输出;
若系数为负,以” 系数x ^指数” 的形式输出;

  1. 把新指针指向下一个结点;
    7) 若还要继续输出结点,转到步骤3继续执行;
    8) 否则,结束程序。

4、加法

以单链表pa和pb分别表示两个元多项式A和B, A+B的求和运算,就等同于单链表的插入问题,为了方便演示程序,我们设-一个单链表pc来存放pa+pb的和。
设qa,qb,qc分别指向单链表pa,pb,pc的当前项,比较qaqb结点的指数项由此可得到以下:
a:若qa->exp<qb >exp,则结点qa所指向的结点应是“和多项式”中的一项,将qa复制到qc中,令指针qa后移。
b:若qa->exp=qb->exp,则将两个结点中的系数相加,当和不为0时,qa的系数域加qb的系数域作为qc的系数域:若和为0,则“和多项式”中无此项,qa和qb后移。
C:若qa->exp>qb->exp,则结点qb所指向的结点应是“和多项式”中的一项,将qb复制到qc中,令指针qb后移。

5、减法

将减数pb多项式的系数取反,然后使用相加的方法处理

五、源代码

详细原文和源代码请点击链接下载

https://download.csdn.net/download/weixin_57836618/77831214

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

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

相关文章

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

文章目录 ⭐️写在前面的话⭐️一元多项式的表示及相加初始化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…

oppo手机删除计算机怎样恢复,【数据恢复篇】oppo手机删掉的照片怎么恢复

原标题&#xff1a;【数据恢复篇】oppo手机删掉的照片怎么恢复 手机删掉的照片可以恢复吗&#xff1f;oppo手机删掉的照片怎么恢复&#xff1f;很多人会奇怪oppo手机删掉的照片还能恢复吗&#xff1f;现在科技技术的提高&#xff0c;照片能够被恢复也是很简单的。像我们所知道的…

苹果手机照片误删恢复的方法

苹果手机照片误删恢复的方法&#xff1f;苹果手机相册里都有一个【最近删除】相册&#xff0c;为了恢复我们手机里误删的照片&#xff0c;我们首先可以打开相册&#xff0c;然后找里面的最近删除的相簿&#xff0c;看看里面有没有自己误删的照片&#xff0c;如果有的话&#xf…

android sd卡数据恢复软件下载,手机SD卡内存卡数据恢复软件

手机SD卡内存卡数据恢复软件免费版是一款专门解决内存卡等存储介质数据丢失问题的恢复软件&#xff0c;支持各个型号的SD卡、内存卡及U盘的删除恢复、格式化恢复等。 手机SD卡内存卡数据恢复软件是一款简单易用功能强大的数据恢复软件。该软件有针对性的对各类内存卡进行数据恢…

android 恢复照片误删,安卓手机数据恢复:红米手机照片误删怎么恢复

原标题&#xff1a;安卓手机数据恢复&#xff1a;红米手机照片误删怎么恢复 红米手机误删照片怎么恢复&#xff1f;小编的也爷爷使用的是红米手机&#xff0c;有一天跟我说“他误删了手机上的很多张照片&#xff0c;还一直抱怨自己眼花乱删东西”。小编就赶紧安慰爷爷还说会帮他…

android删除sd卡照片恢复,安卓手机照片误删怎么恢复

现如今国内大多的人都拥有一部智能手机&#xff0c;使用手机拍摄照片记录生活中的美好也成为了一种普遍流行的行为。当我们用手机照片记录身边点滴后&#xff0c;经过时间的打磨&#xff0c;我们也需要整理这些照片&#xff0c;误删照片随之成为一个严峻的问题&#xff0c;手机…

android删除手机照片恢复软件,安卓手机上照片删除如何恢复?

原标题&#xff1a;安卓手机上照片删除如何恢复&#xff1f; 安卓手机上的照片被删除了如何恢复&#xff1f;现在大部分手机都有手机最近删除相册&#xff0c;当发现手机上的数据被自己误删的时候&#xff0c;可以在手机最近删除相册中快速恢复。不过呢&#xff0c;最近删除的相…

android系统手机能看到照片,安卓怎么恢复手机照片?原来可以这样做

安卓怎么恢复手机照片&#xff1f;原来可以这样做~其实照片在我们生活工作中扮演者重要的色&#xff0c;对很多人来说一张照片不仅仅是一份回忆&#xff0c;更是感情沟通的桥梁&#xff0c;误删了手机里重要的照片怎么找回来呢&#xff1f;手机照片恢复管家免费教你哦~ 一、安卓…

android 恢复照片误删,安卓手机照片误删怎么恢复?一般人不知道这个恢复方法...

安卓手机照片误删怎么恢复&#xff1f;一般人不知道这个恢复方法 2019年06月12日 17:40作者&#xff1a;黄页编辑&#xff1a;黄页 分享 安卓手机照片误删怎么恢复?一般人不知道这个恢复方法。手机可以说取得相当大的成功了&#xff0c;在近些年来&#xff0c;手机相机慢慢“霸…

android手机照片恢复,安卓手机照片怎么恢复?简单恢复方法分享

安卓手机照片怎么恢复?手机作为中国微信用户强大的社交工具&#xff0c;可以说手机相机已成为人们生活的重要部分&#xff0c;不小心误删手机相册照片或者微信等图片&#xff0c;我们在使用手机过程中是不可避免的&#xff0c;别担心&#xff0c;小编有办法恢复的&#xff0c;…

手机回收站的照片超过30天删除了怎么恢复

苹果手机有一个功能是&#xff0c;照片删除后的30天内还可以从最近删除里还原&#xff0c;但是&#xff0c;手机回收站的照片超过30天删除了怎么恢复&#xff1f;依靠苹果公司给到的衍生软件好像是做不到的了&#xff0c;小编却有一个办法&#xff01;有一款超好用的数据恢复软…

android mac 照片恢复,如何恢复照片?这样做,手机照片直接恢复!

如何恢复照片?现在人们都喜欢用照片记录每时每刻&#xff0c;所以大家手机里往往都存满了照片。但是存储在手机上的照片如果被误删的时候应该怎么样去恢复呢?今天小编给大家介绍几个手机照片恢复的方法&#xff0c;希望可以解决你的烦恼~ 方法一&#xff1a;从最近删除恢复 在…

android mac 照片恢复,相片恢复?误删的手机照片简单的找回方法来了!

相片恢复&#xff1f;误删的手机照片简单的找回方法来了&#xff01; 2020年07月29日 11:29作者&#xff1a;网络编辑&#xff1a;宏伟 分享 相片恢复&#xff1f;误删的手机照片简单的找回方法来了&#xff01;我们手机中存了很多的手机照片&#xff0c;由于很多我们经常会清理…