[分享] 100年高考三等 程式語言

看板C_and_CPP作者 (愛情已死枯如槁灰)時間13年前 (2011/07/18 19:17), 編輯推噓7(8152)
留言61則, 14人參與, 最新討論串1/1
名為程式語言 但個人覺得與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

07/18 19:47, , 1F
void main ().... 已經不想在戰這個了
07/18 19:47, 1F

07/18 19:47, , 2F
考試而已沒關係吧
07/18 19:47, 2F

07/18 19:50, , 3F
http://ppt.cc/DijC 放上原題本
07/18 19:50, 3F

07/18 19:54, , 4F
3. 71F2D 'r' 's' 31C51F
07/18 19:54, 4F

07/18 20:34, , 5F
100 分 XD
07/18 20:34, 5F

07/18 20:41, , 6F
第3題不會輸出0X呀
07/18 20:41, 6F

07/18 20:42, , 7F
第二題是undefined behavior嗎...
07/18 20:42, 7F

07/18 20:45, , 8F
第五題擬答 dtatic 是啥...
07/18 20:45, 8F

07/18 20:48, , 9F
static<--?
07/18 20:48, 9F

07/18 20:50, , 10F
那個解答有問題呀~ 第五題一看也知道~不會這樣宣告
07/18 20:50, 10F

07/18 21:02, , 11F
解答是錯的...那解答害人不淺吧... =_=
07/18 21:02, 11F

07/18 21:41, , 12F
第五題答非所問呀
07/18 21:41, 12F

07/18 21:44, , 13F
的確比大一計概考試簡單
07/18 21:44, 13F

07/18 23:12, , 14F
第2題 剛執行結果是 b=20 答案錯?
07/18 23:12, 14F

07/18 23:27, , 15F
樓上+1 我算出來b也是等於20,版上有人一樣嗎?
07/18 23:27, 15F

07/18 23:41, , 16F
b一直都是20呀~ 因為做了兩次sub1 => b=5*2*2 = 20
07/18 23:41, 16F

