标题:代码没提示错误,但貌似没有运行
只看楼主
lxk1732942
Rank: 6Rank: 6
等 级:侠之大者
威 望:7
帖 子:450
专家分:425
注 册:2018-9-4
结帖率:96.43%
已结贴  问题点数:20 回复次数:3 
代码没提示错误,但貌似没有运行
求定积分,可以求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编辑过]

搜索更多相关主题的帖子: void int double con i++ 
2018-11-14 19:42
幻紫灵心
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:山咔咔里面
等 级:贵宾
威 望:53
帖 子:395
专家分:2640
注 册:2018-3-30
得分:20 
给你看了一下,你的scanf用错了,导致你的a,b不是你想要的值。
double类型的读入要用 %lf
scanf("%lf%lf",&a,&b);

结果 对不对 不知道,反正不是零了
测试数据:
输入函数:x2+2x+1
输入下限和上限:1 2
ex的系数:0
x^3的系数:0
x^2的系数:1
x的系数:2
常数:1
result=6.333340


saber,别哭.
2018-11-14 20:39
lxk1732942
Rank: 6Rank: 6
等 级:侠之大者
威 望:7
帖 子:450
专家分:425
注 册:2018-9-4
得分:0 
非常感谢,问题得到解决了,没想到问题是这里...,真的是,基础有点差哈
2018-11-15 12:32
lxk1732942
Rank: 6Rank: 6
等 级:侠之大者
威 望:7
帖 子:450
专家分:425
注 册:2018-9-4
得分:0 
非常感谢,问题得到解决了,没想到问题是这里...,真的是,基础有点差哈
2018-11-15 12:33



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-491269-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.163942 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved