数据结构(一)

问题 A: 数据结构作业01 -- 一元多项式的求导

时间限制: 1 Sec  内存限制: 128 MB
提交: 3429  解决: 611
[提交][状态][讨论版]

题目描述

一个一元多项式可以看作由若干个一元单项式按降幂排列成的线性表。请编写程序对输入的一元多项式进行求导,并输出求导的结果。

输入

输入为一个一元多项式,按照降幂依次输入每个单项式的系数和指数,并以-1 -1作为结束。系数和指数均为整数,指数不小于0。

输出

输出为求导结果多项式,按照降幂依次输出每个单项的系数和指数,每个数值后面用一个空格隔开,输出结果多项式后换行。 系数为0的单项式不得输出——除非结果多项式就是0,则直接输出0并换行。

样例输入

2 7 3 5 12 1 6 0 -1 -1

样例输出

14 6 15 4 12 0 

 

代码如下

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

typedef struct polynode                  //链表结构 
{
    int c;
    int e;
    struct polynode *next;
} poly;
 
 poly *creatpoly()                      //用三个指针创建链表 
 {                                      //一个记录链表头指针,一个用来开辟新空间,一个用来连接链表 
     int c;
     int e;
     poly *p,*q,*h;
     q = NULL,h = NULL;
     while(e != -1)
     {
         scanf("%d%d",&c,&e);
         h = (poly*)malloc(sizeof(poly));
         h->c = c;
         h->e = e;
         h->next = NULL;
         if (q == NULL) q = h;
         else p->next = h;
         p = h;
     }
     return q;
 }
 
 poly *qiudao(poly *q)                    //求导:用两个指针 
 {                                        //一个用来 记录求导后链表的首地址,一个从头移动到尾 
     poly *s;
     s = q;
     while(q)
     {
         q->c = (q->c)*(q->e);
         q->e = q->e - 1;
         q = q->next;
     } 
      return s;
 }

void printpoly(poly *s)                   //输出链表 
{
    int i = 0;                            //这儿 i 的作用就是判断有没有输入,根据题目意思,如果直接输入-1,-1就要输出0 ,与第62行的判断相对应 
    
    if (s->e == -1) { printf("0");i++; }
    else
    {
        while (s->next != NULL)
        {
            if (s->c != 0)
            {
                printf("%d %d ",s->c,s->e);
                i++;
            }
            s = s->next;
        }

    }
    if (i == 0) printf("0");
    
    printf("
");
}
 
int main()                                   //主函数 
{
    poly *q,*s;
    q = creatpoly();
    s = qiudao(q);
    printpoly(s);
    return 0;
}
原文地址:https://www.cnblogs.com/cunyusup/p/7642873.html