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语言实现相关推荐

  1. c语言中 各种括号应成对出现,C语言::验证花括号成对出现

    题目要求 编写一个程序,它从标准输入(终端)读取C源代码,并验证所有的花括号都正确的成对出现. 注意:你不必担心注释内部.字符串常量内部和字符常量形式的花括号. 算法分析 我们先判断左花括号的数量是否 ...

  2. c语言中尖括号的作用,C语言中,#include

    C语言中,#include 头文件中的尖括号可以用双引号""代替吗?那还可以用圆括号代替呢?以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后 ...

  3. 栈 括号匹配问题(C语言)

    栈 括号匹配问题(C语言) 栈 括号匹配问题 问题描述: 假设一个算术表达式中可以包含三种括号:圆括号"("和")",方括号"["和&quo ...

  4. 判断字符串中的括号是否匹配-C语言

    判断字符串中的括号是否匹配-C语言 递归实现: 先检搜一对匹配的括号,再对里面的内容进行匹配,匹配完后再继续往下匹配-- #include <stdio.h> #include <s ...

  5. 基于R语言一元线性回归模型实例及代码

    基于R语言一元线性回归模型实例及代码 题目描述 数据特征及可视化 建立模型与初步评价 (自己写lm()代码) 显著性检验 整体显著性检验 数学理论 系数显著性检验 代码实现系统显著性检验 回归诊断 异 ...

  6. c语言中 小括号的作用,c语言小括号的用法有哪些用处

    C语言的小括号里面表示一条语句,返回值是多条语句中最靠右的语句的返回值,下面学习啦小编就为大家介绍c语言小括号的用法,欢迎大家阅读. c语言小括号的用法:单小括号 () ①命令组.括号中的命令将会新开 ...

  7. c语言学生作业ppt课件怎么做,C语言课件完整版(精华).ppt

    <C语言课件完整版(精华).ppt>由会员分享,可在线阅读,更多相关<C语言课件完整版(精华).ppt(484页珍藏版)>请在人人文库网上搜索. 1.1,计算机程序设计基础(C ...

  8. 为什么《七周七语言》选中的是这几种语言?

    从众多语言中,挑出本书包含的几门语言,这一过程也许不像你想得那么复杂.我们只不过发了些调查问卷,向本书的潜在读者请教了一番.调查数据汇总上来时,有八门语言入选希望最大.不过,我先是把JavaScrip ...

  9. c语言小饭店等位就餐程序,C语言程序设计 C语言程序设计 3.C语言程序设计教案全部.doc...

    C语言程序设计教案 PAGE PAGE 2 C语言程序设计教案 C语言程序设计教案 编写:宋铁桥 计算机技术系 二〇一七年三月整理 河北工业职业技术学院 <C语言程序设计>课程教案首页 授 ...

  10. 《零基础看得懂的C语言入门教程 》——(十一)C语言自定义函数真的很简单

    一.学习目标 了解C语言的自定义函数的使用方法 了解C语言自定义函数的传参 了解C语言自定义函数的返回值 目录 C语言真的很难吗?那是你没看这张图,化整为零轻松学习C语言. 第一篇:(一)脱离学习误区 ...

最新文章

  1. 最新发布丨游戏市场“超预期”增长背景下,如何加速产品精品化 运营精细化?...
  2. HH SaaS电商系统的标签系统设计
  3. HttpWebRequest类
  4. 内核中的UDP socket流程(5)——inet_create
  5. Go 使用 JSON
  6. 在用到select2时,临时抱佛脚学习了一下
  7. 小程序二维码需要发布正式版后才能获取到_IOS14.3正式版发布时间12月15日:苹果ios14.3正式版内容一览[多图]-游戏产业...
  8. 关于android的各种disk images(看过的讲android image比较细致的好文)
  9. LibreOJ #109. 并查集
  10. 配置国内免费registry mirror -daocloud、网易、阿里云和七牛
  11. idea本地运行JavaWeb项目
  12. [jzoj NOIP2018模拟11.02]
  13. android+ios打印机,Android/iOS手机安装HP打印机的详细方法和操作步骤
  14. 推荐vs code十大强大的插件!
  15. api文档 luci_Luci介绍
  16. mac系统升级导致VirtualBox报Kernel driver not installed (rc=-1908)
  17. python调包师_为“Python调包侠” 画像
  18. 小米全国高校编程大赛 正式赛题解
  19. flex水平排列左对齐
  20. App陷阱防不胜防:欺骗误导用户下载App、欺骗误导用户提供个人信息

热门文章

  1. 一文详解蒙特卡洛(Monte Carlo)法及其应用
  2. 集合中的(交集,并集,差集,补集,对称差集)
  3. 【集合论】集合运算 ( 并集 | 交集 | 不相交 | 相对补集 | 对称差 | 绝对补集 | 广义并集 | 广义交集 | 集合运算优先级 )
  4. 3D 沙盒游戏之人物的点击行走移动
  5. 讲解VR全景拍摄相机光圈、感光度和快门的作用
  6. 数字电路设计的基本方法有哪些
  7. 蓝屏出现STOP:0X00000077是什么原因造成
  8. 地壳中元素含量排名记忆口诀_【化学好好玩】用口诀帮你速记忆化学知识
  9. 【c语言】解释为什么32767+1=-32768
  10. FTP无法在资源管理器中打开