本文目录一览:
- 1、线性表及其应用(多项式相加、相乘)----根据程序画出流程图及对每句程序加注释(c语言)
- 2、POLYDGBL这是什么意思?
- 3、重载'='时报错:error C2801: 'operator =' must be a member是怎么回事?
- 4、关于返回临时对象调用析构函数的问题
线性表及其应用(多项式相加、相乘)----根据程序画出流程图及对每句程序加注释(c语言)
#include "stdio.h"
typedef struct node
{ int c,e; //节点的数据域,c是多项式的系数,e是多项式的指数
struct node *next; //节点的指针域
}PN; //自定义节点结构体,类型PN
PN *createPoly() //这个函数用来建立链表,返回值是一个节点指针
{ int n, e, c;
PN *head, *p; //定义头结点指针head,和节点指针p
printf("请输入多项式项数:");
scanf("%d", n); //得到n的值,既项数
head=p=new PN ; // * malloc(sizeof(PN));//让head,p都指向头结点(头结点不用来存放数据)
p-next=NULL; //到这里为止,一个空链表建立完成
while( n-- ) //循环n次
{
p-next=new PN;// * malloc(sizeof(PN));//动态分配新的节点,并接在链表末尾(尾插法)
p=p-next;
// printf("c e:"); //给新的节点,添加数据
scanf("%d%d" , p-c, p-e);
}
p-next=NULL; //将表尾的指针域置为空
return head; //返回头结点地址
}
void printPoly( PN *head) //这个函数用来输入链表信盯衡袭息
{ PN *p=head-next; //节点指针p用来遍历链表,p先指向表头
while(p) //当p=NULL时(已经到表尾),结束循环
{ printf(" (%d,%d) ", p-c, p-e); //显示当前节点的数据
p=p-next; //将p指向移到下一个节点
}
printf("\n"); //输出一个回车
}
void freePoly( PN *head) //这个函数用来销毁链表
{ PN *p; //用来释放节点(动态内存块)
while( head ) //当head=NULL时(已经到表尾),结束循环
{ p=head; //让p指向head所指的节点
head=head-next; //将head指向移到下一个节点
delete(p); //释放p所指的节点(动态内存块)
}
}
PN *polyAdd(PN *ha, PN *hb) //这个函数用来将两个多项式相加
{ int c, e; //c是多项式的系数,e是多项式的指数
PN *pa=ha-next, *pb=hb-next, //pa,pb用来遍历通过参数传进来的两个链表(参数是两个链表的头结点指针),暂且称它们为链表a,b
*hc, *pc; //hc是两个链表对应节点相加后的新链表的头结点,pc用来遍历新链表,此链表称它为c
hc=pc=new PN;
while( pa || pb ) //当两个链表都遍历完毕,则循凯兄环拦中停止
{
if( pa (pb==NULL || pa-e pb-e)) //取指数较小的一项链入链表或者链表b已经遍历完毕时,执行该if中的内容
{ c=pa-c;
e=pa-e;
pa=pa-next;
}
else if( pb (pa==NULL || pa-e pb-e)) //取指数较小的一项链入链表或者链表a已经遍历完毕时,执行该if中的内容
{ c=pb-c;
e=pb-e;
pb=pb-next;
}
else //指数相等的时候,执行
{ c=pa-c+pb-c;
e=pa-e;
pa=pa-next;
pb=pb-next;
}
if( c ) //将两个链表相加后的每个项 都放入新链表中
{
pc-next=new PN;
pc=pc-next;
pc-c=c;
pc-e=e;
}
}
pc-next=NULL;
return hc; //将新链表的头结点指针返回
}
PN *mulxmul(PN *ha, PN *hb) //这个函数将a表中每个项都掉用一次onexmul函数,最终实现多项式a与b的相乘
{ PN *t, *hc, *pa=ha-next;
PN *onexmul( PN *pa , PN *hb); //函数声明,因为接下来就要用到它
PN *polyAdd(PN *ha, PN *hb); //函数声明,因为接下来就要用到它
t=new PN; t-next=NULL; //存放最终结果的链表,t是表头,此表暂称为t表
while( pa ) //遍历a链表
{ hc=onexmul( pa, hb ); //将a表中pa所指的项与b表中所有的项相乘(即多项式a中的某一项与多项式b相乘)
t=polyAdd( t, hc ); //将每次相乘的结果相加
freePoly( hc ); //将调用onexmul函数产生的中间链表销毁,因为该链表的项,已经放到t链表中
pa=pa-next;
}
return t; //将t表的头结点指针返回
}
PN *onexmul ( PN *pa, PN *hb ) //这个函数用来将a表中pa所指的项与b表中所有的项相乘(即多项式a中的某一项与多项式b相乘)
{ PN *hc, *pc, *pb=hb-next; //hc是新链表的头结点,pc用来遍历新链表
hc=pc=new PN; //让hc,pc都指向头结点
while( pb ) //遍历b链表
{ pc-next=new PN; //建立新链表的节点
pc=pc-next;
pc-c=pa-c * pb-c; //给新节点赋值,系数等于系数相乘
pc-e=pa-e + pb-e; //指数等于指数相加
pb=pb-next;
}
pc-next=NULL;
return hc; //将新链表的头结点指针返回
}
int main()
{ PN *ha, *hb, *hc;
freopen("poly.in" , "r" , stdin); //只读模式打开poly.in
freopen("poly.txt", "w", stdout); //只写模式打开poly.txt
ha=createPoly(); //建立新链表,ha为头结点指针(多项式a)
printPoly(ha); //输出ha为头结点指针的链表信息
hb=createPoly(); //建立新链表,hb为头结点指针(多项式b)
printPoly(hb); //输出hb为头结点指针的链表信息
hc=polyAdd(ha, hb); //多项式a与多项式b相加,结果放在hc为头结点指针的链表中
printPoly(hc); //输出相加后的链表信息
freePoly(hc); //销毁该链表
hc=mulxmul(ha,hb); //多项式a与多项式b相乘,结果放在hc为头结点指针的链表中
printPoly(hc); //输出相乘后的链表信息
freePoly(ha); //销毁该链表
freePoly(hb); //销毁该链表
freePoly(hc); //销毁该链表
return 0;
}
OK,花了不少时间帮你写了下注释,应该比较完整了吧,原理和数学模型完全一样的,应该能看懂,流程图,相信看懂了程序,画起来不难,自己尝试下吧。
POLYDGBL这是什么意思?
聚乙烯的意思。
聚乙烯(polyethylene ,简称PE)是乙烯经聚合制得的一种热塑念辩性树脂。
在工业上,也包括乙烯与少量α-烯烃的共聚物。聚乙烯无臭,无毒,手感似蜡,具有优良的耐低温性能(最低使用温度可达-100~-70°C),化拆羡学稳定性好,能耐大多数酸碱的侵蚀(不耐具有氧化性质的酸)。常温下不溶于一般溶剂,吸水性小,电绝缘性优良。
聚乙烯有优异的化学稳定性,室温下耐盐酸、氢氟酸、磷酸、甲酸、胺类、氢氧化钠、氢氧化钾等各种化学物质腐蚀,但硝酸和硫酸对聚乙烯有较强的破坏作用。
扩展资料
聚乙烯可用吹塑、挤出、注射成型等方法加工,广泛应用于制造薄膜、中空制品、纤维和日用杂品等。
低密度聚乙烯广泛用作各种食品、衣物、医药、化肥、工业品的包装材料以及农用薄膜。也可用挤出法加工成复合薄膜用于包装重物。
1975年以来,高密度聚乙烯薄膜也得到发展,它的强度高、耐低温、防潮,并有良好的印刷性和可加工性。
此外,还旅高拍可以在纸、铝箔或其他塑料薄膜上挤出涂布聚乙烯涂层,制成高分子复合材料。
重载'='时报错:error C2801: 'operator =' must be a member是怎么回事?
这样写必须要用成员函数来重升运带载,就是说去悄凯掉friend
如果要用友元来重载的话,需要两个POLY参数吵芦。推荐友元。
关于返回临时对象调用析构函数的问题
编译器的BUG,不宽裤能返回自定义类,否则直接调用析构函数,据说新版的编译器解戚友决了这个问题,我用慎仔简的vc6和devc都有这个问题
POLY-NORM的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于polynormial fit、POLY-NORM的信息别忘了在本站进行查找喔。