如果int I=2,则k=(i++)+(++i)+(i++)执行过后k和i的值()
作者&投稿:东方促 (若有异议请与网页底部的电邮联系)
int i=3;k=(i++)+(++i)+(i++);执行过后k的值为,i的值为。
i++意思是i先加后面的数再自加。++i是先自加后计算。因为 i=3,所以,从左至右根据优先级,第一个(i++)为(3++)=3,而i=4;到第二个(++i)时,为(++4)=5,而i=5;到第三个(i++)为(5++)=5,而i=6。总的来看k=(i++)+(++i)+(i++)=3+5+5=13。i=6。
扩展资料:
在一个表达式中可能包含多个有不同运算符连接起来的、具有不同数据类型的数据对象;由于表达式有多种运算,不同的结合顺序可能得出不同结果甚至出现错误运算错误,因为当表达式中含多种运算时,必须按一定顺序进行结合,才能保证运算的合理性和结果的正确性、唯一性。
优先级从上到下依次递减,最上面具有最高的优先级,括号操作符具有最高的优先级。表达式的结合次序取决于表达式中各种运算符的优先级。优先级高的运算符先结合,优先级低的运算符后结合,同一行中的运算符的优先级相同。
i=5,k=10。我用c++6.0编的。我也没想明白,不过确实是这个运行结果
具体到这个题目,如果单纯按照所写算式的先后顺序考虑,i初值为2,所以k和Ⅰ分别为
k=2+3+3=8
i=3+1+1=5
不过因为这个算式是个连加算式,而加法操作的运算优先级是相同的,而对同伏先级运算,编译软件在生成运行代码时,并不一定是绝对地从左至右运行,考虑到代码生成效率,可能会把相同操作归并到一起。所以在对此题的回答中,有些人指出,不同版本的编译软件运行结果会不同。这样的说法是有道理的。
最后一句,在自己编写程序时,如果不是必须的原因,还是不要这样写了。
没有正确答案可选.
i++表达式值是2,i自增为3;
++i表达式值是4,i自增为4;
i++表达式值是4,i自增为5;
K的值为2+4+4是10,i的值是5.
这个题目与编译器有关,不同的编译器的执行结果不一样的。
C.i=5,k=9
附汇编:
012B3885 mov eax,dword ptr [i] //寄存器eax=i=2
012B3888 add eax,1 //寄存器eax++; ,eax=3
012B388B mov dword ptr [i],eax //i=eax=3
以上三句先处理了++i
012B388E mov ecx,dword ptr [i] //寄存器 ecx=i=3
012B3891 add ecx,dword ptr [i] //ecx += i ecx=6
012B3894 add ecx,dword ptr [i] //ecx += i ecx=9
012B3897 mov dword ptr [k],ecx //k=ecx=9
012B389A mov edx,dword ptr [i] //edx=i=3
012B389D add edx,1 //edx++; edx=4
012B38A0 mov dword ptr [i],edx //i=edx =4
012B38A3 mov eax,dword ptr [i] //eax=i=4
012B38A6 add eax,1 //eax++;eax=5
012B38A9 mov dword ptr [i],eax //i=eax=5
没有正确答案 k=10;i=5;
亲测 望采纳~
佟菁安捷: 有两种结果,第一种k=3+4+5=12 此时 i=5 k=12 第二种是 k=5+5+5=15 此时 i=5 k=15 不同编译器会出不同结果!
荆州市19399778073: 假设有int i=2,k;则执行k=(i++)+(++i)+(i++);语句后,i和k的值分别是??请说说理由 - ?
佟菁安捷: 有括号,所以++前置和后置都无所谓了,都要先做 也就是 k = 3 + 3 + 3 = 9 i经过3次++则变成5
荆州市19399778073: int i=2,k;k=(++i)+(++i)+(++i);k等于多少?为什么? - ?
佟菁安捷: 应该是这样的: ++i; //i=3; ++i; //i=4; (++i)+(++i)=4+4=8; 8+(++i)=8+5=13;
荆州市19399778073: C语言小题目 - ?
佟菁安捷: main(){ int i=5,j=5,p,q; p=(i++)+(i++)+(i++); q=(++j)+(++j)+(++j); printf("%d,%d,%d,%d",p,q,i,j); } 这个程序中,对P=(i++)+(i++)+(i++)应理解为三个i相加,故P值为15.然后i再自增1三次相当于加3故i的最后值为8.而对于q 的值则不然,q=(++j)+(++j)+(++j)应理解为q先自增1,再参与运算,由于q自增1三次后值为8,三个8相加的和为24,j的最后值仍为8.
荆州市19399778073: int i=2,k,l; k=(i++)+(i++)+(++i); l= (i++)+(++i)+(i -- ) ; printf("%d%d%d",i,k,l); - ?
佟菁安捷: i++是先计算结果然后i自加1,++i是先自加1然后计算结果 就是说不管怎么样++i,i++最后都使i自加1,i++,++i,一共5个,然后还有个i--,所以i最后的值是6 k=(i++)+(i++)+(++i) 先计算++i,i的值是3,k=3+3+3=9,然后再计算i++ 执行完k的计算后,i=5 l=(i++)+(++i)+(i--) 先计算++i,i的值是6,l=6+6+6=18,然后再计算i++和i-- 结果i=6,k=9,l=18
荆州市19399778073: c语言“++”如何运算,特别是碰到这样的个题:int i=3求k值.(1)k=(i++)+(i++)+(i++) (2)k=(i++)+(++i)+(i++)(3)k=(++i)+(++i)+(i++)(4)k=(++i)+(++i)+(++i)还有每... - ?
佟菁安捷:[答案] 括号的优先级最大; i++是先把i给k,i再自加;++i是先自加,再给k;第一小题就是3+3+3 因为i=3,自加一次增1,题中++i优先计算,i=4,第二小题就是4+4+4;三四依次是5+5+5、6+6+6 j=i+++i+++i+++i+++i+++i是一个道理. 1. i++之前i=1所以把i+...
荆州市19399778073: C语言int i=1,j=1,k=2; if(j++||k+&&i++) - ?
佟菁安捷: 此题主要是考的逻辑短路问题,你的题目中k+应该是k++ if(j++||k++&&i++),因为&&的优先级高于||的优先级,所以实际为: if((j++||(k++&&i++)) 因为整个表达的结果最后依赖于||运算,而||运算从左到右执行,先看j++,因为j的值为1,所以j++的值为1,然后j自增,变成2,||后面的代码不会被执行,因为||运算,只要一个表达式为真,则整个结果为真,即k++&&i++不会执行,所以最后输出的结果,i与k的值不变,所以是1,2,2
荆州市19399778073: #include<stdio.h> void main() { int i=2, k; k=(i++)+(++i)+(i++); printf("%d,%d\n",i,k); } i和k的值 - ?
佟菁安捷: i=5,k=9
荆州市19399778073: int k, i =2 , j=4;则表达式. k=(++i)*(j -- )的值是? - ?
佟菁安捷: k=(++i)*(j--);相当于以下语句组合: i++; k=i*j; j--; //结果k=3*4=12
荆州市19399778073: 已知定义 int i=3 ,k.则语句k=(i -- )+(i--)运行后求k...求c语言大神告诉我 - ?
佟菁安捷: 执行后k的值为6,i的值为1.这里要注意i-- 和 --i的不同.虽然两种写法都是将i的值减1,但前者i--是先使用i的值进行计算然后再执行减1操作;后者--i则是先进行减1操作,然后在使用i的值进行计算.如果将原式改为 k = (--i) + (--i);则执行结果变为:k等于2,i等于1.