指针-C语言 多项式加法中的问题

问题描述

C语言 多项式加法中的问题

不知道结果为什么出错,怎么也找不出来
#include
#include

struct PolyNode{
int coef; //系数
int expon; //指数
struct PolyNode *link;//指向下一个节点的指针

};
typedef struct PolyNode *Polynomial;
Polynomial P1, P2, P3, P4,P5;

void Attach(int c, int e, Polynomial *pRear)
{
Polynomial P;
P = (Polynomial)malloc(sizeof(struct PolyNode));
P->coef = c;
P->expon = e;
P->link = NULL;
(*pRear)->link = P;
*pRear = P;
}
int Commpare(int a, int b)
{
if (a>b)
return 1;
else if (a == b)
return 0;
else
return -1;
}
Polynomial PolyAdd(Polynomial P1, Polynomial P2)
{
Polynomial front, rear, temp;
int sum;
rear = (Polynomial)malloc(sizeof(struct PolyNode));
front = rear;
while (P1&&P2)
{
switch (Commpare(P1->expon, P2->expon)){
case 1:
Attach(P1->coef, P1->expon, &rear);
P1 = P1->link;
break;
case -1:
Attach(P2->coef, P2->expon, &rear);
P2 = P2->link;
break;
case 0:
sum = P1->coef + P2->coef;
if (sum)Attach(sum, P1->expon, &rear);
P1 = P1->link;
P2 = P2->link;
break;
}
for (; P1; P1 = P1->link)Attach(P1->coef, P1->expon, &rear);
for (; P2; P2 = P2->link)Attach(P2->coef, P2->expon, &rear);
rear->link = NULL;
temp = front->link;
free(temp);
return front;
}
printf("wrong!");
}
main()
{
P2 = (Polynomial)malloc(sizeof(struct PolyNode));
P2->coef = 1;
P2->expon = 1;
P2->link = NULL;

P1 = (Polynomial)malloc(sizeof(struct PolyNode));
P1->coef = 2;
P1->expon = 2;
P1->link = P2;

P4 = (Polynomial)malloc(sizeof(struct PolyNode));
P4->coef = 1;
P4->expon =1;
P4->link = NULL;

P3 = (Polynomial)malloc(sizeof(struct PolyNode));
P3->coef = 2;
P3->expon = 2;
P3->link =P4;

P5 = (Polynomial)malloc(sizeof(struct PolyNode));

P5 = PolyAdd(P1, P3);

while (P5!=NULL)
{
    printf("%dX%d ", P5->coef, P5->expon);
    P5=P5->link;
}

}

解决方案

多项式加法(单链表 c语言)
多项式相加(C语言)
C语言一元多项式相加问题

解决方案二:

程序太长我没仔细看
不过
typedef struct PolyNode *Polynomial;
应该放在
struct PolyNode{
int coef; //系数
int expon; //指数
struct PolyNode *link;//指向下一个节点的指针
};
之前

时间: 2024-09-21 11:45:23

指针-C语言 多项式加法中的问题的相关文章

c语言编程 多项式加法-c语言编程中求多项式加法

问题描述 c语言编程中求多项式加法 多项式加法(5分) 题目内容: 一个多项式可以表达为x的各次幂与系数乘积的和,比如: 2x6+3x5+12x3+6x+20 现在,你的程序要读入两个多项式,然后输出这两个多项式的和,也就是把对应的幂上的系数相加然后输出. 程序要处理的幂最大为100. 输入格式: 总共要输入两个多项式,每个多项式的输入格式如下: 每行输入两个数字,第一个表示幂次,第二个表示该幂次的系数,所有的系数都是整数.第一行一定是最高幂,最后一行一定是0次幂. 注意第一行和最后一行之间不一

c语言 链表 加法-多项式加法,不知道哪里有问题,找了很久没找出来,能不帮个忙看下

