c语言 求详细说明过程~

int i=3,j;
j=(i++)+(i++)+(++i);
printf("i = %d, j = %d\n",i,j);
这个程序的结果是i=6,j=10

做这种题,需要把表达式分解开来理解。
j=(i++)+(i++)+(++i);
转换成单条语句是:
i++; //第一个括号内的
i++; //第二个括号内的
++i; //第三个括号内的
以上为第一组
+i; //第一个()+()
+i; //第二个()+()
上两个是第二组
根据编译器不同,会有不同的结果,如果按照你的数值来看,属于下列运算。
执行第一组后对应的数值是(3) + (3) + (4),编译器没有按照从左往右的优先级进行运算。//如果是传统的C/C++的运算规则,应该是(3)+(4)+(6)
执行第二组后,j = 10。//如果是传统的C/C++的运算规则,应该是 J = 13。

现在再说i值:
i进行了三次 i = i + 1运算,因此:i = 4、5、6,最后结果,i = 6。
在这点上,C语言的运算规则就比较明显了
第一步:j = (3++) + (i++) + (++i);
第二步:j = 3 + (4++) + (++i);
第三步:j = 3 + 4 + (++5);
第四步:j = 3 + 4 + 6;
第五步:j = 7 + 6;
第六步:j = 13。
运算优先级是先括号,然后再从左往右运算。
温馨提示:内容为网友见解,仅供参考
第1个回答  2012-01-26
自己看书...
i++,是先运用i的值,然后再自加
++i,是先自加1,后在运用该值进行其他运算

%d,整数输出..
自己多看书吧,这个不难理解的
第2个回答  2012-01-26
哥呀!你玩我!我在程序里运行了一遍,第一个结果是i=6,j=9!!!我说怎么做不对!
i++是先算i再+1第一个式子应该是j=3+3+3=9也就是说只算i=3的,最后再+1。i 嘛当然就是i+1+1+1=6.
第3个回答  2012-01-26
貌似不同编译器运算出来的这个值是不一样的
第4个回答  2012-01-26
前缀是先加后赋值,后缀是先赋值后加,所以i++一直是3,但是++i是4.所以j是3+3+4=10
而此时i的值已经被赋值为6,3加1加1加1
你研究下自增运算符的前缀和后缀的区别就知道了。

C语言求详细说明怎么运行的谢谢
先求出NUM NUM=(M+1)*M\/2=(N+1+1)*N+1\/2=(2+1+1)*2+1\/2=8 while(i<=NUM)\/\/ 这里NUM=8,当i=9时退出循环。{n++;printf("%d",n);i++;} 所以输出结果就是:12345678

c语言 求详细说明过程~
执行第二组后,j = 10。\/\/如果是传统的C\/C++的运算规则,应该是 J = 13。现在再说i值:i进行了三次 i = i + 1运算,因此:i = 4、5、6,最后结果,i = 6。在这点上,C语言的运算规则就比较明显了 第一步:j = (3++) + (i++) + (++i);第二步:j = 3 + (4++) + (...

C语言求详细说明怎么运行的谢谢
NUM = (M+1) * M \/ 2 = (N + 1 + 1) * N + 1\/ 2 = (2 + 1 + 1) * 2 + 1\/2 = 8.5;如果你希望NUM = 6(就像上面那位那样),那么你应该这么定义M:#define M (N+1)

c语言求详细过程
第一句:定义整形数组:a[0][0]=1,a[0][1]=2,a[0][2]=0;a[1][0]=3,a[1][1]=4,a[1][2]=0;a[2][0]=5,a[2][1]=6,a[2][2]=0;定义整形变量:i,j;(未赋初值) s=0;首先,循环体确定:for(i=1;i<3;i++) \/\/一级循环 { for(j=0;j<=i;j++)...

c语言程序 求详细过程
答案选C 分析:调用函数fun(a,4,0),进行虚实结合 把a赋给s,4赋给n,0赋给k 第一次,s[0][k]相当于s[0][0],也就是a[0][0],把它赋值给m 后面,for语句循环,每循环一次,取a数组中的一个元素来与m比较,若有大于m的,就把s[i]][k]赋给m 循环结束后,变量m中为a数组中第...

谢谢!C语言1 把运行过程说详细点!
1)结果为98 解:调用函数strc()时将s1和和s2两个字符串传过去,函数strc()用两个指针str1和str2分别来接受s1和s2这两个字符串,在strc()函数中又定义了一个P指针将str1的值赋给p,其实这时p和str1都同时指向了s1这个字符串。接下来的循环完成的就是将str2指向的字符串s2中内容赋给p和str...

有关C语言的问题,求解详细说明
1。 i=8, ++i表示先对i加一,然后使用i的值,因此为9;2. 此时i=9,--i表示先对i减1,然后使用i的值,因此为8;3.此时i=8,i++表示先使用i的值,也就是输出8,然后对i加一,此时i的实际值是9;4,此时i=9,i--表示先使用i的值,也就是9,然后对i减1,此时i的实际值是8 5,负号...

C语言程序设计求详解求运行过程
第一次调用后,输出: 7,第二次调用后,输出: 15 所以,总的输出是:7,15

C语言入门题目,求详细易懂的解答过程。
主要看一下name[],对于一维数组来讲,它是元素,对于二维数组来讲,它不是具体的元素,而是代表的一维数组。比如name[3][20],为3行20列,那么name[0],它代表的是组成二维数组的第一维数组。又知道puts()括号里可以放一维数组名,可以输出它里面的字符串,对放name[0]的话,那就是输出3行20...

C语言题,答案是5,想知道为什么,求详细过程
b%3 ==1是成立的,那么执行b=b+3=4,continue是继续回到for循环执行a++,那么此时a=2 第2次循环 b%3 ==1成立,那么执行b=b+3=7,continue是继续回到for循环执行a++,那么此时a=3 第3次循环 b%3 ==1成立,那么执行b=b+3=10,continue是继续回到for循环执行a++,那么此时a=4 第4次循环 b...

相似回答