zoukankan      html  css  js  c++  java
  • c语言实现多项式求和

    一元多项式求和(c语言实现)

    ​ 把任意给定的两个一元多项式P(x) ,Q(x) 输入计算机,计算它们的和并输出计算结果。

    #include <stdio.h>
    #include <malloc.h>
    typedef struct LNode
    {
        int coef; // 系数
        int exp;  // 指数
        struct LNode* next;
    } LinkNode;
    
    void Create(LinkNode*& head) // 创建多项式
    {
        int n, coef, exp;
        LinkNode* index, * node;
        head = (LinkNode*)malloc(sizeof(LinkNode)); // 创建头节点
        index = head;                                // 辅助指针,使 index 指向最后一个节点,没次新增加一个节点,index就后移
        printf("请输入多项式的项数:");
        scanf("%d", &n);
        for (int i = 1; i <= n; i++)
        {
            printf("请输入第%d项的系数和指数", i);
            scanf("%d %d", &coef, &exp);
            node = (LinkNode*)malloc(sizeof(LinkNode)); // 创建新的节点
            node->coef = coef;
            node->exp = exp;
            index->next = node; // 将新创建的加入到链表中
            index = node;       // index指向新的节点
        }
        index->next = NULL;
    }
    
    void Display(LinkNode* L) // 输出多项式
    {
        L = L->next;   // 让 指向第一个节点
        while (L != NULL)           // 如果 p 不为空(链表不为空),则输出
        {
            printf("%dX^%d", L->coef, L->exp);  // 输出系数 和 指数 
            if (L->next != NULL)            // 如果 p 的下一个节点不为空,这就输出一个 + 号(防止多输出一个 + 号)
            {
                printf("+");
            }
            L = L->next;
        }
        printf("
    ");
    }
    
    LinkNode* ListAdd(LinkNode* p, LinkNode* q) // 多项式相加
    {
        p = p->next;
        q = q->next;
        LinkNode* addL, * index, * node = NULL;     // 用 addL存储相加后的二项式, index 为辅助指针,node为新节点
        addL = (LinkNode*)malloc(sizeof(LinkNode));
        index = addL;
    
        while (p != NULL && q != NULL)              // 目的是为了让两个多项式为空去比较
        {
            if (p->exp > q->exp)                    // 如果 p 的指数大于 q 的指数就把 p 的该项做为新节点,让后让 p 后移一位
            {
                node = (LinkNode*)malloc(sizeof(LinkNode)); 
                node->coef = p->coef;       
                node->exp = p->exp;
                index->next = node;
                index = node;
                p = p->next;
            }
            else if (p->exp == q->exp)          // 如果 p 的指数等于 q 的指数,就把 p 和 q 的系数相加作为新节点,让后让 p 和 q 后移一位
            {
                node = (LinkNode*)malloc(sizeof(LinkNode));
                node->coef = p->coef + q->coef;
                node->exp = p->exp;
                if (node->coef == 0)
                {
                    free(node);
                }
                else
                {
                    index->next = node;
                    index = node;
                }
                p = p->next;
                q = q->next;
            }
            else                          // 如果 q 的指数大于 p 的指数就把 q 的该项做为新节点,让后让 q 后移一位
            {
                node = (LinkNode*)malloc(sizeof(LinkNode));
                node->coef = q->coef;
                node->exp = q->exp;
                index->next = node;
                index = node;
                q = q->next;
            }
        }
        if (p != NULL)          // 如果 p 不为空,说明 q 为空了,就可以直接将 p 后面的节点给 node
        {
            node->next = p->next;
        }
        else if (q != NULL)     // 如果 q 不为空,说明 p 为空了,就可以直接将 q 后面的节点给 node
        {
            node->next = q->next;
        }
        else                    // 如果执行这个则所民 p 和 q 都为空了,就让node指向的最后的节点指向空
        {
            node->next = NULL;
        }
        return addL;
    }
    int main(int argc, char const* argv[])
    {
        LinkNode* P, * Q;
        printf("请输入第一个多项式");
        Create(P);
        Display(P);
        printf("请输入第二个多项式");
        Create(Q);
        Display(Q);
        LinkNode* List = ListAdd(P, Q);
        printf("相加后的多项式为:");
        Display(List);
        return 0;
    }
    
  • 相关阅读:
    mysql高可用架构的构想
    shell进阶——expect免交互工具的使用
    Mysql性能优化之参数配置(转)
    mysql主从同步问题梳理
    使用mysql-proxy实现mysql的读写分离
    Mysql数据库的主从与主主
    Mariadb远程登陆配置及相关问题排查
    redis集群搭建及常用操作
    weblogic的linux静默搭建
    Python traceback 模块,追踪错误
  • 原文地址:https://www.cnblogs.com/DawnCoody/p/13834488.html
Copyright © 2011-2022 走看看