定义:int m=5,n=3;则表达式m/=n+4(和m=m/(n+4)一样)的值是____0___,表达式m=(m=1,n=2,n-m)的值是___1_____,m+=m-=(m=1)*(n=2)(当有多个赋值时,从右往左计算)的值是____-2____。
时间: 2024-01-30 19:01:44 浏览: 51
好的,你的第一个问题是关于一些表达式的值的计算。我来解答一下:
表达式m/=n+4,等价于m=m/(n+4),其中m=5,n=3,所以m的值为5/(3+4) = 0.714,但是m是int型,所以它会被转换成整数,即0。
表达式m=(m=1,n=2,n-m),其中m的初始值为5,m=1会将m赋值为1,然后n=2将n赋值为2,最后n-m计算的结果为1-1=0,所以m的值最终为0。
表达式m+=m-=(m=1)*(n=2)等价于m = m + (m - (m=1)*(n=2)),初始时m=5,n=3,那么(m=1)*(n=2)的结果为1*2=2,所以m的值变为m + (m-2),也就是5 + (5-2) = 8,因此m的最终值为8。但是在计算过程中,m被赋值为1和8,n被赋值为2,所以不要在意中间变量的值。
相关问题
若有定义:int e=1,f=4,g=2; float m=10.5,n=4.0,k;则计算赋值表达式k=(e+f)/g+sqrt((double)n)*1.2/g+m后k的值是
根据运算符的优先级和结合性,计算赋值表达式k=(e+f)/g+sqrt((double)n)*1.2/g+m的步骤如下:
1. 先计算括号内的加法运算:e+f=1+4=5
2. 再将5除以g:5/2=2(整数除法,结果取整数部分)
3. 计算sqrt((double)n)的值:sqrt(4.0)=2.0
4. 将2.0乘以1.2:2.0*1.2=2.4
5. 将2除以g:2/2=1
6. 将m、2和2.4相加:10.5+2+2.4=14.9
因此,赋值表达式k=(e+f)/g+sqrt((double)n)*1.2/g+m的结果是k=14.9。
设有定义:int m=1,n=-1;则执行语句printf(”%d\n",(m--&&++n);后的输出结果是( ) A、 -1 B、 0 C、 1 D、 2
执行语句`printf("%d\n", (m-- && ++n));`会先执行逻辑运算符`&&`左边的表达式`m--`,此时`m`的值为1,将`m`的值减1,即`m`的值变为0,因此表达式`m--`的值为1。
由于`&&`是逻辑与运算符,左边的表达式为1时,才会继续执行右边的表达式。因此,程序会执行`++n`,将`n`的值加1,即`n`的值变为0。同时,`&&`运算符的结果为1。
最终,`printf`函数输出的结果为1。因此,选项C“1”是正确答案。