c语言int main题 int a=10, b=10; a+=b-=a*=b/=3; printf("a=%d,b=%d",a,b); 为啥结果a=3,b=27,高手赐教

i是int型变量,初值3,i=(a=5,b=10)+(i+=b,b+=a)_c语言吧_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:436,512贴子:
i是int型变量,初值3,i=(a=5,b=10)+(i+=b,b+=a)收藏
问i,a,b的值……看不懂那个类似坐标的是什么意思…… 以及另一题,同样int型,初值3,有表达式i=(i+=i,i*=i),i-10,i%4,问表达式的值是?i的值是?跪求啊
平身。那是逗号表达式。
所以是什么意思呢?……没学过诶,求教,再跪
剩下的可以去查书,百度,谷歌等。
已百度……谢
我晕乎了。在vc++6.0上跑了这段代码#include &stdio.h&int main(void){int a, printf("%d",(a=5,b=10)+(b=b+a)); return 0;}结果是30.可是我算的是25,这是怎么回事?
答案的确是25……
都UB。无意义。
可是为什么跑出来的是30?
我初学者表示不会……
福利不只是穿多穿少,还要有迷人的微笑!
i=(a=5,b=10)+(i+=b,b+=a),插入序列点,但+的两个操作数的副作用顺序不确定,b上的副作用未序列化,未定义行为。i=(i+=i,i*=i),i-10,i%4存在超过一次未序列化的修改同一个对象i的副作用,直接未定义行为。存在未定义行为的程序,行为不可预测。
(a=5,b=10)+(b=b+a)等于 5+10+10+5
新手表示疑惑是否这样解答
这是逗号表达式,第一个括号的值不应该是10吗
答案是25……所以……
如果是你所说的话 那第一个括号只做给后面定义值个人认为
修正:i=(i+=i,i*=i),i-10,i%4在C99/C++03中因为在连续序列点之间修改同一个对象存在未定义行为。在C11/C++11中,赋值的求值序列化要求被放宽,在此右操作数没有副作用(要是volatile,读也是副作用,那就还是UB),逗号运算符又决定操作数的求值序列,所以可以是正确的。对于初值i == 3,相当于:i+=i; //在这个序列点之后i == 6。i*=i; //在这个序列点之后i == 36。i=i; //非volatile所以可以无视。i-10; // 在这个序列点之后i == 36。i%4; // 在这个序列点之后i == 36,表达式的值是0。(编译器可能还会有警告,这里可以无视。)但还是不建议写这种表达式。
又或者他是这样运算的(a=5,b=10)+(b=b+a)(5+15,10) (20+10)逗号的作用是一个一个去加
明天上机课求保佑……赴死
随便了,出这题的老湿八成C门外汉。
不- -这只是我写题目的时候碰到的……上机应该是改错和编程。。。
不知道这种看着都头晕的代码有什么意义。那个逗号表达式从来没有用过,就是取逗号右边的值作为整个表达式值,然后加号的结合性从左至右,所以先计算左边再算右边赋值表达式的值。
回复20楼:刚在另一个帖子里又看见自增自减乱搞的表达式,完全不知道这东西跟编程有多大关系?这一大类的题都是纯粹瞎搞的人出的……
出题的是真无聊了。不过脏活总是有人干的。
结合性从左至右根线计算左边再计算右边有几毛钱关系?逗号倒是少数保证从左到右的操作符之一,不过我觉得这个特性浪费了,还和参数列表的逗号分隔符的表现不协调。
回复25楼:如果两个加号的话就有影响了,比如a+b+c,刚刚没有看清楚,这里是优先级影响的。
很遗憾这里优先级完全不起作用。你要分清表达式的值和对象存储的值——哪个决定哪个?事实上很复杂,C/C++允许对象的读和写发生在同一个表达式内,而读出来对象的值是不是已经是被写入了的,这个得看具体操作符或者其它表达式构造的性质,不是像Java/C#那样笼统地决定好的。
回复27楼:太复杂了。
登录百度帐号推荐应用
为兴趣而生,贴吧更懂你。或C语言上机考试编程题以及答案_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
C语言上机考试编程题以及答案
上传于||暂无简介
阅读已结束,如果下载本文需要使用0下载券
想免费下载更多文档?
下载文档到电脑,查找使用更方便
还剩4页未读,继续阅读
你可能喜欢#include"stdio.h"
void main()
int f(int a,int b);
int i=2,p;
p=f(i,++i);
printf("%d\n",p);
int f(int a,int b)
if(a&b)c=1;
else if(a==b)c=0;
else c=-1;
return(c);
感觉只是一些特别恶心的教材才会出这种题。f是自己定义的函数,功能是如果a&b返回1,a=b返回0,a&b返回-1.然后main函数用的时候居然是f(i,++i),那返回值不就一定是-1咩。昨晚一个程序员,只能脸红地匿名了。
已有帐号?
无法登录?
社交帐号登录以下试题来自:
单项选择题有以下程序:
{int a=0,b=0;
/*给b赋值*/
printf(“a+b=%d\n”,a+b);/*输出计算结果*/
程序运行后的输出结果是(
)。A.a+b=10B.a+b=30C.30D.出错
为您推荐的考试题库
你可能感兴趣的试题
1A.排序、索引、统计B.选择、投影、连接C.关联、更新、排序D.显示、打印、制表2A.*(*w+3)B.*(w+1)[4]C.*(*(w+1))D.*(&w[0][0]+1)3A.9B.6C.11D.74A.float*P=1024;B.int*P=(float)X:C.float p=&X;D.float*p=&X;5A.程序段有语法错B.3,5,3C.3,5,5D.3,5,7
热门相关试卷
最新相关试卷C语言设计谭浩强第三版的课后习题答案_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
C语言设计谭浩强第三版的课后习题答案
上传于||暂无简介
阅读已结束,如果下载本文需要使用1下载券
想免费下载本文?
下载文档到电脑,查找使用更方便
还剩56页未读,继续阅读
你可能喜欢}

我要回帖

更多关于 c语言int main 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信