C語言程序設計電子教案理論_第1頁
C語言程序設計電子教案理論_第2頁
C語言程序設計電子教案理論_第3頁
C語言程序設計電子教案理論_第4頁
C語言程序設計電子教案理論_第5頁
已閱讀5頁,還剩50頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

理工大學工程技術(shù)學院C語言程序設計課程教案教師姓名XXX所在系部電計系授課專業(yè)XXXXXXX課程編碼總學時64學分4教材名稱《C程序設計教程》

[首頁]課程名稱C語言程序設計授課專業(yè)全院所有非計科類專業(yè)年級課程編號課程類型必修課公共基礎(chǔ)課(√);專業(yè)基礎(chǔ)課();專業(yè)課()選修課專業(yè)選修課();公共選修課()教學目標本課程的教學目標:課程的目的和任務是以四川省二級考試(C語言)為基本導向,兼顧軟件技術(shù)基礎(chǔ)能力的培養(yǎng),讓掌握編寫C程序的基本知識及基本操作,理解軟件設計的思想,深化數(shù)據(jù)結(jié)構(gòu)及操作系統(tǒng)的概念,理解和熟悉程序設計的基本步驟和方法,培養(yǎng)學生編寫計算機程序解決和處理實際問題的思維方法與基本能力,為進一步學習專業(yè)課程及通過四川省計算機二級考試(C語言)打下良好的基礎(chǔ)。授課方式課堂講授(√);實踐課(√)考核方式考試(√);考查()課程教學總學時數(shù)64學時學分數(shù)4學分學時分配課堂講授32學時;實踐課32學時教材名稱C程序設計教程作者孫淑霞出版社及出版時間四川科學技術(shù)出版社指定參考書《C程序設計》作者譚浩強出版社及出版時間清華大學出版社2001授課教師XXX職稱講師單位電計系授課時間11周1次第1周,第1次課編寫時間年8月2日章節(jié)名稱第1章C程度設計概述(1學時)教學目的與要求:教學目的:讓學生掌握初步的算法程序設計思想,了解C語言的基本特點和構(gòu)成。教學要求:掌握C語言程序開發(fā)基本步驟,理解算法程序設計基本思想。教學重點和難點:教學重點:熟悉上機運行C語言程序的一般步驟教學難點:無教學組織(含課堂教學內(nèi)容、教學方法、輔助手段、師生互動、時間分配、注明板書設計部分):一新課引入(5分鐘)1、介紹本門課程的性質(zhì)、學習目標、考核方式、學習方法等。2、從計算機應用基礎(chǔ)中學過的計算機語言及語言處理系統(tǒng)引出C語言。二講授新課一、

算法的定義與C語言出現(xiàn)的背景(5分鐘)舉例:什么是算法?二、

C語言的特點(5分鐘)1.

語言簡潔、緊湊,使用方便、靈活;2.

運算符豐富3.

數(shù)據(jù)類型多(整型、實型、字符型、數(shù)組類型、指針類型、結(jié)構(gòu)體類型、共用體類等)4.

具有結(jié)構(gòu)化的控制語句5.

語法不太嚴格,自由度大既是高級語言,又具有低級語言的功能成目標代碼質(zhì)量高,程序執(zhí)行效率可移植性好三、C語言程序構(gòu)成(采用程序?qū)嵗右哉f明,并提倡良好的程序設計書寫風格,10分鐘)1.

C語言是由函數(shù)構(gòu)成的,至少有一個main()函數(shù);2.

每個函數(shù)由函數(shù)首部和函數(shù)體組成;函數(shù)體由說明語句、執(zhí)行語句組成;3.

每個C程序從main()函數(shù)開始執(zhí)行,并在main()中結(jié)束;4.

每個語句和數(shù)據(jù)定義的最后必須加分號;5.

C程序無輸入、輸出語句:輸入功能由scanf()函數(shù)完成;輸出功能由printf()函數(shù)完成;可加注釋/*……*/四、上機步驟(上機環(huán)境:TurboC2.0和VisualC++6.0)(15分鐘----課堂演示)1.

進入環(huán)境2.

編輯源程序3.

保存源程序4.

編譯源程序5.

執(zhí)行程序,查看結(jié)果6.退出C環(huán)境三課堂小結(jié)(5分鐘---板書)1、

C語言的構(gòu)成要素,main函數(shù)在程序中的作用2、上機操作的過程作業(yè)及課外訓練:暫無參考資料(含參考書、文獻等):《C程序設計》,譚浩強,清華大學出版社20012課后自我總結(jié)分析:X周X次第X周,第X次課編寫時間XXXX年X月X日章節(jié)名稱第2章2.1~2.2教學目的與要求:教學目的:學習數(shù)據(jù)類型的含義,數(shù)據(jù)的存儲形式,變量的聲明與引用教學要求:1、理解變量與常量的含義,變量名與變量地址,掌握常量的聲明,變量的定義與賦值等操作;2、理解數(shù)據(jù)類型的含義;3、掌握數(shù)據(jù)類型(整型、實型、字符型)的常量與變量;教學重點和難點:教學重點:數(shù)據(jù)類型的含義,數(shù)據(jù)的存儲形式,變量的聲明與引用教學難點:數(shù)據(jù)的存儲形式和數(shù)據(jù)類型的轉(zhuǎn)換教學組織(含課堂教學內(nèi)容、教學方法、輔助手段、師生互動、時間分配、注明板書設計部分):一、復習相關(guān)知識點:5分鐘(多媒體演示)復習c程序開發(fā)的一般步驟,引出數(shù)據(jù)的概念。二、介紹本次教學內(nèi)容:2分鐘(板書書寫本次講授內(nèi)容提綱)本次課主要講授數(shù)據(jù)的三種基本類型整型,實型,字符型以及各類型的常量和變量表示方法。三、講授知識點:XX分鐘(多媒體演示,并結(jié)合適當板書)一)、常量與變量1、常量和符號常量在程序運行過程中,其值不能被改變的量稱為常量2、變量變量代表內(nèi)存中具有特定屬性的一個存儲單元,它用來存放數(shù)據(jù),這就是變量的值,在程序運行期間,這些值是可以改變的。變量名實際上是一個以一個名字對應代表一個地址,在對程序編譯連接時由編譯系統(tǒng)給每一個變量名分配對應的內(nèi)存地址。從變量中取值,實際上是通過變量名找到相應的內(nèi)存地址,從該存儲單元中讀取數(shù)據(jù)。二)基本數(shù)據(jù)類型1、整型數(shù)據(jù)整型常量即整常數(shù)。介紹在c語言中整型的3種表示方法。提問:12,012,0x12分別對應的數(shù)據(jù)是多少?2、實型數(shù)據(jù)C語言不擅長處理實型數(shù)據(jù)。提問:12e1,e哪個是合法的實型數(shù)據(jù)?3、字符型數(shù)據(jù)介紹字符型數(shù)據(jù)和整型數(shù)據(jù)的通用性及它本身的特殊性。提問:‘a(chǎn)’的ASCII碼是97,‘d’的ASCII碼是多少?4、字符串常量字符串常量是一對雙撇號括起來的字符序列提問:“a”和‘a(chǎn)’的區(qū)別?經(jīng)典例題講解:大小寫字母的轉(zhuǎn)換

#include<stdio.h>

voidmain()

