C语言计算题,关于自加自减运算符计算的问题?

作者&投稿:霜顾 (若有异议请与网页底部的电邮联系)
C语言的自加自减运算符~

这两个都是未定义行为,因为(y++)+(y++)+(y++)里面没有顺序点,所以你无法保证执行完第一个y++之后,y的值是否增加了,如果增加了,那么第二个y++就会是6。
只有顺序点才能确定一个副作用被实现,在这里,副作用就是确保y++之后,y加1。
下面的那个++y亦是同理。


至于什么是顺序点,可以参考这个:
C/C++语言定义(语言的参考手册)明确定义了顺序点的概念。顺序点位于:
1. 每个完整表达式结束时。完整表达式包括变量初始化表达式,表达式语句,return语句的表达式,以及条件、循环和switch语句的控制表达式(for头部有三个控制表达式);
2. 运算符 &&、||、?: 和逗号运算符的第一个运算对象计算之后;
3. 函数调用中对所有实际参数和函数名表达式(需要调用的函数也可能通过表达式描述)的求值完成之后(进入函数体之前)。

c语言中关系运算符比自加自减运算优先级低。
各种运算符间的优先级从高到低为数值运算符、字符串运算符、关系运算符、逻辑运算符。可以用括号改变优先级顺序,使得括号内的运算优先于括号外的运算。对于多重括号,总是由内到外强制表达式的某些部分优先运行。自加自减运算符属于数值运算符,优先级比关系运算符高。

扩展资料:
每种同类型的运算符都有内部的运算符优先级,不同类型的运算符之间也有相应的优先级顺序。一个表达式中既可以包括相同类型的运算符,也可以包括不同类型的运算符或者函数。当多种运算符出现在同一个表达式中时,应该先按照不同类型运算符间的优先级进行运算。
相同优先级中,按结合性进行结合。大多数运算符结合性是从左到右,只有三个优先级是从右至左结合的,它们是单目运算符、条件运算符、赋值运算符。

等于9

流程:自增、自减符先进行运算,但是由于前三个都是后缀,所以在执行玩改该行后才进行,所以先是2+2+2+(++i) ; 然后由于前缀的自增符(++i), 所以最后一个i变成3,
最后变成 2+2+2+3 = 9;
但是在执行该行后前三个自增、自减符进行运算,所以i(3)-->i(4)-->i(5) 最后 -->i(4)

这是,M + +,+ +中的第一基准背面(这里是一个参考输出),然后从加拿大,
+米,与此相反,第一增加和之后的参考文献。例子:int m = 2时,A = M + m = 2时,首先分配到一个,然后从加拿大米。如果它是一个= +米,是前m +1,则这三个演习。

你上面说的printf(“%D”,M + +,+ + N);是第一输出M(12)且m = m +1 = 13,N = N +1 1首先= 35然后输出35,第二个printf(“%D \ N”,N + +,+ + M);第一输出N,因为最后一个是已经35加1,所以这里是输出35和n = N +1,M,加上第一和之后的输出是14。

谁教你这样写的每种编译器都可能产生不同的结果,但你不能说它们之中的任何一种是错的,因为这个语句中四个自增/自减表达式的求值顺序不受操作符优先级和结合性的约束,并且自增和自减操作符本来就有副作用。

undefined behavior未定义行为


c语言的计算题,谢谢了
答案是3 3 首先(++x, y++)这个表达式 先要知道逗号运算符,++x, y++的概念 逗号运算符表达式计算从左往右依次计算,并返回最后一个表达式的值作为整个逗号运算表达式的值。++x是先进行自加一操作,再返回x的值 y++是先返回y的值,再进行自加一操作 所以整个(++x, y++)返回的值就是y的值,即...

求解一C 语言题:已有变量a ,其值为9,计算表达式的值:a+=a-=a+a_百 ...
先从最右边的式子开始计算,a-=a+a等价于a1=a-(a+a),a1=-9。a+=a等价于a2=a1+a1,a2=-18。所以最后a的值为-18。

