天天看點

C++第8周項目2多分段函數求值

【項目2:分段函數求值】從鍵盤輸入x的值(要求為實型),根據公式1計算并輸出x和y的值。 

C++第8周項目2多分段函數求值

請自行列出需要的測試用輸入資料及對應的輸出,以便于在運作時進行對照。

參考解答:

同學們的解法中,還有:

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

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

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

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

(x>=2 && x<6)的值為真(1):(x>=2)和(x<6)同時為真,故為真;

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

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

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

  有同學寫出了下面的解法:

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

項目2擴充一(選做):按公式2進行計算,注意此處x<0是非法的輸入,程式中應該做出處理。

C++第8周項目2多分段函數求值

==================== 迂者 賀利堅 csdn部落格專欄=================

======== 為it菜鳥起飛鋪跑道,和學生一起享受快樂和激情的大學 =======

繼續閱讀