代码主要实现将多项式转化为链表,并且利用该链表实现多项式的计算
代码如下:
#include <stdio.h>
#include <stdlib.h>
typedef struct
{
float coef,expn;
}Elemtype;
typedef struct PNode
{
Elemtype data;
struct PNode *next;
}*Polynomial;
void InitList(Polynomial *a)
{
*a=(struct PNode*)malloc(sizeof(struct PNode));
(*a)->next=NULL;
}
Polynomial CreatePolyn()
{
Polynomial b;
InitList(&b);
int c;
double d;
printf("请输入您多项式项的数量\n");
while((scanf("%lf",&d)!=1)&&(d!=(int)d))
{
getchar();
fflush(stdin);
printf("error!\n");
}
c=(int)d;
int o;
Elemtype *g;
g=(Elemtype*)malloc(c*sizeof(Elemtype));
for(o=0;o<c;o++)
{
double e,f;
printf("请分别输入第%d个项的底数和指数\n底数:",o+1);
while(scanf("%lf",&e)!=1)
{
getchar();
printf("error!\n");
}
printf("指数:");
while(scanf("%lf",&f)!=1)
{
getchar();
printf("error!\n");
}
g[o].coef=e;
g[o].expn=f;
}
for(o=0;o<c;o++)
{
Polynomial pre;
pre=b;
Polynomial q;
q=pre->next;
Polynomial h;
h=(struct PNode*)malloc(sizeof(struct PNode));
h->data=g[o];
while(q&&q->data.expn<h->data.expn)
{
pre=q;
q=q->next;
}
h->next=q;
pre->next=h;
}
return b;
}
double g(Polynomial a,double c)
{
double d=0;
Polynomial b;
b=a->next;
while(b)
{
d=d+b->data.coef*pow(c,b->data.expn);
b=b->next;
}
return d;
}
void jie_mian_system()
{
Polynomial a;
a=CreatePolyn();
double d;
printf("请输入变量:\n");
while(scanf("%lf",&d)!=1)
{
getchar();
fflush(stdin);
printf("error!\n");
}
double c;
c=g(a,d);
printf("f(x)\n=f(%lf)\n=%lf\n",d,c);
system("pause");
}
void name_system()
{
char a[]="Math Dash的多项式相加程序";
char b[sizeof(a)+6];
sprintf(b,"title %s",a);
puts(a);
system(b);
jie_mian_system();
}
main()
{
name_system();
return 0;
}
程序运行结果
Math Dash的多项式相加程序 请输入您多项式项的数量 6 请分别输入第1个项的底数和指数 底数:2 指数:3 请分别输入第2个项的底数和指数 底数:4 指数:2 请分别输入第3个项的底数和指数 底数:1 指数:5 请分别输入第4个项的底数和指数 底数:8 指数:5 请分别输入第5个项的底数和指数 底数:3 指数:2 请分别输入第6个项的底数和指数 底数:1 指数:2 请输入变量: 2 f(x) =f(2.000000) =336.000000 请按任意键继续. . .
|