[轉錄][閒聊] facebook上的C語言測驗

看板SFFamily作者 (迷惑失道)時間14年前 (2009/08/13 22:14), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串1/1
※ [本文轉錄自 C_and_CPP 看板] 作者: runtime (LLLLL) 看板: C_and_CPP 標題: [閒聊] facebook上的C語言測驗 時間: Thu Aug 13 00:25:39 2009 http://apps.facebook.com/mentaltest-zmacgno/ facebook上的C語言測驗 試試看自己的程度吧 有一些題目還不賴 沒有臉書的 看以下 ==全部copy過來== 1. void *i = 3; int j = 7; printf("%d\n",i+j); 請問結果為何者? a 跑出一連串亂碼的數字 b 無法編譯此程式 c 10 d 7 2. int *num; 請問要如何把 num 當作陣列使用(num[index]), 並初始化大小為10, 再塞入0~9的數字? a 這是指標 無法這樣使用 b num=(int[10]){0,1,2,3,4,5,6,7,8,9}; c *(num+0)=0;*(num+1)=1...*(num+9)=9;以此類推 d num[0]=0;num[1]=1;....num[9]=9;以此類推 3. 以下這段程式碼會跑出什麼結果?? int i=100;char str[20]="%d";printf(str,i); a 100 b 編譯階段錯誤 c 執行階段錯誤 d %d100 4. 如果老師今天要你使要迴圈來寫一支聖誕樹程式 請問最少需要使用幾個迴圈? a 3個以上 b 不需要迴圈 c 2個 d 1個 5. for(;;); 執行後會有什麼結果 a 沒有功能的語法 b 無限迴圈 c 直接結束 d 沒有這種寫法 6. i=5;printf("%d",i++); 這段語法執行後會有下列何者答案? a %d b 6 c 7 d 5 7. i=7;j=44;i^=j^=i^=j; 請問執行以上程式後 i 為多少? j 為多少? (已修正) a i=44 j=7 b C語言無法這樣寫 c 程式無法編譯 d i=7 j=44 8. 任何程式語言的第一支程式通常叫什麼 a Hello C b Hello World c How are you d Hello 9. int num[10]={8,3,4,7,5,1,2,9,0,6}; 若要取得 7 這個數字, 以下何者語法正確? a *(num+3) b *(num+4) c num[4] d num[7] ==以下是正確解答== cbadbdaba -- ███◣ █◣◥◣ █◣◥◣ ███◣ ██◣ ███◣ ███◣ ████ █ █ █◣█ ███ ██ ███ ███ █▆█ ███ ▉▉█ █▆▆ █◥◣ ███ █◥█ ██ █▆▆ 小小器材控的成長日記 450D 50mm F1.8II 24-70 F2.8L 430EXII (持續增加中) -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 163.22.18.76

08/13 00:37,
佩服~佩服~你是C語言中的高手阿!!除了C語言的一般使用之外
08/13 00:37

08/13 00:48,
覺得facebook的很多題目都沒什麼意思
08/13 00:48

08/13 01:07,
當然...
08/13 01:07

08/13 01:08,
這題目也太容易做到高手 = =
08/13 01:08

08/13 01:13,
看來該註冊臉書了, 我被輸入帳密登入這題卡住了....XD
08/13 01:13

08/13 01:22,
>>> C語言高手
08/13 01:22

08/13 01:26,
原來C語言可以用匿名陣列
08/13 01:26

08/13 01:28,
第7題沒問題嗎@@?
08/13 01:28

08/13 01:29,
答案是正解嗎???
08/13 01:29

08/13 01:30,
我用Dev C跑的 不確定喔
08/13 01:30

08/13 01:32,
第七題是很有名的神碼啊
08/13 01:32
第七題...我好像run錯了 題目有多出一個^=i 所以第七題應該是 3 4 哇 沒答案耶

08/13 01:32,
第一題?void*+int compiler應該會報 他不知道要跳幾個By
08/13 01:32
咦 Dev C 跑得出來是 10 ※ 編輯: runtime 來自: 163.22.18.76 (08/13 01:36)

08/13 01:35,
置底文剛好有解答 XD
08/13 01:35

08/13 01:36,
第四題不用迴圈當然也可以寫啊
08/13 01:36

08/13 01:38,
不過題目有說"要用迴圈" 所以應該是1個
08/13 01:38

08/13 01:40,
Q1: 正在初始化' : 無法由 'int' 轉換為 'void *'
08/13 01:40

08/13 01:40,
Q1: error C2036: 'void *' : 未知的大小
08/13 01:40

08/13 01:41,
你跑VC2008 免費版的 試試看吧
08/13 01:41

08/13 01:43,
第二題解答好神!!
08/13 01:43

08/13 01:48,
這個問卷是不是錯很多也是高手XD?
08/13 01:48

08/13 01:55,
這只是一般的C語言觀念測驗
08/13 01:55

08/13 01:55,
要測驗高手應該10題都是pointer的題目 XD
08/13 01:55

08/13 01:59,
~~~~~9題
08/13 01:59

08/13 02:06,
void*那題C會過C++不會
08/13 02:06

08/13 02:42,
樓上大大可以詳細解說第一題嗎 @@
08/13 02:42

08/13 03:15,
.....第八題我看不出來跟c語言有什麼關係..........
08/13 03:15

08/13 03:22,
第2題解答是b?這是C++才能這樣吧!C語言的話答案是a吧!?
08/13 03:22

