C语言的一个计算题

来源:百度知道 编辑:UC知道 时间:2024/07/02 14:19:34
#include<stdio.h>
void main()
{
int i=3,j=2,a,b,c,d;
d=(i*3,j=10);
a=(--i==j++)?--i:++j;
b=i++;
c=j;
printf("%d,%d,%d,%d\n",a,b,c,d);
}
结果是12,2,12,10 为什么做下全面的说明

#include<stdio.h>
void main()
{
int i=3,j=2,a,b,c,d;

d=(i*3,j=10);
//逗号表达式,整个逗号表达式的值是最后一个子表达式的值,其一般形式为:(表达式1,表达式2)其求值过程是分别求两个表达式的值,并以表达式2的值作为整个逗号表达式的值。
在这里实际上等价于 d=10;j=10(i*3等于没执行,但是如果是i++那就不一样了)
//到这里,a=随机,b=随机,c=随机,d=10,j=10,i=3;

a=(--i==j++)?--i:++j;
//--i,++i,i++,i--是自增减运算符,--i 是i=i-1 返回值是i-1之后的数值,j++是j=j+1 返回值是j+1之前的数值
?: 是个三目运算符 格式为x?y:z 意思是 如果X为真 返回Y 否则返回Z
这里先执行(--i==j++),i为2(自减),j为10(自增还没执行),所以不等,执行j++,执行完后j加1。
然后赋值给a,a为12。
//到这里,a=12,b=随机,c=随机,d=10,j=12,i=2;

b=i++;
// i++是i=i+1 返回值是j+1之前的数值,所以为b=2,然后i=i+1
//到这里,a=12,b=2,c=随机,d=10,j=12,i=3;

c=j;

//赋值语句 ,c = j = 12
//到这里,a=12,b=2,c=12,d=10,j=12,i=3;

printf("%d,%d,%d,%d\n",a,b,c,d);
//到这里,a=12,b=2,c=12,d=10,j=12,i=3;
}

#include<stdio.h>
void main()
{
int i=3,j=2,a,b,c,d;
d=(i*3,j=10); (实际上等价于 d=10;j=10)
a=(--i==j