2015-12-16 一些学习感想

本文回顾了编程基础知识,强调了温故知新的重要性。作者通过复习求解二次方程的代码,发现了类型定义错误,并解释了为何在比较浮点数时使用极小值而非直接比较为零。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值