关于这两个C程序,求教啊!!!大哥,救命!

来源:百度知道 编辑:UC知道 时间:2024/05/29 13:18:41
if(!a)++d;
else if(b);
if(c) d=2;
else d=3;

这个最后d的值为3.

请问,(!a) 就是 a不为0
那不就应该执行 ++d?

既然成立,不就不需要执行 else

答案为什么是 3 呢??

int x=3,y=2;
printf("%d,%d\n",(++x,y--),x++);

这个的输出结果为什么是 2,3 (++x,y--)这个是什么含义呢?

十分感谢!!!
我说错了,
第一个题 开始声明了a,b,c,d为0。。

!a即非a,也就是说a为0的话,!a为1,执行++d;a不为0的话,!a为0,执行else。

if(!a)++d;
else if(b);
if(c) d=2;
else d=3;

等价于
if(!0)++d; /此时d=1;
else if(0); /此行未执行;
if(0) d=2; /此行未执行;
else d=3; /执行此行,d=3;
故结果为3.

int x=3,y=2;
printf("%d,%d\n",(++x,y--),x++);
等价于
int x=3,y=2;
printf("%d,%d\n",y--,x++);

(++x,y--)是逗号表达式,当程序执行到逗号表达式时,从左至右依次计算逗号表达式子表达式的值,但整个表达式的值只是最后一个子表达式的值。

补充:printf调用时实参求值的顺序是从右至左,printf("%d,%d\n",(++x,y--),x++);先计算x++,值为3.后x=4.进入逗号表达式,x=5,跟逗号表达式的值无关,而与逗号表达式的值有关的是:y--值为2。故结果为2,3。

第一个:你没给初始值那怎么做呢
if(a)表示a不为0的时候就执行if后的语句,所以if(!a)表示a=0时执行该语句

第二个:你只需明白这样的两个例子
x++是执行完该语句后x的值加一,++x就是执行该语句的时候x的值就当做加一后的值处理,同理--类的操作也是这个道理
(++x,y--)是一个逗号表达式,以最后一个值为准,所以第一个输出为2
x同时也变为4,当运行到x++时输出4,之后x变成5
(我认为第二个程序输出应该为2,4)

C语言都忘的差不多了,不知道对不对啊。第一个,前几个判断语句都没有执行吧,因为你根本就没有声明a,b,c三个变量啊,所以执行最后一条语句。至于第二个,(++x,y--)这个我是真没看