若有以下定义int m=5,y=2;,则计算表达式y+=y-=m*=y后的y值是

如题所述

y值是-16。

从左往右分解,y+=y-=m*=y 就是 y=y+(y-=m*=y)

y-=m*=y 就是 y=y-(m*=y)

m*=y 就是 m=m*y

那么就等于

m=m*y; //m=10, y=2

y=y-m; //m=10, y=-8

y=y+y; //m=10, y=-16

扩展资料:   

由于后缀表达式不需考虑运算符的优先级,因此计算较简单。计算过程为:从左到右依次扫描后缀表达式,遇到运算符,则与运算符前边连续两个操作数做运算。

由于遇到操作数时,不能立即进行计算,因此设立一个栈(操作数栈),用于存放操作数。具体运算过程如下:

1、从左到右依次扫捕后缀表达式,每次取出一个字符;

2、若字符是操作数,则入栈;

3、若字符是运算符,则连续出栈两个操作数,计算它们的值,然后把运算结果入栈;

4、重复步骤1~3,直至表达式结束,栈中最后一个元素即是后缀表达式的值。

温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2018-03-13
这种连接运算,其实很简单的,运算顺序知道了就OL!
运算顺序由右向左,首先运算m*=y值为10,再运行 y-=10值为-8,最后运行y+=-8值为-16,就这么简单,希望能帮助你……本回答被网友采纳
第2个回答  2010-11-22
大哥的问题真是稀奇古怪。按照运算次序,先做m*=y,得到m=10,再做y-=m,得到y=-8,再做y+=y,得到y=-16。
第3个回答  2010-11-28
#include <iostream>
using namespace std;
__int64 hash[120][100000];
int main()
{

int i,j;
__int64 lmax= 1;
lmax=lmax<<32;

for (i=3;i<110;++i)
{
hash[i][0]=i;
for (j=1;hash[i][j-1]<lmax;++j)
{
if (hash[i][j-1]%(i-1)==0)
{
hash[i][j]=hash[i][j-1]/(i-1)*i-1;
}
else
{
hash[i][j]=(double)(hash[i][j-1]*i)/(double)(i-1);
}
}
}
int T;
cin>>T;
while (T--)
{
int N,K;
cin>>N>>K;

int i;
for (i=0;;++i)
{
if (hash[K][i]>N)
{
break;
}
}
cout<<hash[K][i-1]<<endl;

}
return 0;
}
希望对你有帮助
第4个回答  2010-11-25
选c,p[0]指向a[1],也就是&a[1][0],二维数组在内存中的存储方式和一维数组一样也是顺序存放的,所以p[0]+1就是a[1][0]的下一个元素