{charc1,c2;

c1=’a’;

c2=’b’;

c1=c1-32;

c2=c2-32;

printf(“%c%c″,c1,c2);

}大寫字母和小寫字母相差32,大寫字母加32變小寫,小寫字母減32變大寫5、各類數(shù)值型數(shù)據(jù)間的混合運算混合運算:整型(包括int,short,long)、浮點型(包括float,double)可以混合運算。在進行運算時,不同類型的數(shù)據(jù)要先轉(zhuǎn)換成同一類型,然后進行運算,轉(zhuǎn)換的原則是低精度向高精度轉(zhuǎn)換。提問:表達式’c’+’d’的結(jié)果是什么類型?作業(yè)及課外訓練:參考資料(含參考書、文獻等):《c程序設計》(第三版)譚浩強編著課后自我總結(jié)分析:舉生活中例子讓同學們理解變量的含義3X周X次第X周,第X次課編寫時間XXXX年X月X日章節(jié)名稱第2章2.3運算符和表達式教學目的與要求:教學目的:學習運算符的功能、優(yōu)先級,結(jié)合性,以及表達式的運算順序教學要求:1、理解運算符的功能、優(yōu)先級,結(jié)合性,以及表達式的運算順序;2、理解表達式求解過程中數(shù)據(jù)類型的自動轉(zhuǎn)換與強制轉(zhuǎn)換;教學重點和難點:教學重點:各運算符的功能及使用方法教學難點:各運算符的功能及使用方法教學組織(含課堂教學內(nèi)容、教學方法、輔助手段、師生互動、時間分配、注明板書設計部分):一、復習相關(guān)知識點:5分鐘(多媒體演示)復習上次課學習過的數(shù)據(jù)類型,是將參與運算的對象。二、介紹本次教學內(nèi)容:5分鐘(板書書寫本次講授內(nèi)容提綱)本次課將學習算術(shù)運算符,邏輯運算符,關(guān)系運算符。三、講授知識點:75分鐘(多媒體演示,并結(jié)合適當板書)1、算術(shù)運算符和算術(shù)表達式對于每一種運算符重點了解其運算功能和其對操作數(shù)的要求,以及它的優(yōu)先級和結(jié)合性算術(shù)運算符:重點是/和%兩運算符結(jié)合應用提問:如何把123拆成1,2,3?2、賦值運算符:強調(diào)賦值號左側(cè)一定是變量,不能是運算符和表達式提問:a=a+3=b+7正確否?3、關(guān)系運算符:運算結(jié)果是邏輯值3、邏輯運算及其表達式介紹邏輯運算符以及它的重要特性:短路特性4、關(guān)系運算符:重點強調(diào)==和=5、自增自減運算符:使用頻率最高的運算符,講解明白前置和后置對表達式和運算對象的影響。4、位運算符:參與運算對象必須先轉(zhuǎn)換成二進制,然后再運算。5、逗號運算符和逗號表達式逗號運算符:將兩個表達式連接起來,又稱為“順序求值運算符”如:3+5,6+8求解過程:先求解表達式1,再求解表達式2。整個逗號表達式的值是表達式2的值。逗號表達式的一般形式可以擴展為表達式1,表達式2,表達式3,……,表達式n它的值為表達式n的值注意:并不是任何地方出現(xiàn)的逗號都是作為逗號運算符。例如函數(shù)參數(shù)也是用逗號來間隔的。如:printf(“%d,%d,%d”,a,b,c);printf(“%d,%d,%d”,(a,b,c),b,c)思考:若表達數(shù)學式子a<b<c,在c語言中應該怎么表達?作業(yè)及課外訓練:課外訓練:筆試考級訓練一參考資料(含參考書、文獻等):《c程序設計》(第三版)譚浩強編著課后自我總結(jié)分析:多做演示讓學生理解運算符的功能,并熟悉c語言的開發(fā)步驟。4X周X次第X周,第X次課編寫時間XXXX年X月X日章節(jié)名稱第2章2.4~2.5教學目的與要求:教學目的:學習數(shù)據(jù)輸入輸出庫函數(shù)。教學要求:1、掌握字符數(shù)據(jù)的輸入輸出;2、掌握格式輸入輸出函數(shù)。教學重點和難點:教學重點:格式輸入輸出函數(shù)教學難點:格式輸入輸出函數(shù)教學組織(含課堂教學內(nèi)容、教學方法、輔助手段、師生互動、時間分配、注明板書設計部分):一、復習相關(guān)知識點:5分鐘(多媒體演示)計算機的執(zhí)行,表達式的計算如果想看到結(jié)果,必須輸出到某個輸出設備上,如果在運算過程中需要人機交互,必須從輸入設備得到數(shù)據(jù),這些都是通過輸入輸出函數(shù)得到的。二、介紹本次教學內(nèi)容:5分鐘(板書書寫本次講授內(nèi)容提綱)本次課學習數(shù)據(jù)的標準輸入輸出庫函數(shù)。介紹函數(shù)的作用和地位。三、講授知識點:75分鐘(多媒體演示,并結(jié)合適當板書)數(shù)據(jù)輸入輸出的概念及在C語言中的實現(xiàn)所謂輸入輸出是以計算機主機為主體而言的,C語言本身不提供輸入輸出語句,輸入和輸出操作是由C函數(shù)庫中的函數(shù)來實現(xiàn)的,在使用系統(tǒng)庫函數(shù)時,要用預編譯命令“#include”將有關(guān)的“頭文件”包括到用戶源文件中。1、字符數(shù)據(jù)的輸入輸出字符輸出函數(shù)一般形式:putchar(c)函數(shù)作用:向終端輸出一個字符2、.字符輸入函數(shù)一般形式:getchar()函數(shù)作用:從終端(或系統(tǒng)隱含指定的輸入設備)輸入一個字符。函數(shù)值:從輸入設備得到的字符3、格式輸出函數(shù)函數(shù)作用:向終端(或系統(tǒng)隱含指定的輸出設備)輸出若干個任意類型的數(shù)據(jù)。一般格式:printf(格式控制,輸出表列)4、格式輸入函數(shù)函數(shù)作用:按照變量在內(nèi)存的地址將變量值存進去。一般格式:scanf(格式控制,地址表列)在輸入數(shù)據(jù)時,遇以下情況時認為該數(shù)據(jù)結(jié)束。①遇空格,或按“回車”或“跳格”(Tab)鍵;②按指定的寬度結(jié)束,如“%3d”,只?。沉?;③遇非法輸入。格式輸入輸出多加練習,不要死記語法。作業(yè)及課外訓練:作業(yè):P59四參考資料(含參考書、文獻等):《c程序設計》(第三版)譚浩強編著課后自我總結(jié)分析:字符輸入輸出函數(shù)強調(diào)只能針對一個字符操作5X周X次第X周,第X次課編寫時間XXXX年X月X日章節(jié)名稱第3章1節(jié)程序的控制結(jié)構(gòu)教學目的與要求:教學目的:學習選擇結(jié)構(gòu)教學要求:掌握if語句的格式、執(zhí)行過程和用法;掌握switch語句的格式、執(zhí)行過程和用法;理解較簡單的if語句嵌套及switch語句嵌套教學重點和難點:教學重點:選擇結(jié)構(gòu)教學難點:選擇結(jié)構(gòu)教學組織(含課堂教學內(nèi)容、教學方法、輔助手段、師生互動、時間分配、注明板書設計部分):一、復習相關(guān)知識點:5分鐘(板書、互動)運算符的功能、優(yōu)先級,結(jié)合性,以及表達式的運算順序;常用輸入、輸出函數(shù)的功能和用法。二、介紹本次教學內(nèi)容:10分鐘(板書書寫本次講授內(nèi)容提綱)if語句的格式、執(zhí)行過程和用法;switch語句的格式、執(zhí)行過程和用法較簡單的if語句嵌套及switch語句嵌套三、講授知識點:75分鐘(多媒體演示,并結(jié)合適當板書)我們來看看本章要學習的內(nèi)容。選擇分支結(jié)構(gòu)和循環(huán)結(jié)構(gòu)以及編譯預處理三部分。我們首先進入第一部分選擇分支結(jié)構(gòu)。我們來看看計算分段函數(shù)的方法。當x<=0時那么y=3-x;當x>0時則是y=2/x;那么我們可以看到C語言來解決這樣的問題時是怎么樣的呢?輸入x。然后判斷x<=0?如果成立則執(zhí)行y=3-x;否則表示x>0則執(zhí)行y=2/x。最后不管哪種結(jié)果都輸出y。這是我們c語言完成分段函數(shù)的方法。其實就是使用選擇分支的結(jié)構(gòu)來完成的。在C中提供了if語句和switch語句來實現(xiàn)選擇結(jié)構(gòu)。接下里,我們首先來看看大家熟悉的if語言——對所給條件進行判定,根據(jù)判定結(jié)果決定是否執(zhí)行程序段。它的一般形式是:if(表達式){語句};其中只要是表達式成立就執(zhí)行復合語句內(nèi)的語句。如果不成立則不執(zhí)行復合語句。直接跳到復合語句的下一句。其語句執(zhí)行的流程如ppt圖所示。這里,我們要注意:當表達式結(jié)果不為0我們就認為表達式成立。則就會執(zhí)行復合語句。只有是0時才跳到復合語句的下一條。我們來看看這個程序。其結(jié)果位什么呢?我們可以看到會得到兩條輸出。我們可以看到只要是非0的結(jié)果,我們認為是真。那么負數(shù)呢?結(jié)果同樣是為真。接下來我們來看這樣的例子。大家先讀一讀。結(jié)果會是什么呢?這里我們要注意判斷兩個數(shù)是否相等是==。而=是賦值運算。我們可以看到。m不等于100.所以不會輸出m==10。而由于m=100之后,結(jié)果可以看到m不為0.所以就會輸出我們這條語句的結(jié)果。我們再來看看if——else語句。其形式是如果表達式成立則執(zhí)行語句1.負責就執(zhí)行語句2.其流程圖如ppt所示。我們可以看到這就如同我們用英文表達某人很好看。此時我們會判斷是男的還是女的?比如表達式是是否是男性。成立就輸出youarehandsome,否則就是女性則輸出youarebeautiful。那么我們寫C語言怎么寫呢?接下來我們來看看輸入一個整數(shù)。判斷該整數(shù)的奇偶性?那么我們來看看是否可以改改任何判斷條件呢?!(m&1)。我也在大家的要求下將?:用if,else來轉(zhuǎn)換過,那么我們可以知道ifelse是可以相互轉(zhuǎn)換的。我們來看例子3-5.這個例子是我們第二章習題2.31類似的問題。那么我們怎么樣用if——else來代替呢?接下來,我們來看看if-else的嵌套。比如我們這里看到的ifelseif.。。。。他的執(zhí)行流程如圖所示。如果表達式1成立則執(zhí)行語句1.然后接受,否則就去判斷表達式2.如果成立類似表達式1.否則判斷表達式3.。知道都不成立則執(zhí)行最后的語句然后退出。比如,我們來看看這個問題。將0~100,90以上就是a,80到90就是b,70到80就是c,60到70就是d。否則就是e。那么用if語句怎么做呢?(學生思考)我們來看源程序。接下來我們再來看看這個分段函數(shù)怎么用if語句來寫呢?我們再看完了簡單的if語句之后,我們來進入一個新的內(nèi)容。switch語句。ppt上給出了其一般形式。我們要注意。千萬不能連接;switch語句是根據(jù)表達式的不同值,選擇不同的程序分支又稱開關(guān)語句。我們同樣要注意,表達式的比如是一個數(shù)值型或者是字符型。另外需要注意的是常量表達式的值必須互不相同,否則執(zhí)行時將出現(xiàn)矛盾,即同一個開關(guān)值,將對應多種執(zhí)行方案。其執(zhí)行的流程如圖所示。我們要看到如果等于常量1就執(zhí)行語句1.在執(zhí)行完之后則判斷是否有break如果有則跳出swtich否則繼續(xù)執(zhí)行語句2然后再判斷是否有break。知道遇到break或者是所有的語句都執(zhí)行完。這里要注意:通常情況下,E1,E2,…En是整型常量表達式,且值必須互不相同;語句標號作用,必須用break跳出;case后可包含多個可執(zhí)行語句,且不必加{};switch可嵌套;多個case可共用一組執(zhí)行語句;比如ppt上的例子。我們來看看這樣的例子。這里我們再強調(diào)下:1、if語句能測試關(guān)系和邏輯表達式,而switch只能測試相等。2、switch語句的每個case后面的常熟必須是整型或字符型,在使用字符常量時。自動轉(zhuǎn)換成整數(shù)。3、switch語句中每個case常熟必須不同。這是我們介紹的swtich語句。作業(yè)及課外訓練:課后習題1到3題參考資料(含參考書、文獻等):見參考書第5章課后自我總結(jié)分析:學生對選擇結(jié)構(gòu)中的if語句理解較好,但switch語句還有待加深6X周X次第X周,第X次課編寫時間XXXX年X月X日章節(jié)名稱第3章2節(jié)教學目的與要求:教學目的:學習循環(huán)程序設計的含義及思路教學要求:掌握while語句、do-while語句教學重點和難點:教學重點:while語句教學難點:do-while語句教學組織(含課堂教學內(nèi)容、教學方法、輔助手段、師生互動、時間分配、注明板書設計部分):一、復習相關(guān)知識點:5分鐘(板書、互動)運if語句的格式、執(zhí)行過程和用法;switch語句的格式、執(zhí)行過程和用法較簡單的if語句嵌套及switch語句嵌套二、介紹本次教學內(nèi)容:10分鐘(板書書寫本次講授內(nèi)容提綱)while語句;do-while語句三、講授知識點:75分鐘(多媒體演示,并結(jié)合適當板書)各位同學大家好,我們上次課已經(jīng)給大家介紹完了課程的結(jié)構(gòu)化程序中的分支結(jié)構(gòu),分為兩類,if-else以及switch語句,我們可以看到這兩種結(jié)構(gòu)還是比較好理解的。接下來我們要對其進行鞏固和復習。在C中可能會有多個if和else進行嵌套,在此我們要知道,else總是與向上就近的if進行配對。這里我們來看二級考試的一個真題。(真題訓練)那么我們可以看到這一類就是考試中的一般形式。我們再來看看二級考試中對于switch語句的考察。我們再復習完分支結(jié)構(gòu)之后,我們再來看看循環(huán)結(jié)構(gòu)。循環(huán)結(jié)構(gòu)是本章的重點和難點,上次課我們已經(jīng)介紹while循環(huán)。While循環(huán)的一般形式如PPT上說明的。這里我們要知道,但表達式一旦成立才會做循環(huán)體內(nèi)的語句,而while循環(huán)也被常稱為當型循環(huán)語句。這里我們還是要強調(diào),while循環(huán)是先判斷表達式,再執(zhí)行語句,并且表達式同if表達式一樣,可以是任何類型的表達式,while循環(huán)結(jié)構(gòu)常用于循環(huán)次數(shù)不固定根據(jù)是否滿足某個條件決定循環(huán)與否的情況。并且循環(huán)多于一句時,要紅{}括上。我們上次課也已經(jīng)看到了,左右兩個while循環(huán)執(zhí)行的次數(shù)是不一樣的。而這個求和的例子我們也看到了,接下來我們來看看用while循環(huán)來計算n的階乘。這里我們看到只要n>=1成立那么我們就會執(zhí)行m=m*n,知道表達式不成立為止。這里我們要注意,表達式在判斷前,必須要有明確的值,循環(huán)體中一般有改變的條件表達式的語句,也就是說要給出循環(huán)一次之后的記錄,這是為了避免出現(xiàn)不必要的死循環(huán)。另外我們還要注意,while表達式后面是沒有分號的。那么如果我們有了分號會有什么樣的結(jié)果呢?很顯然會有一個死循環(huán)。接下來,我們再討論do-while循環(huán),其一般的形式如PPT上列出。我們可以看到do-while循環(huán)常被稱為直到型循環(huán)語句。這里我們來看看其與while的區(qū)別是什么呢?while循環(huán)是判斷之后在執(zhí)行循環(huán)體,而do-while呢?是做了之后,再進行判斷。那么即便是表達式一次都不成立,但是while循環(huán)是不會被執(zhí)行的。而do-while循環(huán)則會被執(zhí)行一次,這也是二級考試常??疾斓牡胤?。這里我們還是來看看計算1到100的和的程序。程序的編寫是這樣的。尤其要注意while后面是有分號,而do后邊是沒有分號。接下來我們再看看求5的階乘的例子。通過兩個例子我們可以看到了do-while循環(huán)一些特別的例子,那么我們需要說明的是do-while循環(huán)是先執(zhí)行語句,后做判斷表達式,第一次條件為真時,while和do-while等價,第一次條件為假的時候,二者是不同的。比如廈下面的例子。當輸入0到10之間的數(shù)字那么結(jié)果是一樣的。但是,如果我們輸入一個大于10的數(shù)時,結(jié)果就會不一樣。我們來看看程序的執(zhí)行過程。(程序演示)另外我們要看到,在if、while語句中,表達式后面是沒有分號的,而do-while語句的表達式后面是必須加分號的。另外,do-while循環(huán)和while循環(huán)是可以相互替換的,只是要注意修改循環(huán)控制的條件。作業(yè)及課外訓練:課后習題4到6題參考資料(含參考書、文獻等):見參考書第5章課后自我總結(jié)分析:學生對選擇結(jié)構(gòu)中的for還有待加深7X周X次第X周,第X次課編寫時間XXXX年X月X日章節(jié)名稱第3章2節(jié)教學目的與要求:教學目的:學習循環(huán)程序設計的含義及思路教學要求:掌握for語句、簡單的循環(huán)嵌套教學重點和難點:教學重點:for語句教學難點:雙重循環(huán)教學組織(含課堂教學內(nèi)容、教學方法、輔助手段、師生互動、時間分配、注明板書設計部分):一、復習相關(guān)知識點:5分鐘(板書、互動)while語句;do-while語句二、介紹本次教學內(nèi)容:10分鐘(板書書寫本次講授內(nèi)容提綱)for語句;循環(huán)嵌套三、講授知識點:75分鐘(多媒體演示,并結(jié)合適當板書)我們再看完了,while循環(huán)和do-while循環(huán)之后,我們來討論下本章的重點和難點。Fro循環(huán)。For循環(huán)的一般形式如ppt所示,我們要看到,for(初始表達式1;條件表達式2;循環(huán)表達式3){循環(huán)體;}這里我們可以看到for循環(huán)較之我們以前看到的循環(huán)形式上要復雜些,但for循環(huán)也是我們在使用c語言時,最位常見的循環(huán)語句。那么我們來分析該形式,其中循環(huán)體語句是值被重復執(zhí)行的語句。而表達式1是用于循環(huán)開始為循環(huán)變量設置初始值;表達式2是控制循環(huán)執(zhí)行的條件,決定循環(huán)次數(shù);表達式3則是循環(huán)控制變量修改表達式。我們接下來看看執(zhí)行的過程。首先是執(zhí)行表達式1.用于給出初始值,接著判斷表達式2,如果成立則執(zhí)行循環(huán)體,然后執(zhí)行表達式3然后再判斷當表達式2不成立時則跳出for循環(huán)。比如,利用for語句來實現(xiàn)1~100的和這個例子。我們以前已經(jīng)說過,那么請同學們試著將其程序流程圖寫出來。接下來我們來看看用for循環(huán)來計算1~9的平方這個例子。我們可以看到1~9的平方我們可以看出是1*1;2*2……9*9.這里我們會發(fā)現(xiàn)其規(guī)律是i*j每計算一次之后就將i和j都進行自增1.那么結(jié)果是不是我們想要的呢?那么大家試著寫寫這個程序。這里我們要注意的例子給出的參考程序也是正確的。只是使用了兩個變量i和j來進行的計算。這里我們要注意的是循環(huán)時的邊界問題。我們要計算的是范圍是1~9的平方那么邊界就是1和9.此時我們在定義表達式2時就不能有=10.或者我們可以將表達式2改成<=9那么結(jié)果是一樣的。那么我們要學會這樣的表達是為什么!接下來我們看看for循環(huán)的注意地方,三個表達式都可以是逗號表達式,三個波士頓都是任選項,都可以省略,但要注意省略表達式后,分號間隔符不能省略。比如上個例子中的表達式3就是可以一個逗號表達式。另外,如果省略表達式1.那么我們可以在定義i時就給初值,而省略表達式3的話我們可以在循環(huán)體中進行,而如果省略表達式2的話則會發(fā)生什么結(jié)果呢?進入一個無限循環(huán)。我們來看看這個例子的結(jié)果。那么,接下來我們來看一些典型例題的分析。如,求累加1到1000.此時的程序主要代碼應該是怎么寫呢?如果,我們現(xiàn)在想要實現(xiàn)偶數(shù)的求和呢?接下來我們再看看如果求1到100的相乘的結(jié)果應該怎么寫程序呢?這里我們要知道如果求相乘的結(jié)果,如果單純的使用長整形可能不能實現(xiàn),所以在定義s時必須使用double型。這是我們看到的for循環(huán)。大家可能覺得還是比較好理解的,但是,如果我們將循環(huán)進行了嵌套之后,則會稱為很多普通學生的噩夢。當然,大家是不普通的。我相信大家是可以克服這個困難的。我們就來看看循環(huán)的嵌套。在循環(huán)體語句中又包含有另一個完整的循環(huán)結(jié)構(gòu)的形式,稱為循環(huán)的嵌套。如果內(nèi)循環(huán)體中又有嵌套的循環(huán)語句,則構(gòu)成多重循環(huán)。嵌套在循環(huán)體內(nèi)的循環(huán)體稱為內(nèi)循環(huán),外面的循環(huán)稱為外循環(huán)。while、do-while、for三種循環(huán)都可以互相嵌套。我們來看幾種合法的多重循環(huán)。這我們再來看看循環(huán)語句之間的關(guān)系。左邊的是一個嵌套循環(huán),那么就有內(nèi)循環(huán)和外循環(huán)的區(qū)別,而右邊的則是并列的循環(huán)。我們可以看到左邊的是會相互影響的,而右邊的則是相互獨立的。這里我們要看到,C語言第一坎,我們說過很多同學就會在循環(huán)里被循環(huán)出進度。指的就是多重for循環(huán)。我們這里來看看二重循環(huán)嵌套的執(zhí)行流程。首先是外循環(huán)的初始條件,然后是判斷外循環(huán)的條件,如果不成立那么恭喜我們不用進入循環(huán)而直接退出。如果我們外循環(huán)條件成立則會進入內(nèi)循環(huán),當然還是先對內(nèi)循環(huán)環(huán)境初始化,也就是內(nèi)循環(huán)的表達式1,然后再判斷內(nèi)循環(huán)表達式2是否成立。如果不成立則會跳到去執(zhí)行外循環(huán)表達式3然后再判斷外循環(huán)條件,如果成立則執(zhí)行內(nèi)循環(huán)體。然后在執(zhí)行內(nèi)循環(huán)表達式3然后在判斷內(nèi)循環(huán)表達式2.直到不成立為止。比如,現(xiàn)在我們來看看我們要編程實現(xiàn)如下的99乘法表就會使用雙重循環(huán)。我們來看看99乘法表的一個特點,表中第一行我們可以總結(jié)成哪個數(shù)與1到9相乘呢?是1.那么第2行呢?第3行呢?那么我們可否認為有一個i其變化就是從1到9呢?那么我們可否寫成一個for循環(huán)呢?可以利用一個for循環(huán)表示成i與某個相乘。那么某個怎么表示呢?第1行是1乘多少呢。還是一個1到9的數(shù)。第2行呢?是2成多少?那么我們可否利用j(1~9)與前面的i相乘呢?所以,最后,我們就能看到外循環(huán)是for(i=1;i<=9;i++)這里表示多少行,然后是每一行應該是i與j相乘,只是這個j是0~9所以,還是一個for循環(huán)for(j=1;j<=9;j++)里面應該是第幾行的i與里面的j進行相乘。從而得到雙重循環(huán)。。作業(yè)及課外訓練:課后習題4到6題參考資料(含參考書、文獻等):見參考書第5章課后自我總結(jié)分析:學生對選擇結(jié)構(gòu)中的for還有待加深8X周X次第X周,第X次課編寫時間XXXX年X月X日章節(jié)名稱第3章3節(jié)教學目的與要求:教學目的:學習break語句和continue語句的格式、功能、執(zhí)行過程和用、編譯預處理教學要求:掌握break語句和continue語句教學重點和難點:教學重點:掌握break語句和continue語句教學難點:編譯預處理教學組織(含課堂教學內(nèi)容、教學方法、輔助手段、師生互動、時間分配、注明板書設計部分):一、復習相關(guān)知識點:5分鐘(板書、互動)while語句;do-while語句二、講授知識點:40分鐘(多媒體演示,并結(jié)合適當板書)1.break語句(1)語句形式:break;(2)作用:結(jié)束break所在的switch語句。結(jié)束當前循環(huán),跳出break所在的循環(huán)結(jié)構(gòu)。2、continue語句1)語句形式:continue;2)語句作用:結(jié)束本次循環(huán)。3)語句執(zhí)行流程:continue語句可以結(jié)束本次循環(huán),即不再執(zhí)行循環(huán)體中continue語句之后的語句,轉(zhuǎn)入下一次循環(huán)條件的判斷與執(zhí)行。3、break語句與continue語句的區(qū)別3.3編譯預處理作用:對源程序編譯之前做一些處理,生成擴展C源程序種類宏替換#define文件包含#include條件編譯#if--#else--#endif等格式:“#”開頭占單獨書寫行語句尾不加分號3.3.1宏替換不帶參數(shù)宏定義一般形式:#define宏名[宏體]功能:用指定標識符(宏名)代替字符序列(宏體)宏展開:預編譯時,用宏體替換宏名---不作語法檢查3.2.2“文件包含”處理功能:一個源文件可將另一個源文件的內(nèi)容全部包含進來一般形式:#include“文件名”或#include<文件名>處理過程:預編譯時,用被包含文件的內(nèi)容取代該預處理命令,再對“包含”后的文件作一個源文件編譯作業(yè)及課外訓練:課后習題1到3題參考資料(含參考書、文獻等):見參考書第5章課后自我總結(jié)分析:學生對選擇結(jié)構(gòu)中的if語句理解較好,但switch語句還有待加深9X周X次第X周,第1次課編寫時間XXXX年X月X日章節(jié)名稱第4章數(shù)組教學目的與要求:1、理解數(shù)組的含義和存儲特點;2、掌握一維數(shù)組、二維數(shù)組的聲明、初始化,掌握數(shù)組元素的引用、賦值及相互關(guān)系;3、掌握字符數(shù)組的聲明、初始化及字符數(shù)組元素的引用;理解字符串與字符數(shù)組的異同;掌握常用的字符串處理函數(shù);教學重點和難點:教學重點:一維數(shù)組、二維數(shù)組的定義、初始化,數(shù)組元素的引用;字符串與字符數(shù)組,常用的字符串處理函數(shù);教學難點:一維數(shù)組、二維數(shù)組,字符串與字符數(shù)組。教學組織(含課堂教學內(nèi)容、教學方法、輔助手段、師生互動、時間分配、注明板書設計部分):一、介紹本次教學內(nèi)容:30分鐘(多媒體演示,并結(jié)合適當板書)1、一維數(shù)組的定義和初始化:一維數(shù)組的定義方式為:類型說明符數(shù)組名[常量表達式];其中:類型說明符是任一種基本數(shù)據(jù)類型或構(gòu)造數(shù)據(jù)類型。數(shù)組名是用戶定義的數(shù)組標識符。方括號中的常量表達式表示數(shù)據(jù)元素的個數(shù),也稱為數(shù)組的長度。例如:inta[10];說明整型數(shù)組a,有10個元素。floatb[10],c[20];說明實型數(shù)組b,有10個元素,實型數(shù)組c,有20個元素。charch[20];說明字符數(shù)組ch,有20個元素。對于數(shù)組類型說明應注意以下幾點:1)

