第一题: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为假,ab为假,在执行逻辑运算符a>b&&c>a为假,a>b&&c>a‖ab&&c>a‖ab为假,所以a>b&&c>a‖ab的值是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;
第一个问题,\n是C语言中的转义字符,代表回车的意思,不等于回车,就说明字符变量必须从输入流得到一个字符,作为它的值,这样才能进行循环。
第二个问题,输入kas2i9e,逐个分析,输入k,进行循环之后,首先if语句判断字符变量c的值要在字符0~9之间,如果不在这个范围内就无法进行下一语句,那么实际上,只有2和9这两个字符可以运行if后面的语句。但是,因为你发的代码看着太乱了,结果我猜应该是2*10+9=29.
①(c=getchar( )) != "\n’的含义是什么?——从键盘接收一个字符赋给变量c,若c不是回车,while进入下一轮循环,若是回车则退出循环。
②如果输入kas2i9e则程序的最后输出结果是什么——输出是29。因为if(c>='0'&& c<='9')限制只处理0~9这10个字符,n的初值是0,遇到2时n=10*0+'2'-'0'==0+2==2('2'-'0'把字符2变成了数字2);下一次遇到9时n=10*2+'9'-'0'==20+9==29。毕。