1、假設變數x和n是兩個正整數,我們知道x/n這個運算式的結果要取Floor,例如x是17,n是4,則結果是4。如果希望結果取Ceiling應該怎麼寫運算式呢。例如x是17,n是4,則結果是5;x是16,n是4,則結果是4。
答: (x+n-1)/n
(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。符合要求。
2、寫一個函數,參數是整型變數 x ,功能是列印 x 的個位和十位。
#include<stdio.h>int main(void){ int m; printf("please input the number:"); scanf("%d",&m); printf("十位 is %d, 個位 is %d\n",(m/10)%10,m%10); return 0;}
3、編寫一個布爾函數int is_leap_year(int year),判斷參數year是不是閏年。如果某年份能被4整除,但不能被100整除,那麼這一年就是閏年,此外,能被400整除的年份也是閏年。
int is_leap_year(int year){ if (year % 4 == 0) { if (year % 100 != 0) return 1; else return 0; } else if (year % 400 == 0) return 1; else return 0;}
4、編寫一個函數double myround(double x),輸入一個小數,將它四捨五入。例如myround(-3.51)的值是-4.0,myround(4.49)的值是4.0。可以調用math.h中的庫函數ceil和floor實現這個函數。
double myround(double x){ int sa = 0, si = 0; if (x == 0.0) return 0.0; else if (x > 0.0) { sa = (int)x; si = x + 0.5; if (sa == floor(si)) <span style="color: rgb(51, 51, 51); font-family: 'WenQuanYi Micro Hei Mono', 'WenQuanYi Micro Hei', 'Microsoft Yahei Mono', 'Microsoft Yahei', sans-serif, Simsun; font-size: 14.2857141494751px; line-height: 26px;">//如果if語句成立說明x的小數比0.5小,應當捨去</span> return sa; else return sa + 1; } else { sa = (int)x; si = x - 0.5; if (sa == ceil(si)) return sa; else return sa - 1; }}