天天看點

2014秋C++第8周項目3參考-多分段函數求值

<a target="_blank" href="http://blog.csdn.net/sxhelijian/article/details/40155025"></a>

從鍵盤輸入x的值(要求為實型),根據下面的公式計算并輸出y的值。 

2014秋C++第8周項目3參考-多分段函數求值

(1)請用if~else~語句的嵌套,實作這個多分支的程式;

參考解答:

  這個解法不能算錯,但是不好,它會讓計算機多“做”一些事情。例如,當輸入x的值為1時,解法1隻需要進行一次判斷,直接求值即可,而當輸入x的值為8時,解法1也隻需要進行3次判斷。但對于解法2,無論輸入是多少,4次判斷都少不了。

  這是涉及“效率”的問題,可能在此處無關大礙,但專業人員對程式評價是,正确是底線,接下來就要關注效率。

  充分用好else分支,顯然程式更易懂一些,要習慣于用這種寫法。

  再一個需要強調并于條件的寫法。以(x&gt;=2 &amp;&amp; x&lt;6)為例,有人會寫成(2=&lt;x&lt;6),這時,編譯器會提示錯誤,由此改正尚不至于造成嚴重後果。而将同樣的條件,有人寫成(6&gt;x&gt;=2)時,不會有編譯錯誤,但更大的風險卻隐藏其中。例如x=4時,

(x&gt;=2 &amp;&amp; x&lt;6)的值為真(1):(x&gt;=2)和(x&lt;6)同時為真,故為真;

(6&gt;x&gt;=2)的值為假(0):為假為原因是,6&gt;4為真(1),故表達式相當于(1&gt;=2);

事實上,由于(6&gt;x)的取值隻能是0或1,無論x取值多少,(6&gt;x&gt;=2)永遠為假。

  将表示判斷的表達式寫好,事關正确性與效率。

//解法3

  這個寫法中,終于在第15行用了一個else。看似用上了雙分支是好事,這個程式卻是完全錯誤的。輸入0或4運作一下,就會發現錯誤了。而分析程式,确實隻要(x&gt;=6 &amp;&amp; x&lt;10)為假,即使x&lt;6已經在前面給y賦過值,else分支仍然要執行,y将被重新指派,由此産生錯誤!

(2)請用switch語句構造多分支結構,完成求解。

解法1:各分段的标準都為2的倍數,是以,構造表達式 t= x/2,根據t的取值決定switch分支;

解法2:構造表達式 t=(x&lt;2) + (x&lt;6) + (x&lt;10)。由于關系表達式(x&lt;a)的值為0或1(真為1,假為0),是以t能表示x究竟滿足了幾個條件。t值為3時,相加的三個關系表達式全為真,對應x&lt;2;而t值為0時,相加的三個關系表達式全為假,對應x≥10,其他類似。根據t的取值,可以決定switch分支。

繼續閱讀