1、13。执行了五个循环后i==10,执行第六个循环后i==12,判断i++<=10之后i加一变成13并退出。注:i++是先判断后加一。
2、-1。char x=0xFFFF; 由于char是八位的,赋值之后x==0XFF,即1111 1111。x--是先输出再减一。%d是按有符号形式输出,1111 1111是-1的补码形式。
1为A,当i等于0时,会直接进循环,然后自加1,这时i 为1,又<=优先级高于++,i会先和10比,再自加,进循环,再自加这时i 为3 ....一直下去直到i为9进循环,再自加为10 和10比,再自加为11,再加1为12和10比,再自加后跳出循环。
2题,不太懂,字符怎么会是16进制。
第一题选A
该题相当于for(i=0;i<=10;i+=2); i++;
第二题选C
我也不知道,但调试出来的结果是-1
1、主要考量for语句的执行顺序,首先在进入for语句时,执行i = 0,只执行一次;然后执行判断条件(即本例中为i++<-10),每次循环执行一次;最后当for语句体内的语句执行完毕后,执行第二个分号后面的语句,也就是本例中的i++,也是每次循环执行一次。
这样的话就清楚了,当执行到i = 10时,会执行下面(i++<=10)的判断操作,因为i++是先使用后加加,所以满足条件,仍会执行循环(此时i值变为11),也就是说第二个分号后面的i++仍会执行,那么,i的值将变为12。这是又会执行(i++<=10)的判断操作,显然不符合条件,不过表达式中的i已经自增1,因此i的值变为13。
2、char x = 0xFFFF;这句存在隐式转换,在编程中是要避免出现的。因为CHAR类型只占一个字节,而0xFFFF占两个字节,所以只将低字节赋值给X,所以x的值为0xFF。
在printf语句中,执行的是x--,而x--是先使用x的值再减一,也就是用于输出的x的值还是0xFF,而要求输出为%d的数值格式,是有符号的整数,0xFF所代表的有符号整数即为-1。
注:原来第1题的回答有问题,又重新作了修改,仅供参考! :)
条件