c语言 一元多项式展开括号,一元多项式Polynomial的C语言实现
1 /*
2 编译器:Dev-c++ 5.4.03 文件名:Polynomial.cpp4 代码版本号:1.05 时间:2015年10月9日21:53:266 */
7
8 /*
9 总结:10 1.结构体指针指向的区域要手动分配内存11 2.反复使用的代码封装成函数12 */
13 #include
14 #include
15
16 #define ERROR 0
17 #define OK 1
18 #define TRUE 1
19 #define FALSE 0
20 #define OVERFLOW -2
21
22 typedef intStatus;23 typedef struct
24 {25 floatcoef;26 intexpn;27 }term, ElemType;28
29 typedef structLNode30 {31 ElemType *data;32 struct LNode *next;33 }LNode,*Link,*Position;34
35 typedef struct_LinkList36 {37 Link head,tail;38 intlen;39 }LinkList;40
41 /*多项式的初始化,建立头结点*/
42 Status initPolynomial(LinkList *l){43 Link p;44 p=(Link)malloc(sizeof(LNode));45 if(!p)46 exit(OVERFLOW);47
48 p->next=NULL;49 (*l).head=(*l).tail=p;50 (*l).len=0;51 printf("多项式初始化成功\n");52 returnOK;53 }54
55 /*判断多项式是否为空表*/
56 bool listEmpty(LinkList *l){57 return !l->len;58 }59
60 /*整数比较函数*/
61 int comp(int a1,inta2)62 {63 if(a1>a2)64 return 1;65 else
66 if(a1==a2)67 return 0;68 else
69 return -1;70 }71
72 /*判断新节点的指数,定位节点在多项式中是否已经存在*/
73 int locateLNode(LinkList *l,LNode *p){74
75 LNode *q=((*l).head)->next;76 //if(q) printf("q->data->expn为%d,p->data->expn为%d",q->data->expn,p->data->expn);
77 while(q&&(q->data->expn!=p->data->expn))78 {79 q=q->next;80
81 }82 //printf("地址%p\n",q);
83 if(!q)84 return 0;85 else
86 {87 return 1;88 };89
90 }91 /*销毁多项式*/
92 Status destroyPoly(LinkList *l){93 LNode *p;94 LNode *q=l->head;95 while(q)96 {97 p=q->next;98 free(p);99 q=q->next;100 }101 free(l->head);102
103
104 returnOK;105 }106 /*创建一个结点*/
107 LNode *createLNode(){108 LNode *q=(LNode*)malloc(sizeof(LNode));109 q->data=(ElemType*)malloc(sizeof(ElemType));110 returnq;111 }112
113 /*case 新节点的指数相等时只需系数相加*/
114 Status lNodePlus(LinkList *l,LNode *p){115
116 LNode *q=((*l).head)->next;117 while(q && q->data->expn!=p->data->expn)118 {119 q=q->next;120
121 }122 if(!q)123 returnOK;124 else
125 {126
127 q->data->coef+=p->data->coef;128 returnOK;129 }130 }131 /*case 插入新节点*/
132 Status insertLNode(LinkList *l,LNode *p){133
134 LNode *q=((*l).head)->next;135
136 LNode *qian=(*l).head;//q的前一个节点
137 while(q&&q->data->expn < p->data->expn){138
139 qian=q;140 q=q->next;141 }142 p->next=q;143 qian->next=p;144 l->len++;145 returnOK;146 }147 /*all 插入节点*/
148 Status LNodePlus(LinkList *l,LNode *p){149 if(locateLNode(l,p)){150 lNodePlus(l,p);//指数相等时只需要系数相加
151 }152 else{153 insertLNode(l,p);154 }155 returnOK;156 }157
158 /*创建多项式m项的系数和指数*/
159 Status createPolynomial(LinkList *l,intm){160
161 float coef; //系数coefficient
162 int expn;//指数exponent
163 for(int i=1;i<=m;i++){164 printf("\n请输入第%d个系数和指数",i);165 LNode *p=createLNode();166 scanf("%f",&(p->data->coef));167 scanf("%d",&(p->data->expn));168 LNodePlus(l,p);169 }170 printf("多项式创建完毕\n");171 }172
173 /*循环输出多项式的系数和指数*/
174 Status polyTraverse(LinkList *l)175 {176 LNode *q=((*l).head)->next;177 printf("\n该多项式有%d个项\n",l->len);178 while(q)179 {180 printf("%fx^%d+",q->data->coef,q->data->expn);181 q=q->next;182 }183 returnOK;184 }185
186
187 /*多项式的加法*/
188 LinkList addPoly(LinkList *l1,LinkList *l2){189
190 LNode *q1=((*l1).head)->next;191 LNode *q2=((*l2).head)->next;192 LinkList l;193 initPolynomial(&l);194 LNode* p=l.head;//p指向多项式最后一项
195 while(q1 &&q2){196
197 switch(comp(q1->data->expn,q2->data->expn))198 {199 case 1:{200 LNode *q=createLNode();201
202 q->data->coef=q2->data->coef;203 q->data->expn=q2->data->expn;204
205 q->next=NULL;206 p->next=q;207 p=p->next;208
209 q2=q2->next;210 l.len++;211 break;212 }213 case 0:{214 LNode *q=createLNode();215
216 q->data->coef=q1->data->coef+q2->data->coef;217 q->data->expn=q1->data->expn;218
219 q->next=NULL;220 p->next=q;221 p=p->next;222
223 q1=q1->next;224 q2=q2->next;225 l.len++;226 break;227 }228 case -1:{229 LNode *q=createLNode();230
231 q->data->coef=q1->data->coef;232 q->data->expn=q1->data->expn;233
234 q->next=NULL;235 p->next=q;236 p=p->next;237
238 q1=q1->next;239 l.len++;240 break;241 }242 }243 }244
245 while(q1){246 LNode *q=createLNode();247 q->data->coef=q1->data->coef;248 q->data->expn=q1->data->expn;249 q->next=NULL;250 p->next=q;251 p=p->next;252 q1=q1->next;253 l.len++;254 }255
256 while(q2){257 LNode *q=createLNode();258 q->data->coef=q2->data->coef;259 q->data->expn=q2->data->expn;260 q->next=NULL;261 p->next=q;262 p=p->next;263 q2=q2->next;264 l.len++;265 }266
267
268 returnl;269 }270
271 /*多项式系数取反*/
272 Status getOpposite(LinkList *l){273 LNode *q=l->head->next;274 while(q)275 {276 q->data->coef=(-(q->data->coef));277 q=q->next;278 }279 returnOK;280 }281 /*多项式的减法*/
282 LinkList subtractPoly(LinkList *l1,LinkList *l2){283 getOpposite(l2);284 LinkList l=addPoly(l1,l2);285 getOpposite(l2);286 returnl;287 }288
289 /*多项式的乘法*/
290 LinkList multiplyPoly(LinkList *l1,LinkList *l2){291
292 LinkList l;293 initPolynomial(&l);294 LNode *q1=l1->head->next;295 LNode *q2=l2->head->next;296 while(q1){297 q2=l2->head->next;298 while(q2){299 LNode *q=createLNode();300 q->data->coef=q1->data->coef*q2->data->coef;301 q->data->expn=q1->data->expn+q2->data->expn;302 printf("q2->data->coef为%f\n",q2->data->coef);303 LNodePlus(&l,q);304 q2=q2->next;305 }306 q1=q1->next;307 }308 returnl;309 }310
311
312 intmain(){313 LinkList l1,l2;314
315 /*int n;316 LinkList l3;317 initPolynomial(&l3);318 printf("请输入多项式的term个数:\n");319 scanf("%d",&n);320 createPolynomial(&l3,n);321 polyTraverse(&l3);322 destroyPoly(&l3);323 printf("删除后遍历:\n");324 polyTraverse(&l3);*/
325
326 intm;327 initPolynomial(&l1);328 initPolynomial(&l2);329 printf("请输入多项式的term个数:\n");330 scanf("%d",&m);331 createPolynomial(&l1,m);332 createPolynomial(&l2,m);333 polyTraverse(&l1);334 polyTraverse(&l2);335 LinkList L3=addPoly(&l1,&l2);336 printf("多项式相加后\n");337 polyTraverse(&L3);338 LinkList L4=subtractPoly(&l1,&l2);339 printf("多项式相减后\n");340 polyTraverse(&L4);341 LinkList L5=multiplyPoly(&l1,&l2);342 printf("多项式相乘后\n");343 polyTraverse(&L5);344 system("pause");345 return 0;346 }
c语言 一元多项式展开括号,一元多项式Polynomial的C语言实现相关推荐
- c语言中 各种括号应成对出现,C语言::验证花括号成对出现
题目要求 编写一个程序,它从标准输入(终端)读取C源代码,并验证所有的花括号都正确的成对出现. 注意:你不必担心注释内部.字符串常量内部和字符常量形式的花括号. 算法分析 我们先判断左花括号的数量是否 ...
- c语言中尖括号的作用,C语言中,#include
C语言中,#include 头文件中的尖括号可以用双引号""代替吗?那还可以用圆括号代替呢?以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后 ...
- 栈 括号匹配问题(C语言)
栈 括号匹配问题(C语言) 栈 括号匹配问题 问题描述: 假设一个算术表达式中可以包含三种括号:圆括号"("和")",方括号"["和&quo ...
- 判断字符串中的括号是否匹配-C语言
判断字符串中的括号是否匹配-C语言 递归实现: 先检搜一对匹配的括号,再对里面的内容进行匹配,匹配完后再继续往下匹配-- #include <stdio.h> #include <s ...
- 基于R语言一元线性回归模型实例及代码
基于R语言一元线性回归模型实例及代码 题目描述 数据特征及可视化 建立模型与初步评价 (自己写lm()代码) 显著性检验 整体显著性检验 数学理论 系数显著性检验 代码实现系统显著性检验 回归诊断 异 ...
- c语言中 小括号的作用,c语言小括号的用法有哪些用处
C语言的小括号里面表示一条语句,返回值是多条语句中最靠右的语句的返回值,下面学习啦小编就为大家介绍c语言小括号的用法,欢迎大家阅读. c语言小括号的用法:单小括号 () ①命令组.括号中的命令将会新开 ...
- c语言学生作业ppt课件怎么做,C语言课件完整版(精华).ppt
<C语言课件完整版(精华).ppt>由会员分享,可在线阅读,更多相关<C语言课件完整版(精华).ppt(484页珍藏版)>请在人人文库网上搜索. 1.1,计算机程序设计基础(C ...
- 为什么《七周七语言》选中的是这几种语言?
从众多语言中,挑出本书包含的几门语言,这一过程也许不像你想得那么复杂.我们只不过发了些调查问卷,向本书的潜在读者请教了一番.调查数据汇总上来时,有八门语言入选希望最大.不过,我先是把JavaScrip ...
- c语言小饭店等位就餐程序,C语言程序设计 C语言程序设计 3.C语言程序设计教案全部.doc...
C语言程序设计教案 PAGE PAGE 2 C语言程序设计教案 C语言程序设计教案 编写:宋铁桥 计算机技术系 二〇一七年三月整理 河北工业职业技术学院 <C语言程序设计>课程教案首页 授 ...
- 《零基础看得懂的C语言入门教程 》——(十一)C语言自定义函数真的很简单
一.学习目标 了解C语言的自定义函数的使用方法 了解C语言自定义函数的传参 了解C语言自定义函数的返回值 目录 C语言真的很难吗?那是你没看这张图,化整为零轻松学习C语言. 第一篇:(一)脱离学习误区 ...
最新文章
- 最新发布丨游戏市场“超预期”增长背景下,如何加速产品精品化 运营精细化?...
- HH SaaS电商系统的标签系统设计
- HttpWebRequest类
- 内核中的UDP socket流程(5)——inet_create
- Go 使用 JSON
- 在用到select2时,临时抱佛脚学习了一下
- 小程序二维码需要发布正式版后才能获取到_IOS14.3正式版发布时间12月15日:苹果ios14.3正式版内容一览[多图]-游戏产业...
- 关于android的各种disk images(看过的讲android image比较细致的好文)
- LibreOJ #109. 并查集
- 配置国内免费registry mirror -daocloud、网易、阿里云和七牛
- idea本地运行JavaWeb项目
- [jzoj NOIP2018模拟11.02]
- android+ios打印机,Android/iOS手机安装HP打印机的详细方法和操作步骤
- 推荐vs code十大强大的插件!
- api文档 luci_Luci介绍
- mac系统升级导致VirtualBox报Kernel driver not installed (rc=-1908)
- python调包师_为“Python调包侠” 画像
- 小米全国高校编程大赛 正式赛题解
- flex水平排列左对齐
- App陷阱防不胜防:欺骗误导用户下载App、欺骗误导用户提供个人信息
热门文章
- 一文详解蒙特卡洛(Monte Carlo)法及其应用
- 集合中的(交集,并集,差集,补集,对称差集)
- 【集合论】集合运算 ( 并集 | 交集 | 不相交 | 相对补集 | 对称差 | 绝对补集 | 广义并集 | 广义交集 | 集合运算优先级 )
- 3D 沙盒游戏之人物的点击行走移动
- 讲解VR全景拍摄相机光圈、感光度和快门的作用
- 数字电路设计的基本方法有哪些
- 蓝屏出现STOP:0X00000077是什么原因造成
- 地壳中元素含量排名记忆口诀_【化学好好玩】用口诀帮你速记忆化学知识
- 【c语言】解释为什么32767+1=-32768
- FTP无法在资源管理器中打开