首页 > 试题广场 >

若k为整形,下述while循环的次数为:()

[单选题]
若k为整形,下述while循环的次数为:()
int k=1000;
while (k > 1)
{ 
	printf("%d\n", k);
	k = k / 2;
}



  • 1000
  • 10
  • 11
  • 9
当k>1时继续执行k/=2;只需要将1000的二进制11 1110 1000每次右移一位,直到00 0000 0011时,计算总共右移了9位,,
发表于 2017-07-19 22:17:16 回复(5)
9<log2(1000)<10
发表于 2016-04-16 10:05:18 回复(2)
坑在K为整形
发表于 2016-09-02 22:33:26 回复(5)
直接运行一下就可以了
发表于 2016-06-13 14:33:30 回复(1)
k是1000,2的10次方是1024,2的9次方是512,所以可以确定k共10位
每次k/=2,向左移动一位,但是注意注意,此题陷阱在while(k>1),如果是while (k>0),那么循环的次数就是k的位数,即10,但是while(k>1)意味着在最后一次,k等于1的时候是不进行循环操作的,所以答案是9
发表于 2017-04-18 18:35:20 回复(0)
实测:如果k为int 执行9次;如果k为double 执行10次

发表于 2019-07-23 17:38:11 回复(0)
注意k为整形,那么print出来的值依次为
1.1000
2.500
3.250
4.125
5.62
6.31
7.15
8.7
9.3 (再执行下一句k = k / 2,此时 k = 1,循环停止)
发表于 2017-09-22 12:07:11 回复(0)
这个题就是个坑
发表于 2016-04-26 19:48:35 回复(0)
#include
int main()
{
  int k=1000;
   while (k>1)
   {    printf("%d\n", k);
        k=k/2;
    }
   while(1);
}
做完运行下验证就好。1000 500 250 125 62 31 15 7 3 

发表于 2017-03-14 09:54:18 回复(0)
emmm最后一次1进不了循环
发表于 2022-09-21 09:40:17 回复(0)
2^x=1000   即可, 因为2^9=512而2^10=1024
发表于 2020-11-21 12:31:49 回复(0)
k >  1  不是 > 0  看清楚了!
发表于 2019-11-25 10:55:24 回复(0)
%%头像 %%
2的10次方等于1024
发表于 2018-09-19 09:54:42 回复(0)
k>1 是个陷阱,2^10=1024 所以最多循环10次 但是k>1 10-1=9
发表于 2018-06-11 08:59:09 回复(0)
D
坑在k为整形,看到@jack2723186855的答案才懂,明显另两个人的答案是不太精准的呃。。。
循环次数:001 002 003 04 05 06 7 8 9 跳出
k值         :500 250 125 64 32 16 8 4 2 1(break)
若k不为整形,明显应该是10次。
发表于 2017-10-14 22:33:55 回复(0)
每一步都是整型
发表于 2017-10-04 11:27:09 回复(0)
应该提示K为整形
发表于 2017-09-18 21:29:40 回复(0)
2^10=1024
发表于 2017-09-03 14:31:07 回复(0)
1 = pow(2, 0) < pow(2, 9) < 1000 < pow(2, 10) 除以2,相当于左移,10 - 1 = 9
发表于 2017-05-23 16:04:54 回复(0)
X~头像 X~
除以2,相当于2进制向右移一位;每次向右移一位,到最终为1的时候退出循环;10进制1000转为2进制后,最高位1在第10位,将其移到第一位需要循环9次,所以结果为9。相当于2进制最高位-1。
发表于 2017-04-30 18:02:35 回复(0)