C语言中的除法和负数取余你真的会了吗?

C语言中的除法和负数取余你真的会了吗?,第1张

         ❤️细节决定成败❤️

🧓作者:每天都要记得刷题(●’◡’●)
🍉时间:2022/04/06

🍉本篇导语:
不知道兄弟们在初学编程的时候是不是和我一样对编程中除法为什么不是四舍五入存在疑惑,负数求余数的规律是什么?下面将会为大家解答这个疑惑.

我们知道数学中的除法和编程中的除法是不一样的,编程中的除法是取整,那么今天我们就聊聊关于"取整"这件事.

除法(取整方式)

1.🎈 向0取整

我们编程中最常见的取整方式就是向0取整
画个数轴你就明白了

printf("%d\t%d\n",-7/2,7/2);

结果不出所料:

通过这个:你就可以在编程中快速求出一个数的除数:先算出数学除法值,然后再向0取整就可以了

2.🎈trunc函数

  • 功能和编程中的除法一样就是向0取整
  • 引用头文件#include
  • 函数的返回值均是double,要强制转换为int
    备注:下列函数都要引用头文件#include,返回值都是double类型,输出时要强转为int

数轴助记:

使用:

	printf("%d\t%d\n", (int)trunc(-3.5), (int)trunc(3.5));//向0取整

3.🎈向下取整(floor函数)

floor:地板,有‘下’的意思;
数轴助记:

使用:

	printf("%d\t%d\n", (int)floor(-3.5), (int)floor(3.5));//向下取整

4.🎈向上取整(ceil函数)

ceil:天花板,有‘上’的意思;
数轴助记:

使用:

	printf("%d\t%d\n", (int)ceil(-3.5), (int)ceil(3.5));//向上取整

5.🎈四舍五入取整(round函数)

使用:

	printf("%d\t%d\n", (int)round(-3.2), (int)round(3.2));//四舍五入取整

6.🎈关于取整总结:

#include
#include//引用头文件
int main()
{
	//下列函数的返回值均是double,要强制转换为int
	printf("%d\t%d\n", -7/2,7/2);//向0取整
	printf("%d\t%d\n", (int)trunc(-3.5), (int)trunc(3.5));//向0取整



	printf("%d\t%d\n", (int)floor(-3.5), (int)floor(3.5));//向下取整
	printf("%d\t%d\n", (int)ceil(-3.5), (int)ceil(3.5));//向上取整
	printf("%d\t%d\n", (int)round(-3.5), (int)round(3.5));//四舍五入取整
	printf("%d\t%d\n", (int)round(-3.2), (int)round(3.2));//四舍五入取整
	return 0;
}

运行结果:

以上这些函数的作用:

1.比如你是一名运动员,你在写这个的年龄的时候,就可以利用这个规则,减小自己的岁数
2.比如你是一名职场管理人士,你在写这个的年龄的时候,就可以利用这个规则,增大自己的岁数

负数取余

下面正数取余没什么特殊的地方,因此我们主要讲讲负数的取余

取余这块就没有像取整一样有那么多函数,但是既然我把取余和取整放一块肯定有特别的意义,快和我一起看看吧!

使用:

printf("%d\t%d\n", -7 % 2, 7 % 2);
	//-7/2=-3,余-1
	//7/2=3,余1

结果:

最早的取余定义:0<=余数<被除数
但是后来人们发现:(同样是-10%3)

不同的语言,同一个表达式的对取余的结果大相径庭:
C语言:-10=-33-1,其中-3是商,-1是余数,是负余数
python:-10=-4
3+2,其中-4是商,2是余数,是正余数
本质原因的和商有关,也就是和除法的取整方式有关

所以对于求余数的概念有所修订:0<=|余数|<|被除数|

**备注:python学习者对于小细节勿喷,只是不想让C学语言者纠结 **

合理解释:

余数和商有关,而商又和除法的取整方式有关!

另一个角度理解C和python中的取‘余’:

C语言:余数尽可能向0靠近
python:余数尽可能向负无穷靠近

运算技巧:
先用取整方式算出商,再算余数

取余的题解实际用例:

请你将一个十进制数转换为一个二进制数

或许你会这么做:

while(n!=0)
{
  a[len++]=n%2;
  n=n/2;
}

n是正数的话显然可以,
举个例子:
11%2商5余1,行
但是要是这个n是负数呐?
举个例子:
-11%2商-5余-1,不行!(二进制只能是0和1)

所以这个无论在平时计算时有更深的理解,而且在实际的编程中理解也会更透彻!

           ❤️收获一个小细节❤️

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/567361.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-09
下一篇 2022-04-09

发表评论

登录后才能评论

评论列表(0条)

保存