看板 C_and_CPP 關於我們 聯絡資訊
獻醜了.. ※ 引述《tsamarfi (一 擊 入 魂)》之銘言: : 各位好,目前在準備國考,又是個程式新手,碰到以下幾個問題想請各位指點,謝謝。 : 我會加入些我的想法,請指正,錯得離譜請海涵<(_ _)> : 1. #include<stdio.h> : int main() { : int choice=1; : switch(choice) : { : case 1: : printf("*"); : case 2: : printf("**"); : case 3: : printf("***"); : } : return 0; : } : 答案:****** : 我的想法:choice=1,應該是case 1的輸出吧?就是一顆而已。但是答案是六顆, : 感覺像是case1到3全跑過一次!? 我的看法: 因為case中沒有break; 所以會從case1一路做到case3; 所以是6顆.. : ============================================================================== : 2. (只節錄一段看不懂的部分,是條件判斷) : a=10, b=5 : if(!a>100 && b<6)是真還是假呢? : 我的想法:b<6是真,但是a>100是假,但因為前面有個代表否定的"!"所以變成真。 : 因此真&&真=真。 (a>100)==>false !(a>100)==>true b<6 ==>true 所以(!a>100 && b<6)==>true PS:我實在不想去背運算子的優先順.. : ============================================================================== : 3. #include<stdio.h> : int main() : { : int a=64, b=1; : printf("%/d", a>>(1+(b<<2))); : return 0; : } : 答案:2 : 我的想法:這題真的搞不懂...抱歉。 a=1000000(二進制) a>>(1+(b<<2))==>a>>(1+(4))==>a>>5==>a=2 : ============================================================================== : 4. #include<stdio.h> : int foo1(int v) : { 每次呼叫都會執行a=0 所以return值等於v : int a=0; : a+=v; : return a; : } : int foo2(int v) : { 因為有static, 所以a=0只會做一次, 所以return值等於上次的a + 這次的v : static int a=0; : a+=v; : return a; : } : int main() : { : foo1(10); foo2(10);==>a=10 : foo2(10); foo2(5);==>a=10+5 : printf("%d %d", foo1(5), foo(5)); : return 0; : } : 答案:5 15 : 我的想法:一開始foo1和foo2的v=10,所以加進去後兩者的a=10,接著printf內再 : 輸入v=5,再加進a裡面,foo1應該為15,foo2的a被static,所以還是5。 : 輸出應該為 15 5。但是完全顛倒... : ============================================================================== : 以上幾題請不吝指教,謝謝! 以上.. -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 218.210.106.78
azureblaze:logical_not的優先度高於比較運算 04/15 15:53
azureblaze:連我剛寫完這個部份的parser都還記不太清楚 04/15 15:54
azureblaze:寫這樣code的人是不是很該死XD 04/15 15:55
BlazarArc: 推樓上XD 04/15 17:44
iamnotgm:1樓的意思是他會先作!a才去比較他是不是大於100? 04/15 22:57
iamnotgm:!a是個什麼東西阿 a是10耶 = =? 04/15 22:58
adrianshum:樓上:C/C++ 中,非 0/null 即代表 true. !a 即 false 04/15 23:05
adrianshum:亦即是 0 04/15 23:05
azureblaze:!a => !((bool)a) => !(a!=0) => !(true) => false 04/15 23:06
azureblaze:這也是不太直覺的東西,所以像C#就禁止 04/15 23:11
azureblaze:implict bool cast。 c寫慣了會覺得他很煩就是了 04/15 23:11
xxxx9659:沒背運算子的優先順,所以就錯了XD 04/16 13:07
pujols05:請問呼叫完foo2(),a和v不是就會被清除了,為什麼foo2(5) 04/28 22:10
pujols05:foo2(5);==>a=10+5,他的變數v的值還存在,沒有被清除? 04/28 22:12