1、課程大綱
2、第1部份第10課: 練習題+習作
3、第2部份第1課預告: 模塊化編程
我們的課程分為4大部份,每個部份結束后都會有練習題,并會公布答案。還會帶大家用C語言編寫3個游戲。
C語言編程基礎知識
甚么是編程?
工欲善其事,必先利其器
你的第1個程序
變量的世界
運算那點事
條件表達式
循環語句
實戰:第1個C語言小游戲
函數
練習題
習作:完善第1個C語言小游戲
模塊化編程
進擊的指針,C語言王牌
數組
字符串
預處理
創建你自己的變量類型
文件讀寫
動態分配
實戰:“懸掛小人”游戲
安全的文本輸入
練習題
習作:用自己的語言解釋指針
安裝SDL
創建窗口和畫布
顯示圖象
事件處理
實戰:“超級瑪麗推箱子”游戲
掌握時間的使用
用SDL_ttf編輯文字
用FMOD控制聲音
實戰:可視化的聲音譜線
練習題
鏈表
堆,棧和隊列
哈希表
練習題
第1部份課程已全部結束,在開始第2部份的探索之旅之前,我們必須鞏固好第1部份學到的知識
所以為大家準備了1些練習題: 15道選擇題+1個小小的習作
15道題目(單選)在本課最后有附答案,但是希望大家先做完再對答案。
練習題
負責將源代碼轉換成2進制碼的程序叫甚么?
A. 揚聲器
B. 編譯器
C. 轉碼器
下面哪個不是IDE(集成開發環境)?
A. NotePad++
B. Visual Studio
C. Code::Blocks
D. Xcode
C語言將哪個值視為布爾值的false(假)?
A. 1
B. 0
C. ⑴
D. ⑵
下面這段代碼中的 return 0; 意味著甚么?
#include <stdio.h>
int main()
{
printf("Hello world! ");
return 0;
}
A. 程序沒有履行操作
B. 程序沒有正常運行
C. 程序正常運行
以下哪個是C語言中的換行符?
A.
B.
C. 按1下鍵盤上的回車鍵就夠了
如果我有1個變量bankAccount(銀行賬戶),類型是long,其值為6500000(土豪啊),那下面的代碼會輸出甚么?
printf("您的銀行賬戶上有 %ld 元 ", bankAccount);
A. 您的銀行賬戶上有 %ld 元
B. 您的銀行賬戶上有 6500000 元
C. 您的銀行賬戶上有 ld 元, bankAccount
以下哪種存儲器是在電腦關閉以后不會被清空的?
A. 寄存器
B. 高速緩存
C. 內存
D. 硬盤
經過這個操作,result變量的值是多少?
result = (8 / 3) - 2;
A. ⑵
B. 0
C. 1
D. 2
以下switch語句的問題是甚么?
switch (variable)
{
case 5:
printf("Hello");
case 12:
printf("你好");
default:
printf("再見");
}
A. 少了break語句
B. 在switch的最后的大括號后面少了1個分號
C. 對每個case下面的指令需要用1個大括號括起來
D. default應當寫成case default
用哪個for循環可以在屏幕上顯示以下信息?
Line n°1
Line n°3
Line n°5
Line n°7
A. for (count = 1 ; count < 9 ; count += 2)
B. for (count = 1 ; count <= 7 ; count++)
C. for (count = 0 ; count < 9 ; count += 2)
D. for (count = 1 ; count < 8 ; count++)
以下代碼會顯示多少次“Hello”?
int count = 14;
while (count < 15)
{
printf("Hello ");
}
A. 0
B. 1
C. 14
D. 15
E. 這是1個無窮循環
在哪一種情況下return語句不是必須的?
A. 函數沒有參數
B. 函數的類型是void
C. 函數需要返回0值
甚么是函數的參數?
A. 標明函數的名字
B. 標明函數的返回值
C. 我們傳給函數使它用來工作的變量
以下函數存在甚么問題?
int square(int number)
{
int result = 0;
result = number * number;
}
A. 函數沒有返回任何值
B. 函數運行不了,由于我們在某處忘了1個分號
C. 完全沒有問題
在1個程序中可以包括多少個函數?
A. 只有1個,就是main函數
B. 最多100個
C. 最多1024個
D. 沒有限制
練習題答案
B. 編譯器
A. NotePad++
B. 0
C. 程序正常運行
B.
B. 您的銀行賬戶上有 6500000 元
D. 硬盤
B. 0
A. 少了break語句
A. for (count = 1 ; count < 9 ; count += 2)
E. 這是1個無窮循環
B. 函數的類型是void
C. 我們傳給函數使它用來工作的變量
A. 函數沒有返回任何值
D. 沒有限制
題目都不難,認真溫習1下肯定能得高分,你都答對了嗎?
有甚么疑問可以在公眾號里直接留言發問,或聯系小編,謝謝!
習作: 完善“或多或少”這個小游戲
前面1個我們編寫了第1個C語言小游戲,雖然很簡單,沒有好看的圖形界面(以后會有的,牛奶和面包都會有的),但是也能夠小小自豪1下!
現在我們重新給出它的源代碼:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main (int argc, char** argv)
{
int mysteryNumber = 0, guessNumber = 0;
const int MAX = 100, MIN = 1;
// 生成隨機數
srand(time(NULL));
mysteryNumber = (rand() % (MAX - MIN + 1)) + MIN;
/* 程序的循環部份, 如果用戶沒猜中數字,就1直進行循環 */
do
{
// 要求用戶輸入所猜數字
printf("這個數字是甚么 ? ");
scanf("%d", &guessNumber);
// 比較用戶輸入的數字和神秘數字
if (mysteryNumber > guessNumber)
printf("猜小了 ! ");
else if (mysteryNumber < guessNumber)
printf("猜大了 ! ");
else
printf ("太棒了,你猜到了這個神秘數字 !! ");
} while (guessNumber != mysteryNumber);
return 0;
}
程序的解釋(從上到下的順序):
預處理指令:就是開頭的那3行,以#開始,include是英語“包括,引入”的意思。所以表示引入甚么庫。之前我已給大家這部份的代碼了,所以如果你的程序運行起來出錯是在這部份的話,那你也是夠夠的了 :P
變 量:這個游戲中,不需要太多變量,只有1個用于記錄用戶輸入的數字的變量guessNumber,和1個電腦隨機抽取的數字mysteryNumber。 同時也定義了兩個常量(const變量,其實叫只讀變量比較準確)MAX和MIN,值分別是100和1。這樣定義的好處是,如果你后面要改這兩個數值,會 很方便,直接改這1行的兩個值就行了。如果沒有用MAX和MIN而是在程序里每個地方寫100和1的話,那如果以后要改數值,工作量就大了。
隨機數:srand和rand那兩行,產生在1和100之間的1個隨機數,值賦給mysteryNumber。
循 環:我選擇了用do...while循環。理論上1個while循環也能夠做到,但我覺得這里用do...while可能更合邏輯。為何呢?還記得 do...while循環的特點嗎?就是循環體里的指令最少會履行1次,不像while循環可能1次也不履行。這里我們最少要讓用戶輸入1次數字,不可能 用戶1次也不輸入就猜到了數字。
在每次進入循環體里運行時,我們都要求用戶輸入1個數字,并且把這個數字的值賦給guessNumber變量,接下來就比較guessNumber和mysteryNumber(需要猜的數字)的大小:
mysteryNumber大于guessNumber,那末輸出“猜小了”,繼續循環
mysteryNumber小于guessNumber,那末輸出“猜大了”,繼續循環
mysteryNumber等于guessNumber,也就是else語句的情況,即是說我們猜對了,輸出“太棒了,你猜到了這個神秘數字!”,結束循環
循環也需要1個條件,我們給出的條件是:只要猜的數字和神秘數字不1樣,循環就繼續。
現在這個游戲還是很基礎很簡單的,但是可以有以下的改進方案:
增加1個記錄步數的計數器,在你猜對的時候輸出:“太棒了,你用**步猜到了這個神秘數字!”
目 前的程序只進行1輪就結束了,如果玩家不過癮,還想繼續下1輪怎樣辦呢?可以加入1個問題:“你還想繼續玩嗎?”,等待用戶輸入數字來回答。定義1個布爾 值continue來存儲用戶輸入的回答,比如continue的默許值是1,就是用戶默許是繼續玩下1輪的,但如果用戶輸入0,那末程序停止,游戲結束
增加1個模式:兩人模式。可以你出題我來猜。但是我希望你能夠在程序1開始就讓用戶選擇是玩哪種模式,是經典的人機對戰,還是人人對戰。如果是兩人模式的人人對戰,那末就不是用srand和rand來產生神秘數字了,而是讓玩家1通過scanf來輸入這個數字
設 置幾個難度級別,讓玩家選擇:低級(1⑴00中的1個數),中級(1⑴000中的1個數),高級(1⑴0000中的1個數)。如果你這樣設計,就需 要改寫MAX值了,而此時MAX就不能再是1個const變量了,必須要把MAX前面的const去掉,MIN的還能保存。
大家可以自己改進和擴充這個小游戲,使之更具可玩性和難度
完善好的源代碼可以用公眾號直接發給小編,或發到小編的聯系方式中,歡迎交換,謝謝!
今天的課就到這里,1起加油咯。
第1部份結束了,該開啟第2部份的旅程了!
下1次我們學習第2部份第1課,來認識1下模塊化編程吧!