Re: [問題] 一些考題有請指教

看板C_and_CPP作者 (憂鬱米蟲)時間11年前 (2013/04/12 23:28), 編輯推噓9(9015)
留言24則, 14人參與, 最新討論串2/3 (看更多)
※ 引述《tsamarfi (一 擊 入 魂)》之銘言: : 標題: [問題] 一些考題有請指教 : 時間: Fri Apr 12 22:50:00 2013 : : 各位好,目前在準備國考,又是個程式新手,碰到以下幾個問題想請各位指點,謝謝。 : : 我會加入些我的想法,請指正,錯得離譜請海涵<(_ _)> : : 1. #include<stdio.h> : int main() { : int choice=1; : switch(choice) : { : case 1: : printf("*"); break; : case 2: : printf("**"); break; : case 3: : printf("***"); break; } : return 0; : } : : 答案:****** : 我的想法:choice=1,應該是case 1的輸出吧?就是一顆而已。但是答案是六顆, : 感覺像是case1到3全跑過一次!? 解答:加上break;即可 Switch 用法 http://openhome.cc/Gossip/CppGossip/switchStatement.html : ============================================================================== : 2. (只節錄一段看不懂的部分,是條件判斷) : a=10, b=5 : if(!a>100 && b<6)是真還是假呢? : : 我的想法:b<6是真,但是a>100是假,但因為前面有個代表否定的"!"所以變成真。 : 因此真&&真=真。 解答: 運算子先判斷a>100 是假 然後取"反轉(反轉)"變成真 然後 b<6為真 然後真&&真為真 : ============================================================================== : 3. #include<stdio.h> : int main() : { : int a=64, b=1; : printf("%/d", a>>(1+(b<<2))); : return 0; : } : : 答案:2 : 我的想法:這題真的搞不懂...抱歉。 解答: 拆開a>>(1+(b<<2)) B<<2,二進位為 00000001,然後>> 2,變成00000100 = 4 1+4 = 5 這行不解釋 a>>5,a二進位為 01000000,然後>>5,變成 00000010 = 2 : ============================================================================== : 4. #include<stdio.h> : int foo1(int v) : { : int a=0; : a+=v; : return a; : } : int foo2(int v) : { : static int a=0; : a+=v; : return a; : } : int main() : { : foo1(10); V=5,a=10 : foo2(10); V=5,a=10 : printf("%d %d", foo1(5), foo(5)); foo1(5),v=5 ,a =0+5 = 5 foo2(5),v=5 ,a =10+5=15 : return 0; : } : 答案:5 15 : 我的想法:一開始foo1和foo2的v=10,所以加進去後兩者的a=10,接著printf內再 : 輸入v=5,再加進a裡面,foo1應該為15,foo2的a被static,所以還是5。 : 輸出應該為 15 5。但是完全顛倒... : ============================================================================== : 以上幾題請不吝指教,謝謝! 感謝bibo9901指點,豁然開朗阿!! -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 60.248.32.130

04/12 23:29, , 1F
static啊!!! 重點再你們誤解static惹!!!
04/12 23:29, 1F

04/12 23:31, , 2F
在不同函數內同樣變數名稱,其中一個Static編譯器OK?
04/12 23:31, 2F

04/12 23:32, , 3F
"在不同函數內" 當然ok..
04/12 23:32, 3F
※ 編輯: timestoprun 來自: 60.248.32.130 (04/12 23:36)

04/12 23:51, , 4F
名稱當下不衝突就好了,http://codepad.org/4Zt2Ty4A
04/12 23:51, 4F

04/13 00:13, , 5F
static 也是要遵守scope
04/13 00:13, 5F

04/13 01:15, , 6F
十分感謝,找了一下static的資料,好難懂@@"
04/13 01:15, 6F

04/13 01:26, , 7F
函數內的 static 就只是一個全域變數而已..只不過 scope
04/13 01:26, 7F

04/13 01:26, , 8F
跟一般的區域變數一樣,像上面就是鎖在 if(1) {} 大括號內
04/13 01:26, 8F

04/13 01:31, , 9F
第一題是題目要考fall-through,不是考switch用法
04/13 01:31, 9F

04/13 01:31, , 10F
你叫他加break修改題目還挺鮮的。
04/13 01:31, 10F

04/13 01:42, , 11F
第二題忘了! 了 查一下! 跟 > 的優先度吧...
04/13 01:42, 11F

04/13 01:45, , 12F
QQ我已經看整天程式,腦袋跑低功率模式,原來那是題目
04/13 01:45, 12F

04/13 01:51, , 13F
第二題會先執行!a invert bitwise
04/13 01:51, 13F

04/13 01:51, , 14F

04/13 02:04, , 15F
那在a=10前面加個"!"會變什麼?a不就是個常數嗎?
04/13 02:04, 15F

04/13 02:18, , 16F
a 是不是常數要看宣告時的型態。
04/13 02:18, 16F

04/13 02:20, , 17F
文字任意拼湊不一定合文法,程式語言也是一樣。
04/13 02:20, 17F

04/13 02:21, , 18F
先知道自己想做什麼,再用程式語言描述出來。
04/13 02:21, 18F

04/13 02:21, , 19F
! 會先做沒錯, 不過 ! 是 logical not, 不是 bitwise not
04/13 02:21, 19F

04/13 02:34, , 20F
第二題好像真的是假
04/13 02:34, 20F

04/13 02:36, , 21F
a=10 !(10)=0 →因為非TRUE即FALSE(0)
04/13 02:36, 21F

04/13 02:41, , 22F
http://codepad.org/b0NWVv2q 丟編譯器最準
04/13 02:41, 22F

04/13 14:28, , 23F
bitwisw not 應該是"~" 不過似乎只是用unsigned
04/13 14:28, 23F

04/14 12:30, , 24F
真是佛心噲 ~ 推一個
04/14 12:30, 24F
文章代碼(AID): #1HQ2WFWE (C_and_CPP)
文章代碼(AID): #1HQ2WFWE (C_and_CPP)