C语言实现多项式的相加

 更新时间:2019年10月18日 13:21:21   作者:这个饕字怎么读  
这篇文章主要为大家介绍了C语言实现多项式的相加,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

本文实例为大家分享了C语言多项式相加的具体代码,供大家参考,具体内容如下

包含带头节点的链表的初始化,输出:

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>

typedef struct Pol
{
 int coe; // 系数 
 int index; // 指数 
 struct Pol *next;
}Pol;

 
int main(int argc, char *argv[])
{

 Pol *head1 = NULL; // 第一个多项式
 Pol *head2 = NULL; // 第二个多项式
 Pol *Initiate(Pol *head1); // 声明初始化函数
 void Output(Pol *head);  // 声明输出函数
 void PolAdd(Pol *head1, Pol *head2); // 声明相加函数

 int coe, index; 
 char sign;
 Pol *p;
 int n = 0;

 // 初始化第一个多项式
 head1 = Initiate(head1);
 p = head1;
 while (1)
 {
 scanf("%dx%d%c", &coe, &index, &sign);

 p->next = (Pol *)malloc(sizeof(Pol));
 p = p->next;
 p->coe = coe;
 p->index = index;
 p->next = NULL;

 if(sign == '\n')
  break;
 }
 printf("第一多项式输入完毕。\n");

 // 初始化第二个多项式
 head2 = Initiate(head2);
 p = head2;
 while (1)
 {
 scanf("%dx%d%c", &coe, &index, &sign);

 p->next = (Pol *)malloc(sizeof(Pol));
 p = p->next;
 p->coe = coe;
 p->index = index;
 p->next = NULL;

 if (sign == '\n')
  break;
 }
 printf("第二多项式输入完毕。\n");

 // 调用相加函数和输出函数
 PolAdd(head1, head2);
 Output(head1);


 system("PAUSE");
 return 0;
}

// 初始化链表函数
Pol *Initiate(Pol *head)
{
 head = (Pol *)malloc(sizeof(Pol));
 head->next = NULL;

 return head;
}

// 初始化相加函数
void PolAdd(Pol *head1, Pol *head2)
{
 Pol *p = head1->next;
 Pol *q = head2->next;
 Pol *pre = head1;
 Pol *temp = NULL;
 int sum;

 while ((p != NULL) && (q != NULL))
 {
 if (p->index < q->index)
 {
  pre->next = p;
  pre = pre->next;
  p = p->next;
 }
 else if(p->index == q->index)
 {
  sum = p->coe + q->coe;
  if (sum != 0)
  {
  p->coe = sum;
  pre->next = p;
  pre = pre->next;
  p = p->next;

  // 删除节点
  temp = q;
  q = q->next;
  free(temp);
  }
  else
  {
  temp = p;
  p = p->next;
  free(temp);

  temp = q;
  q = q->next;
  free(temp);
  }
 }
 else
 {
  pre->next = q;
  pre = pre->next;
  q = q->next;
 }
 }

 // 两串长度不相等时,把尾部一次加入
 if (p != NULL)
 pre->next = p;
 else
 pre->next = q;
 
}

// 输出函数
void Output(Pol *head)
{
 Pol *p = head;
 p = p->next;
 int i = 0;
 while (p)
 {
 if (p->coe > 0 && i != 0)
 {
  printf("+%dX^%d", p->coe, p->index);
  p = p->next;
 }
 else
 {
  printf("%dX^%d", p->coe, p->index);
  p = p->next;
 }
 i++;
 }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • 利用c++和easyx图形库做一个低配版扫雷游戏

    利用c++和easyx图形库做一个低配版扫雷游戏

    这篇文章主要介绍了用c++和easyx图形库做一个低配版扫雷游戏,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-01-01
  • C语言指针原来也可以这样了解

    C语言指针原来也可以这样了解

    这篇文章非常详细的讲解了C语言中指针的概念,包含多种方法,多种定义,全面的说明了C语言的特性,希望能给你带来帮助
    2021-08-08
  • C++ 输入scanf()和输出printf()的操作

    C++ 输入scanf()和输出printf()的操作

    这篇文章主要介绍了C++ 输入scanf()和输出printf()的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-12-12
  • C语言将24小时制转换为12小时制的方法

    C语言将24小时制转换为12小时制的方法

    这篇文章主要介绍了C语言将24小时制转换为12小时制的方法,涉及C语言针对时间的相关操作技巧,非常简单实用,需要的朋友可以参考下
    2015-07-07
  • QString和char以及string之间的赋值详解

    QString和char以及string之间的赋值详解

    QString 、string 、char* 之间免不了相互赋值。下面是自己的总结。需要的朋友可以过来参考下
    2013-10-10
  • C语言实现学生信息管理系统(文件版)

    C语言实现学生信息管理系统(文件版)

    这篇文章主要为大家详细介绍了C语言实现学生信息管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-07-07
  • c++实现MD5算法实现代码

    c++实现MD5算法实现代码

    用c++实现了md5算法。包含 md5.h 和md5.cpp 两个文件。主要参考百度百科 “MD5” 原理,代码中变量命名也是参考其中的公式,程序的使用说明在md5.h 文件的末尾注释中
    2013-11-11
  • 详解C++ 的STL迭代器原理和实现

    详解C++ 的STL迭代器原理和实现

    这篇文章主要为大家介绍了C++的STL迭代器原理和实现,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-01-01
  • C语言工程文件该如何写(以三子棋游戏为例)

    C语言工程文件该如何写(以三子棋游戏为例)

    工程上写代码应分为多个文件,那么你知道C语言工程文件该如何写吗,本文就以以三子棋游戏为例,介绍一下,具有一定的参考价值,感兴趣的可以了解一下
    2023-09-09
  • C语言数组超详细讲解下篇扫雷

    C语言数组超详细讲解下篇扫雷

    数组是一组有序的数据的集合,本篇将带你结合数组来实现扫雷小游戏,上手实练更快的能够掌握数组使用,感兴趣的朋友来看看吧
    2022-04-04

最新评论