c语言自加自减问题,加急!!

发布时间:2024-04-28 21:39 发布:上海旅游网

问题描述:

main()
{
int i=1,j=2,k=3;
if(i++==1&&(++j==3||k++==3))
printf("%d,%d,%d",i,j,k);
}
运行结果为什么是2,3,3;i和k的运算效果不同么?

问题解答:

if(i++==1&&(++j==3||k++==3)) 语句中
先判断i++==1,i++是取i的值,然后再加1.所以i++==1为真,并且i=i+1,那么i==2
然后判断++j==3先对j加1,再判断j是否为3,故++j==3为真并且j=j+1,那么j==3
此时if的判断语句已经为真,这个时候停止判断。

在运行 或 运算时,如果前面为1 后面就不计算了,直接跳过!

++i是在取i用之前先自增,自增后才用;i++是先取i用,用完之后再自增。这个题目由于j后面的k是或者的关系,j那个语句对了,那么括号内的或者语句也就对了,k的语句就没有运算,所以k还是3,没有自增为4

i++==1是先比较i和1,i再自加,++j==3是j先自加,j的值变为3,再比较,所以++j==3为真,由于||这个逻辑运算符只要前面的表达式为真,后面的表达式就不会被计算了,所以k++==3这个式子没有被执行,k的值还为3.而i++和++j都被执行到了,所以它们的值为2和3.

因为是 &&(也就是或 既有一真就是真)因为 i++ == 1 先用i和1看看是不是相等 ++ 在判等后才开始

编译器 发现i == 1为真 所以 后面的一些 就不运算了
(当然要先运算括号里面的)

所以输出 2 3 3

真快

热点新闻