C语言表达式计算步骤

下面的表达式计算步骤是???
a+(int)(b/3*(int) (a+c)/2)%4

第1个回答  2013-04-28
在这个表达式中有括号、强制类型转换、算术运算运算符。
括号优先级最大,且由左到右顺序,则先算(int)再算(b/3*(int)(a+c)/2),在运算过程中则先算(int)后算(a+c).
这样括号就算完了,然后算强制类型转换,把b/3*(int)(a+c)/2),转换成int类型,在其中也把(a+c)转换成int类型。
最后算算术运算符,先乘除求余,从左到右。后加减也是从左到右。即可得到结果。追问

我先计算这个 b/3*(int)(a+c)/2 可结果怎么会得出0呢??不是7吗?

追答

你的abc数值分别是多少

追问

对了 不好意思 我忘记打出来了
int b=7 float a=2.5 c=4.7

追答

能不能那部分把你具体的代码 发出来看看 包括初始化

追问

对了 不好意思 我忘记打出来了
int b=7 float a=2.5 c=4.7

追答

你可能在哪弄错了吧  顺序肯定是这样的

看我运行的结果,如下

追问

你回答我这个就行了 a+(int)7%4 先计算哪个再计算哪个???

追答

先把7转换成int类型,然后对4求余,最后加上a。就ok了

第2个回答  2013-04-28
第一步:运算(a+c)
第二步:运算(int)d
第三步:从左到右运算(b/3*d/2)
第四步:运算(int)(第三步的结果)
第五步:运算(第四步的结果)%4
最后,a + 第五步的结果追问

我先计算这个 b/3*(int)(a+c)/2 可结果怎么会得出0呢??不是7吗?

追答

你没有告诉a、b、c的具体值,所以我不好判断

追问

你回答我这个就行了 a+(int)7%4 先计算哪个再计算哪个???

追答

计算机自动将7转换成int类型,然后%4,最后+a

第3个回答  2013-04-28
先执行(a+c),

然后是/2,
接下来是b/3和%4,
然后取整
接着算乘法,
最后相加。追问

我先计算这个 b/3*(int)(a+c)/2 可结果怎么会得出0呢??不是7吗?

追答

“b/3*(int)(a+c)/2”,这个的结果怎么可能是0?你确定你没有搞错?
你定义的a,b,c,是多少?最后要有一个变量用来存放结果。。。

追问

对了 不好意思 我忘记打出来了
int b=7 float a=2.5 c=4.7我把这个表达式放在printf后了 所以不用变量来存放结果一样没事的

追答

最后结果确实是7,是你编译器出错了。。

第4个回答  2013-04-28
先(a+c),然后强制类型转换(int)(a+c);然后顺序b/3* (int) (a+c)/2;再强制类型把前那个数转为int型;之后求余运算%4;最后执行加法运算。求采纳追问

我先计算这个 b/3*(int)(a+c)/2 可结果怎么会得出0呢??不是7吗?

追答

你是不是其他地方有问题,我运行下得出就是7呀,要不你试试
#include
main()
{
int b=7,x;
float a,c;
a=2.5;
c=4.7;
x=b/3*(int)(a+c)/2;
printf("%d\n",x);
}

追问

谢谢你的热心帮助

追答

不客气,助人乃快乐之本嘛,加油!祝你学习顺利!

第5个回答  2013-04-28
强制转换的优先级高于运算符
剩下的就是括号和四则运算次序了
a+(int)(b/3*(int) (a+c)/2)%4
1、(int) (a+c) 强制转换
2、b/3*(int) (a+c)/2 自左向右依次进行
3、(int)(b/3*(int) (a+c)/2 强制转换
4、(int)(b/3*(int) (a+c)/2)%4 数据取余
5、a+(int)(b/3*(int) (a+c)/2)%4追问

我先计算这个 b/3*(int)(a+c)/2 可结果怎么会得出0呢??不是7吗?
对了 不好意思 我忘记打出来了
int b=7 float a=2.5 c=4.7

追答

因为是整型,所以7/3=2
然后 int(2.5+4.7)=7
所以b/3*(int)(a+c)/2 = 2*7/2 =7

相似回答