在 C 语言中,我编写了一个程序,使用二分搜索在有序数组中搜索数字。我在程序的一部分中有以下代码,用于定义两个变量:middle 和 check。
(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,而不是 1。然而,更让我困惑的是,在我给它分配了 n/2 后,中间的值也等于 1。
//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
当两者都是整数并且等于同一个公式时,为什么检查等于 0 和中间等于 1?我希望两者都等于 1,但无法理解为什么 check 等于 0。
最佳答案
在我看来,执行代码的顺序可能是这里的一个因素。我的猜测是,当您的第一个代码块运行时,n = 0,而 n 实际上等于您在第二个代码块运行时期望的值。如果不查看您发布的两个 block 之间的代码,很难判断,但请检查整个代码中 n 的值,看看情况是否如此。
P.S.:您可能想在“Even amount”printf 的末尾添加一个换行符。
关于C 为什么 3 除以 2 在一个 int 中等于 0,而在另一个 int 中等于 1?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24842646/