若有以下程序段:int a=0,b=0,c=0 c=(a-=a-5),(a=b,b+3); printf(“%d,%d,%d尀n”,a,b,c);

2025-02-27 06:35:52
推荐回答(2个)
回答1:

大哥题都不对。
int a=0,b=0,c=0;
c=(a-=a-5),(a=b,b+3);
printf(“%d,%d,%d\n”,a,b,c);

按程序运行来讲吧。
第一句不说了...
第二句为逗号表达式。
c=(a-=a-5)
给c赋值,把a-=a-5的结果赋给c;
(a-=a-5)=(a=a-(a-5));
把a=0;代入得a=5;
进而(a-=a-5)的值为5;
c=5;

接下来执行(a=b,b+3);
这里面又有逗号表达式。
a=b;因b=0;故a=0;
b+3;不对任何变量赋值,相当于空语句;

综上所述:a=0;b=0;c=5.

论述完毕.....................

回答2:

……
首先
a=0,b=0,c=0;
接下来
c=(a-=a-5);
这句很恶心……分开看
a-=a-5;
转换为 a=a-(a-5);
=a-a+5
=5
结果变成了 a=5;
整体就成了 c=(a=5);
此时 a=5,b=0,c=5;

然后是 a=b;
因为b=0,
所以此时 a=b=0;

接下来 b+3;
等同于写了个 0+3 ;
这句没有给b赋值,b还是0,
可以说这句完全没有意义!!

(如果写成 b+=3,或者b=b+3,或者b=3;的话,
b就是3了……可惜这段程序没这样写……b还是0)

所以最后 a=b=0 ,c=5;