问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

多项式计算器怎样编写?用C++

发布网友 发布时间:2022-05-19 00:54

我来回答

1个回答

热心网友 时间:2023-11-26 20:07

#include<stdlib.h>/*调用动态分布函数和随机函数*/
#include<stdio.h>
#include<ctype.h>/*调用字符函数*/typedef struct term { //项的表示,多项式的项作为LinkList的数据元素
float coef; //系数
int expn; //指数 struct term *next;
}term; term* CreatPolyn(term *P,int m) { // 算法
// 输入m项的系数和指数,建立表示一元多项式的有序链表P
if(m <= 0) return NULL;
term *h = P = (term*)malloc(sizeof(term)), *q;
P->coef = 0.0;
int i;
printf("依次输入%d个数(前一个为系数,后一个为指数)\n",m*2);
for (i = 1; i <= m; ++i) { // 依次输入m个非零项
scanf("%f%d",&P->coef,&P->expn);
if(P->coef)
q = P;
P = P->next = (term*)malloc(sizeof(term));
}
q->next = NULL;
free(P);
return h;
} // CreatPolyn term* selsort(term *h) {
term *g, *p, *q;
if(!h) return NULL;
float f;
int i, fini = 1;
for(g = h;g->next&&fini;g = g->next) {
fini = 0;
for(p = h,q = h->next;q;p = p->next,q = q->next)
if (p->expn < q->expn) {
f = p->coef;i = p->expn;
p->coef = q->coef;p->expn = q->expn;
q->coef = f;q->expn = i;
fini = 1;
}
}
for(g = h,p = g->next;p;)
if(g->expn==p->expn) {
g->coef += p->coef;
g->next = p->next;
q = p;
p = p->next;
free(q);
}
else if(g->next) {
g = g->next;
p = p->next;
}
return h;
} void PrintfPoly(term *P) {
term *q = P;
if(!q) {
putchar('0');
return;
}
if(q->coef!=1) {
printf("%g",q->coef);
if(q->expn==1) putchar('X');
else if(q->expn) printf("X^%d",q->expn);
}
else if(!q->expn) putchar('1');
else if(q->expn==1) putchar('X');
else printf("X^%d",q->expn);
q = q->next;
while (q) {
if(q->coef > 0) putchar('+');
if(q->coef!=1) {
printf("%g",q->coef);
if(q->expn==1) putchar('X');
else if(q->expn) printf("X^%d",q->expn);
}
else if(!q->expn) putchar('1');
else if(q->expn==1) putchar('X');
else printf("X^%d",q->expn);
q = q->next;
}
} Compare(term *a, term *b) { /*表示函数的返回值是一个指向整型数据的指针*/
if (a->expn < b->expn) return -1;
if (a->expn > b->expn) return 1;
return 0;
} term* APolyn(term *Pa, term *Pb) { // 算法
// 多项式加法:Pa = Pa+Pb,利用两个多项式的结点构成"和多项式"。
term *h, *qa = Pa, *qb = Pb, *p, *q;
float sum;
h = p = (term*)malloc(sizeof(term));
p->next = NULL;
while (qa && qb) { // Pa和Pb均非空
switch (Compare(qa,qb)) {
case -1: // 多项式PA中当前结点的指数值小
p->next = qb;
p = qb;
qb = qb->next;
break;
case 0: // 两者的指数值相等
sum = qa->coef + qb->coef;
if (sum != 0.0) { // 修改多项式PA中当前结点的系数值
p->next = qa;
qa->coef = sum;
p = qa;
qa = qa->next;
}
else { // 删除多项式PA中当前结点
q = qa;
qa = qa->next;
free(q);
}
q = qb;
qb = qb->next;
free(q);
break;
case 1: // 多项式PB中当前结点的指数值小
p->next = qa;
p = qa;
qa = qa->next;
break;
} // switch
} // while
if (Pa) p->next = qa; // 链接Pa中剩余结点
if (Pb) p->next = qb; // 链接Pb中剩余结点
q = h;
h = h->next;
free(q);
return h;
} // APolyn term* A(term *Pa, term *Pb) {
int n;
puts("输入第二个一元多项式的项数");
scanf("%d",&n);
Pb = CreatPolyn(Pb,n);
Pb = selsort(Pb); /*对n-1个元素选择排序*/
PrintfPoly(Pa);
if(Pb && Pb->coef>0) printf(" + ");
PrintfPoly(Pb);
Pa = APolyn(Pa,Pb);
printf(" = ");
Pa = selsort(Pa);
PrintfPoly(Pa);
return Pa;
} term* BPolyn(term *Pa, term *Pb) { // 算法
// 多项式减法:Pa = Pa-Pb,利用两个多项式的结点构成"差多项式"。
term *p = Pb;
while(p) {
p->coef *= -1;
p = p->next;
}
return APolyn(Pa,Pb);
} // BPolyn term* B(term *Pa, term *Pb) {
int n;
puts("输入第二个一元多项式的项数");
scanf("%d",&n);
Pb = CreatPolyn(Pb,n);
Pb = selsort(Pb);
PrintfPoly(Pa);
printf(" - ");
putchar('(');PrintfPoly(Pb);putchar(')');
Pa = BPolyn(Pa,Pb);
printf(" = ");
Pa = selsort(Pa);
PrintfPoly(Pa);
return Pa;
} void main() {
term *M,*N;
char s[2];
int i,n;
puts("一元多项式计算:\n输入第一个一元多项式的项数");
scanf("%d",&n);
M = CreatPolyn(M,n);
M = selsort(M);
PrintfPoly(M);
p: puts("\n1:加\n2:减\n3:下一步");
getchar();
q: gets(s);
if(s[1]!='\0' || !isdigit(*s)) { /*判断一个字符是不是0-9之间任意一个*/
puts("输入有误,请重新输入!");goto q;
}
i = *s-48;
switch(i) {
case 1:M = A(M,N);goto p;;
case 2:M = B(M,N);goto p;;
case 3:break;
default:puts("输入有误,请重新输入!");goto q;
}
}

