C语言数据结构 一元多项式

请求大佬花点点时间,帮我查查到底哪儿出错了,非常感谢!

#include
#include

struct Node {
double coef;
int expn;
Node *next;
};

void CreatPolynomial(Node *&head, int n) // 生成带表头结点的单链表,除头结点外另生成n个结点

{
int i;
head = (Node *)malloc(sizeof(Node));
head->coef = 0;
head->expn = 0;
head->next = NULL; // 初始化头结点

printf("请输入各项系数和指数:\n");
Node *p = head;
for (int i = 0; i < n; i++) {
p->next = (Node *)malloc(sizeof(Node)); // 生成新结点,尾插入生成链表

p = p->next;
scanf("%lf %d",&p->coef,&p->expn);
p->next = NULL;
}
}

void PrintPolynomial(Node *&head)
{
if (head->next == NULL) // 结果是0时直接输出0

putchar('0');
else {
for (Node *p = head->next; p != NULL; p = p->next) {
if (p != head->next && p->coef >0) // 当p非首项且指向的系数为正时才输出'+'

putchar('+'); // 之前只判定了p->coef >0

        if (p->coef == 1) {                       //  系数为1或-1时特殊处理  
            if (p->expn == 0)
                putchar('1');                   //  判断条件不能写在一起:  
        }                                       //  if(p->coef == 1 && p->expn == 0) putchar('1');  
        else if (p->coef == -1)
            putchar('-');
        else
            printf("%lf\n", p->coef);

        switch (p->expn) {                        //  指数为0或1时特殊处理  

        case 0:
            break;

        case 1:
            putchar('x');
            break;

        default:
            p->expn < 0 ? printf("x^(%d)", p->expn) : printf("x^%d", p->expn);  //  指数小于0时打括号  
            break;
        }
    }
}
printf("\n");

}

void Free(Node *&head)
{
Node *q = NULL;
for (Node *p = head; p != NULL; p = q) {
q = p->next;
free(p);
}
}

char cmp(int a, int b)
{
if (a > b)
return '>';
if (a < b)
return '<';
return '=';
}

void AddPolynomial(Node *&pA, Node *&pB) // 传进两个链表的头指针

{
Node *ha = pA;
Node *hb = pB;
Node *qa = ha->next; // ha, hb分别跟在qa, qb的后一位置

Node *qb = hb->next; // qa, qb分别指向Pa, Pb中当前比较元素

while (qa && qb)
{
double sum = 0;
int a = qa->expn;
int b = qb->expn;
switch (cmp(a, b)) {

    case '<':
        ha = qa;
        qa = qa->next;                       //  非ha = ha->next;  
        break;

    case '=':
        sum = qa->coef + qb->coef;
        if (sum != 0.0) {
            qa->coef = sum;
            ha = qa;
        }
        else {
            if (ha->next != qa)
            printf("Error: ha->next != qa  \n");
            ha->next = ha->next->next;     //  删除和为0的结点,ha不变,还在qa后一位置  
            free(qa);
        }
        if (hb->next != qb)
        printf("Error: hb->next != qb  \n");
        hb->next = hb->next->next;
        free(qb);
        qb = hb->next;
        qa = ha->next;
        break;

    case '>':
        hb->next = hb->next->next;         //  删除qb指向的结点  
        qb->next = ha->next;              //  将qb插入ha后qa前  
        ha->next = qb;

        qb = hb->next;                       //  not qb = ha->next  
        ha = ha->next;
        break;

    default:
        printf("Error!  \n");
        break;
    }
}
if (qb)
    ha->next = qb;
free(hb);

}

