C语言中,int i = 3; k = (++i)+(++i)+(++i) 问k的值是多少? 很是纠结,请高手给出详解!!!

如题所述

答案应该是:15
解释如下:++i表示先自加,然后再用i,也就是说i本来是3,经过++i之后,变成了4,在进行运算,所以k=(++i)+(++i)+(++i)=4+(++i)+(++i) ;i变成了4
所以第二个++i是以4可是的,经过自加后为5,在进行运算,则为4+5+(++i);
第三个与第二个类似,是以5开始的,因为i进过两次自加后变成了5,那么5在经过自加变成了6,带入运算,是4+5+6=15;
楼主做之前首先应该分清,++i和i++区别,++i代表先自加再运算,而i++表示先运算后自加;
希望对楼主有用,诚邀交流,希望采纳!
温馨提示:内容为网友见解,仅供参考
第1个回答  2011-05-13
理解楼主的意思,按照++前置先自加后用i值的思想,k应该是15。但编译器运算结果却并非15,不同的编译器会得出不同的结果,VC6.0是16,VS2010是18其他的可能还有其他的结果。这个是跟编译器有关的,其实这个问题也没什么好多讨论的。很多资料上都说“不要在一个表达式中对同一变量进行多次自加自减”正是这个原因,因为会有意想不到的结果。如果真要用可以分开写啊k = ++i;k+ = ++i;k+ = ++i;这样就是15了。不过貌似没什么意义,如果真的想探讨还是去一些更专业的论坛吧,这儿问一些简单点的问题还是可以滴
总结一下,就是运算结果和编译器有关,不推荐这样使用。
这是我帮你找的一篇帮助文献,个人觉得讲的不咋的,但你还是可以参考一下,说不定你看出什么来了,尽力了。。。http://wenku.baidu.com/view/44fab98371fe910ef12df891.html
第2个回答  2011-05-13
很准确的告诉你编译器不同 结果不同.
VC里是18
某些编译器是15
第3个回答  2011-05-14
To 三楼:
。。。。。。
。。。。。。
。。。。。。

本人不是对三楼有意见,只是作为一个大二的学生,听到这样的话,未免热血细胞会沸腾,只能说部分大学生,不能说全部,我不同意三楼的说法,当然,我承认很多大学生是不具备的,但是,三楼是否知道,也有很多很N的大学生,话不能说死

To 楼主:

我是软件工程,大二的一名学生,大一学了C语言,假期自学了C++,现在自学数据结构,楼主,你学完了C,看你的意思是想往可视化这方面发展,我先和你说明几个你弄模糊的地方,C语言其实就像是一个语法书,想写好文章,得看作文书,什么是作文书呢,就是编译器,熟悉一个编译器,你就会有些好文章的前提条件。

计算机分成内功和外功(writen by 李开复),外功是编程语言,运行平台
内功是操作系统,微机原理,数据结构

明白这个之后,你要成为武林高手,只是以为学习语言是远远不够的,其实很多人初学都急着去做一些现成的东西出来,这是很正常的,当然也可以尝试,但是,如果一味就是练外功,恐怕,只可能是一个代码工人,如果楼主想做软件,请好好修炼,如果想做一些可视化的东西激励自己的学习兴趣,我可以向你提几个建议:

1、看C语言也能干大事,如鹏网上有,它是说明如何使用MFC,但是,只是告诉你用法

2、学C++,数据结构,操作系统,然后学习VC++,BC也可以,个人喜欢
VC++是基于C++面向对象思想基础的,如果想做可视化的东西,楼主,你要学习windows编程,可以看看VC++深入详解,孙鑫的,非常不错,MFC是不可跨平台的封装了API的,如果楼主想在。net混,可以学习,如果跨平台,可以考虑Qt,又可以做可视化,也可以结合Linux做嵌入式

至于网上学习,个人不是十分主张,我觉得学东西要自己琢磨,如果找资料,可以去百度文库,CSDN,如果有问题,可以百度一下,也可以加QQ群,最后楼主多点看别人的贴,特别是那些说学习经验的

好好学习哦!!!加油
第4个回答  2011-05-13
我这里居然是16。好神奇,它怎么算的。

...i = 3; k = (++i)+(++i)+(++i) 问k的值是多少? 很是纠结,请高手给出...
答案应该是:15 解释如下:++i表示先自加,然后再用i,也就是说i本来是3,经过++i之后,变成了4,在进行运算,所以k=(++i)+(++i)+(++i)=4+(++i)+(++i) ;i变成了4 所以第二个++i是以4可是的,经过自加后为5,在进行运算,则为4+5+(++i);第三个与第二个类似,是以5开始的,...

i=3,k=(++i)+(++i)+(++i) k的值为多少?
前两个i变值都是5,最后一个事是6, 5+5+6 = 16

C语言 int i = 3, k = (++i) + (++i) + (i++);求大神解释为什么k = 15...
楼主这个有意思,按理来说应该是k=14,i=6,那为什么呢,我们将你这个代码分解开 k=(++i);k=k+(++i);k=k+(i++),发现结果是k=14的,再来 k=(++i)+(++i);k=k+(i++);这是会发现在执行完第一行代码即就是k=(++i)+(++i)后k=10,也就是说多出来的一个1在...

C语言:如果i=3,则k=(++i)+(++i)+(++i)执行过后k的值为?好评立刻。
对于k=(++i)+(++i)+(++i)这个表达式,先计算其中的++运算,即连续进行三次的自增1,即i=6,然后再计算这个表达式,即6+6+6=18

请教一个C语言顺序点的问题
int i = 3;int k=(++i)+(++i)+(++i);执行后k的值是多少?不同的编译器有不同的结果,可能是16(gcc),也可能是18(vc)。为什么会这样呢?在C++标准中有一个很重要的概念:sequence points(顺序点)。原文定义如下:At certain specified points in the execution sequence called sequence...

c语言中,int i=3,k=(i++)+(i++)+(i++);为什么执行结果是后k=9,i=...
这里涉及到运算顺序的问题。i++指先使用i的值,再将i加一。所以,k先等于三个i相加,结果是k=9。i的值使用完毕后,再从第一个i++开始,对i加一,此时i=4;对第二个i++使i加一,此时i=5;最后对第三个i++使i加一,此时i=6。

int i=3;k=(i++)+(++i)+(i++);求k,i的值
int i=3;k=(++i)+(++i)+(++i);k=18,i=6 int i=3;k=(i++)+(i++)+(i++);k=9,i=6i=6不管哪种,i都是加了三次,由3到最后的6 主要区别在于i++是先运算,后执行i=i+1 ++i是先执行i=i+1,后运算 所以第一个先执行了两次i=i+1后i=5,三个相加后结果是15,然后再...

如果int i=3;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...

C语言 22.如果i=3,则k=(++i)+(++i)+(i++)执行过后k的值为 ,i的值为...
i=6;不知道你是用什么编译器编译的,在VC++里面K=15;解释:++是自加运算符 自加运算符放在前面和后面优先级是不一样的,也即是说编译的时候,(1)先执行的是两个放在前面的自加运算,运算结果i=5;(2)计算K值,5+5+5=15 (3)执行放在后面的自加运算,运算结果i=6 ...

C语言中,如果i=3,则k=(i++)+(++i)+(i++)k的值是12,为什么我算出来都是...
i++,先使用i的值 再执行i=i+1 ++i,先执行i=i+1,再使用i的值 k=(i++)+(++i)+(i++)(i++) 最后为4 (++i)最后还是4 k=12

相似回答