C语言中 int k==0; do{++k;} while(k>=0); 为何不是死循环?

如题所述

第1个回答  2011-04-23
int 类型有个范围,加到最大值以后会变成负值追问

是加到32767后再加就变成-32768了?

追答

不一定,看int类型占空间多少,有的2个字节,有的4个字节,你用char类型可以很快看出来

本回答被提问者采纳
第2个回答  推荐于2016-03-28
该语句不是死循环的原因是int型是一个能表达有符号数的数据类型,且表达的数据有一个范围,当值达到其所能表达的值的上限的时候,会发生溢出现象,从而使该变量的值变为一个负数,从而不满足循环条件而跳出了循环。
常用的单片机编译器,如KEIL下,51类单片机的C语言中,int代表2个字节(16位);如果是32位RAM处理器的C语言中,则int代表4个字节(32位)。
注意:do-while结构语句中do中的语句至少执行一次。
第3个回答  2011-04-23
你定义变量用俩=?追问

不好意思打错了……一个=号,这是全国软件大赛的一个题目的选项

追答

因为这个do{}while()是不管条件成不成立都会先执行一次,所以呢,当执行第一次后你的k=1了!

追问

是啊,但是我的循环条件是k>=0啊

追答

对啊 ,所以k是>0 的嘛 ,所以条件是成立的!

追问

额……我问的是为何“不是”死循环……呵呵

追答

好了撒!

...k==0; do{++k;} while(k>=0); 为何不是死循环?
int 类型有个范围,加到最大值以后会变成负值

...是否是死循环,并简单分析一下!int k=0; do{++k;} while(k>=0...
do{ \/\/do-while循环,先执行一次再判断条件是否成立 ++k; \/\/执行++k, 第一次执行完k=1 } while(k>=0) \/\/判断k是否>=0, 第一次执行完后k=1了,k>=0条件成立 \/\/此后k一直累加,但int是有上限值的,累加到了int的上限时,就会溢出,成为一个负数了,这时循序就结束了 ...

int k=0; do{++k;} while(k>=0)
int k=0;do{ ++k;} while(k>=0) ; \/\/一般来说,这会是个死循环,因为k越加越大 但,因为k是有符号数,达到一定程度,k值会溢出就会变成负数,循环次数是2^31。

关于C 语言的死循环的小选择
答案C是因为加到正数的上限之后k就变成负数了。。果然够隐蔽

C语言习题循环求解
int k=0;do {++k;}while(k>=0);printf("%d\\n",k);\/\/输出退出循环时k的值 程序的输出结果为:-2147483648 循环条件3<=x<=4不能这样表示,这样表示等价于(3<=x)<=4,无论x为任何数,3<=x要么是1要么为0,但不论1还是0都是小于4的,所以这个循环条件始终为真,就是死循环了,条件...

下面程序段不是死循环的是?
do{ ++k;} while(k>=0);其实看似k会一直大于0,但你作为一名学计算机的朋友,一定要记住,任何一个数据类型是有位数限制,好似int在C语言里就固定为32位带符号的整数类型,范围是-2147483648~2147483647,当不断增加一时,超过了就会溢出,返回到负的尽头,你用个printf的语句运行一下,结果是有...

为什么这个选项不是死循环(不是会一直大于等于0么)
肯定是死循环,do while 循环会先执行一次循环体,++k是k自增1后再执行语句即第一次循环时k=1,后面一直能执行且k越来越大

...<stdio.h> int main() { int k=0; while(k) { k++; printf("%d\\n...
K=0 while(k)0相当于“假”所以不执行 非0的值相当于“真”就执行了 在while前面把K改成非0的值,循环就执行了 不过你这是死循环

这个循环是死循环吗?为什么,请解释?
不是死循环 因为K是int型 当k=32767时 执行do语句 k++ K就变成-32768 此时不满足 k>=0 循环结束。

c语言中关于for循环的问题,急急急!!!
死循环,无限次 第二个的理由跟第一个一样,表达式k=0的值为0,所以一次都不运行 第三个是关系判断,如果k的值为0,k==0的值才为1,否则为0,第一次循环k=0,所以第一次运行符合条件,第一次循环结束后k++,k的值成为1,第二次k==0的值就是0了,所以只循环1次 ...

相似回答