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

在这里插入图片描述


一、取整

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

#include <math.h>

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

	return 0;
}

结果如下:
在这里插入图片描述

示意图如下:
在这里插入图片描述

floor是向-∞取整。
如下


#include <math.h>

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;
}

结果如下:
在这里插入图片描述

示意图如下:
在这里插入图片描述
ceil是向+∞取整。
如下:

#include <math.h>

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;
}

结果如下:
在这里插入图片描述

示意图如下:
在这里插入图片描述round是四舍五入。
如下:

#include <math.h>

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;
}

结果如下:
在这里插入图片描述

二、取模

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

如下:

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

	return 0;
}

结果如下:
在这里插入图片描述
我们发现计算机的结果与我们计算的结果不同,这是为什么?
在这里我们就要介绍取余

三、取余

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

四、取余与取模的区别

其它们的本质差别就是取整方式的不同
取余:商(q)向0取整。
取模:商(q)向-∞取整。
在此让我们在看向0取整向-∞取整的示意图
如下:
在这里插入图片描述

在这里插入图片描述
自此我们可以清晰的发现,
对于正数而言:向0取整向-∞取整方向相同,所以正数的取余与取模计算的r是相当的
对于负数而言:向0取整向-∞取整方向不相同,所以负数的取余与取模计算的r是不相当的


总结

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

  • 15
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

水月梦镜花

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值