下面程序段的执行结果是#defineprt(a,b)if(!a)b=amain(){intx=1,y=0;if(x>y)prt(x,y);elseprt(y,x);printf(“%d,%d”,x,y);}(A)1,0(B)0,0(C)0,1(D)编译出错为什么是C,还有if(!a)b=a是如果a为假则a赋值给b吗?
#define prt(a,b) if(!a) b=a
main(){
int x=1,y=0;
if(x>y) prt(x,y);
else prt(y,x);
printf(“%d,%d”,x,y);}
(A) 1,0
(B) 0,0
(C) 0,1
(D) 编译出错
为什么是C ,还有if(!a) b=a 是如果a为假 则a赋值给b吗?
楼主,你要注意,prt(a,b) 是“宏”,不是函数.
因此,原始代码看起来很迷惑人的!
因为在编译前,是要进行宏替换的,因此,我们先看看宏替换之后的代码:
(为减少内容,只看if语句那儿)
if(x>y) if(!x) y=x;
else if(!y) x=y;
//这样仍然有点“迷惑人”
//那再给它加上花括号,流程就清晰了:
if(x>y) {
if(!x) y=x;
else {if(!y) x=y;}
}
//看上面的代码,运行结果很明晰了吧!
因最初x=1 ,而y=0
因此,第一个if(x>y)为真,
然后if(!x) 为假,执行了 else语句块.
在else的语句块中,if(!y) 为真,就执行了x = y
最终结果,就是x和y的值都为 0 了.
下面程序段的执行结果是#defineprt(a,b)if(!a)b=amain(){intx=1, 2020-04-26 …
请问下面Matlab定义函数中if nargin==0,x=0:.05:1;end有什么用?后面2 2020-05-13 …
c语言 当x0时 y=1y=-1;if(x!=0)if(x>0)y=1;elsey=0;这是程序的 2020-05-16 …
● 给定C 语言程序: int foo( int x, int y, int d){if( x != 2020-05-26 …
给定C语言程序: intfoo(int x, int y,int d) { if ( x !=0 ) 2020-05-26 …
● 执行下面的一段C程序后,变量x的值为 (41) 。 char x = 200; int a = 2020-05-26 …
有谁能看懂这个公式啊急=ROUND(IF(I3="S",$C$121,IF(I3="A",$C$1 2020-06-14 …
以下程序段中不能根据X的值正确地计算出符号函数的值,并赋值给变量y的是().A.if(x>0)y= 2020-07-09 …
hdoj1597杭电1597为何总WA?实在想不通,#include#include#includ 2020-07-23 …
C#考题中的一道题——功能与其他语句不同A)if(a)printf("%d\n",x);elsepr 2020-12-13 …