07/18 23:41, , 17F
順序是未指定,代表哪個順序都可以,不是未定義(可發核彈
07/18 23:41, 17F

07/18 23:42, , 18F
還有 那個答案真的僅供參考 有沒有人要PO答案?
07/18 23:42, 18F

07/18 23:42, , 19F
沒有指定實作的話單就標準上討論是這樣子。
07/18 23:42, 19F

07/18 23:42, , 20F
都指定是C了 還會有順序性問題?
07/18 23:42, 20F

07/18 23:45, , 21F
C 跟 C++ 的標準都沒有指定加法運算子的運算元計算的順序
07/18 23:45, 21F

07/19 00:05, , 22F

07/19 00:06, , 23F
第二題那樣沒有問題
07/19 00:06, 23F

07/19 00:08, , 24F
樓上請看 "it is not specified in which order f(), ..."
07/19 00:08, 24F

07/19 00:09, , 25F
就在你講的 Wikipedia 網頁裡面就有寫。
07/19 00:09, 25F

07/19 00:16, , 26F
看來是這樣~ 不過他也說依照一班運算模式是可被計算的
07/19 00:16, 26F

07/19 00:17, , 27F
就暫時當他是向左結合性吧~ :P (考試忘記強調向左結合
07/19 00:17, 27F

07/19 00:18, , 28F
另外並不是所有語言都用 call stack 來維護「呼叫的順序」
07/19 00:18, 28F

07/19 00:21, , 29F
還有第三題的 %X 也很有問題。那不是用來印指標的。
07/19 00:21, 29F

07/19 00:22, , 30F
@windincloud 這樣就不是一般C語言啦,而是某個特定實作xD
07/19 00:22, 30F

07/19 00:23, , 31F
(感覺題目可以吐槽的地方好多)(懶)
07/19 00:23, 31F

07/19 00:28, , 32F
我知道呀 不過這裡sub1跟sub2哪個先執行跟答案無關吧
07/19 00:28, 32F

07/19 00:42, , 33F
我想有關。c 最後的值可以是 46 或是 41, 看哪邊先算。
07/19 00:42, 33F

07/19 00:59, , 34F
所以 2. 會變成兩種順序的答案都可以/可能是吧....@_@"
07/19 00:59, 34F

07/19 01:10, , 35F
第二題 實際用電腦跑的結果 b=20
07/19 01:10, 35F

07/19 01:40, , 36F
@Favoina:你拿%X印指標是可以啦...
07/19 01:40, 36F

07/19 01:41, , 37F
有時為了直觀 甚至會用不同的型態印出
07/19 01:41, 37F

07/19 02:02, , 38F
@firejox %X 是用來印 unsigned int, 指標可以轉 void* 用
07/19 02:02, 38F

07/19 02:04, , 39F
%p印出來,不過格式實作自己定xD(忘記有哪些不用自己轉型)
07/19 02:04, 39F

07/19 02:04, , 40F
我想重點是 unsigned int 不一定裝得下指標轉過來的值...
07/19 02:04, 40F

07/19 02:10, , 41F
我想到有另一個方法是轉型成 uintptr_t 用 PRIXPTR 印 :P
07/19 02:10, 41F

07/19 02:26, , 42F
我看到%p說明 後面寫as if by %#xor%#lx XD
07/19 02:26, 42F

07/19 02:47, , 43F
@firejox 那個只是方便了解某實作的格式啦 xD 我有一台電
07/19 02:47, 43F

07/19 02:47, , 44F
腦兩個就不一樣啊 xD
07/19 02:47, 44F

07/19 10:17, , 45F
補一個可能的吐槽點:我印象中只有 '0'~'9' 的順序有保證
07/19 10:17, 45F

07/19 10:17, , 46F
如果我沒記錯的話沒有人知道 'r' 下一個是不是 's'
07/19 10:17, 46F

07/19 10:25, , 47F
你要賭ascii嗎?
07/19 10:25, 47F

07/19 10:36, , 48F
我確定標準沒有規定要用 ASCII xD
07/19 10:36, 48F

07/19 11:47, , 49F
(在此感謝 Fenikso 的提醒 xDD)
07/19 11:47, 49F

07/19 20:59, , 50F
阿 第二題真的有問題 國家考試出這種丟臉的題目...
07/19 20:59, 50F

07/19 21:08, , 51F
因為很多出題者從來都不管這未定義行為.
07/19 21:08, 51F

07/19 21:14, , 52F
該說他們對C語言一知半解吧
07/19 21:14, 52F

07/19 21:18, , 53F
像第二題這樣的 side effect 蠻多入門書不會提到,所以囉
07/19 21:18, 53F

07/19 21:40, , 54F
如果沒有看精華區和13戒.還有t大之前給的網址+Favonia
07/19 21:40, 54F

07/19 21:41, , 55F
解說,我也不知道這問題
07/19 21:41, 55F

07/19 22:01, , 56F
@windincloud 抱歉我發現我誤讀「左結合」。加法是左結合
07/19 22:01, 56F

07/19 22:01, , 57F
但這裡好像跟結合順序沒有關係?(因為只有一個加法)
07/19 22:01, 57F

07/19 22:44, , 58F
我理解是運算式都優先由左邊處理與結合就是左結合性
07/19 22:44, 58F

07/19 22:44, , 59F
這句有錯嗎? => 太久沒碰了~ 都忘光光了~ XD
07/19 22:44, 59F

07/19 23:08, , 60F
喔喔我知道的左結合是指 a+b+c 意思為 (a+b)+c, 但這跟哪
07/19 23:08, 60F

07/19 23:08, , 61F
邊先算沒有關係 :Q
07/19 23:08, 61F
文章代碼(AID): #1E91P3Ox (C_and_CPP)