代码没提示错误,但貌似没有运行
求定积分,可以求a*e^x+bx^3+cx^2+dx+e 这种类型的,不能有更高的次方代码如下:
程序代码:#include<stdio.h>
#include<math.h>
void fenxi(char *,int *,int *,int *,int *,int *);
double integral(double,double,int,int,int,int,int);
int main(void)
{
int coe_ex,coe_x3,coe_x2,coe_x,con;//coefficient:系数 constant:常数
double a,b;
double itg;//integral:积分
char hanshu[30];
printf("输入函数:");
gets(hanshu);
printf("输入下限和上限:");
scanf("%f%f",&a,&b);
fenxi(hanshu,&coe_ex,&coe_x3,&coe_x2,&coe_x,&con);
itg=integral(a,b,coe_ex,coe_x3,coe_x2,coe_x,con);
printf("result=%f\n",itg);
return 0;
}
double integral(double a,double b,int coe_ex,int coe_x3,int coe_x2,int coe_x,int con)
{
double x,dx=1e-6;
double itg=0;
for(x=a;x<b;x+=dx)
itg+=(coe_ex*exp(x)+coe_x3*pow(x,3)+coe_x2*pow(x,2)+coe_x*pow(x,1)+con)*dx;
return itg;
}
void fenxi(char *p,int *coe_ex,int *coe_x3,int *coe_x2,int *coe_x,int *con)
{
int i,k=1,t=0;
*coe_ex=*coe_x3=*coe_x2=*coe_x=*con=0;
for(i=0;*(p+i)!='\0';i++)
{
for( ; *(p+i)>='0' && *(p+i)<='9' ; i++ )
t=t*10+*(p+i)-'0';
if( *(p+i)=='*' )
i++;
if( *(p+i)=='e' )
{
if( *(p+ ++i)=='^' )
i++;
if( t==0 )
t=1;
*coe_ex+=t*k;
t=0;
}
else if( *(p+i)=='x' || *(p+i)=='X' )
{
if( *(p+ ++i)=='^' )
i++;
if( t==0 )
t=1;
if( *(p+i)=='3' )
*coe_x3+=t*k;
else if( *(p+i)=='2' )
*coe_x2+=t*k;
else
{
if( *(p+i)!='1' )
i--;
*coe_x+=t*k;
}
t=0;
}
else
{
*con+=t*k;
t=0;
if( *(p+i)=='-' )
k=-1;
else if( *(p+i)=='+' )
k=1;
}
}
if( t )
*con+=t*k;
}运行结果:
单独拿出来两个函数试了下,都没有发现问题
程序代码:#include<stdio.h>
void fenxi(char *,int *,int *,int *,int *,int *);
int main(void)
{
char hanshu[50];
double a=1,b=2;
int coe_ex,coe_x3,coe_x2,coe_x,con;
printf("\n输入函数:");
gets(hanshu);
fenxi(hanshu,&coe_ex,&coe_x3,&coe_x2,&coe_x,&con);
printf("ex的系数:%d\nx^3的系数:%d\nx^2的系数:%d\nx的系数:%d\n常数:%d\n",coe_ex,coe_x3,coe_x2,coe_x,con);
return 0;
}
void fenxi(char *p,int *coe_ex,int *coe_x3,int *coe_x2,int *coe_x,int *con)
{
int i,k=1,t=0;
*coe_ex=*coe_x3=*coe_x2=*coe_x=*con=0;
for(i=0;*(p+i)!='\0';i++)
{
for( ; *(p+i)>='0' && *(p+i)<='9' ; i++ )
t=t*10+*(p+i)-'0';
if( *(p+i)=='*' )
i++;
if( *(p+i)=='e' )
{
if( *(p+ ++i)=='^' )
i++;
if( t==0 )
t=1;
*coe_ex+=t*k;
t=0;
}
else if( *(p+i)=='x' || *(p+i)=='X' )
{
if( *(p+ ++i)=='^' )
i++;
if( t==0 )
t=1;
if( *(p+i)=='3' )
*coe_x3+=t*k;
else if( *(p+i)=='2' )
*coe_x2+=t*k;
else
{
if( *(p+i)!='1' )
i--;
*coe_x+=t*k;
}
t=0;
}
else
{
*con+=t*k;
t=0;
if( *(p+i)=='-' )
k=-1;
else if( *(p+i)=='+' )
k=1;
}
}
if( t )
*con+=t*k;
}运行结果:
程序代码:#include<stdio.h>
#include<math.h>
double integral(double,double,int,int,int,int,int);
int main(void)
{
double a=1,b=2;
double itg;
itg=integral(a,b,0,0,0,1,0);
printf("%f\n",itg);
return 0;
}
double integral(double a,double b,int coe_ex,int coe_x3,int coe_x2,int coe_x,int con)
{
double x,dx=1e-6,itg=0;
for(x=a;x<b;x+=dx)
itg+=(coe_ex*exp(x)+coe_x3*pow(x,3)+coe_x2*pow(x,2)+coe_x*pow(x,1)+con)*dx;
return itg;
}运行结果:
[此贴子已经被作者于2018-11-14 19:47编辑过]





