急!c语言 计算多项式的程序

急!c语言 计算多项式的程序,第1张

#include

#include

void

main(

)

{

double

coe[20],

x,

sum

=

0

int

i,

n

printf("请输入总项数:

")

scanf("%d",

&n)

printf("请按指数从高到低的顺序输入各项系数:

")

for(i

=

n

i

>=

0

i--)

scanf("%lf",

&coe[i])

printf("请输入变量x的值:

")

scanf("%lf",

&x)

for(i

=

n

i

>=

0

i--)

sum

=

sum

*

x

+

coe[i]

printf("\n结果为:

%lf\n",

sum)

}

#include <stdio.h>

#include <stdlib.h>

#include <math.h>

#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

head = p = (pItem)malloc(sizeof(item))

while(1) {

printf("系数 幂次(0 0结束) : ")

scanf("%lf%d",&coe,&pwr)

if(fabs(coe) <= EPS && !pwr) break

p->next = (pItem)malloc(sizeof(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) printf("%.2lf ",p->coefficient)

else if(p->power == 1) {

if(p->coefficient == 1.0) printf("x ")

else if(p->coefficient == -1.0) printf("-x ")

else printf("%.2lfx ",p->coefficient)

}

else if(p->coefficient == 1.0) printf("x^%d ",p->power)

else if(p->coefficient == -1.0) printf("-x^%d ",p->power)

else printf("%.2lfx^%d ",p->coefficient,p->power)

flag = 0

}

}

else if(p->coefficient > 0.0 && fabs(p->coefficient) >= EPS) {

if(p->power == 0) printf("+ %.2lf ",p->coefficient)

else if(p->power == 1) {

if(p->coefficient == 1.0) printf("+ x ")

else printf("+ %.2lfx ",p->coefficient)

}

else if(p->coefficient == 1.0) printf("+ x^%d ",p->power)

else printf("+ %.2lfx^%d ",p->coefficient,p->power)

}

else if(p->coefficient < 0.0 && fabs(p->coefficient) >= EPS) {

if(p->power == 0) printf("- %.2lf ",-p->coefficient)

else if(p->power == 1) {

if(p->coefficient == -1.0) printf("- x ")

else printf("- %.2lfx ",-p->coefficient)

}

else if(p->coefficient == -1.0) printf("- x^%d ",p->power)

else printf("- %.2lfx^%d ",-p->coefficient,p->power)

}

p = p->next

}

printf("\n")

}

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 = (pItem)malloc(sizeof(item))

for(p = A->next p p = p->next) {

t->next = (pItem)malloc(sizeof(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 = (pItem)malloc(sizeof(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 = (pItem)malloc(sizeof(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 = (pItem)malloc(sizeof(item))

for(p = A->next p p = p->next) { // 完成相乘过程

for(q = B->next q q = q->next) {

t->next = (pItem)malloc(sizeof(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

free(q)

}

}

int main() {

printf("创建多项式A:\n")

POLYNOMIAL A = Create()

Sort(A)

printf("A(x) = ")Show(A)

printf("创建多项式B:\n")

POLYNOMIAL B = Create()

Sort(B)

printf("B(x) = ")Show(B)

POLYNOMIAL C = Additive(A,B)

printf("C(x) = ")Show(C)

POLYNOMIAL D = Subtract(A,B)

printf("D(x) = ")Show(D)

POLYNOMIAL E = Multiplication(A,B)

printf("E(x) = ")Show(E)

printf("A(%.2lf) = %.4lf\n",2.0,Value(A,2.0))

printf("B(%.2lf) = %.4lf\n",2.0,Value(B,2.0))

printf("C(%.2lf) = %.4lf\n",2.0,Value(C,2.0))

printf("D(%.2lf) = %.4lf\n",2.0,Value(D,2.0))

printf("E(%.2lf) = %.4lf\n",2.0,Value(E,2.0))

FreeMemory(A)

FreeMemory(B)

FreeMemory(C)

FreeMemory(D)

FreeMemory(E)

return 0

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/11446245.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-16
下一篇 2023-05-16

发表评论

登录后才能评论

评论列表(0条)

保存