1010 一元多项式求导 (25)(25 分)提问
设计函数求一元多项式的导数。(注:x^n^(n为整数)的一阶导数为n*x^n-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 LNode *List;
struct LNode{
int cft; /* 系数 */
int idex; /* 指数 */
List next;
};
List ReadInput();
void Print(List L);
List fun(List L); /* 一元多项式求导 */
int main()
{
List L;
L = ReadInput();
L = fun(L);
Print(L);
return 0;
}
List ReadInput()
{
List L,P,t;
L = (List)malloc(sizeof(struct LNode));
P = L;
scanf("%d%d",&P->cft,&P->idex);
for(; getchar()!='\n' ; ) /* getchar 读入的可以是任意字符,但返回的是char ,所以这里不能用getchar()!=10*/
{
t = P;
P = (List)malloc(sizeof(struct LNode));
scanf("%d%d",&P->cft,&P->idex);
t->next = P;
}
P->next = NULL;
return L;
}
void Print(List L)
{
List P=L;
for(; P->next!=NULL; P=P->next)
printf("%d %d ",P->cft,P->idex);
printf("%d %d",P->cft,P->idex);
}
List fun(List L) /* 一元多项式求导 */
{
List P=L;
List t,s;
for(;P!=NULL;P=P->next)
{
if(P->idex == 0) /* 若指数为0,则 */
if(P==L) /* 只有一项,且为零多项式,例:6 */
{
P->cft = 0;
P->idex = 0;
break;
}
else /* 最小项系数为0,删除 */
{
free(P);
t->next=NULL;
break;
}
t = P;
P->cft = t->cft * t->idex;
P->idex = t->idex - 1;
}
return L;
}