數(shù)組的類型實際上是指數(shù)組元素的取值類型。對于同一個數(shù)組,其所有元素的數(shù)據(jù)類型都是相同的。2)

數(shù)組名的書寫規(guī)則應符合標識符的書寫規(guī)定。3)

數(shù)組名不能與其它變量名相同。例如:main(){inta;floata[10];……}是錯誤的。4)

方括號中常量表達式表示數(shù)組元素的個數(shù),如a[5]表示數(shù)組a有5個元素。但是其下標從0開始計算。因此5個元素分別為a[0],a[1],a[2],a[3],a[4]。5)

不能在方括號中用變量來表示元素的個數(shù),但是可以是符號常數(shù)或常量表達式。例如:#defineFD5main(){inta[3+2],b[7+FD];……}是合法的。但是下述說明方式是錯誤的。main(){intn=5;inta[n];……}6)

允許在同一個類型說明中,說明多個數(shù)組和多個變量。例如:inta,b,c,d,k1[10],k2[20];C語言對數(shù)組的初始化賦值還有以下幾點規(guī)定:1)

可以只給部分元素賦初值。當{}中值的個數(shù)少于元素個數(shù)時,只給前面部分元素賦值。例如:inta[10]={0,1,2,3,4};表示只給a[0]~a[4]5個元素賦值,而后5個元素自動賦0值。2)

