7-23 一元多项式求导 (20 分)
设计函数求一元多项式的导数。
输入格式:
以指数递降方式输入多项式非零项系数和指数(绝对值均为不超过1000的整数)。数字间以空格分隔。
输出格式:
以与输入相同的格式输出导数多项式非零项的系数和指数。数字间以空格分隔,但结尾不能有多余空格。
输入样例:
3 4 -5 2 6 1 -2 0
输出样例:
12 3 -10 1 6 0
第一次做:
#include <stdio.h> #include <malloc.h> typedef int ElemType; typedef struct LNode { ElemType real; ElemType index; struct LNode *next; }LNode, *LinkList; int main() { LinkList L; LNode *temp, *head; L = (LNode *)malloc(sizeof(LNode)); L->next = NULL; head = L; int index, real; while(scanf("%d %d", &real, &index)!=EOF){ temp = (LNode *)malloc(sizeof(LNode)); temp->next = NULL; if(index != 0){ temp->real = real * index; temp->index = index - 1; head->next = temp; head = temp; } } head = L->next; if(!head) printf("0 0"); while(head){ if(head->next == NULL) printf("%d %d", head->real, head->index); else printf("%d %d ", head->real, head->index); head = head->next; } }
第二次做:
#include<stdio.h> #include<stdlib.h> #include<malloc.h> typedef struct LNode { int Coef; int index; struct LNode * next; }LNode, *List; void CreatList(List &L) { L = (LNode*)malloc(sizeof(LNode)); L->next = NULL; LNode *temp, *p = L; int coef, index; while(scanf("%d %d", &coef, &index)!=EOF){ temp = (LNode*)malloc(sizeof(LNode)); temp->next = NULL; temp->Coef = coef; temp->index = index; p->next = temp; p = temp; } } void Derivation(List &L) { LNode *p = L->next; LNode *pre = L; while(p != NULL){ if(p->index != 0){ p->Coef *= p->index; p->index -= 1; } else{ pre->next = p->next; } pre = pre->next; p = p->next; } } void Output(List L) { L = L->next; if(L == NULL){ printf("0 0 "); return ; } while(L != NULL){ if(L->next != NULL) printf("%d %d ", L->Coef, L->index); else printf("%d %d ", L->Coef, L->index); L = L->next; } } int main() { List L; CreatList(L); Derivation(L); Output(L); }