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是不相当的。
总结
以上就是我对取整,取余,取模的了解。
更多推荐
所有评论(0)