再请教二级的题目

来源:百度知道 编辑:UC知道 时间:2024/06/01 13:15:30
1:以下程序的输出结果是
#define M(x,y,z) x*y+z
main()
{ int a=1,b=2, c=3;
printf("%d\n", M(a+b,b+c, c+a));
}
A) 19 B) 17 C) 15 D) 12
答案是D,请问为什么啊?
还有这个
2:以下程序的输出结果是

main()

{ int a=0,i;

for(i=;i<5;i++)

{ switch(i)

{ case 0:

case 3:a+=2;

case 1:

case 2:a+=3;

default:a+=5;(这个是什么意思啊??)

}

}

printf("%d\n",a);

}

A) 31 B) 13 C) 10 D) 20
答案是A

1,M(a+b,b+c, c+a)展开为 a+b * b+c + c+a
=1+2*2+3+3+1=12
2,default:表示默认处理,就是以上case都不满足时候的处理。
以为里面没有加break,所以上面的满足的情况下,其下的全部语句都执行。
结果是

i=1时 a +3+5=8
i=2时 a +3+5=16
i=3时 a +2+3+5=26
i=4时 a +5=31

太乱