zoukankan      html  css  js  c++  java
  • 数据结构(一)

    问题 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;
    }
  • 相关阅读:
    java表达式中运算符优先级
    数据库建表规则
    linux 安装java环境
    springboot指定端口的三种方式
    服务器监控
    Dubbo 的配置主要分为三大类
    oracle数值函数 abs()、 ceil()、 cos()、 cosh()
    linux基础命令总结
    redis+sentinel集群部署
    centos7制作本地yum源
  • 原文地址:https://www.cnblogs.com/cunyusup/p/7642873.html
Copyright © 2011-2022 走看看