只能給元素逐個賦值,不能給數(shù)組整體賦值。例如給十個元素全部賦1值,只能寫為:inta[10]={1,1,1,1,1,1,1,1,1,1};而不能寫為:inta[10]=1;3)

如給全部元素賦值,則在數(shù)組說明中,可以不給出數(shù)組元素的個數(shù)。例如:inta[5]={1,2,3,4,5};可寫為:inta[]={1,2,3,4,5};2、一維數(shù)組的元素引用:數(shù)組元素是組成數(shù)組的基本單元。數(shù)組元素也是一種變量,其標識方法為數(shù)組名后跟一個下標。下標表示了元素在數(shù)組中的順序號。數(shù)組元素的一般形式為:數(shù)組名[下標]其中下標只能為整型常量或整型表達式。如為小數(shù)時,C編譯將自動取整。例如:a[5]a[i+j]a[i++]都是合法的數(shù)組元素。數(shù)組元素通常也稱為下標變量。必須先定義數(shù)組,才能使用下標變量。在C語言中只能逐個地使用下標變量,而不能一次引用整個數(shù)組。例如,輸出有10個元素的數(shù)組必須使用循環(huán)語句逐個輸出各下標變量:for(i=0;i<10;i++)printf("%d",a[i]);而不能用一個語句輸出整個數(shù)組。下面的寫法是錯誤的:printf("%d",a);【例1】main(){inti,a[10];for(i=0;i<=9;i++)a[i]=i;for(i=9;i>=0;i--)printf("%d",a[i]);}二、編寫程序舉例:30分鐘(多媒體演示,并結(jié)合適當板書)1、【例2】下面是正確的數(shù)組引用實例main(){inti,a[10];for(i=0;i<10;)a[i++]=i;for(i=9;i>=0;i--)printf("%d",a[i]);}2、【例3】下面實例說明了當下標不為整數(shù)時將自動取整main(){inti,a[10];for(i=0;i<10;)a[i++]=2*i+1;for(i=0;i<=9;i++)printf("%d",a[i]);printf("\n%d%d\n",a[5.2],a[5.8]);}1、二維數(shù)組的定義和初始化:前面介紹的數(shù)組只有一個下標,稱為一維數(shù)組,其數(shù)組元素也稱為單下標變量。在實際問題中有很多量是二維的或多維的,因此C語言允許構(gòu)造多維數(shù)組。多維數(shù)組元素有多個下標,以標識它在數(shù)組中的位置,所以也稱為多下標變量。本小節(jié)只介紹二維數(shù)組,多維數(shù)組可由二維數(shù)組類推而得到。二維數(shù)組定義的一般形式是:類型說明符數(shù)組名[常量表達式1][常量表達式2]其中常量表達式1表示第一維下標的長度,常量表達式2表示第二維下標的長度。例如:inta[3][4];說明了一個三行四列的數(shù)組,數(shù)組名為a,其下標變量的類型為整型。該數(shù)組的下標變量共有3×4個,即:a[0][0],a[0][1],a[0][2],a[0][3]a[1][0],a[1][1],a[1][2],a[1][3]a[2][0],a[2][1],a[2][2],a[2][3]二維數(shù)組在概念上是二維的,即是說其下標在兩個方向上變化,下標變量在數(shù)組中的位置也處于一個平面之中,而不是象一維數(shù)組只是一個向量。但是,實際的硬件存儲器卻是連續(xù)編址的,也就是說存儲器單元是按一維線性排列的。如何在一維存儲器中存放二維數(shù)組,可有兩種方式:一種是按行排列,即放完一行之后順次放入第二行。另一種是按列排列,即放完一列之后再順次放入第二列。在C語言中,二維數(shù)組是按行排列的。即:先存放a[0]行,再存放a[1]行,最后存放a[2]行。每行中有四個元素也是依次存放。由于數(shù)組a說明為int類型,該類型占兩個字節(jié)的內(nèi)存空間,所以每個元素均占有兩個字節(jié))。二維數(shù)組初始化也是在類型說明時給各下標變量賦以初值。二維數(shù)組可按行分段賦值,也可按行連續(xù)賦值。例如對數(shù)組a[5][3]:1)