08/13 03:25,
不然就是要自己malloc/calloc記憶體,然後如答案d中的方
08/13 03:25

08/13 03:26,
式設定值到array的每個element(num[0] ~ num[9]).
08/13 03:26

08/13 03:28,
正好相反 c++才不能這樣用
08/13 03:28

08/13 05:19,
我怎麼覺得第二題沒有答案? 至少就我所知 {1,2,3} 這種東西
08/13 05:19

08/13 05:20,
是只能寫在初始化列上面的...
08/13 05:20

08/13 06:09,
c99新增的compound literal
08/13 06:09


08/13 07:20,
那不是宣告也不是type cast
08/13 07:20

08/13 07:37,
第八題..出題者真腦殘
08/13 07:37

08/13 08:22,
太甘心了, 等等上班吃早餐的時候來做一下....:)
08/13 08:22

08/13 08:58,
第二題 沒看過這種用法
08/13 08:58

08/13 09:21,
錯了一大半呢, 問題是我怎麼覺得這題目還滿鳥的....
08/13 09:21

08/13 09:27,
第一題編不過的要改存檔為.c或強迫用C compiler來編.
08/13 09:27

08/13 09:27,
C++不做適當type cast那樣應該會error @_@"
08/13 09:27

08/13 09:28,
另外, 第七題無解, 答案是43 7; 要ij交換的話....
08/13 09:28

08/13 09:28,
是i^=j^=i^=j; 它多了一次^=i 本來還以為是陷阱....
08/13 09:28

08/13 09:31,
然後推第八題腦殘, 不過第二題有趣:)
08/13 09:31

08/13 11:33,
第1題竟然可這樣寫 是compiler再搞鬼嘛?
08/13 11:33

08/13 12:23,
應該是C語言本來就對異型assign檢查比較不嚴格吧??
08/13 12:23

08/13 12:25,
第一題感覺還好 ... pointer本來就跟long一樣 XD
08/13 12:25

08/13 13:05,
小弟我還以為第一題陷阱在void*, pointer和long也不算一
08/13 13:05

08/13 13:05,
樣, 樓上要不要試試把void*換成int*再看看結果:)
08/13 13:05

08/13 13:41,
我想問第一題i+j為啥會說 error C2036: 'void *' :未知的大小
08/13 13:41

08/13 13:43,
所以說第二題 vc還沒有辦法編譯過嚕?
08/13 13:43

08/13 13:46,
如果第二題那樣寫可以過 他是配置在heap區嘛?跟new一樣?
08/13 13:46

08/13 13:55,
第一題我推過了, 用C compiler不要用C++, 方法看推文= =
08/13 13:55

08/13 13:56,
第二題那個應該不是new吧....
08/13 13:56

08/13 13:57,
啊我看錯了, 樓上第一題不要理我....<(_ _)>
08/13 13:57

08/13 13:58,
其實有同樣的問題, void* 做step的時候為什麼算1 byte.
08/13 13:58

08/13 14:07,
第一題gcc編譯不過耶
08/13 14:07

08/13 14:12,
V大說作step是指什麼?
08/13 14:12

08/13 14:15,
就是pointer做+n, -n之類的動作, 隨手打的可能用錯詞彙
08/13 14:15

08/13 14:15,
了吧Orz
08/13 14:15

08/13 14:55,
不過void*我無法對他作++ --耶 是因為void 沒有規定是幾byte?
08/13 14:55

08/13 15:29,
試了一下 ... 用int*他回我 31耶 @@a why?
08/13 15:29

08/13 15:32,
加了轉型(int)i+j 才會對 orz
08/13 15:32

08/13 15:35,
4+7 *4=31 *4是因為int是4byte 一次跳4個
08/13 15:35

08/13 15:35,
打錯是3+4*7=31
08/13 15:35

08/13 15:38,
oops 大概有點頭緒了,因為左邊的型態是pointer
08/13 15:38

08/13 15:39,
右邊的型態是int,這樣有點像 *(i+j) 然後不要做deref
08/13 15:39

08/13 15:39,
只是單純的計算陣列地址 XD
08/13 15:39

08/13 16:04,
不懂void *i = 3做了什麼, 可以讓printf("%d", i)為3
08/13 16:04

08/13 16:11,
void *i=3; // 翻譯, 讓指標i指到記憶體位置0x00000003
08/13 16:11

08/13 16:12,
基本上就根void *i = NULL; 做得事情差不多....
08/13 16:12

08/13 16:12,
i=NULL時你print變數i, 它就把i目前的值(即指到的位置)
08/13 16:12

08/13 16:13,
印出來給你看, 所以print出來是3; 就好像指到NULL時印
08/13 16:13

08/13 16:14,
出來是0一樣; 記憶體位址不過用一個數字代表/記錄而已:)
08/13 16:14

08/13 16:17,
原來如此, 謝謝V大的回覆
08/13 16:17

08/13 16:23,
第一題題目有錯
08/13 16:23
※ 編輯: runtime 來自: 163.22.18.76 (08/13 16:28)

08/13 16:34,
第七題update了....Orz
08/13 16:34

08/13 16:35,
第七題不是沒答案嘛
08/13 16:35

08/13 17:21,
題目修正後就有了, 答應a :)
08/13 17:21

08/13 21:49,
沒有出 pointer pointer 跟 func pointer XD
08/13 21:49
-- 妳憑什麼愛我...? 又憑什麼要走...! -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 58.114.204.165
文章代碼(AID): #1AX1-lZQ (SFFamily)