注意:這是一篇關於C語言編程的基礎語法內容,C語言大神請繞過。
例子說明
對於如下的一元二次方程:
設計C語言程序,輸入一元二次方程的三個係數a、b、c,求解出該方程的兩個根,並且允許用戶在程序中多次輸入不同的係數,以求解不同的一元二次方程的解。
編程思路分析
對於該方程,令delta=b^2-4*a*c,從數學的角度來講,我們需要根據delta的值來判斷該方程的根情況:
當delta>=0時,其兩個根為實數解,分別為(-b+sqrt(delta))/(2*a)和(-b-sqrt(delta))/(2*a);
當delta<0時,其兩個根為複數解,實部皆為-b/(2*a),虛部分別為sqrt(-delta)/(2*a)和-sqrt(-delta)/(2*a)。
其中,sqrt(delta)代表對delta作開根號運算。
在代碼設計中,可定義一個結構體Complex存儲該方程的根,在該結構體中包括實部和虛部兩個變量,如下所示:
在程序中,定義兩個Complex類型的根x1和x2,當delta>=0時,兩個根的虛部為0,否則,分別求解兩個根的虛部值。
C語言實現實現代碼
根據上面的分析,C語言的實現代碼如下:
下面對代碼作簡要說明:
第1-3行包含程序必需的頭文件,其中第3行包含<windows.h>的目的是在第14行能夠調用SetConsoleTitle函數修改控制臺窗口的標題。
第16-18行是程序內部變量的定義,其中,字符型變量k用以控制while循環是否繼續運行,作另一次方程的求解。
第20-42行在while循環內部求解一元二次方程的根,每次循環開始時,根據k的值判斷是否進入循環。
第24行「while(getchar()!='\n');」,其目的是清空輸入緩衝區的內容,getchar函數每次從緩衝區中取出一個字符,只要取出的字符不是回車就一直取,這樣可以緩衝區中所有的無效字符都取出來,直到用戶按下回車鍵為止。清空輸入緩衝區的內容後,在第48行輸入k的值時才能接收到正確的字符值。
第44-45行,使用printf函數在控制臺窗口上列印兩個根的值,格式符「%10.5f」代表列印的數字格式為:佔10個字符的寬度並且保留5位小數。
第47-48行,使用scanf函數接收用戶的輸入放到k中,只有當用戶輸入』y』字符時,while繼續運行,否則退出while循環。
程序運行結果如下圖所示,可以分別求出實數解和算數解的情況:
總結
這個例子程序比較簡單,但涉及到的C語言知識點不算少,包括:while循環、if/else、結構體、getchar函數、printf函數、scanf函數、控制臺窗口標題設置等。
如果你覺得這篇文章對你有用的話,請不要忘記點讚哦。