问题描述 多项式加法,不知道哪里有问题,找了很久没找出来,能不帮个忙看下 #include #include typedef int ElemType; typedef struct node{ ElemType exp; ElemType coef; struct node next; }linklist; //创建空链表,再主函数里输入数值, void creat(linklist *s) { s=(linklist)malloc(sizeof(linklist)); s->next=NUL

指针-新手OJ,C语言 去除字符串中的所有空格模块, 不知为何出错,求大神指点

问题描述 新手OJ,C语言 去除字符串中的所有空格模块, 不知为何出错,求大神指点 作用: 把数组a中的所有空格去除, 并把后面的往前移动.例如: a b c变成:abc 字符指针 *p *q 数组a[] for(p=&a[0]; p!=''; p++)if(*p==' ')for(q=p; *(q+1)!=''; q++)*q=(q+1); //去除a字符串中的空格 但总是不对, 求大神指点. 解决方案 #include<stdio.h>int main(){ char str[20

c语言结构体中指针数组怎样赋值

问题描述 c语言结构体中指针数组怎样赋值 定义一个结构体struct AS{ char *p[1]:}:怎样用gets函数给指针数组赋值呢? 解决方案 看Unix/Linux上的man: Standard C Library Functions gets(3C)NAME gets fgets - get a string from a stream SYNOPSIS #include char *gets(char *s); char *fgets(char *s int n FILE *str

深度理解c++中的this指针_C 语言

1.this指针,就是一个指向当前对象的指针.我们知道,定义出一个类,它在内存中是不占空间的,只有定义了该类类型的对象时,系统就会为该对象分配一段存储空间,这段空间里只存储成员变量,对于成员函数,是存放在代码区的.(复习:内存分为5大区:静态区.常量区.栈.堆.代码区).下边给出一个日期类,通过这个实例,深度理解this指针. #define _CRT_SECURE_NO_WARNINGS 1 #include using namespace std; class Date { public:

详解C语言结构体中的函数指针_C 语言

结构体是由一系列具有相同类型或不同类型的数据构成的数据集合.所以,标准C中的结构体是不允许包含成员函数的,当然C++中的结构体对此进行了扩展.那么,我们在C语言的结构体中,只能通过定义函数指针的方式,用函数指针指向相应函数,以此达到调用函数的目的. 函数指针 函数类型 (*指针变量名)(形参列表):第一个括号一定不能少. "函数类型"说明函数的返回类型,由于"()"的优先级高于"*",所以指针变量名外的括号必不可少.  注意指针函数与函数指针表示

图节点删除-C语言 删除图中制定的节点

问题描述 C语言 删除图中制定的节点 /*/////////////////////////////////////////////////////////////*/ /* 图的深度优先遍历 / //////////////////////////////////////////////////////////////*/ #include #include struct node /* 图顶点结构定义 / { int vertex; / 顶点数据信息 / struct node *nextn

C语言、C++中的union用法总结_C 语言

开始的话 已经好长时间没有更新了,对不起自己,更对不起我亲爱的读者,同时也对不起自己开办的这个博客平台.忙,太忙了,忙于找工作,找一份好工作,纠结于去大城市闯呢,还是回到本省的首府城市.大家都在纠结这个问题,也希望大家和我讨论讨论.别的先不说了,都工作这么长时间了,还回过头来总结union,确实有点过分,要是和大家说我一直从事于C++开发,还不懂union,大家可能还真的不信.我们每天都在总结那些看似高端的东西,什么设计模式(当然我也有总结了).重构(后期我也会说的了)了,却忽略了那些最基础,最

c语言-C语言在#define中带参数出错,为什么

问题描述 C语言在#define中带参数出错,为什么 #include #define FUNC(X,Y) (1/(X)+1/(Y)) int main(void) { double x=FUNC(2,2); printf("%lfn",x); return 0; } 在VS2013中编译没有错误,但是输出结果是0.000000,为什么?是#define用错了吗? 解决方案 In C the divide between int also return int so 1/2=0 so