代码没提示错误,但貌似没有运行
求定积分,可以求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编辑过]