#define SUB(X,Y) X*Y main() { int a=3 ,b=4,c; c=SUB(a+b++,b); printf("%d\n",c); } 输出结果是多少?

C语言的题目,答案是19,请详细解释.

第1个回答  2011-05-28
#define的宏定义只是进行简单的字符串替换,而不会考虑具体运算优先级。
所以c=SUB(a+b++,b)=a+b++*b=a+b*b=3+4*4=19; 然后再算b++,b的结果是5;
所以打印结果是19
第2个回答  2011-05-28
c=SUB(a+b++,b)
相当于 c=a+b++ * b
=3+4*4
=19追问

可以解释下是什么结合性吗?我是菜鸟...

追答

自右向左结合计算
b++*b这个式子它是一个表达式 C语言中在一个表达式中b++和b的取值是一样的
如果这题把b++改成++b c=3+5*5=28
你要把 SUB(X,Y) X*Y 中的(X Y) 整体看成是 X*Y
(X Y)括号也要当作字符串处理哦
(a+b++,b) 就相当于 a+b++ * b

本回答被提问者采纳
第3个回答  2020-04-17
这是一个关于宏的,一定要注意,宏只是替换!
m(a+b,b+c,c+a)等价于:a+b*b+c+c+a=2a+2c+b*b=12
而不是(a+b)*(b+c)+c+a

...main() {int a=3,b=4; printf9"%d\\n",sub(a++,b++)) 怎么做啊...
include<stdio.h> define SUB(x,y)(x)*y void main(){ int a=3,b=4;printf("%d\\n",SUB(a++,b++));} 结果:12 注意:大小写问题,以及声明的习惯 还有就是++(自增)的用法,这里是先执行结果,然后再进行自增,也就是执行完之后a=4,b=5 ...

...#define SUB(x,y) (x)*y,且a=3,b=4,则 SUB(a++,b++) 的值为() 求...
最好的方法就是原封不动的整体代换,SUB(a++,b++)==(a++)*b++;其结果就是3*4=12,括号运算符最高,因此显示a++==3,接着是后自增b++==4,最后是3*4,运算后a=4,b=5

...a) main() {int a=2,b=3,c=5,d; d=SUB(a+b)*c; printf(”%d\\n...
define SUB(a) (a)-(a)main(){ int a=2,b=3,c=5,d;d=SUB(a+b)*c;printf("%d\\n",d);} 答案是-20 d=SUB(a+b)*c; -->d=(a+b)-(a+b)*c d=(2+3)-(2+3)*5=-20 define SUB(a) (a)-(a) 正确写法:define SUB(a) ((a)-(a))...

...y,int z) {z=y-x;} void main(){ int a=1,b=2,c=3; sub(10,5,_百...
因为参数是“值传递”,调用sub函数时,只是把值传了过去,并不会改变a、b、c三个变量。所以打印出的a、b、c仍为原本的赋值。

...main() { int a=4; printf("%d\\n%d\\n%d\\n%d\\n",++a,--a,a++,a...
所以输出的结果应该是4334,我不知道你那个4344怎么来的。正确的顺序应该是:a(4)入栈 a=a-1=3 a(3)入栈 a=a+1=4 a=a-1=3 a(3)入栈 a=a+1=4 a(4)入栈 然后按4,3,3,4的顺序出栈,就是输出,所以你看到的输出顺序是正的 就算是从左到右算的话也应该是5444,不是5344 ...

以下程序的输出结果(12)我不明白12是怎么出来的
结果输出12是没有问题的 在printf("%d\\n",SUB(a++,b++));里面,a++后结果还是3,但a已经变为4了,只是在下次用a的时候a才是4,如果是++a的话,++a的结果马上就变为4了,a也是4,b++类似。(b++,a++)的结果还是12

sub(int x,int y,int*z) {*z=y-x;} main() {int a,b,c); sub(10,5...
include <stdio.h>void sub(int x,int y,int*z) {*z=y-x;}int main(){ int a,b,c; sub(10,5,&a); sub(7,a,&b); sub(a,b,&c); printf("%4d,%4d,%4d\\n",a,b,c); return 0 ;}

main( ) {int i=5; printf("%d\\n",sub(i));} sub (int n) {int a...
void main( ){ int i=5;printf("%d\\n",sub(i));} int sub (int n){ int a;if (n==1)a=1;else a=n+sub(n-1);return a;} n=1时,a=1。对的。但是你的n是5,递归函数sub的计算就是5+4+3+2+1,返回15。

...则不可能出栈的序列是( c )。 11 (A) 1,4,3,2 (
int a=1,b=10; do { b-=a; a++; }while(b-->10);}22 (A) -1 (B) -2 (C) 8 (D) 9 8. 以下程序的输出结果是 ( 23 )。# define M(x,y,z) x*y+zmain(){ int a=1,b=2,c=3; printf("%d\\n",M(a+b,b+c,c+a));}...

下半年计算机二级c语言基础试题
sub(int x,int y) {x1=x;x=y;y=x1;} 3、#include Main() {int i=5; Printf(“%d ”,sub(i)); } sub(int n) {int a; If(n==1) return 1; a=n+sub(n-1); return (a); } 4、#include Void fun() {static int m; m+=2; printf(“%d ”,m); } Main() {int a; For(...

相似回答