[問題] 一元二次方程式的解

看板C_and_CPP (C/C++)作者 (神之左手魔之右手)時間16年前 (2009/11/18 21:07), 編輯推噓1(106)
留言7則, 2人參與, 最新討論串1/1
要解一元二次方程式 a*x^2+b*x+c=0 的解 我有在網路上找過解答 (1) http://www.eyny.com/archiver/tid-3983841.html 我初學,程式裡有些指令沒學過,所以放棄 (2) http://tw.knowledge.yahoo.com/question/question?qid=1106111203394 和我的寫法一樣,所以我的寫法應該可行 以下是我的程式 ------------------------------------------------------------------- #include <stdio.h> #include <stdlib.h> #include <math.h> int main (void) { double a,b,c; double value,r1,r2; printf("請輸入三個數值: "); //解 a*x^2+b*x+c=0 scanf("%f %f %f",&a,&b,&c); //輸入 a,b,c printf("%f %f %f\n",a,b,c); //想了解a,b,c有沒有輸入進程式內 printf("一元二次方程式解: "); value=b*b-4*a*c; if (value>0) //相異實根 { r1=(-b+sqrt(value))/(2*a); r2=(-b-sqrt(value))/(2*a); printf("%f %f\n",r1,r2); } else if (value==0) //相等實根 { r1=-b/(2*a); printf("%f %f\n",r1,r1); } else //虛數解 printf("沒有實根\n"); printf("%f %f %f\n",a,b,c); //想了解迴圈結束後,a,b,c值為何 system("pause"); return 0; } ------------------------------------------------------------------------- 問題 <1> 我想設計一個可以 scanf 變數 a,b,c的程式。 但此程式執行完後,發現變數 scanf 完後,下一行 printf a,b,c的值並不是我當初給的。 且執行結果是錯的。 問題 <2> 把 double a,b,c; double value,r1,r2; 改為 float a,b,c; float value,r1,r2; 竟然就可以執行。 double 和 float 不是只有表示數值範圍的差別而以嗎? 請問此程式 設 double 和設 float 之間的差別在哪? 問題 <3> 我在宣告變數時,就將 a,b,c的值直接設定。(例如:a=1,b=1,b=10;) 當我宣告 a,b,c 為 float 或 double 程式皆執行無誤。 直接設值 (例如:a=1,b=1,b=10;) 和 scanf 設值,竟然有這麼大的差別 麻煩指正我的問題出在哪 ---------------------------------------------------------------------------- Thank you for help!!! -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.126.251.169

11/18 21:13, , 1F
double和float的bit數不同, sizeof它們你就知道了....
11/18 21:13, 1F

11/18 21:13, , 2F
double型態, 你I/O裡用%f的地方請都改用%lf就行了:)
11/18 21:13, 2F

11/18 21:14, , 3F
具體來說float與double是如何被記錄的, 有興趣請去查
11/18 21:14, 3F

11/18 21:15, , 4F
IEEE754的標準, 不然某些計算機XX的課應該也會修到XD
11/18 21:15, 4F

11/23 11:33, , 5F
雖然還不是很了解直接設定和scanf設定a,b,c,為什麼和
11/23 11:33, 5F

11/23 11:36, , 6F
IEEE754的bit數的寫入有關,不過還是感謝你指正我的問
11/23 11:36, 6F

11/23 11:36, , 7F
題所在。
11/23 11:36, 7F
文章代碼(AID): #1B0_6WAg (C_and_CPP)
文章代碼(AID): #1B0_6WAg (C_and_CPP)