看板 C_and_CPP 關於我們 聯絡資訊
※ 引述《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