《嵌入式 C 語言編程 - 基礎》理論課教案
第 1 章
C 語言基礎
一、整章授課思路 [40 分鐘] .......................................................................................................................... 3 1. 回顧、預習檢查、任務、目標部分 [5 分鐘] ................................................................................... 3 2. 什么是程序、指令以及流程圖[10 分鐘] ............................................................................................ 3 3. C 語言基礎和簡介[10 分鐘] ................................................................................................................ 4 4. 編譯和執行 C 程序[10 分鐘] ............................................................................................................... 5 5. 補充內容[3 分鐘] .................................................................................................................................. 6 6. 總結
[2 分鐘] ...................................................................................................................................... 6 二、 學員問題匯總 ........................................................................................................................................ 6 三、 作業布置 ................................................................................................................................................ 7
課時:1 學時 授課人:XXX
? 本書目 標
? 重點介紹 C 語言在整個課程體系中的地位 ? 解 講解 PPT :C 語言在嵌入式領域的重要性
—— 提高學生對本門課的興趣 ? 參考資料推薦
—— 提供參考資料 及經典書籍 ? 程序設計語言 ? C 陷阱與缺陷 ? C 專家編程 ? C 語言編程規范 ? 理解算法、流程圖以及程序的概念 ? 掌握用 C 語言進行程序設計的基本方法。
? 掌握 C 語言的基礎知識,包括基本數據類型、表達式、控制結構等 ? 掌握 C 語言的高級知識,包括數組、指針、函數、字符串、結構、文件操作等 ? 課時及上課時間分配
—— 整本書授課思路及進度安排 ? 3 天理論課時 ? 第一天:
? 第一章 1 課時 ? 第二章 2 課時 ? 第三章 1 課時 ? 第四章 2 課時 ? 第五章
2 課時 ? 第二天:
? 第六章 3 課時 ? 第七章 2 課時 ? 第八章 3 課時 ? 第三天 ? 第九章
3 課時 ? 第十章
2 課時 ? 第十一章 3 課時 ? 1 天做課后題
8 課時 ? 1 天綜合實驗
8 課時 ? 本章 目標
? 了解程序、算法和流程圖的概念 ? 熟練掌握 C 程序的基本結構 ? 掌握 C 程序的編譯和運行過程 ? 使用 GCC 創建 C 程序 ? 本章重點
? C 程序的基本結構和注釋 ? C 語言的編譯和執行 ? 本章難點
? 如何學習及學好 C 語言? 批注 [r1]: 從業務角度描述,學員學完本書能干什么、能作出什么東西,參考 PPT 上的描述。
批注 [r2]: 從業務角度描述,學員學完本章能干什么、能作出什么東西,參考 PPT 上的描述。
批注 [r3]: 注意描述要簡潔明了,其他老師一看就明白,方便交流。
一、 整章授課思路
[ [4 40 0 分鐘] ]
本章依次講解三個問題:
? 程序、算法和流程圖 ? C 程序的基本結構、編譯和運行過程 ? 使用 GCC 創建 C 程序 1. 回顧、預習檢查、 任務、目標 部分
[ [5 5 分鐘] ]
根據 PPT 中提供的問題,逐一提問學員,注意給予學員引導,建立學員的信心。
? main()函數的返回值默認是整型 [int] main()中的 int 默認可以省略 ? \n 代表換行 ? 計算機為什么使用二進制語言:硬件易于實現,計算簡單 2. 什么是程序、指令以及流程圖[ [1 10 0 分鐘] ]
2.1 什么是程序?
? 引入:
程序語言,顧名思義就是語言,是用于交流的,程序就是計算機的語言和人的語言的翻譯者,做一個程序員就是要把人類世界的問題用計算機的方法去解決和展現
? 講解要點:程序 起源:
幾十年前,有一個老美(叫什么 Niklaus Wirth),弄了一個破玩意兒:
“Algorithm + Data Structures = Programs”
好了,這孩子出名啦,全世界都他的這個玩意奉為經典。
當我們中國人看到了以后,心想啊,那玩意兒是經典啊,不能改啊,我們 就這樣翻譯吧:
“算法 + 數據結構 = 程序”
或者
“程序 = 算法 + 數據結構”
? 課堂案例:
打個比方,一個程序就 像一個用 漢語 (程序設計語言)寫下的紅燒肉 菜譜 (程序),用于指導 懂漢語和烹飪手法的人 (體系結構)來做這個菜。通常,計算機程序要經過編譯和連結而成為一種人們不易看清而計算機可解讀的格式,然后運行。未經編譯就可運行的程序,通常稱之為腳本程序(script)。
? :
驗證案例:(無,這里僅做示范)
2.2 算法 ? 引入:
算法就是處理事情的方法,比如出門前要先穿衣服,穿衣服要先穿哪件再穿哪件,這就是算法。。。
? 講解要點:
批注 [r4]: 指整章的整體思路,先講什么,后講什么,它們之間如何串起來。
批注 [r5]: 各技能點的逐一講解,技能點的講解一般包括:
1)引入:通過生活案例或代碼案例引出本次課講解的技能,主要讓學員明白為什么用學這個技能。
2)講解要點:該技能點講解的大致思路、注意問題、相關提問等。切忌把 PPT 上講解的技能點再重復羅列一遍,造成“重復冗余”。
3)課堂案例:上課講解使用的案例名稱,案例放置在對應文件夾中,Word 中不需要粘貼源代碼。
4)驗證案例:用于檢驗學員學習效果的案例,PPT 一般出現在小結部分。多用現場編程題,其次是問答題。案例放置在對應文件夾中 說明:
1、對本章重點、難點部分,要求進行詳細描述,其他部分完全可以從簡描述。
2、非重難點的技能點講解,可以沒有“引入”和“檢驗案例”。
3、如果技能點比較復雜,可 以往下細分。
算法是一系列解決問題的清晰指令,也就是說,能夠對一定規范的輸入,在有限時間內獲得所要求的輸出。算法常常含有重復的步驟和一些比較或邏輯判斷。如果一個算法有缺陷,或不適合于某個問題,執行這個算法將不會解決這個問題。不同的算法可能用不同的時間、空間或效率來完成同樣的任務。一個算法的優劣可以用空間復雜度與時間復雜度來衡量。
一個算法應該具有以下五個重要的特征:
1、有窮性:
一個算法必須保證執行有限步之后結束;
2、確切性:
算法的每一步驟必須有確切的定義;
3、輸入:一個算法有 0 個或多個輸入,以刻畫運算對象的初始情況,所謂 0 個輸入是指算法本身定除了初始條件;
4、輸出:一個算法有一個或多個輸出,以反映對輸入數據加工后的結果。沒有輸出的算法是毫無意義的;
5、可行性:
算法原則上能夠精確地運行,而且人們用筆和紙做有限次運算后即可完成。
算法的優劣:用空間復雜度與時間復雜度來衡量 例:空間換時間,時間換空間。——來上班的方式選擇。打車?走路?
? 課堂案例
案 例:
計算長方形的面積
2.3 流程圖
? 引入:
千言萬語不如一張圖。
? 講解要點:
流程圖:使用圖形表示算法的思路是一種極好的方法 流程圖在 匯編語言和早期的 BASIC 語言環境中得到應用,由于其中的轉向過于任意,帶來了許多副作用,現已趨向消亡。
較新的是有利于結構化程序設計的 PAD 圖,對 PASCAL 或 或 C 語言都極適用。
? 課堂案例 :
案例:
流程圖來畫計算 長方形的面積 3. C C 語言基礎和簡 介[ [1 10 0 分鐘] ]
3.1 C 語言簡介之語言特性
? 引入:
1、紙帶 2、匯編語言的特點:速度快 3、C 語言:強大——可以直接修改 PC 上的值,簡單——易懂,不挑機器及特性(高級)
? 講解要點:
? 機器語言或稱為二進制代碼語言 計算機可以直接識別,不需要進行任何翻譯。每臺機器的指令,其格式和代碼所代表的含義都是硬性規定的,故稱之為面向機器的語言,也稱為機器語言。它是第一代的計算機語言。機器語言對不同型號的計算機來說一般是不同的。
? 匯編語言(AssemblyLanguage) 是面向機器的程序設計語言。在匯編語合中,用助記符(Memoni)代替操作碼,用地址符號(Symbol)或標號(Label)代替地址碼。這樣用符號代替機器語言的二進制碼,就把機器語言變成了匯編語言。于是匯編語言亦稱為符號語言。使用匯編語言編寫的程序,機器不能直接識別,要由一種程序將匯編語言翻譯成機器語言,這種起翻譯作用的程序叫匯編程序,匯編程序是系統軟件中語言處理系統軟件。匯編程序把匯編語言翻譯成機器語言的過程稱為匯編。
本質上匯編語言和機器語言是一一對應的,即一條匯編語言對應一條機器指令.而一條高級語言一般可以相當于多條機器或匯編指令,這大大提高了軟件開發效率,讓復雜軟件的出現成為可能. ? C 語言簡介之 C 語言強大
? C 語言入門容易,用起來難
? C++入門難,用起來方便
? 課堂案例 :
既然要學習 C 語言,則需要大概了解一下 C 語言的是怎么產生怎么發展的。
C 語言是在 B 語言基礎上發展起來的。在 B 語言之前經歷了 ALGOL60、CPL、BCPL語言。
使用 B 語言寫了第一個 UNIX 操作系統。B 語言過于簡單。功能有限。在 1973 年貝爾實驗室的 Dennis Ritchie 在 B 語言基礎上設計了 c 語言。
其目的為描述和實現 UNIX 系統的。同年, Ken Thompson 和 Dennis Ritchie 合作把原來使用匯編語言編寫的 UNIX 改為 C 語言來實現。之后 C 語言發展經歷了三個重要的發展階段。
到現在為止雖然出現了很多的程序設計語言,但是 C 語言依舊具有強壯的生命力,在很多行業領域仍然使用。我們現在學習 c 語言可以為學習其它語言打下基礎。
4. 編譯和執行 C C 程 序[ [1 10 0 分鐘] ]
C 4.1 C 語言的基本結構
? 引入:
那么一個 C 程序怎么才能變成計算機可識別的二進制代碼 ? 講解要點:
1.一個 C 語言源程序可以由一個或多個源文件組成。
2.每個源文件可由一個或多個函數組成。
3.一個源程序不論由多少個文件組成,都有一個且只能有一個 main 函數,即主函數。
4.源程序中可以有預處理命令(include 命令僅為其中的一種),預處理命令通常應放在源文件或源程序的最前面。
5.每一個說明,每一個語句都必須以分號結尾。但預處理命令,函數頭和花括號“}”
之后不能加分號。
6.標識符,關鍵字之間必須至少加一個空格以示間隔。若已有明顯的間隔符,也可不再加空格來間隔。
? 課堂案例 :
案例:
helloworld.c
4.2 C 語言的編譯和執行
? 引入:
回顧:Linux 開發基礎第六章內容,詳細剖析 C 程序編譯的整個過程
? 講解要點:
解釋器或直譯器(Interpreter)是一種供執行其他程式的電腦程式,解釋器只像一位“中間人”,每次執行程式時都要先轉成另一種語言再作執行,因此解釋器的程式運行速度比較緩慢。
相對地,編譯器并不執行程式或原程式碼,而是一次過將其翻譯成另一種語言,如機械碼,以供多次執行而無需再經編譯。其制成品無需依賴編譯器而執行,程式運行速度比較快。
? 課堂案例 :
案例:
編譯并連接執行 c helloworld.c 程序
5. 補充內容[ [3 3 分鐘] ]
如何學習 C 語言 C 語言在嵌入式領域的重要性 6. 總結
[ [2 2 分鐘] ]
? 根據 PPT 上的問題,對本次課進行總結。
二、
學員 問題 匯總
? 問題 1:C 語言有哪些經典的書籍和教材?
答:C 程序設計語言 C 陷阱與缺陷等 ? 問題 2:在 vi 中怎么設置 tab 鍵為空 4 格
答:在用戶主目錄下建文件 .exrc 內容為 set ts=4 set sw=4 set ai 即可 批注 [r6]: 課堂上學員常問的一些問題,上多次課后,需要進行歸納匯總,便于教員間相互交流、學術例會研討等。
三、
作業布置
? 預習作業:
? 1)
用 Gcc 編譯一個 C 程序 ? 復習作業:
? 1)教材題 無 ? 2)補充作業 1:使用 Gcc 編譯 Helloworld.c 程序 批注 [r7]:
包括預習作業和課后作業。
預習作業:
用于學員預習本章時完成的作業。
課后作業:
用于本章講解完畢時布置的作業。