问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

设计一个一元多项式计算器,输入输出,多项式相加(C语言)

发布网友 发布时间:2024-07-21 23:12

我来回答

1个回答

热心网友 时间:2024-08-02 12:23

#include<stdio.h>//两个多项式也就是两个链表,相加后的链表我们不重新建立,而是在第一个链表的基础上,增加和删除,得到相加后的链表。

#include<malloc.h>

typedef struct node

{

float cofe;//系数

int expn;//指数

struct node *next;

}node,*tie;

#define LEN sizeof(node)

int main()

{

int n,m;//n表示第一个多项式的项的个数,m表示第二个多项式的项的个数

while((scanf("%d%d",&n,&m))!=EOF)

{

tie p1,p2,head,tou,t1,t2,h1;

        head=NULL;

       p1=(tie)malloc(LEN);

     p1->next=head;

scanf("%f%d",&p1->cofe,&p1->expn);//输入系数和指数

     p2=head=p1;

     for(int i=1;i<n;i++)

{

     p1=(tie)malloc(LEN);

  scanf("%f%d",&p1->cofe,&p1->expn);

    p1->next=NULL;

    p2->next=p1;

    p2=p1;

}//以上为将第一个多项式建立成链表

tou=NULL;

       p1=(tie)malloc(LEN);

     p1->next=tou;

scanf("%f%d",&p1->cofe,&p1->expn);//输入系数和指数

     p2=tou=p1;

     for( i=1;i<m;i++)

{

     p1=(tie)malloc(LEN);

   scanf("%f%d",&p1->cofe,&p1->expn);

    p1->next=NULL;

    p2->next=p1;

    p2=p1;

}//以上为将第二个多项式建立成链表

        t1=h1=head;

t2=tou;//t1,t2分别指向当前结点,h1起辅助作用,第二个链表我们不要,所以可以用tou做辅助作用

while(t1&&t2)//当前结点都不为空

{

if(t1->expn<t2->expn)//第一个链表的当前位置的指数小于第二个链表

{

h1=t1;

t1=t1->next;

}

else if(t1->expn>t2->expn)//第一个链表的当前位置的指数大于第二个链表

{

  if(t1==head)//在第一个链表的头前插入元素

  {

 head=t2;

 t2=t2->next;

 tou->next=t1;

 tou=t2;

  }

  else

  {

tou=t2;

 t2=t2->next;

 tou->next=t1;

 h1->next=tou;

 h1=tou;

  }

}

else if(t1->expn==t2->expn)//第一个链表的当前位置的指数等于第二个链表

{

float sum=t1->cofe+t2->cofe;

if(sum==0)

{

tou=t2;

t2=t2->next;

h1->next=t1->next;

t1=t1->next;

}

else

{

t1->cofe=sum;

h1=t1;

t1=t1->next;

tou=t2;

t2=t2->next;

}

}

}

if(t1==NULL)//第一个链表已结束,将第二个链表加到第一个链表末尾

   h1->next=t2;

tie p3;//将相加后的链表打印出来

p3=head;

while(p3!=NULL)

{

  if(p3->cofe<0)

     printf("%fx^%d",p3->cofe,p3->expn);

  else

   printf("+%fx^%d",p3->cofe,p3->expn);

  p3=p3->next;

}


}

}

例如:

3x^2+4x^3+5x^5

x+2x^4+6x^5

此题的思路就是:将两个按指数增长顺序的两个链表,假设指针t1,t2分别指向多项式A和B中当前进行比较的某个结点,比较这两个结点中的指针项,有三种情况:1.指针t1的指针值<指针t2的指针值,此时将t1向后移;2.指针t1的指针值>指针t2的指针值,此时将t2的结点加入t1的链表;3.当二者相等时,应判断系数的是否为0.

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
创新5.10060声卡怎么关闭,为什么音质变得很差?我用的是KX 我已经装了声卡,和Kx管理器。可声音听见还是那么幼稚。怎么把声音调的... ...装不上KX3550,声卡是 创新5.1的 装完KX3550重启以后,提示 初始化... 我买了一个创新5.1 0060声卡,玩龙之谷游戏就声音不完全,只有背景音乐... 声卡5.10060KX驱动3550调试怎么弄 win11玩csgo游戏一直闪退什么原因 win11玩csgo游戏一直闪退的解决... 习惯养成心得体会 饥荒ios高脚鸟蛋怎么孵化高脚鸟怎么养 故事的力量可以从什么角度来分析? 地震前为什么要出现地震云 《假面女王》:集狗血悬疑于一身!塑料闺蜜掀起面具下的欲望斗争_百度知 ... 劳动者受了工伤要不要鉴定? 想要赔偿不做工伤鉴定可以吗? 汽车电瓶有电无法启动的原因是什么? 没签转让合同可不可以 380V漏电保护器接线图是什么样的? 为什么工厂工人都比较穷,工厂工人没有中产阶级? 在一个工厂干活大伙都把活儿干砸了老板却只扣我一人的钱拿我杀鸡儆猴... 工厂里的打工者,一下班就开始跑,这是为什么? 一个老板有自己的工厂为什么还要出去打工啊 itis time某某 leave our school qq好友添加申请能撤回吗? “松柏本孤直,难为桃李颜”是什么意思_出处及原文翻译_学习力 dontstarve什么意思? 建行鑫存管是什么意思? 为什么叫“中东呼吸综合征”?从语言学角度看,用"征"字合理吗?_百度知 ... 字体名怎么改? 网络管理员职业定位 何济公阿咖酚散头痛粉 通信网络管理员国家职业标准 日历中的九九天是什么意思 ...act of will on somebody's part to set the temperature indoors... 鲲鹏展翅的鲲指的是什么意思 雪纺短裙裤拉链在前还是后 黑色雪纺裙裤阔腿裤女长裤高腰宽腿裤大脚裤甩裤 搭配什么款的上衣_百度... 小说"王牌进化"当中,里面说的什么I世界啊,II世界啊,III世界啊到底是什 ... 魔兽世界SS副本输出手法和天赋,以及战场杀人用天赋和手法 旅游英语专业就业前景 就业方向有哪些 川外英语专业(酒店管理方向)的学生是否有考取公共营养师的必要?_百 ... 英语专业如何找酒店管理的工作 我是学习英语专业的本科生 想出国读研学习酒店管理 请问这个专业有前途... ps线稿图怎么把线条变淡啊ps如何把线稿变淡 知网查重怎样收费的? 新手机第一次充电要充多少小时? 海王捕鱼最新版下载 电脑桌面图标怎么乱七八糟的,怎么整齐? 梦见出家师父给我扔土块是什么意思 高血压病人喝红酒对心血管有益吗 父母要求过高,对孩子来说是压力,哪几种方法调整对孩子的期望值?_百 ... 如何看待母亲深受重男轻女思想的迫害,却继续保持重男轻女的思想?_百度...