c语言问题 已知变量说明如下,计算下列表达式的值(各题的表达式相互无关...
1,a先自增1再运算,答案为1,但此时b值为0了。2,b c都为整数,商也为整数0,再加5,答案为5。3,c除以2的余数为1,等于b,条件满足,答案为1。4,d为c的值,d=3,但c运算后自增1,再参与后续运算,因为逗号之前所有副作用都会结束,所以c不在整个运算结束自增,答案为8。5,1\/x...

关于自加运算符的疑惑 j=i+++i
而++i是指先自身++,再做别的事 不信你试试++i+i,一楼说的“++的优先级高“不完全对,二楼说的没错。嘿嘿,握个手吧。英雄所见略同。给分吧。补充:j=i+++i+++i+++i+++i+++i是一个道理。1. i++之前i=1所以把i++看作i j=i+i+i+i+i+i=6 2. 计算完1.之后该执行i++...

C语言简单题
第一题:a*=16+(b++)-(++c)等价于a=a* (16+(b++)-(++c)); "()"优先级最高,所以先执行:(b++),在使用b之后,使b加一,因此(b++)=3;(++C),在使用c之前,使C加一,因此(++C)=5。然后将按照加减的结合性."自左向优"计算,因此16+(b++)-(++c)=14...

帮忙分析一下一道c语言的题
(当然,其他的编译器,比如VS2013是自右向左,还是自右向左,我就不知道了)我的编译器输出结果是:12,14,6 12 12 然后是c++和++c的区别:++c是先自增再计算,c++是先计算再自增,而且就你这道题而已,还得注意自增自减只能是对变量而言,不能对表达式自增自减。所以VC++6.0在计算第一个...

C语言计算并输出k以内最大的10个能被13或17整除的自然数之和?_百度...
程序已经修改完成:include<stdio.h> include <conio.h> int fun(int k){ int m=0,mc=0, j;while((k>=2)&&(mc<10))\/***found***\/ { if((k%13==0)||(k%17==0)){ m=m+k;mc++;} k--;} \/***found***\/ return m;} main(){ printf("%d\\n ",fun(500));} 但是...

请问一下这道c语言题目
这题的正确答案是y==14,所以B)正确,应该选B)——x+=x++,x+8,++x是逗号表达式,从左至右计算,取最后一个分表达式的值。过程是:x+=x++使x=5+5==10,然后x++使x==11;再计算x+8,它没有赋给x,所以不影响x的值,x还是11;最后计算++x使x由11变为12。最后加前面的2使y得到14...

为什么会输出错误,关于用c语言自定义函数cal(x,n)计算x^n\/n!的结果?
根据你题目的意思,这段C语言代码有以下几个问题:第一:你题目说是要计算x^n\/n!,你看下图片4处,这是计算的累加和,可不是你题目说的意思,好看看是你写错了还是怎么样。第二:图中1\/2处这两个自定义函数返回值都是int,然后你在cal函数用一个double去接收两个整数相除的结果,要注意整数\/...

c语言自增问题..
如果是要求标准答案的考试,只能说明出题人变态。C语言的一个良好习惯,或者规则:1.如果一个变量出现在同一个函数的多个形参中时,不要将增量(++)或者减量(--)运算符作用于它上面。2.当一个变量多次出现在一个表达式里时,不要讲增量或者减量运算符作用到它上面。因为在C里,编译器可以选择先计算...

吴忠市13132243621: 谁能详细的讲一下C语言中的自加自减运算符:++、 ---
匡毛尼脉: a=1,b=a++ b的值为1,a的值为2 a=1,b=++a b的值为2,a的值为2 a=1,b=a-- b的值为1,a的值为0 a=1,b=--a b的值为0,a的值为0

吴忠市13132243621: C语言求解自增自减运算符在混合运算中的用法,比如*p++,*++p,j++<4… -
匡毛尼脉: 第一点,牢记优先级规则,抄*和++是平级,从bai右到左结合 然后把表达式画上括号 *(p++) *(++p) ++高于比较运算符所以du (j++) < 4 第二点,记住前置和后置的区zhi别 后置++的值是当时p的值,然后自增. 前置++的值是p自增后的值.dao

吴忠市13132243621: c语言 自增 自减运算符 请指教! -
匡毛尼脉: 假如是变量a=6 和b,c,d,e b=a++;c=++a; d=a--;e=--a;结果是 b=6;c=7;d=6;e=5; a++ 是先使用后自加 ++a是先自加后使用 --一样

吴忠市13132243621: C语言问题!!!!关于自加和自减运算 -
匡毛尼脉: ++优先级比 + 高.. 但是++ 前后是有差别的. x++ 表示:x先用一次,用了,就变x+1了. ++x 表示:先变x+1,然后再用.int x=y=2,z=3; y=x++ -1;printf("%d\t %d\t",x,y);//这里是x后++ y=2-1之后x=2+1; y=++x-1;printf("%d\t %d\t",x,y);//这...

吴忠市13132243621: c语言前后缀自增自减问题 -
匡毛尼脉: LZ,对于这种++ --在一行的问题应该先声明编译器.看LZ的程序可能是VC跑的. 在VC下,结果完全合理. ------------------- 首先,函数的参数都是从后到前的入栈的,printf收到模式字串时,会把每个%从栈取一个数.++i,++i入栈时自然就是10,9了.另外一个因为栈里已经空了,相当于取了一个内存随机数. T3式子有问题,肯定是通不过编译的.希望LZ给全.

吴忠市13132243621: 关于c语言中的自加自减运算符...
匡毛尼脉: printf("%d\n",++i);//9 i=9printf("%d\n",--i);//8 i=8printf("%d\n",i++);//8 i=9printf("%d\n",i--);//9 i=8printf("%d\n",-i++);//-8 i=9printf("%d\n",-i--);//-9 i=8前面是输出值,后面是执行该语句后的i值. -i++应该这样分,输出的是-i,执行后i自动加1. i的值始终是正的,最后2个输出的是-i.

吴忠市13132243621: C语言中一个自增自减运算题.求好老师教会 -
匡毛尼脉: 比如printf ( "%d,%d\n", i-- , ++j );这里有i--和++j 相当于 i=10,j=1; j=j+1;//这就是j先加1,下面再使用j值 printf ( "i=%d,j=%d\n", i , j );//这里打印出来的i=10,j=2; i=i-1;//这里就是上面使用了i值再减一 //如果你再打印一次的话,你就会发现i=9,j=2了 printf ( "i=%d,j=%d\n", i , j );//这里i=9,j=2

吴忠市13132243621: C语言中自增自减运算符如何最好的理解? -
匡毛尼脉: 从左往右看,比如++m,就是m的值先自加1,再调用,而m++就是先调用m,再自加1.举个例子#include <stdio.h> main() { int a=1,b=1; printf("%d,%d",++a,b++); //输出就是2,1 } a的值先自加1,再调用,而b++就是先调用m.--m m-- 同样的意思,只不过是减法而已

吴忠市13132243621: C语言 自加自减问题 -
匡毛尼脉: 答案应该为B)2,0,31.a=b=1 ----〉a:1 b:1 c:未知2.a++----〉a:2 b:1 c:未知3. b+1----〉a:2 b:1 c:未知4.c=a+b-- ----〉a:2 b:0 c:3 第4步等价于c=a+b, b--

吴忠市13132243621: C语言里关于自增自减运算符的问题 -
匡毛尼脉: 我在vc6·0上编写了一下 这是截图首先是前两个7 因为i++是先赋值在进行加一运算,++i是先加一然后再进行赋值操作,所以a,b中储存着值是7,此时i的值是8然后是后面两个7,同理 a为7...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网