‘壹’ 关于c语言的自加问题
你是在用turbo C2.0系统吗?
前缀++和后缀++运算是有基本运算规则:
前缀++是:先算后取,即先对运算对象进行加1运算,再取运算对象的当前值作为表达式计算结果,所以 y=++i; 在i的初值为3时,表达式运算后y的内容为4,i的内容为4。
后缀++是:先取后算,即先取运算对象的当前值作为表达式计算结果,然后对运算对象进行加1运算,所以 y=i++; 在i的初值为3时,表达式运算后y的内容为3,i的内容为4。
当在一个表达式中存在多个单目运算,特别是对同一个变量的单目运算时,初学时可能会觉得结果怪异,但实际上在Turbo C系统中的运算也是非常有规律的,即前缀单目运算的优先级高于后缀单目运算,所以整个表达式的运算过程是:
1、进行所有的前缀单目运算
2、取所有单目运算对象的当前值作为表达式的计算结果
3、进行所有的后缀单目运算
你所说的两个题目的运算过程是:
1、j=(i++)+(i++)
全部后缀运算,先取后算,取单目运算对象的当前值做表达式的计算结果
3 3
进行加1运算
i=4; i=5;
所以计算结果 j=6; i=5
2、j=(i++)+(++i);
先进行前缀运算
i=4
取所有单目运算对象的当前值作为表达式的计算结果
4 4
进行后缀运算
i=5
所以计算结果是 j的计算结果是4+4=8 i的内容为5
‘贰’ c语言自加计算
自后向前(右-》左)方向计算。即11+11+13+13=48
同理
int n=10,m=5;
a=(m++)+(++n)+(n++)+(++m);
结果为34(6+10+12+6=34)
‘叁’ 关于c语言的自加运算
我的编译器运行以后确实是5,4,楼主是不是写错了,你的编译环境是什么,编译器不同,有时候也得出不同结果.我用的win-tc
类似的问题,我以前搞不懂也常常问老师,老师说,实际在编程中,很少会用到这样的连续自加,编程最终都会解决实际问题,工程,项目,所以楼主不用在这类问题上倾注太多的精力,老师当时也是这样对我说的,但前提是你希望在编程道路上继续走下去.
‘肆’ c语言中自加自减问题 i++,++i有什么区别,怎么计算,麻烦举几个简单易懂的例子。
比如现在i的值是20, 那么i++所在语句A(A即为i++之前最后一个分号和之后第一个分号之间那条语句)在使用i时i都等于20(即把A中所有i++用i替换),执行完后额外执行一条i加上1的语句。而++i所在语句B执行前,先额外执行一个i=i+1,然后把B中的++i用i替换掉就好。
【代码M;
a=(i++)*2;
代码N;】
等价于
【M;
a=i*2;
i=i+1;
N;】
...........................
【M;
a=(++i)*2;
N;
】
等价于
【M;
i=i+1;
a=i*2;
N;】
‘伍’ 关于C语言中的自加运算
后者还是0 1 2 3 4,自加在这里++i和i++是一样的,for循环是这样运行的:i=0时,检验i是不是<5,如果是进入循环体输入了i也就是0,然后执行f最后一个一个语句i++或者++i,获得新的i,继续循环,所以这里++i和i++是一样的,都相当于i+1。
如果说表达式是int a,b,c,d;
a=b=0;
c=a++; //相当于c=a;a++;结果是c的值为0;a的值为1
d=++b; //相当于b++;d=b;结果是d的值为1;b的值为1
你所说的问题中不涉及到先加后用还是先用后加的问题。
我水平有限,希望你听懂了,谢谢,好好学习,天天向上。
‘陆’ C语言中自加的用法是怎样的
你好!!!
i=0;
while(s1[i]!='\0')
i++;
中的i++改成++i结果就是一样的,
首先我们分析一下几次循环的过程吧:
第一次:i=0,循环while(s1[0]!='\0'),然后i++,注意i++是后加操作,就是想使用i的现在的值,然后再加一,但是这里我们在I++这一步并没有使用i的值,所以一旦i++指向完毕后i的值就是1了,然后再循环while(s1[1]!='\0'),然后i++,后面的依次类推、、、、、
虽然i++改成++i结果是一样的,但是对于编译器来说是不一样的我们还是把题目修改一下再说那里不同:
i++,改成p=i++,第一次循环即i=0;那么执行p=i++的是先使用i的值的,然后再加一,即p=0,i=1,而要是改成p=++i,那么p=1,i=1,
当编译器执行p=i++的执行,先要保存i的值(即保留现象等一些工作都的有编译器来做),然后把此时i的支付给p,然后利用刚才i保留的值在加一
但是要是执行p=++i,编译器就不需要做些保留现象等工作,就是直接把i的值加一,然后把i的值赋给p
由此可以看出i++,比++i所作的工作要多,开销要大一点,但是我们平时写循环的时候都写成这样:for(i=0;i<m;i++)而不是
for(i=0;i<m;++i),其实后面的循环的效率比前面的高。
‘柒’ C语言的,自加,和自减算法,怎么算我发一个代码,大神帮我看看
int
a=x++;
//a此时知的值是6,因为x++是运算完在使x+1,执行完道此段代码后x的值是7
printf("%d",x++);
//先把x的值输出回(7)后,答x在+1,执行完此段代码后x的值是8
//x++是最后使x的值加1,++x是先使x的值加1,然后在进行其他计算。
‘捌’ C语言 自加运算符
C语言中区分前自增与后自增,它们都有副作用,尤其是后自增。
前自增可能更好一点,它不产生临时变量,效率更高一些。
++y相当于:y=y+1;在变量的使用之前先自增。
y++相当于:y; 其它语句... y=y+1;也就是使用它时,它的值不变,在其使用之后的某一时刻但在再次使用它前其值加一。而且不同的编译器不一定有一致的实现行为。
a=(y++)+(y++)+(y++) 这是一条语句,通常的编译器实现会将此语句一次性扫描完成。这种情况下,y++会保持其值不变,此语句完成后,将y的值递增3次。
b=(++y)+(++y)+(++y)这也是一条语句,编译器扫描完此语句后,先将y递增3次,再作+运算,将运算结果赋予b,此时b应该为24。 但是不同的系统及编译器不一定这样实现,还有可能y依次递增,其结果是21。
‘玖’ c语言中的自加问题:q=(++j)+(++j)+(++j)
验证就是22.想了一会,发表下自己的看法。
我觉得多个自增在一起,只允许配对原则。
也就是说每次只有两个自增的时候才能满足先算括号;
先说q=(++j)+(++j)+(++j)=((++j)+(++j))+(++j)
此时第一个和第二配对,先算括号自增,j=7,在求和为7+7=14。
此时就是14在与(++j)配对。先算括号自增j=8,在求和得14+8=22.
如果是4个(++j),则22与(++j)配对,先算括号自增j=9,在求和得22.+9=31;
5个就是41,
6个就是52…………
同理可以推出N个的情况,初值为a,则N个前自增后的和为(a+2)*N+(0.5)*(N-1)(N-2);
(这个公式推了我好久)
如果正确的话就给分;