因为"=="是判断等号两边的值是否相等的语句。
c语言中的“=”是赋值,“==”才是判断。
等号左边是x,它的值为3,右边是y+z,因为"+"的运算优先级大于"=="所以先执行y+z,得到表达式的值为1+0=1.
所以if(x==y+z)等价于判断 if(3==1),"3==1"的返回值自然是false
于是不执行if()语句下的语句,而是执行else中的printf("+++");
所以最后的输出是 +++
啊,是五道题啊...不是第五题...
没看清楚,不好意思。
等下补答
1. 前缀"--"和后缀"--"的区别:前缀返回的是值改变之后的值,后缀返回的是改变之前的值。
所以输出的一个是后缀的10,一个是前缀的9.
当然如果你再printf("%d,%d",x,y);就都输出9了。
2. 因为x,y,z都是整型变量,所以x/y的返回值是整除的值,也就是商。
10/3=3余1,而%相当于mod,也就是10对3取模。取模运算只能对整数进行。
在两个数都是正整数的时候就等于除法的余数,也就是1。
z=(x/y)是赋值语句返回的值就是改变后的z。
3. 可以看到,它printf的是两个表达式的值。而且是两个逻辑表达式。
第一个是(a+b>c && b==c) “&&”表示且,也就是当两个都为真的时候返回true,任意一个为假,返回false,可以看到a+b>c是true,而b==c是false,所以返回值是false,因为是以整数形式输出,那么就是true=1,false=0.
第二个式子是c>b>a,c语言中没有连比,这个式子会从左算到右。即(c>b)>a。
其中c>b是true,因为要和a这个整型变量比,所以会强制转int变成1,然后1>a返回值就是false了。
4. 也是前置和后置的问题。m=++i 返回的是i=i+1之后的值。也就是6,n=j--返回的是变化之前的值就是12.
第二题:x/y因为x和y有时int类型,所以结果也是int类型,10/3剩3余1,把1去掉,就是3了,10%3余了1;
第五题:x=y+z等效于3==(1+0),就是判断3核0相等码,不相等执行else
第四题:这题和第一题是一样的思路
第三题:相当于(3+4)>5&&4==5和(5>4)>3
其中4==5是假的,所以第一个为0 5>4是真的,所以值为1,等效于1>3,很明 显是家的,为0
望采纳
2016-07-05
// 程序一:
#include <stdio.h>
int main()
{
int x=10,y=10;
printf("%d,%d\n",x--,--y);// x先输出,再减1,所以结果为10。y先减1,再输出,所以结果为9。
}
// 程序二:
#include <stdio.h>
int main()
{
int x=10,y=3,z;
printf("%d,%d\n",z=(x/y),z=(x%y));// 除法运算,x和y都是int类型,所以在做除法时,取整,所以结果为3。求余数,10余3等1,所以结果为1。
}
// 程序三:
#include <stdio.h>
int main()
{
int a=3,b=4,c=5;
printf("%d,%d",a+b>c&&b==c,c>b>a);// 3加4大于5,正确,4等于5,错误,正确&&错误等于false,所以结果为0。5大于4,正确,数值类型为1,1>3,错误,所以结果为0。
}
// 程序四:
#include <stdio.h>
int main()
{
int i,j,m,n;
i=5;
j=12;
m=++i;// i先加1,再赋值给m,m等于6。
n=j++;// j先赋值给n,再加1,n等于12。
printf("%d,%d",m,n);// 所以输出结果为6,12。
}
// 程序五:
#include <stdio.h>
int main()
{
int x=3,y=1,z=0;
if(x==y+z)
{
printf("%%%");
}
else
{
printf("+++");// x不等于y加z,执行这条语句,所以结果为+++。
}
}
// 程序六:
#include <stdio.h>
int main()
{
int x=0,y=0;
switch(x)
{
case 3;
case -1:
y=2;
break;
case 2:
break;
}
printf("%d,%d",x,y);// x等于0,所以都不符合switch语句里的条件,所以结果为0,0。
}