[问题] 2题程式不懂,是要怎么看呢?

楼主: irene6524 (Irene)   2013-07-20 19:31:08
1.#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int a=11,b=11;
a+=a+=b+=b%=b<<2;
printf(" %d ", a );
system("pause");
return 0;
}
为什么答案是66? 是不是计算过程是
a=a+a=a+b=b%b<<2 然后运算顺序% << + =(右到左)
a=22=22=22=0 ,,a=0;
2.
#include <stdio.h>
#include <stdlib.h>
#define M(a,b) (a)<(b)?( a ) : ( b )
int main(void)
{
int a=4,b=3,c=2,d=4;
printf("%d\n",M(a+b,c+d));
system("pause");
return 0;
}
A.6 B.7 C.13 D.0
为什么答案是 D
作法是不是 呼叫M(a+b,c+d) 找定义define M(a,b) a是a+b
b是c+d 然后 (a+b < c+d) ? (a+b,c+d) 判断否传回c+d == 6
作者: LPH66 (-6.2598534e+18f)   2013-07-20 19:32:00
第一题是哪里考的题目...烂透了这个式子是未定义行为 会得出什么都有可能第二题我的答案跟你一样是 6
作者: micklin (mick doohan)   2013-07-21 00:36:00
同楼上.
作者: chienweichih ((゚д゚))   2013-07-21 07:38:00
第二题把marco打开是 printf("%d\n",(6));喔 多了两个刮号
楼主: irene6524 (Irene)   2013-07-22 15:13:00
第一题补上定义了,第二题是答案错了吗?
作者: m87145999   2013-07-23 20:21:00
第一题应该是,b=b%44(这44是从b<<2),然后b+=b,a+=b,a+=a
作者: LPH66 (-6.2598534e+18f)   2013-07-25 21:38:00
第一题不管怎么补都是未定义行为唔, 我好像有弄错...来查一下标准 @@
作者: Hurricaneger (裤袜脱落大尉)   2013-08-16 21:20:00
第一题怎么补都是...
作者: rocson (rocson)   2013-10-02 16:30:00
第一题我解在 #2132

Links booklink

Contact Us: admin [ a t ] ucptt.com