2015-12-16 一些学习感想

  今天复习了之前写过的一些代码,发现许多知识以及淡忘了,看来以后不仅要向后看也要向前看。

  比如,我复习求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;
}


你可能感兴趣的:(C语言学习)