C语言中取整与取模与取余

C语言中取整与取模与取余_第1张图片

文章目录

  • 一、取整
  • 二、取模
  • 三、取余
  • 四、取余与取模的区别
  • 总结


一、取整

C中提供了4中取整函数分别是:trunc,floor,ceil,round
函数的头文件都是。[0向取整也就是C中默认的取整方式。]
trunc向0取整
如下:

#include 

int main()
{
	printf("%lf\n", trunc(2.8));
	printf("%lf\n", trunc(-2.8));

	return 0;
}

结果如下:
C语言中取整与取模与取余_第2张图片

示意图如下:
C语言中取整与取模与取余_第3张图片

floor是向-∞取整。
如下


#include 

int main()
{/*
	printf("%lf\n", trunc(2.8));
	printf("%lf\n", trunc(-2.8));*/

	printf("%lf\n", floor(2.8));
	printf("%lf\n", floor(-2.8));

	return 0;
}

结果如下:
C语言中取整与取模与取余_第4张图片

示意图如下:
C语言中取整与取模与取余_第5张图片
ceil是向+∞取整。
如下:

#include 

int main()
{/*
	printf("%lf\n", trunc(2.8));
	printf("%lf\n", trunc(-2.8));*/

	/*printf("%lf\n", floor(2.8));
	printf("%lf\n", floor(-2.8));*/

	printf("%lf\n", ceil(2.8));
	printf("%lf\n", ceil(-2.8));

	return 0;
}

结果如下:
C语言中取整与取模与取余_第6张图片

示意图如下:
C语言中取整与取模与取余_第7张图片round是四舍五入。
如下:

#include 

int main()
{/*
	printf("%lf\n", trunc(2.8));
	printf("%lf\n", trunc(-2.8));*/

	/*printf("%lf\n", floor(2.8));
	printf("%lf\n", floor(-2.8));*/

	/*printf("%lf\n", ceil(2.8));
	printf("%lf\n", ceil(-2.8));*/

	printf("%lf\n", round(2.8));
	printf("%lf\n", round(2.4));
	printf("%lf\n", round(-2.8));
	printf("%lf\n", round(-2.4));

	return 0;
}

结果如下:
C语言中取整与取模与取余_第8张图片

二、取模

取模的概念(修正后):
如果a和b是两个自然数,d非0,可以证明存在两个唯一的整数q和r,满足a = q * d + r且 0 <= |r| < |d|。
其中q为商,r为余数。
对于r而言,其大小由q决定,而q的大小,由取整规则而定。
取模的取整规则商(q)向-∞取整
当我们知道这一概念后,就可以知道计算机是如何进行取模运算的。
那么让我们来进行10和-10的取模运算。
如下:
C语言中取整与取模与取余_第9张图片
但C中真的是这样吗?

如下:

int main()
{
	printf("%d %d\n", 10 / 3,10 % 3);
	printf("%d %d\n", -10 / 3, -10 % 3);

	return 0;
}

结果如下:
C语言中取整与取模与取余_第10张图片
我们发现计算机的结果与我们计算的结果不同,这是为什么?
在这里我们就要介绍取余

三、取余

取余的概念取模的概念没有太多的区别。
唯一的区别就是它们的取整方式不同
取余的取整方式:让商(q)向0取整
那么让我们在来进行 10和-10 的“ 取模运算 ”
如下:
C语言中取整与取模与取余_第11张图片
在与计算机的结果对比:
C语言中取整与取模与取余_第12张图片
我们发现在C中的“取模计算”好想就是等与取余计算。(只是在C语言中

四、取余与取模的区别

其它们的本质差别就是取整方式的不同
取余:商(q)向0取整。
取模:商(q)向-∞取整。
在此让我们在看向0取整向-∞取整的示意图
如下:
C语言中取整与取模与取余_第13张图片

C语言中取整与取模与取余_第14张图片
自此我们可以清晰的发现,
对于正数而言:向0取整向-∞取整方向相同,所以正数的取余与取模计算的r是相当的
对于负数而言:向0取整向-∞取整方向不相同,所以负数的取余与取模计算的r是不相当的


总结

以上就是我对取整,取余,取模的了解。

你可能感兴趣的:(C语言,c语言)