按行分段賦值可寫為:inta[5][3]={{80,75,92},{61,65,71},{59,63,70},{85,87,90},{76,77,85}};2)

按行連續(xù)賦值可寫為:inta[5][3]={80,75,92,61,65,71,59,63,70,85,87,90,76,77,85};這兩種賦初值的結(jié)果是完全相同的?!纠?】main(){inti,j,s=0,average,v[3];inta[5][3]={{80,75,92},{61,65,71},{59,63,70},{85,87,90},{76,77,85}};for(i=0;i<3;i++){for(j=0;j<5;j++) s=s+a[j][i]; v[i]=s/5; s=0;}average=(v[0]+v[1]+v[2])/3;printf("math:%d\nclanguag:%d\ndFoxpro:%d\n",v[0],v[1],v[2]);printf("total:%d\n",average);}對于二維數(shù)組初始化賦值還有以下說明:1)

可以只對部分元素賦初值,未賦初值的元素自動取0值。例如:inta[3][3]={{1},{2},{3}};是對每一行的第一列元素賦值,未賦值的元素取0值。賦值后各元素的值為:100200300inta[3][3]={{0,1},{0,0,2},{3}};賦值后的元素值為:0100023002)

如對全部元素賦初值,則第一維的長度可以不給出。例如:inta[3][3]={1,2,3,4,5,6,7,8,9};可以寫為:inta[][3]={1,2,3,4,5,6,7,8,9};3)

數(shù)組是一種構(gòu)造類型的數(shù)據(jù)。二維數(shù)組可以看作是由一維數(shù)組的嵌套而構(gòu)成的。設一維數(shù)組的每個元素都又是一個數(shù)組,就組成了二維數(shù)組。當然,前提是各元素類型必須相同。根據(jù)這樣的分析,一個二維數(shù)組也可以分解為多個一維數(shù)組。C語言允許這種分解。如二維數(shù)組a[3][4],可分解為三個一維數(shù)組,其數(shù)組名分別為:a[0]a[1]a[2]對這三個一維數(shù)組不需另作說明即可使用。這三個一維數(shù)組都有4個元素,例如:一維數(shù)組a[0]的元素為a[0][0],a[0][1],a[0][2],a[0][3]。必須強調(diào)的是,a[0],a[1],a[2]不能當作下標變量使用,它們是數(shù)組名,不是一個單純的下標變量。2、二維數(shù)組的元素引用:二維數(shù)組的元素也稱為雙下標變量,其表示的形式為:數(shù)組名[下標][下標]其中下標應為整型常量或整型表達式。例如:a[3][4]表示a數(shù)組三行四列的元素。下標變量和數(shù)組說明在形式中有些相似,但這兩者具有完全不同的含義。數(shù)組說明的方括號中給出的是某一維的長度,即可取下標的最大值;而數(shù)組元素中的下標是該元素在數(shù)組中的位置標識。前者只能是常量,后者可以是常量,變量或表達式。【例2】一個學習小組有5個人,每個人有三門課的考試成績。求全組分科的平均成績和各科總平均成績。

