您的位置:首页 > 其它

02-线性结构2. 一元多项式求导 (25)

2015-06-17 17:54 423 查看
设计函数求一元多项式的导数。(注:xn(n为整数)的一阶导数为n*xn-1。)

输入格式:以指数递降方式输入多项式非零项系数和指数(绝对值均为不超过1000的整数)。数字间以空格分隔。

输出格式:以与输入相同的格式输出导数多项式非零项的系数和指数。数字间以空格分隔,但结尾不能有多余空格。注意“零多项式”的指数和系数都是0,但是表示为“0 0”。

输入样例:

3 4 -5 2 6 1 -2 0

输出样例:

12 3 -10 1 6 0

#include <stdio.h>
#include <stdlib.h>
typedef struct PolyNode * ptrPolynomial;
typedef struct PolyNode
{
int coef;
int expon;
ptrPolynomial next;
}PolyNode;

ptrPolynomial createList();
void deriPoly(ptrPolynomial headNode);
void printPoly(ptrPolynomial headNode);

int main()
{
ptrPolynomial headNode;
headNode = createList();
deriPoly(headNode);
printPoly(headNode);
return 0;
}

ptrPolynomial createList()
{
ptrPolynomial headNode = NULL, currentNode = NULL, prevNode = NULL;
do
{
currentNode = (ptrPolynomial)malloc( sizeof( PolyNode ) );
scanf("%d%d", ¤tNode->coef, ¤tNode->expon);
currentNode->next = NULL;
if ( headNode == NULL )
{
headNode = currentNode;
prevNode = currentNode;
continue;
}
prevNode->next = currentNode;
prevNode = currentNode;
}
while ( getchar()!= '\n' );
return headNode;
}

void deriPoly(ptrPolynomial headNode )
{
ptrPolynomial prev, cur;
cur = prev = headNode;
if ( headNode->next == NULL && headNode->expon == 0 )
{
headNode->coef = 0;
return;
}
while( cur != NULL )
{
if ( cur->expon == 0 )
{
prev->next = NULL;
free( cur );
break;
}
cur->coef = cur->coef * cur->expon;
cur->expon = cur->expon - 1;
prev = cur;
cur = cur->next;
}
}

void printPoly(ptrPolynomial headNode )
{
ptrPolynomial ptr;
ptr = headNode;
while ( ptr != NULL )
{
if ( ptr->next == NULL )
{
printf("%d %d", ptr->coef, ptr->expon);
}
else
{
printf("%d %d ", ptr->coef, ptr->expon);
}
ptr = ptr->next;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: