读书人

求C语言大神编译下这个多项式程序。小

发布时间: 2013-04-20 19:43:01 作者: rapoo

求C语言大神编译下这个多项式程序。我vc6.0总是不成功,gcc和cfree能编译运行成功,codeblocks也可以



#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>

#define bool int
#define true 1
#define false 0

typedef struct Term
{
int coe;
int exp;
struct Term *pNext;
} TERM, * POLYNIMIAL;

POLYNIMIAL create_polynimial(void);
void print_polynimial(POLYNIMIAL );
POLYNIMIAL add_polynimial(POLYNIMIAL, POLYNIMIAL);
POLYNIMIAL minus_polynimial(POLYNIMIAL, POLYNIMIAL);
void attach(int, int, POLYNIMIAL *);

int main(void)
{
POLYNIMIAL a = create_polynimial();
printf("您刚才输入的多项式是:\n");
print_polynimial(a);
printf("\n");

POLYNIMIAL b = create_polynimial();
printf("您刚才输入的多项式是:\n");
print_polynimial(b);
printf("\n");

POLYNIMIAL c = add_polynimial(a, b);
printf("两多项式的和是:\n");
print_polynimial(c);
printf("\n");

POLYNIMIAL d = minus_polynimial(a, b);
printf("两多项式的差是:\n");
print_polynimial(d);
printf("\n");

getchar();
return 0;
}

POLYNIMIAL create_polynimial(void) //创建链表,并返回struct Term *类型
{
int len;
int coe, exp;
int i;

POLYNIMIAL pHead = (POLYNIMIAL)malloc(sizeof(TERM));
if(NULL == pHead) //内存分配失败则退出
{
printf("分配失败!\n");
exit(-1);
}
POLYNIMIAL pTail = pHead;
pTail->pNext = NULL;

printf("请输入您需要生成的多项式的项数:");
scanf("%d", &len);

for(i=0; i<len; i++)
{
printf("请输入第%d项的底数和指数,以逗号间隔:", i+1);
scanf("%d, %d", &coe, &exp);

POLYNIMIAL pNew = (POLYNIMIAL)malloc(sizeof(TERM));
if(NULL == pNew)
{
printf("分配失败\n");
exit(-1);
}

pNew->coe = coe;
pNew->exp = exp;
pTail->pNext = pNew;
pNew->pNext = NULL;
pTail = pNew;
}


return pHead;
}

void print_polynimial(POLYNIMIAL pHead)
{
POLYNIMIAL p = pHead->pNext;

while(NULL != p)
{
if(p->exp != 0) //指数不为零的打印
{
if(p->coe < 0)
printf("(%d)*x^%d", p->coe, p->exp);
else
printf("%d*x^%d", p->coe, p->exp);
}
else //指数为零的打印方法
{
if(p->coe < 0)
printf("(%d)", p->coe);
else
printf("%d", p->coe);
}


if(p->pNext != NULL)
printf("+");
p = p->pNext;
}
printf("\n");
}

POLYNIMIAL add_polynimial(POLYNIMIAL a, POLYNIMIAL b)
{
POLYNIMIAL front, rear;
int sum;
rear = (POLYNIMIAL)malloc(sizeof(TERM));
if(rear == NULL)
{
printf("分配失败\n");
exit(-1);
}
front = rear;
a = a->pNext;
b = b->pNext;
while(a && b)
{
if(a->exp < b->exp) //多项式a的指数小于多项式b的指数
{
attach(b->coe, b->exp, &rear);
b = b->pNext;
}
else if(a->exp == b->exp) //多项式a的指数等于多项式b的指数
{
sum = a->coe + b->coe;
if(sum != 0)
attach(sum, a->exp, &rear);
a = a->pNext;
b = b->pNext;
}


else //多项式a的指数大于多项式b的指数
{
attach(a->coe, a->exp, &rear);
a = a->pNext;
}
}
//添加剩下的节点项
for(; a; a = a->pNext)
attach(a->coe, a->exp, &rear);
for(; b; b = b->pNext)
attach(b->coe, b->exp, &rear);

return front;
}

void attach(int coe, int exp, POLYNIMIAL *ptr)
{
POLYNIMIAL temp;
temp = (POLYNIMIAL)malloc(sizeof(TERM));
if(NULL == temp)
{
printf("分配失败\n");
exit(-1);
}
temp->coe = coe;
temp->exp = exp;
(*ptr)->pNext = temp;
temp->pNext = NULL;
*ptr = temp;
}

/*两个二项式相减可以理解为第一个多项式加上第二个多项式的相反数*/
POLYNIMIAL minus_polynimial(POLYNIMIAL a, POLYNIMIAL b)
{
POLYNIMIAL minus_b = b;

while(minus_b != NULL)
{
minus_b->coe = -(minus_b->coe);
minus_b = minus_b->pNext;
}

return add_polynimial(a, b);
}




/*******************************************************************
* 测试:
* 计算多项式a = 3*x^14+5*x^8+4 和多项式b = 5*x^10+(-7)*x^8+4*x^4
* 测试如下:
*
* 请输入您需要生成的多项式的项数:3
* 请输入第1项的底数和指数,以逗号间隔:3,14
* 请输入第2项的底数和指数,以逗号间隔:5,8
* 请输入第3项的底数和指数,以逗号间隔:4,0
* 您刚才输入的多项式是:
* 3*x^14+5*x^8+4
*
* 请输入您需要生成的多项式的项数:3
* 请输入第1项的底数和指数,以逗号间隔:5,10
* 请输入第2项的底数和指数,以逗号间隔:-7,8
* 请输入第3项的底数和指数,以逗号间隔:4,4
* 您刚才输入的多项式是:
* 5*x^10+(-7)*x^8+4*x^4
*
* 两多项式的和是:
* 3*x^14+5*x^10+(-2)*x^8+4*x^4+4
*
* 两多项式的差是:
* 3*x^14+(-5)*x^10+12*x^8+(-4)*x^4+4
*
********************************************************************/

C VC
[解决办法]
有两款编译器可以通过至少没有语法问题了,没耐心看代码,假定程序逻辑也没有问题,VC6不行的话,看看你工程的属性,应当是个控制台工程,不要搞成窗口的,
另外VC的程序,开头有一行与逻辑无关的东东: #include "stdafx.h"

[解决办法]
就是那样。。

[解决办法]
还用什么VC6。。改用VS吧。。

读书人网 >C++

热点推荐