張王李趙周Math8061598576C7565638777Foxpro9271709085可設一個二維數(shù)組a[5][3]存放五個人三門課的成績。再設一個一維數(shù)組v[3]存放所求得各分科平均成績,設變量average為全組各科總平均成績。編程如下:main(){inti,j,s=0,average,v[3],a[5][3];printf("inputscore\n");for(i=0;i<3;i++){for(j=0;j<5;j++) {scanf("%d",&a[j][i]); s=s+a[j][i];}v[i]=s/5;s=0;}average=(v[0]+v[1]+v[2])/3;printf("math:%d\nclanguag:%d\ndbase:%d\n",v[0],v[1],v[2]);printf("total:%d\n",average);}程序中首先用了一個雙重循環(huán)。在內(nèi)循環(huán)中依次讀入某一門課程的各個學生的成績,并把這些成績累加起來,退出內(nèi)循環(huán)后再把該累加成績除以5送入v[i]之中,這就是該門課程的平均成績。外循環(huán)共循環(huán)三次,分別求出三門課各自的平均成績并存放在v數(shù)組之中。退出外循環(huán)之后,把v[0],v[1],v[2]相加除以3即得到各科總平均成績。最后按題意輸出各個成績。三、給出題目讓學生編程:30分鐘(師生互動)1、編寫一個程序,他能夠求兩個階乘之和。2、求出一個具有10個元素的數(shù)組中最大的元素,并輸出到屏幕上;作業(yè)及課外訓練:1、編寫一個程序,對一個數(shù)組中的所有整形元素做升序排序。參考資料(含參考書、文獻等):1、《C語言程序設計》(第三版)譚浩強清華大學出版社課后自我總結(jié)分析:10X周X次第X周,第2次課編寫時間XXXX年X月X日章節(jié)名稱第4章數(shù)組教學目的與要求:1、理解數(shù)組的含義和存儲特點;2、掌握一維數(shù)組、二維數(shù)組的聲明、初始化,掌握數(shù)組元素的引用、賦值及相互關(guān)系;3、掌握字符數(shù)組的聲明、初始化及字符數(shù)組元素的引用;理解字符串與字符數(shù)組的異同;掌握常用的字符串處理函數(shù);教學重點和難點:教學重點:一維數(shù)組、二維數(shù)組的定義、初始化,數(shù)組元素的引用;字符串與字符數(shù)組,常用的字符串處理函數(shù);教學難點:一維數(shù)組、二維數(shù)組,字符串與字符數(shù)組。教學組織(含課堂教學內(nèi)容、教學方法、輔助手段、師生互動、時間分配、注明板書設計部分):一、介紹本次教學內(nèi)容:30分鐘(多媒體演示,并結(jié)合適當板書)1、字符數(shù)組與一維字符數(shù)組:用來存放字符量的數(shù)組稱為字符數(shù)組。形式與前面介紹的數(shù)值數(shù)組相同。例如:charc[10];由于字符型和整型通用,也可以定義為intc[10]但這時每個數(shù)組元素占2個字節(jié)的內(nèi)存單元。字符數(shù)組也可以是二維或多維數(shù)組。例如:charc[5][10];即為二維字符數(shù)組。字符數(shù)組也允許在定義時作初始化賦值。例如:charc[10]={‘c’,‘’,‘p’,‘r’,‘o’,‘g’,‘r’,‘a(chǎn)’,’m’};賦值后各元素的值為:數(shù)組Cc[0]的值為‘c’c[1]的值為‘’c[2]的值為‘p’c[3]的值為‘r’c[4]的值為‘0c[5]的值為‘g’c[6]的值為‘r’c[7]的值為‘a(chǎn)’c[8]的值為‘m’其中c[9]未賦值,由的值為‘p’系統(tǒng)自動賦予0值。當對全體元素賦初值時也可以省去長度說明。例如:charc[]={`c`,``,`p`,`r`,`o`,`g`,`r`,`a`,`m`};這時C數(shù)組的長度自動定為9?!纠?】main(){inti,j;chara[][5]={{'B','A','S','I','C',},{'d','B','A','S','E'}};for(i=0;i<=1;i++){for(j=0;j<=4;j++)printf("%c",a[i][j]);printf("\n");}}本例的二維字符數(shù)組由于在初始化時全部元素都賦以初值,因此一維下標的長度可以不加以說明。在C語言中沒有專門的字符串變量,通常用一個字符數(shù)組來存放一個字符串。前面介紹字符串常量時,已說明字符串總是以'\0'作為串的結(jié)束符。因此當把一個字符串存入一個數(shù)組時,也把結(jié)束符'\0'存入數(shù)組,并以此作為該字符串是否結(jié)束的標志。有了'\0'標志后,就不必再用字符數(shù)組的長度來判斷字符串的長度了。C語言允許用字符串的方式對數(shù)組作初始化賦值。例如:charc[]={'c','','p','r','o','g','r','a','m'};可寫為:charc[]={"Cprogram"};或去掉{}寫為:charc[]="Cprogram";用字符串方式賦值比用字符逐個賦值要多占一個字節(jié),用于存放字符串結(jié)束標志'\0'。上面的數(shù)組c在內(nèi)存中的實際存放情況為:C

program\0‘\0'是由C編譯系統(tǒng)自動加上的。由于采用了‘\0'標志,所以在用字符串賦初值時一般無須指定數(shù)組的長度,而由系統(tǒng)自行處理。2、字符串的輸入與輸出在采用字符串方式后,字符數(shù)組的輸入輸出將變得簡單方便。除了上述用字符串賦初值的辦法外,還可用printf函數(shù)和scanf函數(shù)一次性輸出輸入一個字符數(shù)組中的字符串,而不必使用循環(huán)語句逐個地輸入輸出每個字符?!纠?】main(){charc[]="BASIC\ndBASE";printf("%s\n",c);}注意在本例的printf函數(shù)中,使用的格式字符串為“%s”,表示輸出的是一個字符串。而在輸出表列中給出數(shù)組名則可。不能寫為:printf("%s",c[]);【例3】main(){charst[15];printf("inputstring:\n");scanf("%s",st);printf("%s\n",st);}本例中由于定義數(shù)組長度為15,因此輸入的字符串長度必須小于15,以留出一個字節(jié)用于存放字符串結(jié)束標志`\0`。應該說明的是,對一個字符數(shù)組,如果不作初始化賦值,則必須說明數(shù)組長度。還應該特別注意的是,當用scanf函數(shù)輸入字符串時,字符串中不能含有空格,否則將以空格作為串的結(jié)束符。例如當輸入的字符串中含有空格時,運行情況為:inputstring:thisisabook輸出為:this從輸出結(jié)果可以看出空格以后的字符都未能輸出。為了避免這種情況,可多設幾個字符數(shù)組分段存放含空格的串。程序可改寫如下:【例4】main(){charst1[6],st2[6],st3[6],st4[6];printf("inputstring:\n");scanf("%s%s%s%s",st1,st2,st3,st4);printf("%s%s%s%s\n",st1,st2,st3,st4);}本程序分別設了四個數(shù)組,輸入的一行字符的空格分段分別裝入四個數(shù)組。然后分別輸出這四個數(shù)組中的字符串。在前面介紹過,scanf的各輸入項必須以地址方式出現(xiàn),如&a,&b等。但在前例中卻是以數(shù)組名方式出現(xiàn)的,這是為什么呢?這是由于在C語言中規(guī)定,數(shù)組名就代表了該數(shù)組的首地址。整個數(shù)組是以首地址開頭的一塊連續(xù)的內(nèi)存單元。如有字符數(shù)組charc[10],在內(nèi)存可表示如圖。C[0]C[1]C[2]C[3]C[4]C[5]C[6]C[7]C[8]C[9]

