【时时三省】(C语言基础)选择结构程序综合举例2
山不在高,有仙则名。水不在深,有龙则灵。 ----CSDN 时时三省
例题:
求ax + bx + c = 0方程的解。
解题思路:
有以下几种可能。
①a = 0,不是二次方程。
②b-4 ac = 0,有两个相等实根。
③b2-4ac > 0,有两个不等实根。
④b2-4 ac < 0,有两个共轭复根。应当以p + qi和p- qi的形式输出复根。其中,p = -b / 2a,q =√ (b*b-4 ac ) / 2 a。
编写程序:
运行结果(运行3次):
(1)输入a,b,c的值1,2,1,得到两个相等的实根。
( 2 )输入a,b ,c的值1,2,2,得到两个共轭的复根。
( 3 )输入a,b,c的值2,6,1,得到两个不等的实根。
程序分析:
程序中用disc代表b-4 ac,先计算disc的值,以减少以后的重复计算。对于判断b-4 ac是否等于0时,要注意:由于disc(即b—4ac)是实数,而实数在计算和存储时会有一些微小的误差,因此不能直接进行如下判断:“if ( disc = = 0 )…”,因为这样可能会出现本来是零的量,由于上述误差而被判别为不等于零而导致结果错误。所以采取的办法是判别disc的绝对值( fabs ( disc ) )是否小于一个很小的数(例如10-),如果小于此数,就认为disc等于0。程序中以realpart代表实部p,以imagpart代表虚部q,以增加可读性。在输出复根时,先分别计算出其实部与虚部,在printf函数的格式字符串中在输出虚部的格式声明( % 8.4f )后面人为地加一个普通字符“i”,就能输出“p + qi”这样的复数形式。