作者timestoprun (憂鬱米蟲)
看板C_and_CPP
標題Re: [問題] 一些考題有請指教
時間Fri Apr 12 23:28:11 2013
※ 引述《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
→ tjjh89017:static啊!!! 重點再你們誤解static惹!!! 04/12 23:29
→ timestoprun:在不同函數內同樣變數名稱,其中一個Static編譯器OK? 04/12 23:31
→ bibo9901:"在不同函數內" 當然ok.. 04/12 23:32
※ 編輯: timestoprun 來自: 60.248.32.130 (04/12 23:36)
→ diabloevagto:static 也是要遵守scope 04/13 00:13
推 tsamarfi:十分感謝,找了一下static的資料,好難懂@@" 04/13 01:15
推 purpose:函數內的 static 就只是一個全域變數而已..只不過 scope 04/13 01:26
→ purpose:跟一般的區域變數一樣,像上面就是鎖在 if(1) {} 大括號內 04/13 01:26
→ MOONRAKER:第一題是題目要考fall-through,不是考switch用法 04/13 01:31
→ MOONRAKER:你叫他加break修改題目還挺鮮的。 04/13 01:31
推 hakman:第二題忘了! 了 查一下! 跟 > 的優先度吧... 04/13 01:42
→ timestoprun:QQ我已經看整天程式,腦袋跑低功率模式,原來那是題目 04/13 01:45
推 xvid:第二題會先執行!a invert bitwise 04/13 01:51
推 tsamarfi:那在a=10前面加個"!"會變什麼?a不就是個常數嗎? 04/13 02:04
→ linotwo:a 是不是常數要看宣告時的型態。 04/13 02:18
→ linotwo:文字任意拼湊不一定合文法,程式語言也是一樣。 04/13 02:20
→ linotwo:先知道自己想做什麼,再用程式語言描述出來。 04/13 02:21
→ scwg: ! 會先做沒錯, 不過 ! 是 logical not, 不是 bitwise not 04/13 02:21
推 a23633302:第二題好像真的是假 04/13 02:34
→ a23633302:a=10 !(10)=0 →因為非TRUE即FALSE(0) 04/13 02:36
→ tjjh89017:bitwisw not 應該是"~" 不過似乎只是用unsigned 04/13 14:28
推 EdisonX:真是佛心噲 ~ 推一個 04/14 12:30