C/C++数据结构与算法,一元多项式问题 50

题目如图所示。谢谢!万分感谢!!... 题目如图所示。谢谢!万分感谢!! 展开
 我来答
xoaxa
2013-09-16 · TA获得超过8609个赞
知道大有可为答主
回答量:6415
采纳率:72%
帮助的人:3466万
展开全部

/********************** 输入文件格式有变化。 **************************/

/*

创建多项式A:

4

-1 4

8.75 3

0.5556666 2

1234.456 1

A(x) = -x^4 + 8.75x^3 + 0.555667x^2 + 1234.46x

创建多项式B:

1

6007.0012 0

B(x) = 6007

运算符 : +-*

C(x) = -x^4 + 8.75x^3 + 0.555667x^2 + 1234.46x + 6007

D(x) = -x^4 + 8.75x^3 + 0.555667x^2 + 1234.46x - 6007

E(x) = -6007x^4 + 52561.3x^3 + 3337.89x^2 + 7.41538e+06x

A(2) = 2525.13B(2) = 6007

C(2) = 8532.14

D(2) = -3481.87

E(2) = 1.51685e+07

请按任意键继续. . .

*/

#include <iostream>
#include <cmath>

using namespace std;

#define EPS 1E-6

typedef struct item {
double coefficient;
int power;
struct item *next;
} *POLYNOMIAL,*pItem;

POLYNOMIAL Create() { // 创建多项式
pItem head,p;
double coe;
int pwr,iterms,i;
head = p = new item;
cin >> iterms; // 读入多项式的项数 
for(i = 0; i < iterms; ++i) {
cin >> coe >> pwr;
p->next = new item;
p->next->coefficient = coe;
p->next->power = pwr;
p = p->next;
}
p->next = NULL;
return head;
}

void Sort(POLYNOMIAL head) { // 按幂次降排序
pItem pt,q,p = head;
while(p->next) {
q = p->next;
while(q->next) {
if(p->next->power < q->next->power) {
pt = p->next;
p->next = q->next;
q->next = p->next->next;
p->next->next = pt;
}
else q = q->next;
}
p = p->next;
}
}

void Show(POLYNOMIAL head) { // 显示
POLYNOMIAL p = head->隐型姿next;
int flag = 1;
if(p == NULL) return;
while(p) {
if(flag) {
if(fabs(p->coefficient) >= EPS) {
if(p->power == 0) cout << p->coefficient;
else if(p->power == 1) {
if(p->coefficient == 1.0) cout << "x ";
else if(p->coefficient == -1.0) cout << "-x ";
else cout << p->coefficient << "x ";
}
else if(p->coefficient == 1.0) cout << "x^" << p->power << " ";
else if(p->coefficient == -1.0) cout << "-x^" << p->power << " ";
else cout << p->coefficient << "x^" << p->power << " ";
flag = 0;
}
}
else if(p->coefficient > 0.0 && fabs(p->coefficient) >= EPS) {
if(p->power == 0) cout << "+ " << p->coefficient << " ";
else if(p->power == 1) {
if(p->coefficient 灶绝== 1.0) cout << "+ x ";
else cout <租穗< "+ " << p->coefficient << "x ";
}
else if(p->coefficient == 1.0) cout << "+ x^" << p->power << " ";
else cout << "+ " << p->coefficient << "x^" << p->power << " ";
}
else if(p->coefficient < 0.0 && fabs(p->coefficient) >= EPS) {
if(p->power == 0) cout << "- " << -p->coefficient << " ";
else if(p->power == 1) {
if(p->coefficient == -1.0) cout << "- x ";
else cout << "- " << -p->coefficient << "x ";
}
else if(p->coefficient == -1.0) cout << "- " << "x^" << p->power << " ";
else cout << "- " << -p->coefficient << "x^" << p->power << " ";
}
p = p->next;
}
cout << endl;
}

double Power(double x,int n) {
double value = 1.0;
int i;
for(i = 0; i < n; ++i) value *= x;
return value;
}

double Value(POLYNOMIAL head,double x) { // 多项式求值
POLYNOMIAL p;
double value = 0.0;
for(p = head->next; p; p = p->next)
value += p->coefficient * Power(x,p->power);
return value;
}

POLYNOMIAL Copy(POLYNOMIAL A) {
POLYNOMIAL head,t,p;
head = t = new item;
for(p = A->next; p; p = p->next) {
t->next = new item;
t->next->coefficient = p->coefficient;
t->next->power = p->power;
t = t->next;
}
t->next = NULL;
return head;
}

