C语言中,a=b=c,a=b==c,a==(b=c),a==(b==c)有什么区别
来源:学生作业帮 编辑:作业帮 分类:综合作业 时间:2024/05/27 10:22:31
C语言中,a=b=c,a=b==c,a==(b=c),a==(b==c)有什么区别
main()
{int a=1,b=2,c=3;
printf("%d,%d,%d,%d\n",a=b=c,a=b==c,a==(b=c),a==(b==c));
}
main()
{int a=1,b=2,c=3;
printf("%d,%d,%d,%d\n",a=b=c,a=b==c,a==(b=c),a==(b==c));
}
C语言和其他语言不同,在其他语言中,一般不区分 赋值操作符 与 等于 运算符,但是C语言很区分.
= 是赋值
== 是等于运算
也就是说,
a=b=c,是一个表达式,运行到这里时,将a的值赋给b、c,运行完后abc的值相等;
a=b==c,是一个复合表达式,先将a的值赋给b,然后与c比较,如果相等则返回0,否则返回一个非零值;
a==(b=c),是一个复合表达式,先执行括号中的内容(即将b的值赋给c),然后比较a、c,如果相等则返回0,否则返回一个非零值;
a==(b==c),是一个复合表达式,先比较b、c的值,如果相等则返回0,否则返回一个非零值,然后比较a与(b==c)的返回值(注意这里不是再比较a与b或c,以前就错在这里过,希望LZ注意).
可以看到C是区分 = 跟 == 的,虽然对新手很麻烦、容易错,但是一旦熟练之后会觉得很灵活,能把赋值语句放到任何你喜欢的地方.
PS:LZ的程序风格不好,而且还不习惯引用stdio.h,希望改正.附我改写的程序:
#include
int main()
{
int a = 1,b = 2,c = 3;
printf("%d,%d,%d,%d\n",a = b = c,a = b==c,a==(b = c),a==(b==c));
return 0;
}
运行结果:3,0,0,0
= 是赋值
== 是等于运算
也就是说,
a=b=c,是一个表达式,运行到这里时,将a的值赋给b、c,运行完后abc的值相等;
a=b==c,是一个复合表达式,先将a的值赋给b,然后与c比较,如果相等则返回0,否则返回一个非零值;
a==(b=c),是一个复合表达式,先执行括号中的内容(即将b的值赋给c),然后比较a、c,如果相等则返回0,否则返回一个非零值;
a==(b==c),是一个复合表达式,先比较b、c的值,如果相等则返回0,否则返回一个非零值,然后比较a与(b==c)的返回值(注意这里不是再比较a与b或c,以前就错在这里过,希望LZ注意).
可以看到C是区分 = 跟 == 的,虽然对新手很麻烦、容易错,但是一旦熟练之后会觉得很灵活,能把赋值语句放到任何你喜欢的地方.
PS:LZ的程序风格不好,而且还不习惯引用stdio.h,希望改正.附我改写的程序:
#include
int main()
{
int a = 1,b = 2,c = 3;
printf("%d,%d,%d,%d\n",a = b = c,a = b==c,a==(b = c),a==(b==c));
return 0;
}
运行结果:3,0,0,0
C语言中,max=(a>((b>c)?b:c)?a:(b>c:b:c));
C语言中,a=(b,c) ,
(a-b-c)(b+c-a)(c-a+b)=
C语言c=(a^b)
a>b>c,a+b+c=0,求证c/(a-c)>c/(b-c)
行列式证明|b+c c+a a+b| | a b c||a+b b+c c+a| = 2 |c a b||c+a a+b
已知(b+c)/(a)=(c+a)/(b)=(a+b)/(c) 求(a+b)/(c)
证明 +(a-b)(b-c)(c-a)/(a+b)(b+c)(c+a)=0
(a-b)b+c(b-a)=c(c-a)+b(a-c)?
a+b+c=0,abc求a(b+c)+b(a+c)+c(a+b)
[(a-b)(b-c)(c-a)]÷[(a-c)(c-b)(b-a)]=
C语言中a!=b