C语言多项式加法

#include <stdio.h>

#include <stdlib.h>

#define ERROR -1

typedef struct list{

double coef;

int expn;

struct list *next;

}polyn;

polyn* creatpolyn(polyn*p,int m)

{

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

p->next=NULL;

while(m--){

polyn *temp=(polyn*)malloc(sizeof(polyn));

scanf("%lf %d",&temp->coef,&temp->expn);

temp->next=p->next;

p->next=temp;

}

return p;

}

int cmp(int a,int b){

if(a>b) return 1;

else if(a==b) return 0;

else return -1;

}

void delfirst(polyn*p,polyn*q)

{

p->next=q->next;

}

void insfirst(polyn*p,polyn*q)

{

q->next=p->next;

p->next=q;

}

void append(polyn*p,polyn*q)

{

polyn *temp=p;

while(1){

temp=temp->next;

if(!temp->next){

temp->next=q;

break;

}

}

}

void addpolyn(polyn*pa,polyn*pb)

{ int a,b;

double sum=0;

polyn *ha=pa;

polyn *hb=pb;

polyn *qa=ha->next;

polyn *qb=hb->next;

while(qa&&qb){

a=qa->expn;

b=qb->expn;

switch(cmp(a,b)){

case -1:ha=qa;

qa=qa->next;

break;

case 0:sum=qa->coef+qb->coef;

if(sum!=0.0){

qa->coef=sum;

ha=qa;

}

else{

delfirst(ha,qa);

free(qa);

}

delfirst(hb,qb);

free(qb);

qb=hb->next;

qa=ha->next;

break;

case 1:delfirst(hb,qb);

insfirst(ha,qb);

qb=hb->next;

ha=ha->next;

break;

}

}

if(!pb->next) append(pa,qb);

free(hb);

}

int main (void){

int numberofpa,numberofpb;

polyn *pa=NULL,*pb=NULL,*p=NULL;

scanf("%d %d",&numberofpa,&numberofpb);

pa=creatpolyn(pa,numberofpa);

printf("链表A设置完毕\n");

p=pa->next;

while(p!=NULL){

printf("%.2f %d\n",p->coef,p->expn);

p=p->next;

}

pb=creatpolyn(pb,numberofpb);

printf("链表B设置完毕\n");

addpolyn(pa,pb);

printf("加法完成\n");

while((pa->next)!=NULL){

pa=pa->next;

printf("%.2f %d\t",pa->coef,pa->expn);

}

return 0;

}

指针传递也是值传递,在里面对指针进行修改都要返回。

时间: 2024-12-07 15:55:51

C语言多项式加法的相关文章

程序设计入门——C语言 第7周编程练习 1多项式加法(5分)

第7周编程练习 依照学术诚信条款,我保证此作业是本人独立完成的. 温馨提示: 1.本次作业属于Online Judge题目,提交后由系统即时判分. 2.学生可以在作业截止时间之前不限次数提交答案,系统将取其中的最高分作为最终成绩. 1 多项式加法(5分) 题目内容: 一个多项式可以表达为x的各次幂与系数乘积的和,比如: 2x6+3x5+12x3+6x+20 现在,你的程序要读入两个多项式,然后输出这两个多项式的和,也就是把对应的幂上的系数相加然后输出. 程序要处理的幂最大为100. 输入格式:

算法练习--多项式加法

