习题 7.2 求方程ax^2+bx+c=0的根,用3个函数分别求当:b^2-4ac大于0、等于0和小于0时的根并输出结果。从主函数输入a, b, c的值。

C程序设计(第四版) 谭浩强 习题7.2 个人设计

习题 7.2 求方程ax2+bx+c=0的根,用3个函数分别求当:b2-4ac大于0、等于0和小于0时的根并输出结果。从主函数输入a, b, c的值。

代码块:

方法1:

#include 
#include 
#include 
float GT1(float x, float y, float z);                      //定义大于0时1号实根函数
float GT2(float x, float y, float z);                      //定义大于0时2号实根函数
void LT();                                                 //定义小于0时函数
float EQ(float x, float y, float z);                       //定义等于0时函数
float m;                                                   //定义全局变量,方程判别式
int main()
{
    float a, b, c, r1, r2;
    scanf("%f %f %f", &a, &b, &c);                         //输入方程系数
    m=b*b-4*a*c;                                           //得出判别式值
    if (m>0){
        r1=GT1(a, b, c);
        r2=GT2(a, b, c);
        printf("The result is %.4f and %.4f\n", r1, r2);   //调用大于0时函数并输出两个实根
    }
    else if (m<0)
        LT();                                              //调用无解时的函数
    else{
        r1=EQ(a, b, c);
        printf("The result is %.4f\n", r1);                //调动等于0时函数并输出根
    }
    system("pause");
    return 0;
}
extern float m;                                            //引用全局变量
//大于0时1号实根函数
float GT1(float x, float y, float z)
{
    float n;
    n=((-1)*y+sqrt(m))/(2*x);
    return n;
}
extern float m;                                            //引用全局变量
//大于0时2号实根函数
float GT2(float x, float y, float z)
{
    float n;
    n=((-1)*y-sqrt(m))/(2*x);
    return n;
}
//小于0时函数,无解函数
void LT()
{
    printf("There is no real root!\n");
}
extern float m;                                            //引用全局变量
//等于0时函数
float EQ(float x, float y, float z)
{
    float n;
    n=((-1)*y)/(2*x);
    return n;
}

方法2:

#include 
#include 
#include 
void greater(float x, float y, float z, float m);      //定义大于0时函数
void equal(float x, float y, float z, float m);        //定义等于0时函数
void less(float x, float y, float z, float m);         //定义小于0时函数
void function(float j, float k, float l, float n);     //定义判别式函数
int main()
{
	float a, b, c, d;
	printf("Please enter A, B, C: ");                  //输入方程系数
	scanf("%f %f %f", &a, &b, &c);
	d=b*b-4*a*c;                                       //得出判别式值
	function(a, b, c, d);                              //调动判别式函数
	system("pause");
	return 0;
}
//判别式函数,通过判断判别式值,调用相应的函数
void function(float j, float k, float l, float n)
{
	n>0 ? greater(j, k, l, n) : (n==0 ? equal(j, k, l, n) : less(j, k, l, n));
}
//大于0时函数
void greater(float x, float y, float z, float m)
{
	printf("X1=%.2f, X2=%.2f\n", ((-1)*y+sqrt(m))/(2*x), ((-1)*y-sqrt(m))/(2*x));
}
//等于0时函数
void equal(float x, float y, float z, float m)
{
	printf("X=%.2f\n", ((-1)*y)/(2*x));
}
//小于0时函数
void less(float x, float y, float z, float m)
{
	printf("The equation is unsolvable\n");
}

你可能感兴趣的:(C程序设计,(第四版),谭浩强,课后答案)