POLYNOMIAL Additive(POLYNOMIAL A, POLYNOMIAL B) { // 多项式加
POLYNOMIAL head,p,q,t;
head = Copy(A);
for(p = B; p->next; p = p->next) {
q = head;
while(q->next) {
if(p->next->power == q->next->power) {
q->next->coefficient += p->next->coefficient;
if(fabs(q->next->coefficient) <= EPS) {
t = q->next;
q->next = t->next;
free(t);
}
break;
}
q = q->next;
}
if(q->next == NULL) {
q->next = new item;
q->next->coefficient = p->next->coefficient;
q->next->power = p->next->power;
q->next->next = NULL;
}
}
Sort(head);
return head;
}

POLYNOMIAL Subtract(POLYNOMIAL A, POLYNOMIAL B) { // 多项式减
POLYNOMIAL head,p,q,t;
head = Copy(A);
for(p = B; p->next; p = p->next) {
q = head;
while(q->next) {
if(p->next->power == q->next->power) {
q->next->coefficient -= p->next->coefficient;
if(fabs(q->next->coefficient) <= EPS) {
t = q->next;
q->next = t->next;
free(t);
}
break;
}
q = q->next;
}
if(q->next == NULL) {
q->next = new item;
q->next->coefficient = -p->next->coefficient;
q->next->power = p->next->power;
q->next->next = NULL;
}
}
Sort(head);
return head;
}

POLYNOMIAL Multiplication(POLYNOMIAL A, POLYNOMIAL B) { // 多项式乘
POLYNOMIAL head,t,p,q;
head = t = new item;
for(p = A->next; p; p = p->next) { // 完成相乘过程
for(q = B->next; q; q = q->next) {
t->next = new item;
t->next->coefficient = p->coefficient * q->coefficient;
t->next->power = p->power + q->power;
t = t->next;
}
}
t->next = NULL;
Sort(head); // 排序
p = head;
while(p->next) { // 合并同类项
q = p->next;
while(q->next) {
if(p->next->power == q->next->power) {
p->next->coefficient += q->next->coefficient;
t = q->next;
q->next = t->next;
free(t);
}
else q = q->next;
}
p = p->next;
}
return head;
}

void FreeMemory(POLYNOMIAL head) {
POLYNOMIAL q,p = head;
while(p) {
q = p;
p = q->next;
delete q;
}
}

int main() {
char ops[3];
POLYNOMIAL A,B,C = NULL,D = NULL,E = NULL;
cout << "创建多项式A:\n";
A = Create();
Sort(A);
cout << "A(x) = ";Show(A);
cout << "创建多项式B:\n";
B = Create();
Sort(B);
cout << "B(x) = ";Show(B);
cout << "运算符 : ";
fflush(stdin);
gets(ops);
for(int i = 0; ops[i]; ++i) {
switch(ops[i]) {
case '+' : C = Additive(A,B);
cout << "C(x) = ";
Show(C);
break;
case '-' : D = Subtract(A,B);
cout << "D(x) = ";
Show(D);
break;
case '*' : E = Multiplication(A,B);
cout << "E(x) = ";
Show(E);
break;
default  : cout << "不能识别运算符 : " << ops[i] << endl;
}
}
cout << "A(2) = " << Value(A,2.0) << endl;
cout << "B(2) = " << Value(B,2.0) << endl;
if(C) cout << "C(2) = " << Value(C,2.0) << endl;
if(D) cout << "D(2) = " << Value(D,2.0) << endl;
if(E) cout << "E(2) = " << Value(E,2.0) << endl;
FreeMemory(A);
FreeMemory(B);
FreeMemory(C);
FreeMemory(D);
FreeMemory(E);
return 0;
}
Sievers分析仪
2024-10-13 广告
是的。传统上,对于符合要求的内毒素检测,最终用户必须从标准内毒素库存瓶中构建至少一式两份三点标准曲线;必须有重复的阴性控制;每个样品和PPC必须一式两份。有了Sievers Eclipse内毒素检测仪,这些步骤可以通过使用预嵌入的内毒素标准... 点击进入详情页
本回答由Sievers分析仪提供
wangfengcmsz
2013-09-16 · 超过34用户采纳过TA的回答
知道答主
回答量:70
采纳率:100%
帮助的人:35.8万
展开全部
这个题目已缓薯经很清楚了,基本没有算法的问雹闭题了
注意一下最后面提到的输出格式就ok了,比如判定下数字1,还有有源哪裂效长度截取
程序逻辑本身就是两重循环,遍历所有输入后,做一次数据归并即可
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式