C语言 表达式求值

a=3,b=-4,c=5,x=2.5,y=4.7
a++-c+b++;
++a-c+(++b);
++a-c+++b;
其中++a与a++ 区别

a++是a参与计算之后再进行对a的加1计算,而++a是先加1再进行计算,上面三个式子计算下来分别是:
3-5-4 = -6, a = 4, b = -3
(4+1)-5+(-3+1) = -2, a = 5, b = -2
(5+1)-5-4 = -3, a = 6, c = 6(注意这里c+++b会认为前两个++在一起,后面一个是单独的)
这里认为上面三个式子是连续的三个式子,也就是说前面的运算结果会影响到后面的自变量,如果不是这样的,只要掌握方法也很容易就可以就算出来。
最后要说的一点是,如果是你自己编程,最好不要用上面这样的写法,因为不管对你本人还是读代码的人都会造成不小的麻烦,如果误解的话要查处错误来就很不容易了。最好是将++的式子提取出来,单独计算。
温馨提示:内容为网友见解,仅供参考
第1个回答  2010-02-24
假设3个式子是独立的,每个式子的初始值都是a=3,b=-4,c=5;

a++ -c + b++ ; 分解为
{
a - c + b = 3 - 5 + (-4) = -6 ;
a += 1;
b += 1;
}
//答案为 -6 ,各变量值为a=4 b=-3 c=5

++a - c + (++b); 分解为
{
a += 1;
b += 1;
a - c + b = 4 - 5 + (-3) = -4;
}

//答案为 -4 ,各值为 a=4 b=-3 c=5

++a - c++ + b; 分解为
{
a += 1;
a - c + b = 4 - 5 +(-4) = -5;
c += 1;
}
//答案为 -5 ,各值为 a=4 b=-4 c=6

++a与a++的区别是:
++a 是a先自加 1, 然后再进行其他运算。
a++ 是a先参与其他运算, 然后a再自加 1 。

举个例子
//一个方法带有参数 fun(int i)
void fun(int i)
{
printf("i in fun is %d\n",i);
}

int main()
{
int i=1;
fun(i++); /*带入fun()方法的i的值是1,在这个函数结束后,i再自加1*/
printf("test1: i in main is %d\n",i);

i=1;//重新赋值为1,为了与上面做对比
fun(++i);/*带入fun()方法的i的值是2, 在带入这个函数前,i先自加1了*/
printf("test2: i in main is %d\n",i);
}

不知道LZ是否能理解

C语言 表达式求值
b<c 得1 b!=a 得1 a+b 得 -1 b-c 得-9 即 !1+1||-1&&-9 其中 !1+1 得 1 -1&&-9 得 1 最终 1||1 得 1.总之,不管是关系运算符还是逻辑运算符的结果都只有“真、假”两种,C语言用1代表真,用0代表假。

C语言 表达式求值
a -= (a*=a) ; \/\/即 a -= a ,即 a = 9 - 9 ,此时a的值为0 a += (a-=a*=a) ;\/\/ 即 a =+ a ,即 a = 0+0 ,此时a的值还是0

C语言字符串表达式求值
='\\n'&&c!=EOF){scanf("%d",&a);switch(c){case '+':x+=a;break;case '-':x-=a;break;case '*':x*=a;break;case '\/':x\/=a;break;default:break;}}printf("Case #%d:%lld\\n"

C语言一个简单的表达式求值
ch=‘A’,ch=(ch>='A'&&ch<='Z')?(ch+32):ch意思是ch>=‘A’和ch>='Z'都成立则ch=ch+32,否则ch=ch,因为都成立,所以ch=ch+32,A=65,所以ch=65+32=97=a够详细了吧,哈哈。

编写程序对表达式求值C语言
S,Status (*visit)(SElemType)){ SElemType *p;p=S.base;for(p=S.base;p<S.top;p++)(*visit)(*p);return OK;} \/\/输出元素e Status output(SElemType e){ printf("%d ",e);return OK;} 实现表达式求值的代码:\/*计算整数表达式的值 表达式必须以#结束 表达式中可以出现多位数字,...

c语言 后面两个表达式求值及具体过程
,程序开始运行 ==》 ++a 表示 变量 a 首先进行自增运算(每次加1)然后在参加到其他运算中来 ,那么a-- 则表示 变量a首先进行运算然后在进行自减操作(每次减1) 这段程序运行后 a = 2 ;b=2;c=2;d=4. 结果为3 。 很久没用 VC或者TC了 建议自己编程运行下 ...

数据结构c语言版表达式求值标准程序
思路:中缀表达式-后缀表达式-求值 参考代码:include <iostream> include <cstdio> include <vector> include <cstdlib> include <cstring> include <iterator> include <algorithm> \/\/ 堆栈的数组实现,数组的大小固定。template<class T> class stack { private:T *s; \/\/ 数组的首地址(栈底...

c语言 表达式求值
void main(){ char str[20][201],*p0,*p1;int t,i,s,f,loop;scanf("%d",&t); if ( t>20 ) t=20;for ( i=0;i<t;i++ ) scanf("%s",str[i]);for ( i=0;i<t;i++ ){ p0=p1=str[i]; s=0; f=1; loop=1;while ( loop ){ while ( (*p1)>='0' && (*...

C语言 表达式求值
int a=3,b=-4,c=5;b%=c+a-c\/7;(1) c\/7 = 0 (2) c+a - 0 = 5+3-0 = 8 (3) b = b % 8 = -4 % 8 = -4 -- 除法取余运算 结果 -4

C语言,三目运算符的问题
这是表达式求值。a=一个表达式,传递的值是最后一步,所以第一个a = y,第二个a = x。

相似回答
大家正在搜