作者DrStein (啤酒肚)
看板C_and_CPP
標題Re: [問題] 超新手 二次方程式解
時間Sat Jan 8 03:03:02 2011
※ 引述《S8972616F (COELACANTH)》之銘言:
: 開發平台(Platform): (Ex: VC++, Gcc, Linux, ...)
: C++
: 額外使用到的庫(Library Used) (Ex: OpenGL, ...)
: 問題(Question):
: 單純設計一個能解 real roots 的程式
: ax^2+bx+c=0
: Determinant X=b^2-4ac
: if (X>0) cout << The roots are...;
: else if (X==0) << There's only one root x=...;
: 但我的程式好像抓不到 x==0 請賜教
: 餵入的資料(Input):
: a=1 b=-6 c=9
: 預期的正確結果(Expected Output):
: There's only one root x=3.
: 錯誤結果(Wrong Output):
: The roots are x=3 and x=3.
: 程式碼(Code): (請善用置底文標色功能)
: http://nopaste.info/5c2878e478.html
: 補充說明(Supplement):
: 初學者請別鞭的太兇 多謝
原po好像分不太清處 C/C++中的 function型態
在這說明一下:
初用C的function 最讓人搞不清處的是void function
十本書有十本都講沒有回傳值
初學會覺的,"回傳值 ,這什麼鬼?"
用fortran的語言來講好了:
void function 就是 subroutine
那什麼是subrountine呢?
以前在學校解數學/物理問題,常看到老師講:
第一步:
:
第二步:
:
第三步:
:
這個subroutine可以直接理解成其中的"步"
一個程序(不見得是程式),極可能是由很多子步奏組成的。
void function就是這個意思。
而其他型態的函數呢,就可以直接理解成數學上的函數,
好比 sin(x),cos(x), legendre(P(n,x)) Bessel(J(n,x))...
當然就要有個東西在左邊去裝他出來的結果嚕。
但在一般使用上, 通常不太會使用void function來包裝子步奏
而是用 int型態的 function。
這是因為,子步奏的執行過程不一定永遠成功,(想成求解物理問題,
算到一半出現質量是負的或是虛數)。
這時就該退出子步奏,並告訴外面,子步奏中發生錯誤
可能是子步奏有bug,也可能是外面輸入的參數錯誤。
若用void型態會無法對外說明是那種錯誤,但整數就好多了。
好比-1是欲開啟的檔案不存在,-2是內存不夠,
-3是算到一半數值跑出無窮大..etc
總之就是可以告訴外面一個打槍的代碼。
在這順便說明,void *與 void 是完全兩回事。
這也是C讓人討驗的地方之一。
void * 是泛用(generic)指針的意思,用來傳什麼型態的位址都可以。
若原po還沒有指針的概念,那當我沒說吧。
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 58.115.143.194
※ 編輯: DrStein 來自: 58.115.143.194 (01/08 03:05)
→ uranusjr:「步驟」 01/08 04:06
推 xatier:推用心 //原PO簡中很順 XDD 01/08 08:04
→ tropical72:應該可以吧 01/08 14:02
推 shec1213:補充 (大陸用語)指針=(台灣用語)指標 01/09 19:26
推 cloudlim:補充 內存= 記憶體 01/11 02:32