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

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

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

C
sakura_monster 2016-01-24 01:09:41
#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 该如何改动代码 得出非零值 或是 该问题的正确结果
查看完整描述

1 回答

已采纳
?
MadMarical

TA贡献79条经验 获得超122个赞

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

查看完整回答
2 反对 回复 2016-01-24
  • sakura_monster
    sakura_monster
    谢谢 大概弄清楚了 还有一个问题 我把int m(int h,int l)改成float m(int h,int l) 输出值变为了14.000000 14.000000 同样是没有进入if分支 直接使用w = w*2.3*9+14 为什么改变了函数类型 输出结果会不同呢
  • MadMarical
    MadMarical
    你好。使用int 和 float 函数的编译过程是不同的,因为没有初始化,结果也是不确定的。因为int是整型数据,编译器使用处理整型数据的方法来处理解释它代表的意思,float是浮点数,编译器使用科学技术法来解释它代表的意思。所以使用int型函数时,你的float m时 w被解释成了连串无法理解的数,而使用int m时 w被强制类型转换为0,导致输出结果为14.000000。
  • 1 回答
  • 0 关注
  • 1067 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号