JS 实现 多项式加法 Array.prototype.existKey = function(propVal){ var i = 0; for(var i = 0;i < this.length; i++){ if(this[i].k == propVal){return i;} } return -1; } function polynAdd(a,b){ //1. parse out each exp var strA = a[0] == '-' ? a : '+' + a; var str

[DataStructure]多项式加法与乘法--B.链表存储(适用于零元系数多的多项式)

数据结构大作业…… 发出来大家乐呵乐呵…… 一.问题描述 给出N个多项式,求他们的和与积 二.解题报告 基本思想:加法和乘法都是把得数项直接链接在链表后面,最后统一做一个Merge&Sort工作即可.方便又快捷. (1)建立存储结构 1 struct _Poly 2 { 3 int factor;//系数 4 int Index;//幂 5 struct _Poly* next;//下一节点 6 }; 7 _Poly* poly[MAXTIMES+1]; 8 int Sum[MAXTIMES+1

[DataStructure]多项式加法与乘法--A.数组存储(适用于零元系数少的多项式)

数据结构大作业…… 发出来大家乐呵乐呵…… 一.问题描述 给出N个多项式,求他们的和与积 二.解题报告 (1)建立存储结构 1 struct _Poly 2 { 3 double Data[MAXTIMES+1]; 4 int Times; 5 }; 6 struct _Poly Poly[N+1]; (2)主程序架构 1 int main() 2 { 3 int Sum; 4 cout<<"请输入要做运算的多项式数量"<<endl; 5 cin>>

多项式加法运算 使用链表实现

/* 多项式加法运算 使用链表实现 */ #include <iostream> using namespace std; //使用不带头结点的单向链表,按照指数递减的顺序排列 typedef struct PolyNode { int coef; //系数 int expon; //指数 PolyNode *link; //指向下一个节点的指针 }*polynomial, npolynomial; polynomial PolyAdd(polynomial p1, polynomial p2

一元稀疏多项式加法运算

描述: 设计一个一元稀疏多项式加法运算器,完成多项式a和b相加,建立多项式a+b. 输入说明: 一组输入数据,所有数据均为整数.第1行为2个正整数n,m,其中 n表示第一个多项式的项数,m表示第二个多项式的项数:第2行包含2n个整数,每两个整数分别表示第一个多项式每一项的系数和指数:第3行包含2m个整数,每两个整数分别表示第二个多项式每一项的系数和指数.(注:序列按指数升序排列) 输出说明: 在一行以类多项式形式输出结果,指数按从低到高的顺序.注意,系数值为1的非零次项的输出形式中略去系数1,如

【C语言】多项式加法(mooc第七周测试题)

这个小题目吧我折磨的够呛,,主要在于特殊情况考虑不周,测试用例老是通不过.. 小结: 做法:用一个数组来存储多项式,用下标表示幂次数,数组元素值表示对应系数 输出特殊格式考虑:系数和幂次数为0,1,-1的情况,负系数的对加号输出的影响 题目内容: 一个多项式可以表达为x的各次幂与系数乘积的和,比如: 2x6+3x5+12x3+6x+20 现在,你的程序要读入两个多项式,然后输出这两个多项式的和,也就是把对应的幂上的系数相加然后输出. 程序要处理的幂最大为100. 输入格式: 总共要输入两个多项式

数据结构之利用单向链表实现多项式加法和乘法

在<数据结构与算法分析--c语言描述>一书中,作者指出了使用单向链表作为实现多项式的方法.但是没有给出具体实现.下面自己对其进行实现.只考虑功能.对其他细节不暂时不考虑.程序完成两个功能,使用单向链表完成多项式的加法和乘法.首先看加法,解决加法问题的思想在于对表示进行操作的两个链表表示的多项式按照指数递减的结构排列,每个节点的数据域存储着多项式某一项的系数(Coefficient)和指数(Exponent),还有一个指向后继节点的指针.节点的实现如下: 1 typedef struct Nod

南邮OJ 1005 多项式加法

题目描述:线性表是一种最简单.最基本,也是最常用的数据结构,其用途十分广泛,例如,用带表头结点的单链表求解一元整系数多项式加法和乘法运算.现给两个一元整系数多项式,请求解两者之和. 题目链接:点击打开链接 代码是借鉴别人的,链接:点击打开链接 <span style="font-size:18px;">#include <iostream> using namespace std; class nodeList; class Node //单链表节点 { pri