今天复习了之前写过的一些代码,发现许多知识以及淡忘了,看来以后不仅要向后看也要向前看。
比如,我复习求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; }
原文:http://lzd1995.blog.51cto.com/10973198/1725449