• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

c语言实现多项式求和

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

一元多项式求和(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("\n");
}

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;
}

鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
C语言:通过指针对数组元素进行排序发布时间:2022-07-18
下一篇:
MSIL反汇编程序(Ildasm.exe)[C#]发布时间:2022-07-18
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap