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