/*
我的程序是通过自定义函数abc()实现求解一元二次方程,但是运行结果很明显是错的(PS编译结果可以运行)希望大神帮我看看这个程序。
*/
源代码
# include <stdio.h>
# include <math.h>
void abc(double a, double b, double c) //a, b, c 为标准一元二次方程的系数
/*abc(表达式,表达式,表达式)
为解一元二次方程自定义函数*/
{
double m; //方程判别式
double x1, x2; //方程的解
m = b*b - 4*a*c; //方程判别式
//利用if...else语句判断方程解得个数的三种情况
if (m > 0) //两个不同根的解
{
x1 = (-b + sqrt(m)) / (2*a); //求根公式
x2 = (-b - sqrt(m)) / (2*a); //求根公式
printf("方程有2个解x1 = %lf x2 = %lf\n", x1, x2);
}
else if (0 ==m) //同根解
{
x1 = (-b) / (2*a); //求根公式---单解
x2 = x1;
printf("方程有1个解x1 = x2 = %lf\n", x1);
}
else //无解
{
printf("方程有0个解\n");
}
}
int main(void)
{
double a, b, c; //标准形式方程的三个系数
char ch;
/*
do...while循环可以选择性的执行程序
*/
do
{
//输入三个系数
printf("请输入一元二次方程的三个系数:\n");
printf("*** a = ");
//printf(" ***\n");
scanf ("%d",&a);
printf("*** b = ");
scanf ("%d",&b);
printf("*** c = ");
scanf ("%d",&c);
abc(a, b, c); //运用自定义函数 abc 求解方程
printf("\n");
printf("按Y键继续按任意键退出:");
scanf (" %c", &ch); // %c前必须加一个空格
}while('y'==ch || 'Y'==ch); //输入y或Y循环继续否则跳出循环
printf("\n***GAME OVER!!!***\n");
return 0;
}
我的程序是通过自定义函数abc()实现求解一元二次方程,但是运行结果很明显是错的(PS编译结果可以运行)希望大神帮我看看这个程序。

*/
源代码
# include <stdio.h>
# include <math.h>
void abc(double a, double b, double c) //a, b, c 为标准一元二次方程的系数
/*abc(表达式,表达式,表达式)
为解一元二次方程自定义函数*/
{
double m; //方程判别式
double x1, x2; //方程的解
m = b*b - 4*a*c; //方程判别式
//利用if...else语句判断方程解得个数的三种情况
if (m > 0) //两个不同根的解
{
x1 = (-b + sqrt(m)) / (2*a); //求根公式
x2 = (-b - sqrt(m)) / (2*a); //求根公式
printf("方程有2个解x1 = %lf x2 = %lf\n", x1, x2);
}
else if (0 ==m) //同根解
{
x1 = (-b) / (2*a); //求根公式---单解
x2 = x1;
printf("方程有1个解x1 = x2 = %lf\n", x1);
}
else //无解
{
printf("方程有0个解\n");
}
}
int main(void)
{
double a, b, c; //标准形式方程的三个系数
char ch;
/*
do...while循环可以选择性的执行程序
*/
do
{
//输入三个系数
printf("请输入一元二次方程的三个系数:\n");
printf("*** a = ");
//printf(" ***\n");
scanf ("%d",&a);
printf("*** b = ");
scanf ("%d",&b);
printf("*** c = ");
scanf ("%d",&c);
abc(a, b, c); //运用自定义函数 abc 求解方程
printf("\n");
printf("按Y键继续按任意键退出:");
scanf (" %c", &ch); // %c前必须加一个空格
}while('y'==ch || 'Y'==ch); //输入y或Y循环继续否则跳出循环
printf("\n***GAME OVER!!!***\n");
return 0;
}