int main(void)
{

Node *A = NULL;
Node *B = NULL;
int lenA;
int lenB;
do
{
printf("请输入A的项数:\n");
scanf(" %d", &lenA);
CreatPolynomial(A, lenA); // 生成A链表

    printf("请输入B的项数:\n");//  生成B链表  
    scanf("%d\n",&lenB);
    CreatPolynomial(B, lenB);

    printf(" A= ");    //  输出A链表  
    PrintPolynomial(A);
    printf(" B= ");//  输出B链表
    PrintPolynomial(B);

    AddPolynomial(A, B);                        //  A = A + B  
    printf(" A+B=  ");
    PrintPolynomial(A);                         //  输出和  
    printf("\n");

    Free(A);  //  释放结点  

} while (true);
return 0;
}

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
一元多项式(数据结构C语言)
这是数据结构(使用C语言)的一元多项式问题 内含源码和报告
C语言数据结构之一元多项式的求导
//一元多项式的求导 #include #include//动态申请空间的函数的头文件 typedef struct node //定义节点类型 { float coef; //多项式的系数 int expn; //多项式的指数 struct node * next; //结点指针域 }PLOYList; void insert(PLOYL
数据结构——一元多项式问题(C语言)
数据结构——一元多项式问题(C语言) ***`//一元多项式问题 #include&amp;amp;lt;stdio.h&amp;amp;gt; #include&amp;amp;lt;stdlib.h&amp;amp;gt; #include&amp;amp;lt;string.h&amp;amp;gt; #include&amp;amp;lt;math.h&amp;amp;gt; typedef struct Node { float coef; /系数/ int expn
数据结构(c语言)一元多项式操作
自己写的。保证能运行。一元多项式 相加 相减 求多项式的值
数据结构C语言 一元多项式的加减法
数据结构 C语言 动态链表 议员多项式的加减法 数据结构C语言 一元多项式的加减法算法实现 代码,用vs运行,已测试成功运行,
一元多项式 数据结构 c 语言版
一元多项式 数据结构 c 语言版 一元多项式 数据结构 c 语言版 一元多项式 数据结构 c 语言版 一元多项式 数据结构 c 语言版 一元多项式 数据结构 c 语言版 一元多项式 数据结构 c 语言版
c语言数据结构之实现一元多项式的加减运算
实现结构:单项链表思路:对于两个一元多项式中所有指数相同的项,对应系数相加,若其和不为零,则构成“和多项式”中的一项;对于两个一元多项式中所有指数不相同的项,则分别复抄到“和多项式”中去,减法亦然。main.c#include &amp;lt;stdio.h&amp;gt; #include &amp;lt;malloc.h&amp;gt; #include &quot;poly.h&quot; #include &quot;lArray.h&quot; void ...
数据结构 - 一元多项式相加减(C语言)
通常情况下,一元多项式可写成: an(x) = a1x^e1 + a2x^e2 + a3x^e3 + ... + amx^em (数字,m为下标),其中:pi是指数为ei的项的非零系数,0 例如: An(x) = 5x^3 - 2x^12 + 13x^99。可用线性表:((5,3),(-2,12),(13,99))表示。 为了操作方便,采用单链表作存储结构,结点有三个域:系数,指数,
数据结构,课程设计,c语言,一元多项式计算
数据结构,课程设计,c语言,一元多项式计算。顺序结构、动态链表结构下的一元多项式的加法、减法、乘法的实现。 设有一元多项式Am(x)和Bn(x). Am(x)=A0+A1x1+A2x2+A3x3+… +Amxm Bn(x)=B0+B1x1+B2x2+B3x3+… +Bnxn 请实现求M(x)= Am(x)+Bn(x)、M(x)= Am(x)-Bn(x)和M(x)= Am(x)×Bn(x)
数据结构(C)--一元多项式的相加
利用C语言编写的,其思想是利用数据结构实现两个一元多项式的输入输出,及其两个多项式的和,多项式得积,多项式的差
一元多项式 数据结构 c语言版
一元多项式 数据结构 c语言版一元多项式 数据结构 c语言版一元多项式 数据结构 c语言版一元多项式 数据结构 c语言版
C语言一元多项式相加
链式 #include &amp;lt;stdio.h&amp;gt; #include &amp;lt;stdlib.h&amp;gt; #include&quot;conio.h&quot; typedef int ElemType; typedef int Status; #define OK 1 #define OVERFLOW -1 #define TRUE 1 #define FAUSE 0 #define ERROR 0 typ...
c语言实现一元多项式
用单链表实现一元稀疏多项式计算器的各种功能!包括加减乘除求导求值类数学输出!
一元多项式运算C语言
一元多项式求和实质上是合并同类项的过程,其运算规则为: (1)若两项的指数相等,则系数相加; (2)若两项的指数不等,则将两项加在结果中。
c语言一元多项式的相加
1. 问题描述 设计一个程序实现两个一元稀疏多项式的表示及基本操作(建立、销毁、输出、加法、减法等操作)。 2. 算法设计 根据一元多项式相加的运算规则:对于两个一元多项式中所有指数相同的项,对应指数相加(减),若其和(差)不为零,则构成“和(差)多项式”中的一项;对于两个一元多 项式中所有指数不相同的项,则分别写到“和(差)多项式”中去。因为多项式指数最高项以及项数是不确定的,因
C语言一元多项式简单计算
此程序的数据结构是选择用带表头结点的单链表存储多项式。虽然一元多项式可以用顺序和链式两种存储结构表示,但顺序结构的最大长度很难确定。比如当多项式的系数较大时,此时就会浪费了巨大的存储空间,所以应该选择用链式存储结构来存储一元多项式。单链表的结构体可以用来存储多项式的系数,指数,下一个指针3个元属,这样便于实现任意多项式的加法,减法运算。
数据结构C语言版一元多项式求解
最简单的一元多项式的加减运算,采用线性链表结构 typedef struct Polynode {int coef; int exp; struct Polynode *next; }Polynode,*Polylist;
C语言链表实现一元多项式
#includern#includern#includern//定义链表rnstruct nodernrnint coef;rnint exph;rnstruct node*next;rn;rnrn//多项式加入rnrnstruct node * Load(struct node*h,FILE*fp)rnrnstruct node*p,*t;rnchar ch;rnint sum;rnfscanf(fp,"%d",&sum);rnh=(struct node*)malloc(sizeof(struct node));rnrnp=h;rnrn--------------------------------------------------------------------------------rnwhile(ch!=';')rnrnt=(struct node*)malloc(sizeof(struct node));rnfscanf(fp,"%d %d%c",&t->coef,&t->exph,ch);rnt->next=NULL;rnp->next=t;rnp=p->next;rnp->next=NULL;rnreturn h;rnrnrn//多项式相加rnrnstruct node* Add(struct node*ha,struct node*hb)rnrnstruct node *pa,*pb,*pc,*hc,*p;rnrnint c, e;rnhc= (struct node *)malloc(sizeof(struct node));rnrnrnpc=p=hc;rnpa=ha->next;rnpb=hb->next;rnrnwhile(pa!=NULL || pb!=NULL)rnrnif((pb==NULL) && (pa!=NULL))rnrnc=pa->coef;rne=pa->exph;rnpa=pa->next;rnrnelse if((pb!=NULL) && (pa==NULL))rnrnc=pb->coef;rne=pb->exph;rnpb=pb->next;rnrnrnelsernrnif(pa->exph < pb->exph)rnc=pa->coef;rne=pa->exph;rnpa=pa->next;rnelse if(pa->exph > pb->exph)rnc=pb->coef;rne=pb->exph;rnpb=pb->next;rnelserne=pa->exph;rnc=pa->coef+pb->coef;rnpa=pa->next;rnpb=pb->next;rnrnrnrnrnwhile(pc->coef!=NULL)rnrnpc->coef=c;rnpc->exph=e;rnpc->next=p->next;rnp->next=pc;rnp->coef=pc->coef;rnp->exph=pc->exph;rnp=p->next;rnrnp->next= NULL;rnrnrnreturn hc;rnrn//多项式相减rnstruct node*MUL(struct node*ha,struct node*hb)rnrnstruct node*pa,*pb,*pc,*hc;rnint c,e;rnhc=(struct node*)malloc(sizeof(struct node));rnrnpc=hc;rnpa=ha->next;rnpb=hb->next;rnwhile(pa!=NULL||pb!=NULL)rnrnif(pa==NULL&&pb!=NULL)rnrnc=-pb->coef;rne=pb->exph;rnpb=pb->next;rnrnelsernrnif((pa!=NULL)&&(pb==NULL))rnrnrnc=pa->coef;rne=pa->exph;rnpa=pa->next;rnrnelsernrnif(pa->exphexph)rnrnc=pa->coef;rne=pa->exph;rnpa=pa->next;rnrnelsernrnif(pa->exph>pb->exph)rnrnc=-pb->coef;rne=pb->exph;rnpb=pb->next;rnrnrnelsernrnc=pa->coef-pb->coef;rne=pa->exph;rnpa=pa->next;rnpb=pb->next;rnrnrnrnrnwhile(c!=0)rnrnpc->next=(struct node*)malloc(sizeof(struct node));rnpc=pc->next;rnpc->coef=c;rnpc->exph=e;rnrnrnrnrnrnreturn hc;rnrnrnint Length(struct node*p)rnrnint i=0;rnwhile(p->next!=NULL)rnrni++;rnp=p->next;rnrnreturn i;rnrnrnrnvoid main()rnrnint i;rnint a;rnstruct node*h1,*h2,*h3,*h4,*tmp,*tmp1;rnFILE*fp;rnh1=(struct node*)malloc(sizeof(struct node));rnh2=(struct node*)malloc(sizeof(struct node));rnh3=(struct node*)malloc(sizeof(struct node));rnh4=(struct node*)malloc(sizeof(struct node));rnrnif((fp=fopen("poly.txt","r"))==NULL)rnrnprintf("打开错误\n");rnrnh1=Load(h1,fp);rnh2=Load(h2,fp);rnfclose(fp);rn//输出二项式rnrntmp=h1->next;rnprintf("二项式1:\n");rnwhile(tmp!=NULL)rnrnfor(i=0;i<3;i++)rnrnprintf("%dX^%d ",tmp->coef,tmp->exph);rntmp=tmp->next;rnrnrnrnprintf("\n");rntmp=h2->next;rnprintf("二项式2:\n");rnwhile(tmp!=NULL)rnrnprintf("%dX^%d ",tmp->coef,tmp->exph);rntmp=tmp->next;rnrnprintf("\n");rn//多项式相加rnh3=Add(h1,h2);rn//长度输出rna=Length(h3);rnprintf("表的长度为:%d\n",a);rntmp=h3->next;rnprintf("两个多项式的和:\n");rnwhile(tmp!=NULL)rnrnprintf("%dX^%d ",tmp->coef,tmp->exph);rntmp=tmp->next;rnrnrnrnrnrnh4=MUL(h1,h2);rntmp1=h4->next;rnprintf("\n");rnprintf("多项式的差为:\n");rnrnwhile(tmp1!=NULL)rnrnrnrnprintf("%dX^%d ",tmp1->coef,tmp1->exph);rntmp1=tmp1->next;rnrnrnrnrnrn我用------------标注出来的地方,我想实现当有字符‘;’的时候就停止输出,主函数当输出两个多项式的时候,就不能输出两个多项式相加了,帮帮忙!我实在看不出来到底是哪里错误,请高手帮我看看我的程序!谢谢了!rn
C 语言课程设计——一元多项式计算器
自己写的,自我感觉写的还可以.只有加法和减法。
一元多项式程序的编写 c语言
一元多项式程序的编写 c语言 能运行,可在c++环境中运行
一元多项式算法c语言的实现
利用C语言中的链表实现一元多项式算法,十分实用,便于c爱好者学习链表结构。
C语言一元多项式加减乘
实现了合并同类项的功能,正确标准格式输出功能,用单链表实现,共446行
一元多项式相加(C语言实现)
poly.h#ifndef _POLY_H_ #define _POLY_H_#include<stdio.h> #include<stdlib.h> #include<malloc.h>//结点结构 typedef struct Polynode { int coef; int exp; struct Polynode * next; }Polynode,* Polylis
c语言 两个一元多项式相加。
用线性表的存储形式实现两个一元多项式相加。
数据结构 一元多项式
一元多项式计算。 要求:能够按照指数降序排列建立并输出多项式;能够完成两个多项式的相加、相减,并将结果输出;
数据结构-一元多项式
在同学帮助下做的,只有加减,不是很全,但思想还是不错的
数据结构之一元多项式
采用双向表存储结构的一元多项操作,里面的排序算法有3个,但是都有缺陷,仅供参考,我打算过多段时间,写一个其他的排序算法博客文章。菜鸟学习,高手勿喷。
数据结构--一元多项式
函数功能说明:Void InitList(PolyNode &L) /初始化多项式单链表*/ Int GetLength(PolyNode*L) /求多项式单链表的长度/ PolyNode GetElem(PolyNode *L,int i) /返回多项式单链表中第i个结点的指针*/ PolyNode Locate(PolyNode *L,float
数据结构c语言数据结构c语言数据结构c语言
大家觉得好就好,是我们学校学的高教版本的。大家觉得好就好,是我们学校学的高教版本的大家觉得好就好,是我们学校学的高教版本的
C语言数据结构C语言数据结构C语言数据结构
C语言数据结构C语言数据结构C语言数据结构C语言数据结构C语言数据结构C语言数据结构
数据结构(c语言)一元多项式的表示相加级实现
数据结构(C语言版)严蔚敏版的内容,用C语言写的一元多项式的表示相加操作的实现,用vc6和其他的C语言运行软件都能运行
c语言数据结构语言数据结构
语言数据结构语言数据结构语言数据结构vv
(数据结构)如何用C语言实现一元多项式的乘法。
初学数据结构,C语言实现了意愿多项式的加减法,请问如何实现一元多项式的乘法?rnrntypedef struct LNodernrn float coef;rn int expn;rn struct LNode *next;rnLNode, *LinkList;rn使用链式存储,谢谢
数据结构—— 一元多项式的表示及相加(C语言单链表实现)
代码比较简单,没有完全按照严蔚敏版《数据结构(C语言版)》上39页到43页上的要求,只是实现了简单功能,且此代码输入多项式时只能按升幂的顺序输入(因为没有写多项式排序的函数) 个人感觉此代码短小精悍,且易理解,看懂了的话可以尝试完全按照书上的要求自己写代码。 直接上代码: #include&amp;amp;lt;stdio.h&amp;amp;gt; #include&amp;amp;lt;stdlib.h&amp;amp;gt; #define LEN s...
数据结构—— 一元多项式的运算(相加,相减,相乘)【C语言实现】
用 C语言实现一元多项式的运算(相加,相减,相乘) 1.创建多项式时,无论指数项按什么顺序输入,输出均能实现以升幂顺序输入,且输入时有相同指数项时能够实现合并。 2.能够代入确切的X计算出最终多项式的值。 **模块划分** 1.模块划分:本程序划分为9个模块,分别是:                1.主函数模块,  2.LocateElem模块(定位排序),                  ...
数据结构C语言数据结构C语言
数据结构C语言数据结构C语言数据结构C语言数据结构C语言数据结构C语言数据结构C语言数据结构C语言数据结构C语言数据结构C语言数据结构C语言数据结构C语言
数据结构(C语言)数据结构(C语言)
数据结构(C语言)数据结构(C语言)数据结构(C语言)数据结构(C语言)数据结构(C语言)数据结构(C语言)数据结构(C语言)数据结构(C语言)数据结构(C语言)数据结构(C语言)数据结构(C语言)数据结构(C语言)数据结构(C语言)数据结构(C语言)
C语言 数据结构 C语言 数据结构 例子
C语言 数据结构 基本操作 C语言 数据结构 基本操作......
数据结构 C语言 数据结构 C语言
数据结构 C语言 数据结构 C语言 数据结构 C语言 数据结构 C语言 数据结构 C语言
c语言数据结构c语言数据结构
c语言数据结构c语言数据结构c语言数据结构c语言数据结构
相关热词 c# login 居中 c# 考试软件 c# 自然语言分析 c# 分段读取文件 c# 泛型反射 c#打断点 c# 时间转多少秒 c# 线程函数加参数 c# modbus 读取 c#查询集合表