C语言题,求指导

#include<stdio.h>
int func(int a,int b)
{int c;
c=a+b;return c;
}
main()
{int x=6,y=7,z=8,r;
r=func((x--,y++,x+y),z--);
printf("%d\n",r);
}
结果是21 不懂 求解释 跪谢!

在C语言中,多个表达式可以用逗号分开,其中用逗号分开的表达式的值分别结算,但整个表达式的值是最后一个表达式的值。
(x--,y++,x+y)此表达式为逗号表达式。所以第一个参数为13.

z--:z先给值,再自减。所以第二个参数为8。
func(13,8) return 13+8;

所以结果是21。
题主弄清两点就好了。第一点 逗号表达式,第二点,i++和++i的区别。
i++:先给值 后自加。
++i:先自加 后给值。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-09-15
#include<stdio.h>
int func(int a,int b) 这里收到的是13 , 8
{
int c;
c=a+b; =13+8=21
return c; 返回21
}
main()
{int x=6,y=7,z=8,r;
r=func( (x--,y++, x+y), z-- ); //我从来不会写这样的代码,太坑人!
//参数1是(x--,y++, x+y):这是逗号运算,本条语句运行结果是x+y的值, 但具体x+y中的x y对应是自减、自增前的,我也不太清楚,但结果仍然是6+7=13,因为有一增一减,结果不会变
//参数2是z=8,运行完func()函数后,z=8+1=9
//func()函数返回结果存到r中
printf("%d\n",r); //输出21
}

来自:求助得到的回答
第1个回答  2014-09-15
对于参数,先算z--,值是8
再算逗号表达式x--,y++,x+y,先求x--,值是6,x变成5,再求y++,值是7,y变成8,最后求x+y=13,整个表达式=13

func是13+ 8 = 21
第2个回答  2014-09-15
这里比较复杂,你仔细看:
第一个知识点:关于"x++"、“++x”、“x--”、“--x”的问题。例如
int x=2,y;
y=x++; //叫做“后加加”
那么x的结果是3,y的结果是2,
int x=2,y;
y=++x; //叫做“前加加”
那么x的结果是3,y的结果就是3,
第二个知识点:“,”(即“逗号”运算符),它的作用是取“逗号”右边的作为整个表达式的答案。
例①:

int x=2,y=3,z;
z=x,y;
那么x的结果是2,y的结果是3,z的结果是3
例②:
int x=2,y=3,z=4,w;
w=x,y,z;
那么x的结果是2,y的结果是3,z的结果是4,w的结果是4
例③:
int x=2,y=3,z=4,w;
w=x++,y,z;
那么x的结果是3,y的结果是3,z的结果是4,w的结果是4
例④:
int x=2,y=3,z=4,w;
w=++x,y,z;
那么x的结果是3,y的结果是3,z的结果是4,w的结果是4
例如⑤:
int x=2,y=3,z=4,w;
w=x,y,z++;
那么x的结果是2,y的结果是3,z的结果是5,w的结果是4
例⑥:
int x=2,y=3,z=4,w;
w=x,y,++z;
那么x的结果是2,y的结果是3,z的结果是5,w的结果是5

下面两个例子到了关键:
例⑦:
int x=2,y=3,z=4,w;
w=x++,y,x+z;
那么x的结果是3,y的结果是3,z的结果是4,w的结果是x+z=2+4=6
例⑧:
int x=2,y=3,z=4,w;
w=++x,y,x+z;
那么x的结果是3,y的结果是3,z的结果是4,w的结果是x+z=3+4=7
懂了吗?
第3个回答  2014-09-15
(x--,y++,x+y):x为6,y为7,x+y为13

func函数为求和并返回值,func(13,8)函数执行后返回和21,z再自减1
第4个回答  2014-09-15
#include <stdio.h>#include <stdlib.h>#include <time.h>void plus();void minus();void multi();void division();int main(){ int type; srand(time(NULL)); printf("四则运算练习程序\n"); program: printf("运算种类:\n1.加法 2.减法 3.乘法 4.除法 5.退出\n请输入以选择: "); scanf("%d",&type); switch(type){ case 1: plus(); break; case 2: minus(); break; case 3: multi(); break; case 4: division(); break; case 5: goto exit; break; } goto program; exit: return EXIT_SUCCESS;}void plus(){ int x,y,ans,i; x=rand()%9+1; y=rand()%9+1; for(i=0;i<3;i++){ printf("%d+%d=",x,y); scanf("%d",&ans); if(ans==x+y){printf("正确!");break;} else printf("答案错误。"); }}void minus(){ int x,y,ans,i; x=rand()%9+1; y=rand()%9+1; for(i=0;i<3;i++){ printf("%d-%d=",x,y); scanf("%d",&ans); if(ans==x-y){printf("正确!");break;} else printf("答案错误。"); }}void multi(){ int x,y,ans,i; x=rand()%9+1; y=rand()%9+1; for(i=0;i<3;i++){ printf("%d×%d=",x,y); scanf("%d",&ans); if(ans==x*y){printf("正确!");break;} else printf("答案错误。"); }}void division(){ int x,y,ans,i; x=rand()%9+1; y=rand()%9+1; for(i=0;i<3;i++){ printf("%d÷%d=",x,y); scanf("%d",&ans); if(ans==x/y){printf("正确!");break;} else printf("答案错误。"); }}
这样可以么?