[問題] 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