C语言取整(含强制转换)

目录

  • 0 应用于
  • 1 浮点数取整
    • 1.1 强制转换
    • 1.2 函数
      • 1.2.1floor()
      • 1.2.2 ceil()
      • 1.2.3 rint()
      • 1.2.4 round()
    • 1.3 验证代码
    • 1.4 总结
  • 2 整数取整

约定:

	long double p;
	long long q;

0 应用于

https://blog.csdn.net/qq_40893824/article/details/105907220 1.3 节

1 浮点数取整

1.1 强制转换

	q = (long long )p;

1.2 函数

1.2.1floor()

	q = floor(p);

1.2.2 ceil()

	q = ceil(p);

1.2.3 rint()

	q = rint(p);

1.2.4 round()

	q = round(p);

1.3 验证代码

#include 
using namespace std;

int main()
{
	long double p;
	long long q;
	scanf("%Lf", &p);
	while(1)
	{
		getchar(); 
		printf("p = % Lf\n\n", p) ;
		
		//1 (long long) 强制转换 取整 舍去小数部分 
		cout << "q = (long long )p; 后 舍去 " << p << " 小数部分" << endl;
		q = (long long )p;
		cout << "sizeof( (long long )p ) = "  << sizeof((long long )p) << endl; 
		printf("q = %lld\n\n", q);
		
		//2 floor(p) 强制转换 取整 小于等于 x的最大整数 返回double型
		cout << "q = floor(p); 后 小于等于 " << p << " 的最大整数" << endl;
		q = floor(p);
		cout << "sizeof(floor(p)) = "  << sizeof(floor(p)) << endl;
		printf("q = %lld\n\n", q);
		
		//3 ceil(p) 强制转换 取整 大于x的最小整数 返回double型
		cout << "q = ceil(p); 后 大于 " << p << " 的最小整数" << endl;
		q = ceil(p);
		cout << "sizeof(ceil(p)) = "  << sizeof(ceil(p)) << endl;
		printf("q = %lld\n\n", q);
		
		//4 rint(p) 强制转换 取整 四舍五入 (+-)n.5时往绝对值小的方向 
		cout << "q = rint(p); 后  "<< p << " 四舍五入 ( (+-)n.5时往绝对值小的方向 )" << endl;
		q = rint(p);
		cout << "sizeof(rint(p)) = "  << sizeof(rint(p)) << endl;
		printf("q = %lld\n\n", q);
		
		//4 round(p) 强制转换 取整 四舍五入 (+-)n.5时往绝对值小的方向 
		cout << "q = round(p); 后  "<< p << " 四舍五入 ( (+-)n.5时往绝对值大的方向 )" << endl;
		q = round(p);
		cout << "sizeof(round(p)) = "  << sizeof(round(p)) << endl;
		printf("q = %lld\n\n\n", q);
		
		scanf("%Lf", &p);
	}
	system("pause");
	return 0;
}

C语言取整(含强制转换)_第1张图片 C语言取整(含强制转换)_第2张图片
C语言取整(含强制转换)_第3张图片 C语言取整(含强制转换)_第4张图片
C语言取整(含强制转换)_第5张图片 C语言取整(含强制转换)_第6张图片
返回类型 用 sizeof() 判断:
C语言取整(含强制转换)_第7张图片

1.4 总结

使用形式 做法 返回
强制转换 (数据类型)p 去小数部分 整数
函数 floor(p) 小于等于 p的最大整数 整数
ceil(p) 大于p的最小整数 浮点数double
rint(p) 四舍五入,(+-)n.5时往绝对值小的方向 浮点数double
round(p) 四舍五入,(+-)n.5时往绝对值小的方向 整数

2 整数取整

结论:
在0 < M <= N, M, N∈Z 时,int nn = (N-1) / M +1,其中 除法 ‘/’ 往下取整

推导:

设N = Mk + r (0 <= r < M,k∈Z)
< > 向上取整,[ ] 向下取整

当 r > 0
左:< N / M > = < ( Mk + r ) / M >= < k + r / M >= k + < r / M > = k+1
右:[ (N - 1) / M ] + 1 = [ (Mk + r - 1) / M ] + 1 = [ k + (r - 1) / M ] + 1 = k+1+[ (r - 1) / M ] = k + 1

当 r = 0
左:< N / M > = k
右:[ (N - 1) / M ] + 1 = [ (Mk - 1) / M ] + 1 = [ ( M(k - 1) + M - 1 ) / M ] + 1
= [ k - 1 + (M - 1) / M ] + 1 = k + [ (M - 1) / M ]
= k

你可能感兴趣的:(记录)