Re: [問題] 超新手 二次方程式解

看板C_and_CPP作者 (啤酒肚)時間15年前 (2011/01/08 03:03), 編輯推噓3(302)
留言5則, 5人參與, 最新討論串2/2 (看更多)
※ 引述《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)

01/08 04:06, , 1F
「步驟」
01/08 04:06, 1F

01/08 08:04, , 2F
推用心 //原PO簡中很順 XDD
01/08 08:04, 2F

01/08 14:02, , 3F
應該可以吧
01/08 14:02, 3F

01/09 19:26, , 4F
補充 (大陸用語)指針=(台灣用語)指標
01/09 19:26, 4F

01/11 02:32, , 5F
補充 內存= 記憶體
01/11 02:32, 5F
文章代碼(AID): #1D9sDfvL (C_and_CPP)
文章代碼(AID): #1D9sDfvL (C_and_CPP)