向上向下取整函數數只會對小數點后面的數字不為零的數進行操作,要是給它一個整數 它就返回整數本身.
對小數不為零的數操作:
向上取整 不管四舍五入的規則 只要后面有小數前面的整數就加1
向下取整 不管四舍五入的規則 只要后面有小數忽略小數
給定 4.9
調用用向下取整函數 得到的是 4
調用用向上取整函數 得到的是 5
向下取整的運算稱為Floor,用數學符號⌊⌋表示,與之相對的,向上取整的運算稱為Ceiling,用數學符號⌈⌉表示。
C語言定義的取整運算既不是Floor也不是Ceiling,無論操作數是正是負總是把小數部分截斷(Truncate),所以當操作數為正的時候相當於Floor,當操作符為負的時候相當於Ceiling。
網頁分頁常用到的一個分頁算法
假設變量x和n是兩個正整數,我們知道x/n
這個表達式的結果是取Floor,例如x是17,n是4,則結果是4。如果希望結果取Ceiling應該怎么寫表達式呢?例如x是17,n是4,則結果是5,而x是16,n是4,則結果是4。
#include <stdio.h>
int main()
{
int x,n;
printf("請輸入數字:x n/n");
scanf("%d %d",&x,&n);
printf("x/n 向上取整的結果:%d/n",(x+n-1)/n);
printf("x/n 向上取整方法二:%d/n",(int)(((float)x/(float)n)+0.9));
return 0;
}
向下取整的運算稱為Floor,用數學符號⌊⌋表示;向上取整的運算稱為Ceiling,用數學符號⌈⌉表示。例如:
⌊59/60⌋=0
⌈59/60⌉=1
⌊-59/60⌋=-1
⌈-59/60⌉=0
在C語言中整數除法取的既不是Floor也不是Ceiling,無論操作數是正是負總是把小數部分截掉,在數軸上向零的方向取整(Truncate toward Zero),或者說當操作數為正的時候相當於Floor,當操作數為負的時候相當於Ceiling。
習題
假設變量x和n是兩個正整數,我們知道x/n這個表達式的結果要取Floor,例如x是17,n是4,則結果是4。如果希望結果取Ceiling應該怎么寫表達式呢?例如x是17,n是4,則結果是5;x是16,n是4,則結果是4。
習題的大意是如果X除N能除斷,則結果為余數,如果X不能除斷,則結果為余數加1。
INT函數
將數字向下舍入到最接近的整數,即取不大於自變量的最大整數,
例如:int[6.4]=6 int[-9.7]= -10
語法
INT(number)
Number 需要進行向下舍入取整的實數。
示例
如果將示例復制到空白工作表中,可能會更易於理解該示例。
| A |
1 | 數據 |
2 | 19.5 |
公式 | 說明(結果) |
=INT(8.9) | 將8.9向下舍入到最接近的整數(8) |
=INT(-8.9) | 將-8.9向下舍入到最接近的整數(-9) |
=A2-INT(A2) | 返回單元格A2中正實數的小數部分(0.5) |
類型標識符
C/C++編程語言中,int表示整型變量,是一種數據類型,用於定義一個整型變量,在不同編譯環境有不同的大小,不同編譯運行環境大小不同,在但是 32/64位系統中都是32位,范圍為-2147483648~+2147483647,無符號情況下表示為0~4294967295。
網上搜索到結果為如下:
1、
if((x%n)>0){result =x/n+1;}
else{result=x/n;}
(x+n-1)/n);
3、
(int)(((float)x/(float)n)+0.9))
下面給出證明:
1. 設x=kn,k為整數,即x為n的整數倍。則(x+n-1)/n=(kn+n-1)/n=((k+1)n-1)/n,此時分子沒有達到n的k+1倍,但大於等於n的k倍,
默認計算取下整則為k。符合要求。
2.設x=kn+m,k為整數,m為整數且0<m<n。則(x+n-1)/n=(kn+m+n-1)/n=((k+1)n+m-1)/n。此時分子的大於等於(k+1)n,小於(k+2)n,
按照默認計算應該為k+1。符合要求。
向上取整和向下取整的代碼實例:#include <math.h>
#include <stdio.h>
void main( void )
{
double y;
y = floor( 2.8 );
printf( "The floor of 2.8 is %f\n", y );
y = floor( -2.8 );
printf( "The floor of -2.8 is %f\n", y );
y = ceil( 2.8 );
printf( "The ceil of 2.8 is %f\n", y );
y = ceil( -2.8 );
printf( "The ceil of -2.8 is %f\n", y );
}
Output
The floor of 2.8 is 2.000000 // 地板,就是取低
The floor of -2.8 is -3.000000 // 地板,就是取低,-3 比 -2.8 低
The ceil of 2.8 is 3.000000 // 天花板,就是取高
The ceil of -2.8 is -2.000000 // 天花板,就是取高,-2 比 -2.8高
Word->插入->符號,在字體中選擇Lucida Sans Unicode 子集選擇數學運算符 就能找到向上、向下取整符號
該習題解答如下:
#include <stdio.h>
int main()
{
int x,n;
printf("請輸入數字:x n\n");
scanf("%d %d",&x,&n);
printf("x/n 向上取整的結果:%d\n",(x+n-1)/n);
return 0;
}
linux 系統下編譯此程序步驟:
將這個程序保存成main.c
,然后編譯執行:
$ gcc main.c
$ ./a.out
gcc是Linux平台的C編譯器,編譯后在當前目錄下生成可執行文件a.out,直接在命令行輸入這個可執行文件的路徑就可以執行它。如果不想把文件名叫a.out,可以用gcc的-o參數自己指定文件名:
$ gcc main.c -o main
$ ./main