亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

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 關注
  • 1099 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號