作者irene6524 (Irene)
看板CSSE
标题[问题] 2题程式不懂,是要怎麽看呢?
时间Sat Jul 20 19:31:08 2013
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
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 49.217.1.224
1F:推 LPH66:第一题是哪里考的题目...烂透了 07/20 19:32
2F:→ LPH66:这个式子是未定义行为 会得出什麽都有可能 07/20 19:33
3F:→ LPH66:第二题我的答案跟你一样是 6 07/20 19:35
4F:推 micklin:同楼上. 07/21 00:36
5F:→ chienweichih:第二题把marco打开是 printf("%d\n",(6));喔 多了两 07/21 07:38
6F:→ chienweichih:个刮号 07/21 07:38
※ 编辑: irene6524 来自: 180.206.152.8 (07/22 15:09)
7F:→ irene6524:第一题补上定义了,第二题是答案错了吗? 07/22 15:13
8F:推 m87145999:第一题应该是,b=b%44(这44是从b<<2),然後b+=b,a+=b,a+=a 07/23 20:21
9F:推 LPH66:第一题不管怎麽补都是未定义行为 07/25 21:38
10F:推 LPH66:唔, 我好像有弄错...来查一下标准 @@ 07/25 21:45
11F:推 Hurricaneger:第一题怎麽补都是... 08/16 21:20
12F:→ rocson: 第一题我解在 #2132 10/02 16:30