設數(shù)組c的首地址為2000,也就是說c[0]單元地址為2000。則數(shù)組名c就代表這個首地址。因此在c前面不能再加地址運算符&。如寫作scanf("%s",&c);則是錯誤的。在執(zhí)行函數(shù)printf("%s",c)時,按數(shù)組名c找到首地址,然后逐個輸出數(shù)組中各個字符直到遇到字符串終止標志'\0'為止。C語言提供了豐富的字符串處理函數(shù),大致可分為字符串的輸入、輸出、合并、修改、比較、轉(zhuǎn)換、復制、搜索幾類。使用這些函數(shù)可大大減輕編程的負擔。用于輸入輸出的字符串函數(shù),在使用前應包含頭文件"stdio.h",使用其它字符串函數(shù)則應包含頭文件"string.h"。下面介紹幾個最常用的字符串函數(shù)。字符串輸出函數(shù)puts格式:puts(字符數(shù)組名)功能:把字符數(shù)組中的字符串輸出到顯示器。即在屏幕上顯示該字符串?!纠?】#include"stdio.h"main(){charc[]="BASIC\ndBASE";puts(c);}字符串輸入函數(shù)gets格式:gets(字符數(shù)組名)功能:從標準輸入設備鍵盤上輸入一個字符串。本函數(shù)得到一個函數(shù)值,即為該字符數(shù)組的首地址?!纠?】#include"stdio.h"main(){charst[15];printf("inputstring:\n");gets(st);puts(st);}可以看出當輸入的字符串中含有空格時,輸出仍為全部字符串。說明gets函數(shù)并不以空格作為字符串輸入結(jié)束的標志,而只以回車作為輸入結(jié)束。這是與scanf函數(shù)不同的。字符串連接函數(shù)strcat格式:strcat(字符數(shù)組名1,字符數(shù)組名2)功能:把字符數(shù)組2中的字符串連接到字符數(shù)組1中字符串的后面,并刪去字符串1后的串標志“\0”【例7】#include"string.h"main(){staticcharst1[30]="Mynameis";intst2[10];printf("inputyourname:\n");gets(st2);strcat(st1,st2);puts(st1);}本程序把初始化賦值的字符數(shù)組與動態(tài)賦值的字符串連接起來。要注意的是,字符數(shù)組1應定義足夠的長度,否則不能全部裝入被連接的字符串。字符串拷貝函數(shù)strcpy格式:strcpy(字符數(shù)組名1,字符數(shù)組名2)功能:把字符數(shù)組2中的字符串拷貝到字符數(shù)組1中。串結(jié)束標志“\0”【例8】#include"string.h"main(){charst1[15],st2[]="CLanguage";strcpy(st1,st2);puts(st1);printf("\n");}本函數(shù)要求字符數(shù)組1應有足夠的長度,否則不能全部裝入所拷貝的字符串。三、給出題目讓學生編程:30分鐘(師生互動)1、使用字符串處理函數(shù),編寫一個程序,該程序能夠?qū)蓚€字符串合并為一個字符串;2、編寫一個函數(shù),能夠檢查用戶輸入的用戶名和密碼是否正確。例如,用戶名為“abc”,密碼為“123,那么用戶輸入正確,則登錄成功,否則,告知登錄失敗。作業(yè)及課外訓練:課后習題參考資料(含參考書、文獻等):1、《C語言程序設計》(第三版)譚浩強清華大學出版社課后自我總結(jié)分析:11X周X次第X周,第X次課編寫時間XXXX年X月X日章節(jié)名稱第5章1、2、3節(jié)教學目的與要求:教學目的:學習指針的概念,和基本用法。教學要求:1.掌握變量的指針和指向變量的指針變量。2.掌握用指針訪問所指向的變量。3.掌握指針與一維數(shù)組的關(guān)系。教學重點和難點:教學重點:通過指針訪問所指向的變量。教學難點:指針與一維數(shù)組的關(guān)系。教學組織(含課堂教學內(nèi)容、教學方法、輔助手段、師生互動、時間分配、注明板書設計部分):一、復習相關(guān)知識點:5分鐘(多媒體演示)復習一下一維數(shù)組的訪問,特別是一維字符型數(shù)組和字符串的處理。二、介紹本次教學內(nèi)容:5分鐘(板書書寫本次講授內(nèi)容提綱)1、指針概念,其實就是地址。2、建立指針變量與被指向變量的關(guān)系,及其訪問方式。(較費解)3、一維數(shù)組與指針,通過指針訪問一維數(shù)組。三、講授知識點:30分鐘(多媒體演示,并結(jié)合適當板書)1、指針型變量的定義形式。2、給指針變量賦值。(建立指向關(guān)系)3、通過指針訪問原變量。(闡述2個符號:&*的用法)4、使用指針的注意事項,必須先賦值,否則很危險。5、(設問:為什么指針變量未賦值比普通變量危險?)舉例說明:char*p;*p=‘a(chǎn)’;運行出現(xiàn)保護性錯誤。6、PPT展示了一維數(shù)組的內(nèi)存結(jié)構(gòu),列出下標訪問方式。7、將數(shù)組首地址賦值給指針變量。8、建立通過指針訪問數(shù)組元素的各種方式。9、引出指針變量的加減運算,結(jié)合數(shù)組元素進行對比說明。作業(yè)及課外訓練:5.235.24參考資料(含參考書、文獻等):《C語言程序設計》譚浩強編。課后自我總結(jié)分析:根據(jù)學生的反饋自我評價。12X周X次第X周,第X次課編寫時間XXXX年X月X日章節(jié)名稱第5章4、5節(jié)教學目的與要求:教學目的:學習用指針處理字符串的用法。教學要求:1.掌握字符型指針與字符型一維數(shù)組的關(guān)系。2.掌握字符型指針與常量字符串的關(guān)系。3.掌握指針與二維數(shù)組的關(guān)系。教學重點和難點:教學重點:弄清楚指針指向常量時的訪問禁忌。教學難點:指針與二維數(shù)組的關(guān)系。教學組織(含課堂教學內(nèi)容、教學方法、輔助手段、師生互動、時間分配、注明板書設計部分):一、復習相關(guān)知識點:5分鐘(多媒體演示)復習一下指針的間接訪問功能以及加減運算。二、介紹本次教學內(nèi)容:5分鐘(板書書寫本次講授內(nèi)容提綱)1、指針與常量字符串。2、通過指針問什么不能去改變常量字符串。(較費解)3、指針與二維數(shù)組。三、講授知識點:30分鐘(多媒體演示,并結(jié)合適當板書)1、將常量字符串賦值給一個字符型指針。2、(思考如何實現(xiàn)存儲的?)內(nèi)存空間的進一步闡釋。3、試圖通過指針改變常量字符串,引發(fā)錯誤。再次說明常量的含義。4、通過指針與一維數(shù)組元素的關(guān)系,引伸出指針與二維數(shù)組的關(guān)系。5、展示如何定義指向一維數(shù)組的指針,從而可以建立指針與二維數(shù)組的聯(lián)系。舉例說明:char(*p)[4];chara[5][4];p=a;6、利用指向一維數(shù)組的指針去訪問二維數(shù)組的元素。7、字符串數(shù)組的處理。8、指針型數(shù)組。作業(yè)及課外訓練:5.27參考資料(含參考書、文獻等):《C語言程序設計》譚浩強編。課后自我總結(jié)分析:根據(jù)學生的反饋自我評價。13X周X次第X周,第X次課編寫時間XXXX年X月X日章節(jié)名稱第5章6、7節(jié)教學目的與要求:教學目的:學習指針更深入的用法。教學要求:1.掌握二級指針的概念。2.掌握二級指針與原變量的關(guān)系。3.掌握指針訪問動態(tài)內(nèi)存的方法。教學重點和難點:教學重點:二級指針。教學難點:動態(tài)內(nèi)存分配的概念。教學組織(含課堂教學內(nèi)容、教學方法、輔助手段、師生互動、時間分配、注明板書設計部分):一、復習相關(guān)知識點:5分鐘(多媒體演示)復習一下指針的間接訪問功能。二、介紹本次教學內(nèi)容:5分鐘(板書書寫本次講授內(nèi)容提綱)1、指向指針的指針。2、動態(tài)內(nèi)存的概念。3、用指針訪問動態(tài)內(nèi)存空間。三、講授知識點:30分鐘(多媒體演示,并結(jié)合適當板書)1、定義一個二級指針。2、(思考這個二級指針該如何使用?)結(jié)合內(nèi)存空間進一步闡釋。3、關(guān)于更多級指針的引申。(不做過多的講解)。4、C語言中涉及的內(nèi)存空間管理問題。5、函數(shù)malloc()free)的使用。6、利用malloc實現(xiàn)一個1000萬個元素的空間。作業(yè)及課外訓練:5.26參考資料(含參考書、文獻等):《C語言程序設計》譚浩強編。課后自我總結(jié)分析:根據(jù)學生的反饋自我評價。14X周X次第X周,第13次課編寫時間XXXX年X月X日章節(jié)名稱第6章6.1-6.3節(jié)教學目的與要求:1、C語言庫函數(shù)的調(diào)用。2、函數(shù)的定義與聲明。3、函數(shù)的類型與返回值。4、函數(shù)的形式參數(shù)與實在參數(shù),參數(shù)值的傳遞。教學重點和難點:教學重點:函數(shù)的類型與返回值,形參與實參,參數(shù)值的傳遞教學難點:形參與實參教學組織(含課堂教學內(nèi)容、教學方法、輔助手段、師生互動、時間分配、注明板書設計部分):步驟一復習引導步驟二講授新課引入新課:開發(fā)大型軟件時如操作系統(tǒng)時,一個系統(tǒng)一個人完成不了,引入一種形式,多人同時編寫,形成自己的程序模塊,并可相互對接,最后合并完成。這樣其中的每一個程序模塊可以稱之為一個函數(shù)。一個較大的程序一般應分為若干個程序模塊,每一個模塊用來實現(xiàn)一個特定的功能。在C語言中,模塊的作用是由函數(shù)來完成的:說明:(1)C程序的執(zhí)行從main函數(shù)開始。也就是說系統(tǒng)在運行這個程序時不管先看到哪個函數(shù),首先找到main(),函數(shù)開始執(zhí)行。那有些同學問其它函數(shù)怎么被執(zhí)行上呢。因為如一個程序中有很多函數(shù),那么在main()函數(shù)中一定存在調(diào)用這些函數(shù)的語句,甚至于出現(xiàn)在main()中調(diào)用f1函數(shù),又在f1函數(shù)中調(diào)用f2函數(shù),就這樣從main()開始,至main()結(jié)束。(2)所有子函數(shù)都是平行的,任何子函數(shù)都不屬于其他函數(shù)函數(shù)之間可以相互調(diào)用(3)函數(shù)可返回值,也可不返回值例:getchar()在調(diào)用時一定有返回值,并將值賦給一個變量,ch=getchar(),也就是我們期待著從getchar這個函數(shù)得到一個字符賦給ch.putchar(ch)調(diào)用的功能是向顯示器輸出一個字符,這時此函數(shù)只完成了一個動作,向顯示器輸出一個字符,并沒有返回值,就是說看它是否有返回值,也是看此函數(shù)是否給誰賦值,即有無變量期待它返回一個值。如無,則它只是完成了一個過程,不需返回值。(4)從用戶的角度看,函數(shù)可分為:1)標準函數(shù):即庫函數(shù)是C語言在交給用戶使用之前,事先預計到了大量用戶經(jīng)常使用的功能,將編寫這些功能的程序語句省略下來,由C開發(fā)人員將其編寫好,提供給用戶,用戶就沒必要再自己編寫。2)自定義函數(shù):用戶自定義的函數(shù),種類\數(shù)量都很多)如前面所用到的fabs:求絕對值函數(shù)、getchar:標準輸入函數(shù),這些都是事先編好的,只要用戶在適合的地方調(diào)用即可。這些標準函數(shù)放在相對應的庫文件中,如:”math.h“庫文件中包含了所有數(shù)學函數(shù);“stdio.h”包含了標準輸入輸出函數(shù);“string.h”字符串函數(shù)。在調(diào)用時,用#inclde預處理命令后跟庫文件,作用就是告訴編譯系統(tǒng),需調(diào)用的函數(shù)在這個頭文件中,頭文件會帶領(lǐng)編譯系統(tǒng)找到C提供的庫函數(shù)的入口地址,這樣就可以通過include命令把C的庫函數(shù)的源代碼載入到用戶編寫的程序中。(5)從函數(shù)形式看,可分為:1)無參數(shù)函數(shù):如getchar()2)有參數(shù)函數(shù):如Printf(“格式控制符”,變量輸出表列)通過例題使學生初步認識函數(shù)及其執(zhí)行過程和作用。例6-1:通過例題使學生初步認識函數(shù)及其執(zhí)行過程和作用。p1(){printf(“**********\n”);}p2(){printf(“##########\n”);}p3(){printf(“計算機系\n”);}main(){p1();p2();p3();}說明:(1)此程序一共有P1,P2,P3,main()四個函數(shù),main()在最后;(2)Ctrl+F9后,系統(tǒng)開始找main()函數(shù)開始執(zhí)行,不管位置在哪,開始執(zhí)行函數(shù)體。(3)第一條語句是調(diào)用P1函數(shù),就是將控制權(quán)交給P1這個子函數(shù)里,執(zhí)行P1的函數(shù)體,執(zhí)行到函數(shù)的右邊大括號處返回,返回到調(diào)用處的下一條語句。(4)依此類推,最后再返回到main函數(shù),整個程序運行完畢?!?.1函數(shù)定義的和聲明函數(shù)的定義:類型標識符 函數(shù)名(類型標識符形參1,類型標識符形參2,…){函數(shù)體變量說明語句;函數(shù)體可執(zhí)行語句}詳細講解,此題為學生理解函數(shù)的關(guān)鍵例6-2:求兩個數(shù)中最大數(shù)詳細講解,此題為學生理解函數(shù)的關(guān)鍵intmax(intx,inty)/*定義兩個整型形參*/{intz;/*子函數(shù)中用到的內(nèi)部變量,為局部變量*/z=(x>y)?x:y;/*條件表達式*/return(z);/*將z值返回,通過max帶回調(diào)用處*/}main(){inta,b,c;scanf(“%d%d”,&a,&b);c=max(a,b);/*調(diào)用max子函數(shù),在調(diào)用的同時把a,b值傳進去給形參x,y*/printf(“Maxis%d\n”,c);}1.無參函數(shù)的定義形式格式:類型說明符函數(shù)名(){函數(shù)體}2.有參函數(shù)的定義形式格式:類型說明符函數(shù)名(形式參數(shù)說明){函數(shù)體}3.空函數(shù)的定義形式格式:類型說明函數(shù)名([形式參數(shù)表列]){}/*空語句*/作用:調(diào)用此函數(shù)時,什么工作也不做,沒有任何實際作用。只是這些函數(shù)未編好,先占一個位置,等以后擴充程序時用一個編好的函數(shù)補充上。函數(shù)的聲明: 當函數(shù)定義在主調(diào)函數(shù)之后,在主調(diào)函數(shù)中需要對被調(diào)用函數(shù)進行聲明。格式:類型標識符函數(shù)名(類型標識符形參1,類型標識符形參2,…);類型標識符函數(shù)名(類型標識符,類型標識符,…);類型標識符函數(shù)名();例如:1)floatfun(inta,doubleb);2)floatfun(int,double);3)floatfun();說明:(1)函數(shù)與變量一樣,必須先定義后使用。(2)如果沒有聲明函數(shù)類型,則編譯程序自動將整型作為函數(shù)的缺省類型。(3)函數(shù)聲明中,末尾的分號不可缺少?!?.2函數(shù)的調(diào)用與返回6.2.1函數(shù)名(實參表列)max(a,b)說明:(1)如調(diào)用無參函數(shù),實參表列可忽略,但括號不能省。(2)實參的個數(shù)和形參一般相等(3)實參和形參的類型應一一對應,必要時使用類型轉(zhuǎn)換注意:不同系統(tǒng)中,實參的計算順序不同,為避免由此而引起的混亂,一般應用調(diào)用函數(shù)前計算出實參值。例:讀程序,寫結(jié)果intf(inta,intb){intc;if(a>b)c=1;elseif(a==b)c=0;TC計算順序右至左∴TC計算順序右至左∴a=3,b=3,c=0但有些系統(tǒng)計算順序左至右∴a=2,b=3,a=-1容易混亂,通用性差。所以改進。inti=2,j,p;j=++i;inti=2,j,p;j=++i;p=f(i,j);printf(“%d”,p);}main(){inti=2,p;p=f(i,++i);printf(“%d”,p);}結(jié)果:0函數(shù)調(diào)用方式(引入方式)1.函數(shù)調(diào)用語句格式:函數(shù)名(實參表);如:p1()說明:這種方式常用于調(diào)用無返回值的函數(shù)。2.函數(shù)表達式(函數(shù)必須返回一個值并參與表達式的運算)一般形式為:c=2*max(a,b);c=max(a,b);說明:1)這種方式用于調(diào)用有返回值的函數(shù)。函數(shù)的返回值將參加表達式的運算。2)不能用于void型函數(shù)(∵void不能返回值)3.函數(shù)參數(shù)(函數(shù)調(diào)用作為一個函數(shù)的實參)一般形式為:m=max(a,max(b,c));printf(“%d”,max(b,c);說明:此種調(diào)用方式是把函數(shù)作為函數(shù)的參數(shù)。補充內(nèi)容函數(shù)調(diào)用的執(zhí)行過程1.按順序計算實參中各表達式的值2.按照位置,將實參的值一一對應地傳送給形參3.執(zhí)行被調(diào)用函數(shù)4.當遇到return(表達式)語句時,計算機表達式的值,并返回主調(diào)函數(shù)main(){inti=2;運行結(jié)果:416運行結(jié)果:416256printf(“%d\n”i=square(i));}square(x)int{return(x*x);}注意:1.在程序中調(diào)用函數(shù)需滿足以下條件(1)被調(diào)用函數(shù)必須存在,且遵循“先定義后使用”的原則(即在調(diào)用子函數(shù)這個調(diào)用點之前,它必須已被定義)(2)如果被調(diào)用函數(shù)的定義在主調(diào)函數(shù)之后,并且不是整型或字符型,可以先給出“原形聲明”2.原形聲明的形式為:類型說明函數(shù)名(參數(shù)類型,參數(shù)類型…);注意:沒有函數(shù)體3.說明:在主函數(shù)中對被調(diào)函數(shù)作類型說明,意在告訴編譯系統(tǒng),本函數(shù)中將要用到的某函數(shù)是什么類型,以便讓編譯系統(tǒng)作出相應的處理。4.注意:在編程時必須將子函數(shù)放在前面,主函數(shù)放在最后,避免因原形未作聲明而出錯。例:讀程序,寫結(jié)果floata(float)main(){floatx=-1.2,y;y=a(x)printf(“x=%f,a(x)=%f\n”,x,y);}floata(floatx){return(x>0?x;-x);}}結(jié)果:x=-1.2,a(x)=1.26.2.21.返回函數(shù)值的方法1)一個函數(shù)如有返回值,必須使用return語句,將得到的值返回到主調(diào)函數(shù)。格式:return(表達式)或return表達式(先求解表達式值,再返回該表達式的值)結(jié)果:1!is12!is23!is6將數(shù)帶進去一步步做。例結(jié)果:1!is12!is23!is6將數(shù)帶進去一步步做。{inti;for(i=1;i<=5;i++)printf((“%d!is%d\n”,i,factorial(i));}factorial(intn){intvalue;for(value=1;n>1;n--)value*=n;return(value);}2)一個函數(shù)可以有若干個return語句,但不論執(zhí)行到哪個return語句,都將結(jié)束函數(shù)的調(diào)用返回主調(diào)函數(shù)。一個程序有多個return語句,說明該函數(shù)有多個出口,但只能執(zhí)行一次return語句例6-5:main()一個

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論