代码如下:
#include <stdio.h>
#include <stdlib.h>
struct data
{
double coef,expn;
};
main()
{
char ooo[]="Math Dash的多项式程序";
char ooa[strlen(ooo)+6];
sprintf(ooa,"title %s",ooo);
system(ooa);
puts(ooo);
double b;
printf("请输入多项式项数\n");
while((scanf("%lf",&b)!=1)||((long)b!=b)||(b<=0))
{
getchar();
}
long c;
c=(long)b;
struct data *a;
a=(struct data*)malloc(c*sizeof(struct data));
long d;
for(d=0;d<c;d++)
{
printf("请输入第%d个项的底数(注意:无法识别底数为0的项)\n",d+1);
while((scanf("%lf",&a[d].coef)!=1)||(a[d].coef==0)||(a[d].coef/0.000001!=(int)a[d].coef/0.000001))
{
getchar();
}
printf("请输入第%d个项的指数(注意:指数为零的项将视为常量,并且该项的变量为0时,该项计算结果也是底数,也就是说,该程序将0^0视为1,并且,指数相同的项将会合并)\n",d+1);
while((scanf("%lf",&a[d].expn)!=1)||(a[d].expn/0.000001!=(int)(a[d].expn/0.000001)))
{
getchar();
}
}
for(;;)
{
for(d=0;d<c-1;d++)
{
if(a[d].expn>a[d+1].expn)
{
struct data e;
e=a[d];
a[d]=a[d+1];
a[d+1]=e;
break;
}
if((a[d].expn==a[d+1].expn))
{
a[d].coef=a[d].coef+a[d+1].coef;
int e;
for(e=d+1;e<c-1;e++)
{
a[e]=a[e+1];
}
c--;
}
}
for(d=0;d<c-1;d++)
{
if(a[d].expn>=a[d+1].expn)
{
break;
}
}
if(d==c-1)
{
break;
}
}
printf("该函数的解析式为f(x)=");
for(d=0;d<c;d++)
{
printf("%lf",a[d].coef);
if(a[d].expn!=0)
{
printf("x");
}
if(a[d].expn!=1)
{
printf("^%lf",a[d].expn);
}
if(d!=c-1)
{
printf("+");
}
}
printf("\n");
struct data *opc;
opc=(struct data*)malloc(c*sizeof(struct data));
for(d=0;d<c;d++)
{
opc[d]=a[d];
}
free(a);
double op;
printf("请输入变量\n");
while(scanf("%lf",&op)!=1)
{
getchar();
}
if(op<0)
{
for(d=0;d<c;d++)
{
if(opc[d].expn!=(int)opc[d].expn)
{
printf("计算结果为虚数!\n");
system("pause");
return;
}
}
}
double oc=0;
for(d=0;d<c;d++)
{
if(opc[d].expn==0)
{
oc=oc+opc[d].coef;
}
else
{
oc=oc+opc[d].coef*pow(op,opc[d].expn);
}
}
printf("计算结果为:\nf(x)\n=f(%lf)\n=",op);
for(d=0;d<c;d++)
{
printf("%lf",opc[d].coef);
if(opc[d].expn!=0)
{
printf("x");
}
if(opc[d].expn!=1)
{
printf("^%lf",opc[d].expn);
}
if(d!=c-1)
{
printf("+");
}
}
printf("\n=");
for(d=0;d<c;d++)
{
printf("%lf",opc[d].coef);
if(opc[d].expn!=0)
{
printf("×%lf",op);
}
if(opc[d].expn!=1)
{
printf("^%lf",opc[d].expn);
}
if(d!=c-1)
{
printf("+");
}
}
if(c!=1)
{
printf("\n=");
for(d=0;d<c;d++)
{
double rt;
if(opc[d].expn==0)
{
rt=opc[d].coef*op;
}
if(opc[d].expn!=0)
{
rt=opc[d].coef*pow(op,opc[d].expn);
}
printf("%lf",rt);
if(d!=c-1)
{
printf("+");
}
}
}
free(opc);
printf("\n=%lf\n",oc);
system("pause");
return 0;
}
程序运行结果如下
|