2014-07-19 281 views
0

在C中,我編寫了一個程序,它使用二分查找搜索有序數組中的數字。我在程序的一部分中使用了以下代碼來定義兩個變量,中間和檢查。C爲什麼3除以2等於0,而是1等於1?

(n是陣列的尺寸)

int middle = 0; 
int check = 0; //Checks if array holds an odd or even amount of numbers 
check = n/2; 
printf("check = %d\n", check); 

出於某種原因,支票被顯示爲0,而不是爲一體。但是,更令我困惑的是,在我將n/2分配給它之後,中間就等於一個。

//Is there an even amount of numbers? 
    printf("n = %d\n', n); 
    printf("Checking if array is even or odd.\n'); 
    printf('Check starts out equaling %d after being divided\n", check); 
    while (check > 1) 
    { 
     check = check/2; 
     printf("Check equals %d\n", check); 
    } 
    if (check == 0) 
    { 
     //Number is even 
     middle = n/2; 
     printf("Even amount, middle = %d\n", middle); 
    } 
    else 
    { 
     //Number is odd 
     middle = (n - 1)/2; 
     printf("Odd amount, middle = %d\n", middle); 
    } 

當我運行代碼時,使用由數字2,3和4組成的數組,我得到以下結果。

check = 0 
Even amount, middle equals 1 

爲什麼檢查等於零和中間等於一,當兩者都是int並且等於相同的公式時?我希望兩者等於一,但不明白爲什麼檢查等於零。

+6

使用'檢查%2'來確定'檢查'是奇數還是偶數 – simonc

+6

你已經描述了一個不可能的情況,並用不完整的代碼片段來說明它。發佈一個完整的,可運行的程序來演示異常情況。正確的結果是'3/2 == 1'。 – ooga

+0

當我執行你的代碼與int n = 3;我得到的結果是「check = 1 奇數,中等= 1」。奇怪的答案是錯誤的你 – Sorcrer

回答

1

這聽起來像你執行代碼的順序可能是一個因素。我的猜測是,當你的第一塊代碼正在運行時,n = 0,而n實際上等於你在第二塊代碼運行時期待的結果。很難說沒有看到你發佈的兩個塊之間的代碼,但要檢查你的代碼中n的值是什麼,看看是否是這種情況。

P.S .:你可能想在你的「偶數」printf結尾處引一個換行符。