猿问

C语言入门 5-14 综合练习问题

#include <stdio.h>
int m(int h,int l)
{
    float w;
    if(l<=3){
        w=14;
        return w;
    }
    else
    {
        if(h>=23||h<=6)
        {
            if(l<=1)
            {
                return 1.2;
            }
            else
            {
                w=1.2* m(h,l-1);
                return w;
            }
        }
        w=w*2.3* 9+ 14;
        return w;
    }
    return w;
}

int main()
{
    printf("%f\n",m(21,12));
    printf("%f",m(9,12));
    return 0;
}

为什么输出为

0.000000
0.000000

该如何改动代码
得出非零值
或是
该问题的正确结果
sakura_monster
浏览 1068回答 1
1回答

MadMarical

你好。你的问题是w没有在判断语句外初始化,导致你很可能使用了未初始化变量。这种编码习惯不好。如m(21,22)其中l>3所以落入else语句中,h并不属于<6或者>23的区间中,所以没有进入if分支而是直接使用w = w*2.3*9+14。可此时w并没有被初始化,所以导致输出结果为0.000 也有可能会输出很多乱码。
随时随地看视频慕课网APP
我要回答