今天复习了之前写过的一些代码,发现许多知识以及淡忘了,看来以后不仅要向后看也要向前看。
比如,我复习求ax^2+bx+c=0二元一次方程的根,我编写代码的时候定义a,b,c三个局部变量定义成了整形,这根本就是错的。我还复习到float型变量跟零进行比较的时候需要与一个特别小的数代替零。比如0.0000000001比如1e-6,我就想是为什么,我查阅了资料,发现是因为实数在计算和存储过程中会有一些微小的误差,对于一些与零作比较的语句来说,有时会因误差而导致原本是等于零但结果却小于零之类的情况发生,所以常用一个很小的数如1e-6代替0。
所以,温故知新,所言不假。
下面是我编写的代码:
#include<stdio.h>
#include<math.h>
float emp = 0.0000000001;
int main()
{
float a = 0.0, b = 0.0, c = 0.0;
printf("a=");
scanf("%f", &a);
printf("b=");
scanf("%f", &b);
printf("c=");
scanf("%f", &c);
if (b*b - (4 * a*c) > emp)
{
printf("x1=%f,x2=%f\n", (-b) + sqrt(b*b - (4 * a*c)) / 2 * a, (-b) - sqrt(b*b - (4 * a*c)) / 2 * a);
}
else if (b*b - (4 * a*c) > -emp && (b*b - (4 * a*c)) < emp)
{
printf("x1=%f,x2=%f\n", (-b) + sqrt(b*b - (4 * a*c)) / 2 * a, (-b) - sqrt(b*b - (4 * a*c)) / 2 * a);
}
else
{
printf("有两个共轭复根\n");
}
system("pause");
return 0;
}