第一题:a*=16+(b++)-(++c)等价于a=a* (16+(b++)-(++c)); "()"优先级最高,所以先执行:(b++),在使用b之后,使b加一,因此(b++)=3;(++C),在使用c之前,使C加一,因此(++C)=5。然后将按照加减的结合性."自左向优"计算,因此16+(b++)-(++c)=14;之后 执行a*(16+(b++)-(++c))=28,所以a=28;
第2题:结果应该是1,因为unsigned short类型的数值范围是0到65535,(- -!汗,你可找c\c++程序设计的书,那里可以找到数据类型的数值范围)因为int是范围要大多,又因为signeed是以补码形式存放,而unsigned是全部2进制位都用本身表示自己,所以 程序的输出结果是-1;
第3题:x/y=0.5,但要自动转换成int类型,因此x/y=0 ,所以1.0+x/y的值为1.0;
第4题:x-=y-z等价于x=x-(y-z),用小学的算法计算x-(y-z)=5, x的值为5;
x%=y+z等价于x=x%(y+x),因为x%(y+x)=0.5,又因为x,y都为整形(int),所以x的值为0;
第5题;在此语句中printf("#d&%d\n",(++x+y++),z+2); #d&是字符输出,%d是输出第一个表达式(自左向右),即是(++x+y++),先执行自增运算符++x值为4,(原理看第一题的说明),y++的值为3,所以(++x+y++) =7,所以程序执行结果是#d&7;
第6题:我觉得你这个题目是你抄错题"a=2,b=3,c=4.5,y=1.6,"中的c应该为x,这题是这样的,先执行(int)x=4,(int)=1,再执行(int)x%(int)y=4(注意,这里4是float类型),在执行(float)(a+b)/2=2.5,所以此表达式的值为6.5
第7题:- -!你有抄错题没有?
main()
{int i,j,m,n;
i=8;
j=3;
m=++i;
n=j--;
printf("%d,%d,%d,%d,i,j,m,n);} /*觉得是printf("%d,%d,%d,%d",i,j,m,n); */
m=++i;因此m=9,这里i为9,这个容易理解(第一题);j第一次执行的时候n=j--,这里n=3,j=3;到第2次执行J的时候,即是执行printf("%d,%d,%d,%d,i,j,m,n)语句,这里的j就为2
因此执行结果为:9,2,9,3
第8题:因为a>b>C是真,在C中都用数值1表达真,0表达假,所以m=1,所以表达式m=a>b>c的值是1;
第9题:又抄错题?- -!“b=2”?
先执行!,在执行关系运算符,a>b为真,c>a为假,a<b为假,!c>b为假,在执行逻辑运算符a>b&&c>a为假,a>b&&c>a‖a<b为假,a>b&&c>a‖a<b&&!c>b为假,所以a>b&&c>a‖a<b&&!c>b的值是0;
第10题:答案肯定为0;"设a=3,b=4,c=5,则表达式!(x=a)&&(y=b)&&0的值是"这题你做的出请告诉我,我也不会。(但可以敢肯定的是他的值为0,因为这个表达式的后面那个数据为0)如果将这题这样改写的话“10.设a=3,b=4,c=5,则表达式!(c=a)&&(c=b)&&0的值是”,我就有感觉怎做,首先(c=a)为假,!(c=a)为真,(c=b)为假,!(c=a)&&(c=b)为假,!(c=a)&&(c=b)&&0为假,即是0;
如果还没解决你的问题,可以加我百度HI账号。
本文如未解决您的问题请添加抖音号:51dongshi(抖音搜索懂视),直接咨询即可。