热心网友 时间:2023-11-26 20:07

#include<stdlib.h>/*调用动态分布函数和随机函数*/
#include<stdio.h>
#include<ctype.h>/*调用字符函数*/typedef struct term { //项的表示,多项式的项作为LinkList的数据元素
float coef; //系数
int expn; //指数 struct term *next;
}term; term* CreatPolyn(term *P,int m) { // 算法
// 输入m项的系数和指数,建立表示一元多项式的有序链表P
if(m <= 0) return NULL;
term *h = P = (term*)malloc(sizeof(term)), *q;
P->coef = 0.0;
int i;
printf("依次输入%d个数(前一个为系数,后一个为指数)\n",m*2);
for (i = 1; i <= m; ++i) { // 依次输入m个非零项
scanf("%f%d",&P->coef,&P->expn);
if(P->coef)
q = P;
P = P->next = (term*)malloc(sizeof(term));
}
q->next = NULL;
free(P);
return h;
} // CreatPolyn term* selsort(term *h) {
term *g, *p, *q;
if(!h) return NULL;
float f;
int i, fini = 1;
for(g = h;g->next&&fini;g = g->next) {
fini = 0;
for(p = h,q = h->next;q;p = p->next,q = q->next)
if (p->expn < q->expn) {
f = p->coef;i = p->expn;
p->coef = q->coef;p->expn = q->expn;
q->coef = f;q->expn = i;
fini = 1;
}
}
for(g = h,p = g->next;p;)
if(g->expn==p->expn) {
g->coef += p->coef;
g->next = p->next;
q = p;
p = p->next;
free(q);
}
else if(g->next) {
g = g->next;
p = p->next;
}
return h;
} void PrintfPoly(term *P) {
term *q = P;
if(!q) {
putchar('0');
return;
}
if(q->coef!=1) {
printf("%g",q->coef);
if(q->expn==1) putchar('X');
else if(q->expn) printf("X^%d",q->expn);
}
else if(!q->expn) putchar('1');
else if(q->expn==1) putchar('X');
else printf("X^%d",q->expn);
q = q->next;
while (q) {
if(q->coef > 0) putchar('+');
if(q->coef!=1) {
printf("%g",q->coef);
if(q->expn==1) putchar('X');
else if(q->expn) printf("X^%d",q->expn);
}
else if(!q->expn) putchar('1');
else if(q->expn==1) putchar('X');
else printf("X^%d",q->expn);
q = q->next;
}
} Compare(term *a, term *b) { /*表示函数的返回值是一个指向整型数据的指针*/
if (a->expn < b->expn) return -1;
if (a->expn > b->expn) return 1;
return 0;
} term* APolyn(term *Pa, term *Pb) { // 算法
// 多项式加法:Pa = Pa+Pb,利用两个多项式的结点构成"和多项式"。
term *h, *qa = Pa, *qb = Pb, *p, *q;
float sum;
h = p = (term*)malloc(sizeof(term));
p->next = NULL;
while (qa && qb) { // Pa和Pb均非空
switch (Compare(qa,qb)) {
case -1: // 多项式PA中当前结点的指数值小
p->next = qb;
p = qb;
qb = qb->next;
break;
case 0: // 两者的指数值相等
sum = qa->coef + qb->coef;
if (sum != 0.0) { // 修改多项式PA中当前结点的系数值
p->next = qa;
qa->coef = sum;
p = qa;
qa = qa->next;
}
else { // 删除多项式PA中当前结点
q = qa;
qa = qa->next;
free(q);
}
q = qb;
qb = qb->next;
free(q);
break;
case 1: // 多项式PB中当前结点的指数值小
p->next = qa;
p = qa;
qa = qa->next;
break;
} // switch
} // while
if (Pa) p->next = qa; // 链接Pa中剩余结点
if (Pb) p->next = qb; // 链接Pb中剩余结点
q = h;
h = h->next;
free(q);
return h;
} // APolyn term* A(term *Pa, term *Pb) {
int n;
puts("输入第二个一元多项式的项数");
scanf("%d",&n);
Pb = CreatPolyn(Pb,n);
Pb = selsort(Pb); /*对n-1个元素选择排序*/
PrintfPoly(Pa);
if(Pb && Pb->coef>0) printf(" + ");
PrintfPoly(Pb);
Pa = APolyn(Pa,Pb);
printf(" = ");
Pa = selsort(Pa);
PrintfPoly(Pa);
return Pa;
} term* BPolyn(term *Pa, term *Pb) { // 算法
// 多项式减法:Pa = Pa-Pb,利用两个多项式的结点构成"差多项式"。
term *p = Pb;
while(p) {
p->coef *= -1;
p = p->next;
}
return APolyn(Pa,Pb);
} // BPolyn term* B(term *Pa, term *Pb) {
int n;
puts("输入第二个一元多项式的项数");
scanf("%d",&n);
Pb = CreatPolyn(Pb,n);
Pb = selsort(Pb);
PrintfPoly(Pa);
printf(" - ");
putchar('(');PrintfPoly(Pb);putchar(')');
Pa = BPolyn(Pa,Pb);
printf(" = ");
Pa = selsort(Pa);
PrintfPoly(Pa);
return Pa;
} void main() {
term *M,*N;
char s[2];
int i,n;
puts("一元多项式计算:\n输入第一个一元多项式的项数");
scanf("%d",&n);
M = CreatPolyn(M,n);
M = selsort(M);
PrintfPoly(M);
p: puts("\n1:加\n2:减\n3:下一步");
getchar();
q: gets(s);
if(s[1]!='\0' || !isdigit(*s)) { /*判断一个字符是不是0-9之间任意一个*/
puts("输入有误,请重新输入!");goto q;
}
i = *s-48;
switch(i) {
case 1:M = A(M,N);goto p;;
case 2:M = B(M,N);goto p;;
case 3:break;
default:puts("输入有误,请重新输入!");goto q;
}
}
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
畅享好还是荣耀好 怎么向老师请教问题?? ...和是40.15较大数的小数点向左移动一位就等于较小的数,这两_百度知... 两个数的和是40.15,较大数的小数点向左移动一位就等于较小的数这两... 两个数的和是40.15,较大的数的小数点像向左移动一位就等于较小的数... 两个数的和是40.15,较大数的小数点向左移动一位等于较小的数 ...和是40.15较大数的小数点向左移动一位就等于较小的数这两个数分别... 怎么用手机查询农行信用卡余额? 朝阳公园附近有孩子可以托管的地方吗? 华泰证券怎么添加第二张银行卡 solo软件播放的音乐是什么格式的 拍宝宝照选精修的多还是底片多 查国务院对拖欠民工工资最新文件 品胜和小米移动电源哪个好? 做干锅鸡的鸡肉怎么腌,鸡肉怎么做好吃 我考试的时候老是紧张,尤其是做数学题,一遇到不会做的题就慌了,怎么才能静下心来呢? 哦阿巴阿巴巴什么意思? 点歌的人阿巴阿巴巴什么意思? 海来阿木的歌为什么很多阿巴啊巴巴? 最近大火的6亿播放,横扫热歌第一!阿巴阿巴巴到底是啥歌 插线板用什么固定又美观又牢固 总胆固醇6.7,甘油三酯2.18怎么办? 与氦原子核的质量相等需要多少个电子? 体检出高胆固醇怎么办? 为什么氦原子核的质量比两个质子加上两个中子的质量小 根号5的负2次方等于几? 5的负2次方为什么等于5负2次方分之一 探矿权采矿权转让时的流程是怎样的? 根号下五的负二次方 获得探矿权和采矿权的法定程序和法律依据? 魔声SOLO配什么样的播放器比较好? 选好照片现在精修的也不喜欢,怎么办,能不能退款 魔声studio和solo HD音质的区别是什么?什么是单曲播放? 想给solo3配个播放器,请大神推荐,本人也不烧的。 设计一个一元多项式简单的计算器(数据结构C语言版)急 想买个魔声solo HD 本人苹果4 非专业音乐发烧友,可否推荐性价比高的播放器。 设计一个简单一元多项式计算器 我想玩电吉他solo,如何从网上下载音乐为我的solo匹配架子鼓等伴奏 一元稀疏多项式简单计算器 SOLO HD阻抗多少?shuffle 6或者艾利和N15能推吗?Marshall Major 呢?这两款播放器能推吗? 我买了个beats solo3的蓝牙耳机,然后电脑有这两个播放设备,有什么不同,音质差别好大啊 FM103.7最近播放的英文歌曲 歌名里有 solo的 设计一个一元稀疏多项式简单计算器。 一元稀疏多项式简单的计算器 求魔声耳机,solo HD和studio(非专业版)对比。是否都需要电池才能播放?头梁部分是否都易断? solo2.0煲机该用什么音乐,该怎么煲 C语言程序设计 一元多项式简单的计算器 。 麦博solo1电脑音箱用什么播放器好 用C++编一个一元多项式计算器 大虾们 谢谢啦!!! 在和一个人说话时,一味的用“嗯”“就是就是”“对对对”“是的是的”这样的词自己会很辛苦,如何改变?