看板 C_and_CPP 關於我們 聯絡資訊
名為程式語言 但個人覺得與C++比較相關 因此就PO上來給大家練習 理論上這張考題應該是滿順手的 1.物件導向程式設計的內涵有繼承、函式多型與封裝,請分別敘述三個項目 之要義與優點。 2.以下是C語言程式片段 int sub1( int x, int* y) { x += 5; *y *= 2; return *y + x; } int sub2( int* x, int y) { *x += 5; y *= 2; return *x + y; } void main() { int a = 3, b = 5, c, d; c = sub1( a, &b) + sub2( &a, b); d = sub2( &a, b) + sub1( a, &b); } 程式執行後,a, b, c, d值各為多少? 3. 若一個字占用一個位元組(byte),以下程式p的位址是0x71F2D,陣列t的 起始位址是0x31C51C,則程式執行結果為何? void main() { char t[7] = { 'd', 'r', 'a', 'g', 'o', 'n', '\0' }; char* p; p = t; p++; print( "%X\n", &p ); print( "%c\n", *p ); (*p)++; print( "%c\n", t[1] ); print( "%X\n", &t[3] ); } 4.(一)何謂 case sensitive?何謂 recursive call?大量的使用 recursive call 可能造成甚麼問題? (二)C++ 語言是否為 case sensitive 語言?C++ 語言是否允許 recursive call? (三)程式語言是以何種資料結構維護函式呼叫的順序?每一個啟動紀錄 (activation record)所記錄的兩個主要內容為何? 5.請以C++語言定義以下類別 (一)類別名稱stu,包含一個整數id,一個整數grade(以上成員存取層次為public)。 (二)宣告依據stu類別產的的物件陣列student;此陣列唯一維陣列,有30個元素。 (三)寫出將student陣列中每個元素的grade加5的程式片段。 -- 大家看看吧~ 說不定這個有比大學程設期末考簡單~ XDD -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 61.59.238.174
xatier:void main ().... 已經不想在戰這個了 07/18 19:47
glennchen:考試而已沒關係吧 07/18 19:47
xatier:http://ppt.cc/DijC 放上原題本 07/18 19:50
firejox:3. 71F2D 'r' 's' 31C51F 07/18 19:54
yoco315:100 分 XD 07/18 20:34
firejox:第3題不會輸出0X呀 07/18 20:41
lsc36:第二題是undefined behavior嗎... 07/18 20:42
firejox:第五題擬答 dtatic 是啥... 07/18 20:45
angleevil:static<--? 07/18 20:48
windincloud:那個解答有問題呀~ 第五題一看也知道~不會這樣宣告 07/18 20:50
YoursEver:解答是錯的...那解答害人不淺吧... =_= 07/18 21:02
stonehomelaa:第五題答非所問呀 07/18 21:41
stonehomelaa:的確比大一計概考試簡單 07/18 21:44
NCKU:第2題 剛執行結果是 b=20 答案錯? 07/18 23:12
jimmy75615:樓上+1 我算出來b也是等於20,版上有人一樣嗎? 07/18 23:27
windincloud:b一直都是20呀~ 因為做了兩次sub1 => b=5*2*2 = 20 07/18 23:41
Favonia:順序是未指定,代表哪個順序都可以,不是未定義(可發核彈 07/18 23:41
windincloud:還有 那個答案真的僅供參考 有沒有人要PO答案? 07/18 23:42
Favonia:沒有指定實作的話單就標準上討論是這樣子。 07/18 23:42
windincloud:都指定是C了 還會有順序性問題? 07/18 23:42
Favonia:C 跟 C++ 的標準都沒有指定加法運算子的運算元計算的順序 07/18 23:45
stonehomelaa:看 http://en.wikipedia.org/wiki/Sequence_point 07/19 00:05
stonehomelaa:第二題那樣沒有問題 07/19 00:06
Favonia:樓上請看 "it is not specified in which order f(), ..." 07/19 00:08
Favonia:就在你講的 Wikipedia 網頁裡面就有寫。 07/19 00:09
windincloud:看來是這樣~ 不過他也說依照一班運算模式是可被計算的 07/19 00:16
windincloud:就暫時當他是向左結合性吧~ :P (考試忘記強調向左結合 07/19 00:17
Favonia:另外並不是所有語言都用 call stack 來維護「呼叫的順序」 07/19 00:18
Favonia:還有第三題的 %X 也很有問題。那不是用來印指標的。 07/19 00:21
Favonia:@windincloud 這樣就不是一般C語言啦,而是某個特定實作xD 07/19 00:22
Favonia:(感覺題目可以吐槽的地方好多)(懶) 07/19 00:23
stonehomelaa:我知道呀 不過這裡sub1跟sub2哪個先執行跟答案無關吧 07/19 00:28
Favonia:我想有關。c 最後的值可以是 46 或是 41, 看哪邊先算。 07/19 00:42
VictorTom:所以 2. 會變成兩種順序的答案都可以/可能是吧....@_@" 07/19 00:59
jimmy75615:第二題 實際用電腦跑的結果 b=20 07/19 01:10
firejox:@Favoina:你拿%X印指標是可以啦... 07/19 01:40
firejox:有時為了直觀 甚至會用不同的型態印出 07/19 01:41
Favonia:@firejox %X 是用來印 unsigned int, 指標可以轉 void* 用 07/19 02:02
Favonia:%p印出來,不過格式實作自己定xD(忘記有哪些不用自己轉型) 07/19 02:04
Favonia:我想重點是 unsigned int 不一定裝得下指標轉過來的值... 07/19 02:04
Favonia:我想到有另一個方法是轉型成 uintptr_t 用 PRIXPTR 印 :P 07/19 02:10
firejox:我看到%p說明 後面寫as if by %#xor%#lx XD 07/19 02:26
Favonia:@firejox 那個只是方便了解某實作的格式啦 xD 我有一台電 07/19 02:47
Favonia:腦兩個就不一樣啊 xD 07/19 02:47
Favonia:補一個可能的吐槽點:我印象中只有 '0'~'9' 的順序有保證 07/19 10:17
Favonia:如果我沒記錯的話沒有人知道 'r' 下一個是不是 's' 07/19 10:17
firejox:你要賭ascii嗎? 07/19 10:25
Favonia:我確定標準沒有規定要用 ASCII xD 07/19 10:36
Favonia:(在此感謝 Fenikso 的提醒 xDD) 07/19 11:47
stonehomelaa:阿 第二題真的有問題 國家考試出這種丟臉的題目... 07/19 20:59
angleevil:因為很多出題者從來都不管這未定義行為. 07/19 21:08
stonehomelaa:該說他們對C語言一知半解吧 07/19 21:14
purpose:像第二題這樣的 side effect 蠻多入門書不會提到,所以囉 07/19 21:18
angleevil:如果沒有看精華區和13戒.還有t大之前給的網址+Favonia 07/19 21:40
angleevil:解說,我也不知道這問題 07/19 21:41
Favonia:@windincloud 抱歉我發現我誤讀「左結合」。加法是左結合 07/19 22:01
Favonia:但這裡好像跟結合順序沒有關係?(因為只有一個加法) 07/19 22:01
windincloud:我理解是運算式都優先由左邊處理與結合就是左結合性 07/19 22:44
windincloud:這句有錯嗎? => 太久沒碰了~ 都忘光光了~ XD 07/19 22:44
Favonia:喔喔我知道的左結合是指 a+b+c 意思為 (a+b)+c, 但這跟哪 07/19 23:08
Favonia:邊先算沒有關係 :Q 07/19 23:08