为了账号安全,请及时绑定邮箱和手机立即绑定

各位,能帮我看一下我的问题在哪吗?结果一直都是2......

#include <stdio.h>
int gonglifei(int s)
{
    int money;
    if(s<=3&&s>0)
    {
        money=13;
    }
    else
    {
        money=(s-3)*2.3+13;
    }
    return money;
}
int shijianbianliang(int come,int back)
{
    int c,b,money;
    if(come>5&&come<=23)
    {
        c=money;
    }
    else
    {
        c=(money-13)*1.2+13;
    }
    if(back>5&&back<=23)
    {
        b=c+money;
    }
    else
    {
        b=c+(money-13)*1.2+13;
    }
    return b;
}
int main()
{
    int b,c,money;
    int s=12;
    int come=9;
    int back=18;
    gonglifei(s);
    shijianbianliang(come,back);
    money=b+2;
    printf("小明每天打车的总费用为%d\n",money);
    return 0;
}

正在回答

2 回答

我按照你的程序思路稍稍做了一下修改。并将我的理解//注释进去,可能思路有偏差。输出结果69.4。

因为计算涉及小数点,用了浮点型float函数类型,而不是int。我个人也不是用的太好。

#include <stdio.h>

float money;  //在开头定义全局变量money

float gonglifei(int s) //这是计算公里费用函数,参数为路程s

{

    //int money; //这里是一句原代码,我把它注释掉了,开头有全局变量了,这里不需要再定义

    if(s<=3 && s>0)

    {

        money = 13;

    }

    else 

    {

        money=(s - 3)*2.3 + 13;

    }

    return money;

}

float shijianbianliang(int come,int back)  //这里是你想要计算往返时间表价格的函数

{

    float c,b; //money;这个我也注释掉了,一直都是对money的值做赋值操作,有全局变量了。

    if(come>5 && come<=23)

    {

        c=money; //如果你在这个函数体内定义了c和money,那这句话意思就是给局部变量c赋值成money,而你定的money也是局部变量,初值为0.

    }

    else

    {

        c=(money - 13)*1.2 + 13;

    }

    if(back > 5 && back <= 23)

    {

        b=c + money; //这里问题同上,也是局部变量定义问题。另外我个人理解你想表示的是,c就是come的价钱,b就是back的价钱,但是我看你这里b的应该算come和back的总价钱,别人看你代码就有点容易乱。当然你自己思路没乱就好。

    }

    else

    {

        b=c + (money - 13)*1.2 + 13; //这里也是局部变量。

    }

    

    return b;   //你这里返回给函数b,其实是返回一个总价钱因为有代码 b = c + money; 但是你自己在main()方法中写的的代码是money = b + 2; 感觉又像是你希望money是你定义的总价钱。所以感觉思路上是乱的。没想好总价这个数值该由谁表示。

}

int main()

{

    float b,money; //这里定义main()方法中的变量局部变量b和money;你原有代码定义了b,c,money,可能是对全局变量和局部变量概念模糊了。

    int s=12;

    int come=9;

    int back=18;

    money = gonglifei(s);

    b = shijianbianliang(come,back); //这里是给你main()方法中的b赋值,因为这里的局部变量不是你自定义函数shijianbianliang()中的b。

    money=b + 2;  //同理给局部变量money赋值

    printf("小明每天打车的总费用为%.2f\n",money);

    return 0;

}


0 回复 有任何疑惑可以回复我~

先回答结果一直都是2:

int main()
{
    int b,c,money;  //这里是定义main()方法中的变量,没有赋值。
    int s=12;
    int come=9;
    int back=18;
    gonglifei(s);
    shijianbianliang(come,back);
    money=b+2; //这里是一个赋值语句,给你定义的money赋值为b+2。
    printf("小明每天打车的总费用为%d\n",money);
    return 0;
}

定义的全是局部变量,这里的b承接不到你定义的shijianbianliang里的值。b,c,money都没有赋值,b默认是0,所以你输出的结果一直都是一个赋值语句,money = b + 2,其实就是money = 0 + 2 = 2.

0 回复 有任何疑惑可以回复我~
#1

要死综合征晚期

建议复习一下“局部与全局”章节。再好好考虑一下代码思路是否可以优化。
2018-08-23 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

各位,能帮我看一下我的问题在哪吗?结果一直都是2......

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信