c语言,以下程序运行后的输出结果是

以下程序运行后的输出结果是
main()
{
int a=0,b=0,c=0;
c=(a+=a-=5),(a=b,b+3);
printf("%d,%d,%d\n",a,b,c);
}

我用程序输出的是0,0,-10。哪位大神可以帮我详细解释一下,尤其是c的值在逗号表达式中,不应该取右边的吗,为什么还是左边的-10呢?

c=(a+=a-=5)是一个表达式,(a=b,b+3)是另一个表达式。

a=0,a=a-5=-5,a=a+a=(-5)+(-5)=-10,将值赋给c,c=-10,此时,a=-5
a=b,将b的值赋给a,a=0,执行b+3=0+3=3,这个3不对任何变量赋值。
因此最终结果a=0,b=0,c=-10
输出a、b、c的值,输出0,0,-10追问

麻烦问一下,这个不是逗号表达式吗?第一个括号和第二个括号不用分号隔开吗?

追答

是逗号运算符,而且是两个逗号运算符的嵌套。只不过你对逗号运算符并没有掌握,所以理解错了。你加的两个括号,加不加都可以,并无什么不同,加了也是白加,没有什么用。
如果你想将逗号运算符运算的最终结果赋给c,不是你写的这样的,而是
c=(a+=a-=5,a=b,b+3);
这样才是将逗号运算符运算的最终结果赋给c。

温馨提示:内容为网友见解,仅供参考
无其他回答

c语言,以下程序运行后的输出结果是
因此最终结果a=0,b=0,c=-10 输出a、b、c的值,输出0,0,-10

以下程序运行后的输出结果为( ) A.17 B.19 C.21 D.2
C 试题分析:由程序语言知:当 时循环,否则输出,又第一次进入循环体: ;第二次进入循环体: ;第三次进入循环体: ;第四次进入循环体: ;第五次进入循环体: ;第六次进入循环体: ;第七次进入循环体: ,此时输出,输出S的值为21。点评:本题主要考查程序语言,通过对程...

以下程序运行后,输出结果是( ) main() { char *s="abcde"; s+=2...
选择答案C,输出的为字符c的地址。因为%d是打印整形变量的值,因为前一句执行了s+=2,s指针偏移了两个位置,偏移了两个位置之后s指向的是字符c,所以输出语句输出的是指针s,而s存放的是地址,所以输出的就是字符c所在的地址。

以下运行程序后的输出结果是#include<stdio.h>main(){int x=1,y=1...
首先指出程序中的三处错误,第一个是int m n中间应该有逗号,第二个是swtich拼写有错误,第三个是打印输入语句printf("x=%d,y=%d",x,y)有误。修正后程序的运行结果是:x=6,y=6。代码运行结果如下图所示:程序运行过程解析:1、完成变量的赋值,其中有x=1,y=1,m=1,n=1。2、执行第一...

C语言,以下程序运行后的输出结果为__
开始时,len为0,offset=3,offset不为0,先输出p+offset-1上的元素,即*(p+2),为g,并len++,再调用print(str)。之后,每次递归,len静态变量保存了上一次的值。实际上,len每加一,offset就随之向左偏移一位,指向前面的一个字符,也就是倒过来输出字符串中的每个字符。直到len=strlen(str)...

以下程序运行后的输出结果是 #include<stdio.h> int f(int x, int
相当于说f(int x,int y)=(y-x)*x;这里主要是计算嵌套函数f(f(a, b), f(a, c));先将f(a, b)和 f(a, c)带进去,得到f((b-a)*a,(c-a)*a)=f((4-3)*3,(5-3)*3)=f(3,6)最后计算f(3,6)=(6-3)*3=9,所以最后的输出结果就是9,执行以上程序结果如下:...

以下程序运行后输出结果是:() #include <stdio.h> main() { char s...
你的题目有问题吧 输出语句中格式应该为%c %s是输出字符串 答案选c

以下程序运行后的输出结果是___。 main() { int x=10; printf("%d,%d...
c语言函数参数处理顺序-从右向左 printf是函数,遵循这个规律 所以先执行后面的--x,那么第二个参数就是--x就是9,执行完第二个参数后,x就变成9了,再执行第一个参数--x就是8

二级c语言题目 以下程序运行后的输出结果是___ main(){ int x=0210...
0210就是八进制的210 x就是16进制输入或者输出 所以答案是88

10、以下程序程序运行后的输出结果是( )。int f(int n){ static int...
int f (int n)int f(int n){ static int a=1;n+=a++; return n;} 函数里的a是静态变量,函数返回时不内存不回收,所以第一次进入函数时a为1,第二次为2 n+=a++相当于n=n+a++,a++表示先使用a,再自加1。所以第二次进来时a=2;然后选c很清楚了吧 ...

相似回答