【发布时间】:2017-11-08 06:12:29
【问题描述】:
下面是我使用二次公式求函数根的程序。它完美地工作。但是,如果不全局定义三个变量,我就无法让它工作;根据我的项目描述,我不应该这样做。
关于如何在本地定义它们以及在打印结果功能能够这样做之前不会丢失计算的任何建议或更改?
#include <stdio.h>
#include <math.h>
double discriminant;
double root_one = 0, root_two = 0;
double a = 0, b = 0, c = 0;
int checkComplex(double a, double b, double c)
{
discriminant = (b * b) - 4 * (a * c);
if (discriminant == 0)
return 2;
else if (discriminant > 0)
return 1;
else
return 0;
}// end checkComplex
void calculateRoots(double a, double b, double c)
{
root_one = (-b + sqrt(discriminant)) / (2 * a);
root_two = (-b - sqrt(discriminant)) / (2 * a);
} // end calculateRoots
void getData()
{
printf("Enter a: ");
scanf("%lf", &a);
printf("\nEnter b: ");
scanf("%lf", &b);
printf("\nEnter c: ");
scanf("%lf", &c);
}// end getData
void printResults()
{
if (checkComplex(a, b, c) == 1)
{
calculateRoots(a, b, c);
printf("\n\n-----------------------------------------\n");
printf("\nThe quantity (b^2-4ac) is %.2lf", discriminant);
printf("\n\nfirst root = %.2lf\nsecond root = %.2lf\n\n", root_one,
root_two);
}// if discriminant is 1
else if (checkComplex(a, b, c) == 0)
{
printf("\n\n-----------------------------------------\n");
printf("The discriminant (b^2-4ac) is negative (imaginary)");
printf("\nTherefore, the roots are complex\n");
} // if discriminant is 0
else if (checkComplex(a == 2, b == 2, c == 2))
{
calculateRoots(a, b, c);
printf("\n\n-----------------------------------------\n");
printf("\nThe quantity (b^2-4ac) is %.2lf", discriminant);
printf("\n\nfirst root = %.2lf\nsecond root = %.2lf\n\n", root_one,
root_two);
}// if discriminant is greater than 1
} // end printResults
int main()
{
getData();
printResults();
return 0;
} // End program
【问题讨论】:
-
在 main 中定义它们,然后通过引用而不是值传递。
-
checkComplex(a == 2, b == 2, c == 2).... 嗯? -
请注意,您应该检查输入是否正确(
scanf()函数都读取了一个值),并适当地处理故障。 -
如果你需要处理复杂的根,为什么不使用复杂的算术,如果事实上你有简单的根,打印简单的实数值呢?使用
complex数据类型可以减少很多复杂性。
标签: c algorithm computer-science