C语言Math Dash的多项式相加程序

代码主要实现将多项式转化为链表,并且利用该链表实现多项式的计算

代码如下:

#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
请按任意键继续. . .

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值