C语言实现一元多项式求积
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
typedef struct Node
{
int coef;//系数
int exp;//指数
struct Node *next;
}PolyNode;
PolyNode *Creatpoly()//创建多项式的单链表,尾插法
{
PolyNode *h,*p,*q;
h=(PolyNode *)malloc(sizeof(PolyNode));//链表头结点
p=h;
p->next=NULL;
printf("please input the Polyomial coef & exp a,b,when input 0 stop\n");
q=(PolyNode *)malloc(sizeof(PolyNode));
scanf("%d,%d",&q->coef,&q->exp);
while(q->coef!=0)
{
p->next=q;
p=q;
q=(PolyNode *)malloc(sizeof(PolyNode));
scanf("%d,%d",&q->coef,&q->exp);
}
p->next=NULL;
return(h);
}
void Prin_poly(PolyNode *h)//将多项式输出函数
{
PolyNode *p;
p=h->next;
while(p!=NULL)
{
if(p->coef>0&&p!=h->next)
{
if(p->exp>0)
printf("+%dx^%d",p->coef,p->exp);
else if(p->exp<0)
printf("+%dx^(%d)",p->coef,p->exp);
else
printf("+%d",p->coef);
}
else if(p->coef<0&&p!=h->next)
{
if(p->exp>0)
printf("%dx^%d",p->coef,p->exp);
else if(p->exp<0)
printf("%dx^(%d)",p->coef,p->exp);
else
printf("%d",p->coef);
}
else
{
if(p->exp>0)
printf("%dx^%d",p->coef,p->exp);
else if(p->exp<0)
printf("%dx^(%d)",p->coef,p->exp);
else
printf("%d",p->coef);
}
p=p->next;
}
}
void Insort(PolyNode *h)//排序函数,使多项式中的各项按X的升幂排列
{
PolyNode *s,*p;
int t,m;
for(p=h->next;p!=NULL;p=p->next)//类似于冒泡排序
{
for(s=h->next;s->next!=NULL;s=s->next)
{
if(s->exp>s->next->exp)
{
t=s->exp;
m=s->coef;
s->coef=s->next->coef;
s->exp=s->next->exp;
s->next->coef=m;
s->next->exp=t;
}
}
}
}
void UnitePoly(PolyNode *h)//合并同类项
{
PolyNode *p1,*p2,*q1,*q2,*temp;
q1=h;
p1=q1->next;
while(p1!=NULL)
{
p2=p1->next;
q2=p1;
while(p2!=NULL)
{
if(p1->exp==p2->exp)
{
p1->coef=p1->coef+p2->coef;
if(p1->coef==0)
{
temp=p2;
q2->next=p2->next;
free(temp);
temp=p1;
q1->next=p1->next;
p1=q1;
free(temp);
break;
}
else
{
temp=p2;
q2->next=p2->next;
p2=p2->next;
free(temp);
}
}
else
{
q2=p2;
p2=p2->next;
}
}
q1=p1;
p1=p1->next;
}
}
PolyNode *polymuti(PolyNode *h1,PolyNode *h2)//多项式相乘
{
PolyNode *h,*p,*p1,*p2,*q;
p1=h1->next;
h=p=(PolyNode *)malloc(sizeof(PolyNode));
p->next=NULL;
while(p1)
{
p2=h2->next;
while(p2)
{
q=(PolyNode *)malloc(sizeof(PolyNode));
q->coef=p1->coef*p2->coef;
q->exp=p1->exp+p2->exp;
p->next=q;
p=q;
p2=p2->next;
}
p1=p1->next;
}
p->next=NULL;
return(h);
}
int main()
{
PolyNode *h1,*h2,*h;
h1=Creatpoly();
printf("the Polyomial is P1(x)=");
UnitePoly(h1);
Insort(h1);
Prin_poly(h1);
printf("\n");
h2=Creatpoly();
printf("the Polyomial is P2(x)=");
UnitePoly(h2);
Insort(h2);
Prin_poly(h2);
printf("\n");
printf("press any key to check the result\n");
getch();
printf("after multi the result is P(x)=");
h=polymuti(h1,h2);
UnitePoly(h);
Insort(h);
Prin_poly(h);
printf("\n");
return 0;
}
C语言实现一元多项式求积的更多相关文章
- 数据结构算法C语言实现(六)---2.4一元多项式的表示及相加
一.简述 利用链表表示稀疏多项式,并基于之前的一些操作(编程实现上还是有所不同的)组合新的操作实现一元多项式的表示及相加. 二.ADT 抽象数据类型一元多项式的定义 ADT Polyomail{ 数据 ...
- 链表一元多项式计算器的实现(Java语言描述)
链表的经典应用,程序在多项式相加同类项合并还有小的瑕疵,有待改进. 代码如下: package 一元多项式计算器; public class PolyNode { private double a; ...
- 1010 一元多项式求导 (25 分) C语言
设计函数求一元多项式的导数.(注:xn(n为整数)的一阶导数为nxn−1.) 输入格式: 以指数递降方式输入多项式非零项系数和指数(绝对值均为不超过 1000 的整数).数字间以空格分隔. ...
- 一元多项式的乘法与加法运算(C语言)
输入格式: 输入分2行,每行分别先给出多项式非零项的个数,再以指数递降方式输入一个多项式非零项系数和指数(绝对值均为不超过1000的整数).数字间以空格分隔. 输出格式: 输出分2行,分别以指数递降方 ...
- 一元多项式Polynomial的C语言实现
/* 编译器:Dev-c++ 5.4.0 文件名:Polynomial.cpp 代码版本号:1.0 时间:2015年10月9日21:53:26 */ /* 总结: 1.结构体指针指向的区域要手动分配内 ...
- 基于visual Studio2013解决C语言竞赛题之0613递归求积
题目
- 一道 google曾出过的笔试题:编程实现对数学一元多项式的相加和相乘操作(1)
数学中一元n次多项式可表示成如下的形式: Pn(x)=p0+p1x+p2x^2+…+pnx^n (最多有 n+1 项,n +1 个系数唯一确定她) (1)请设计一套接口用以表示和操 ...
- C语言细节总结笔记
C语言细节总结笔记 */--> C语言细节总结笔记 Table of Contents 1. 三步异或法交换数字 2. 做差法交换数字 3. 按n位置位 4. 求余求商求积 5. 辗除法求最大公 ...
- 【编程练习】收集的一些c++代码片,算法排序,读文件,写日志,快速求积分等等
写日志: class LogFile { public: static LogFile &instance(); operator FILE *() const { return m_file ...
随机推荐
- 【算法笔记】B1048 数字加密
1048 数字加密 (20 分) 本题要求实现一种数字加密方法.首先固定一个加密用正整数 A,对任一正整数 B,将其每 1 位数字与 A 的对应位置上的数字进行以下运算:对奇数位,对应位的数字相加后对 ...
- hql语句加别名的错误
写了一个查询数量的方法,结果执行不出来,debug后是runtimeException,然后就在那个hql里面使劲找,将他翻译成sql在数据库中执行,结果也没问题,原来的hql如下: 注意这个num, ...
- C# 一些请求的基类(待补充)
using System.Runtime.Serialization; /// <summary> /// 通用分页请求类 /// </summary> [DataContra ...
- 人生苦短,我用pycharm
一.安装 1.首先到官网上下载正版,然后点击安装,只需要更改下面一个地方即可 2.激活码或者帐号的话,可以去百度搜,也可以去某宝买,也就3块钱(一年),不建议使用破解版,如果你真的差这三块钱的话,你还 ...
- git 代码统计
查看git上的个人代码提交量: git log --author="Marek Romanowski" --since="2019-01-01" --no-me ...
- PIE SDK矢量数据简单渲染
1. 功能简介 PIE SDK对数据的符号化分为矢量数据渲染和栅格数据渲染两大类. 目前PIE SDK中针对矢量数据渲染包括简单渲染.唯一值渲染.分级渲染.自定义渲染:针对栅格数据渲染包括拉伸渲染.R ...
- java se系列(四) 函数、数组、排序算法、二分法、二维数组
1 函数 1.1 数的概述 发现不断进行加法运算,为了提高代码的复用性,就把该功能独立封装成一段独立的小程序,当下次需要执行加法运算的时候,就可以直接调用这个段小程序即可,那么这种封装形形式的具体表 ...
- oracle 基础知识(七)----动态性能视图
一,动态性能视图介绍 动态性能视图属于数据字典,系统管理员用户 SYS 可以访问它们.在数据库打开和使用时不断进行更新,而且它们的内容主要与性能有关.虽然这些视图很像普通的数据库表,但它们不允许用户直 ...
- 剑指offer第3题:从尾到头打印链表
方法一:采用栈来存储,用ArrayList保存.注意题目给出的输出结果是ArrayList import java.util.ArrayList; import java.util.Stack; pu ...
- URLEncoder.encode问题
遇到java里的URLEncoder.encode方法编码后与javascript的encodeURIComponent方法的结果有点不一样,找了一下资料,原来URLEncoder实现的是HTML形式 ...