釋出
2009年7月26日(最後更新:2009年7月26日)

初學者練習

評分:4.3/5 (276票)
*****
原帖來自 Blitz Coder ( http://www.cplusplus.com/member/Blitz_Coder/ ) 在 http://www.cplusplus.com/forum/beginner/12969/ 他讓我重新格式化,所以這是它的樣子

_________________________________________________________________________________

來自朋友在我開始學習程式設計時發給我的舊電子郵件

建議學習順序
• 變數、資料型別和數值運算子
• 基本輸入/輸出
• 邏輯(if 語句、switch 語句)
• 迴圈(for、while、do-while)
• 陣列
• 偽隨機數生成
• 字串和字串函式
• 函式
• 結構/類
• 列舉資料
• 檔案輸入/輸出
• 指標
• 排序
• 連結串列
• 高階類
• 遞迴


_________________________________________________________________________________
評分程式
需要: 變數、資料型別和數值運算子
基本輸入/輸出
邏輯(if 語句、switch 語句)

編寫一個程式,允許使用者輸入程式設計課的成績(0-100)。
如果使用者成績為 100,則通知使用者他們獲得了滿分。

★ 修改程式,如果使用者成績為 90-100,則通知使用者他們得了 A

★★ 修改程式,使其通知使用者他們的字母等級
0-59 F 60-69 D 70-79 C 80-89 B 90-100 A


_________________________________________________________________________________
汽水機
需要: 變數、資料型別和數值運算子
基本輸入/輸出
邏輯(if 語句、switch 語句)

編寫一個程式,向用戶展示您最喜歡的 5 種飲料(可樂、水、雪碧、……、隨便)。
然後允許使用者透過輸入數字 1-5 來選擇飲料。
輸出使用者選擇的飲料。

★ 如果您的程式使用 if 語句而不是 switch 語句,請修改它以使用 switch 語句。
如果您的程式使用 switch 語句,請修改它以使用 if/else-if 語句。

★★ 修改程式,如果使用者輸入的選擇不是 1-5,則輸出“錯誤。選擇無效,退還您的錢。”


_________________________________________________________________________________
while(user == gullible)
需要: 變數、資料型別和數值運算子
基本輸入/輸出
邏輯(if 語句、switch 語句)
迴圈(for、while、do-while)

編寫一個程式,不斷要求使用者輸入除 5 以外的任何數字,直到使用者輸入數字 5。
然後告訴使用者“嘿!你不應該輸入 5!”並退出程式。

★ 修改程式,如果在 10 次迭代後用戶仍未輸入 5,則告訴使用者“哇,你比我更有耐心,你贏了。”並退出。

★★ 修改程式,要求使用者輸入除他們被要求輸入的次數之外的任何數字。(即第一次迭代時“請輸入除 0 以外的任何數字”,第二次迭代時“請輸入除 1 以外的任何數字”,依此類推。程式必須相應地執行,在使用者輸入被要求不要輸入的數字時退出。)


_________________________________________________________________________________
煎餅狂人
需要: 變數、資料型別和數值運算子
基本輸入/輸出
邏輯(if 語句、switch 語句)
迴圈(for、while、do-while)
陣列

編寫一個程式,要求使用者輸入 10 個不同的人(第 1 個人、第 2 個人……第 10 個人)早餐吃的煎餅數量。
輸入資料後,程式必須分析資料並輸出哪個人早餐吃了最多的煎餅。

★ 修改程式,使其還輸出早餐吃的煎餅數量最少的人。

★★★★ 修改程式,使其按照吃煎餅的數量順序輸出所有 10 個人的列表。
例如:
第 4 個人:吃了 10 個煎餅
第 3 個人:吃了 7 個煎餅
第 8 個人:吃了 4 個煎餅
...
第 5 個人:吃了 0 個煎餅


_________________________________________________________________________________
區間查詢
需要: 變數、資料型別和數值運算子
基本輸入/輸出
邏輯(if 語句、switch 語句)
迴圈(for、while、do-while)
偽隨機數

編寫一個程式,計算一個 1 到 100 之間的隨機數。然後程式要求使用者猜測該數字。
如果使用者猜得太高或太低,程式應分別輸出“太高”或“太低”。
程式必須讓使用者繼續猜測,直到使用者正確猜出該數字。

★ 修改程式,輸出使用者猜對正確數字所需的猜測次數。

★★ 修改程式,使其不是使用者猜測計算機想出的數字,而是計算機猜測使用者秘密確定的數字。使用者必須告訴計算機它猜得太高還是太低。

★★★★ 修改程式,使其無論使用者想什麼數字(1-100),計算機都可以在 7 次或更少的猜測中猜出。


_________________________________________________________________________________
井字棋
需要: 變數、資料型別和數值運算子
基本輸入/輸出
邏輯(if 語句、switch 語句)
迴圈(for、while、do-while)
陣列

製作一個兩人井字棋遊戲。

★ 修改程式,使其在有玩家獲勝時宣佈(以及是哪個玩家獲勝,x 或 o)。

★★ 修改程式,使其成為單人遊戲,與計算機對戰(計算機隨機走棋)。

★★★★ 修改程式,使其在玩家即將獲勝時(即,他們在一行中有 2 個 x 棋子,計算機就會用 o 棋子阻擋)。


_________________________________________________________________________________
地下城探險
需要: 變數、資料型別和數值運算子
基本輸入/輸出
邏輯(if 語句、switch 語句)
迴圈(for、while、do-while)
陣列

編寫一個程式,將一個簡單的基於網格的遊戲板輸出到螢幕上,使用數字或字元。
例如:

. . . . . . . . . .
. G . . . . . . . .
. . . . . . T . . .
. . . . . . . . . .
. . . . T . . . . .
. . . . . . T . . .
. . . . . . . . . X



0 0 0 0 0 0 0 0 0 0
0 5 0 0 6 0 0 0 0 0
0 0 0 0 0 0 7 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 7 0 0 0 0 0 0
0 0 0 0 0 0 7 0 0 0
0 0 0 0 0 0 0 0 0 4

允許使用者(在示例中用 G 標記)在每個回合向上、向下、向左或向右移動。如果玩家踩到陷阱則失敗。如果他們到達寶藏“X”則獲勝。

★★ 新增敵人,敵人每個回合會隨機向任何方向移動一次。(敵人就像陷阱一樣,碰到會使玩家失敗)

提示:不要讓玩家移出遊戲板!如果他們移出頂部或底部,您的程式就會崩潰!
(敵人也一樣)
_________________________________________________________________________________
函式趣味
需要: 變數、資料型別和數值運算子
基本輸入/輸出
邏輯(if 語句、switch 語句)
迴圈(for、while、do-while)
函式

編寫一個名為 say_hello() 的函式,它會在螢幕上輸出“Hello”。

★ 修改函式,使其接受一個整數引數,並按照傳遞給它的值列印“hello”的次數。

★★ 再編寫一個函式,它接受兩個整數引數,然後返回一個整數,該整數是這兩個整數的乘積。
(例如,整數 1:4,整數 2:5 返回:20)

★★★ 編寫一個名為 half() 的函式,它接受一個整數引數。該函式必須將它接收到的數字列印到螢幕上,然後程式將其除以二得到一個新數字。如果新數字大於零,該函式則呼叫 half() 函式,並將新數字作為引數傳遞給它。如果數字為零或更小,則函式退出。

使用引數 100 呼叫 half() 函式,螢幕輸出應為:
100
50
25
...
...
1.


_________________________________________________________________________________
字串是你的朋友,直到它們背叛你。
需要: 變數、資料型別和數值運算子
基本輸入/輸出
邏輯(if 語句、switch 語句)
迴圈(for、while、do-while)
函式
字串和字串函式


編寫一個程式,分別要求使用者輸入名字和姓氏。
程式必須然後將使用者的全名儲存在一個字串中並輸出到螢幕上。
例如:
輸入
John
Smith
輸出
John Smith

★ 修改程式,將其中的所有 a、e、i、o、u 替換為字母 z。
例如:
John Smith -> Jzhn Smzth

★★ 修改程式,使其反轉使用者的姓名。
例如:
John Smith -> htimS nhoJ


_________________________________________________________________________________
畢業
需要: 變數、資料型別和數值運算子
基本輸入/輸出
邏輯(if 語句、switch 語句)
迴圈(for、while、do-while)
陣列
偽隨機數生成
字串和字串函式
函式
結構/類
列舉資料
檔案輸入/輸出
指標
排序
連結串列
高階類

編寫一個程式,建立一個兔子物件的連結串列。
每個兔子物件必須具有
性別:雄性、雌性(建立時隨機 50/50)
顏色:白色、棕色、黑色、斑點
年齡:0-10(歲)
名字:建立時從兔子名字列表中隨機選擇。
放射性突變吸血鬼兔子:true/false(在兔子建立時決定,2% 機率為 true)

在程式初始化時,必須建立 5 只兔子並賦予隨機顏色。
此後的每個回合,兔子都會長一歲。
只要列表中至少有一隻年齡在 2 歲或以上的雄性兔子,對於列表中每隻年齡在 2 歲或以上的雌性兔子;
每個回合都會建立一個新的兔子。(例如,如果有 1 只成年雄兔和 3 只成年雌兔,每個回合就會出生三隻新兔子)
新出生的兔子應與它們的母親顏色相同。
如果兔子的年齡超過 10 歲,它就會死亡。
如果出生了放射性突變吸血鬼兔子,那麼每個回合它會將一個非放射性兔子變成放射性吸血鬼兔子。
(如果有兩隻放射性突變吸血鬼兔子,則每回合會轉化兩隻兔子,以此類推……)
放射性吸血鬼兔子不參與正常繁殖,也不算作成年兔子。
放射性吸血鬼兔子要到 50 歲才會死亡。
程式應在每個回合打印出所有兔子的列表以及所有兔子的詳細資訊,並按年齡排序。
程式還應輸出每個回合的事件,例如:
“兔子 Thumper 誕生了!”
“兔子 Fufu 誕生了!”
“放射性突變吸血鬼兔子 Darth Maul 誕生了!”
“兔子 Julius Caesar 死亡了!”
程式應將所有螢幕輸出寫入檔案。
當所有兔子都死亡時,程式終止。
如果兔子數量超過 1000,則會發生食物短缺,導致一半的兔子(隨機選擇)死亡。

★ 修改程式以即時執行,每個回合持續 2 秒,每次公告之間暫停一秒。

★★ 允許使用者按“k”鍵發起一次大規模兔子清理!導致一半的兔子(隨機選擇)被殺死。

★★★★ 修改程式,將兔子放置在 80x80 的網格中。讓兔子每個回合隨機移動一個空格。
用 m 標記幼年雄性,用 M 標記成年雄性,
用 f 標記幼年雌性,用 F 標記成年雌性,
用 X 標記放射性突變吸血鬼兔子。

修改程式,使放射性突變吸血鬼兔子只能轉化回合結束時位於相鄰方格中的兔子。
修改程式,使新生的兔子在母親兔子旁邊的空隨機方格中出生。(如果沒有空方格,則嬰兒兔子不會出生)

★★★★★ 修改程式,使其將每個回合儲存到檔案中,並能以加速播放所有後續回合。