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

下載本文檔

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

文檔簡介

PAGE1C語言程序設計任務驅(qū)動式教程教學大綱一、本課程的性質(zhì)、目的和任務1.課程的性質(zhì)《C語言程序設計》是計算機相關專業(yè)的一門重要的專業(yè)基礎課程。也是一門實踐性很強的課程,既要掌握概念,又要動手編程,還要上機調(diào)試運行。它既可以為其它專業(yè)課程奠定程序設計的基礎,又可以作為其它專業(yè)課程的程序設計工具。2.課程的目的設置本課程的主要目的是通過對C語言程序設計的語法規(guī)則、數(shù)據(jù)類型、數(shù)據(jù)運算、語句、系統(tǒng)函數(shù)、程序結(jié)構(gòu)的學習,掌握應用C語言進行程序設計的技能,為進行各種實用程序開發(fā)奠定一個良好的基礎。3.課程的任務本課程的主要任務是培養(yǎng)學生:⑴熟練掌握C語言程序設計的數(shù)據(jù)類型(基本類型、構(gòu)造類型、指針類型等)和各類運算符,能正確使用表達式實現(xiàn)各種數(shù)據(jù)的簡單加工。⑵熟練掌握C語言程序設計的三種基本結(jié)構(gòu)(順序、選擇、循環(huán))的特點,能使用相關語句完成這三種基本結(jié)構(gòu)的程序設計任務。⑶掌握C語言程序設計的常用庫函數(shù)使用,以及用戶函數(shù)的定義、調(diào)用、參數(shù)傳遞等方法。⑷熟練掌握閱讀和分析簡短程序的方法和技巧。⑸熟練掌握設計和調(diào)試簡短程序的方法和技巧。⑹了解并初步掌握實用程序的開發(fā)與調(diào)試技術(shù)。(7)培養(yǎng)嚴肅,認真、一絲不茍的工作作風。二、教學目標和重點1.認識C語言程序(1)知識目標①掌握C語言程序基本結(jié)構(gòu)②熟悉C語言程序執(zhí)行過程(2)技能目標①能夠理解C語言的特點②能夠掌握C語言程序基本結(jié)構(gòu)③能夠理解C語言程序執(zhí)行過程④能夠熟悉VisualC++6.0集成開發(fā)環(huán)境(3)任務目標①任務一:走進C語言世界②任務二:制作一張自己的小名片(4)重點、難點重點:C程序的基本結(jié)構(gòu)。難點:C程序的基本結(jié)構(gòu)(多個函數(shù)構(gòu)成C程序)2.C語言程序設計基礎(1)知識目標①掌握標識符及命名規(guī)則②掌握基本數(shù)據(jù)類型及其表示形式③理解運算符的運算規(guī)則及優(yōu)先級關系④學會基本數(shù)據(jù)類型間的轉(zhuǎn)換規(guī)則(2)技能目標①能夠正確命名標識符②能夠表示變量和常量③能夠應用運算符和表達式④能夠進行基本數(shù)據(jù)類型的轉(zhuǎn)換(3)任務目標①任務一:計算圓的面積②任務二:編制密碼器③任務三:分離數(shù)字問題(4)重點和難點重點:基本數(shù)據(jù)類型常量的書寫方法和變量的定義、賦值、初始化、使用方法;基本運算符的運算規(guī)則及優(yōu)先級別;表達式的構(gòu)成規(guī)則和計算。難點:運算符優(yōu)先級別,混合表達式計算,自增、自減運算符的使用,字符常量與字符串常量。3.順序結(jié)構(gòu)程序設計(1)知識目標①了解程序的基本概念②掌握程序的基本結(jié)構(gòu)③了解語句的分類④熟悉輸入輸出函數(shù)(2)技能目標①能夠使用C語言中的語句②能運用輸入輸出函數(shù)和賦值語句進行順序結(jié)構(gòu)程序設計(3)任務目標①任務一:菜單設計②任務二:小寫字母轉(zhuǎn)換為大寫字母③任務三:輸出學生個人信息(4)重點、難點重點:賦值語句;putchar函數(shù);getchar函數(shù);printf函數(shù);scanf函數(shù)。難點:輸入/輸出函數(shù)中的格式描述符。4.選擇結(jié)構(gòu)程序設計(1)知識目標①掌握關系運算符和關系表達式書寫規(guī)則②掌握邏輯運算符和邏輯表達式書寫規(guī)則③了解選擇結(jié)構(gòu)程序的基本概念④熟悉實現(xiàn)選擇結(jié)構(gòu)的方法(2)技能目標①能夠運用if語句進行選擇結(jié)構(gòu)程序設計②能夠運用多分支選擇結(jié)構(gòu)程序設計③能夠運用switch語句進行多分支選擇結(jié)構(gòu)設計④能夠運用條件運算符表示選擇結(jié)構(gòu)(3)任務目標①任務一:身高預測②任務二:閏年判斷③任務三:劃分考試成績等級④任務四:旅游景點門票打折⑤任務五:小型計算器的設計(4)重點、難點重點:if-else、switch語句的格式和功能。難點:邏輯運算的“短路”現(xiàn)象;正確選用合適的語句來設計選擇結(jié)構(gòu)的程序;switch語句和break語句的使用。5.循環(huán)結(jié)構(gòu)程序設計(1)知識目標:①了解循環(huán)結(jié)構(gòu)設計方法②熟練掌握當型循環(huán)while語句③熟練掌握直到型循環(huán)do-while語句④熟練循環(huán)for語句⑤掌握控制循環(huán)break和continue語句⑥了解循環(huán)嵌套程序結(jié)構(gòu)(2)技能目標:①學會循環(huán)結(jié)構(gòu)程序設計的方法與步驟②能夠運用while語句進行循環(huán)結(jié)構(gòu)程序設計③能夠運用do-while語句進行循環(huán)結(jié)構(gòu)程序設計④能夠運用for語句進行循環(huán)結(jié)構(gòu)程序設計⑤能夠運用break和continue語句控制循環(huán)⑥綜合運用三種循環(huán)語句進行嵌套循環(huán)結(jié)構(gòu)程序設計(3)任務目標①任務一:紅歌比賽計算平均分②任務二:翻牌游戲③任務三:模擬中獎機④任務四:經(jīng)典九九乘法表⑤任務五:找朋友⑥任務六:猜數(shù)游戲(4)重點、難點重點:while、do-while、for、break、countinue的格式和功能,三種循環(huán)結(jié)構(gòu)的程序設計方法。難點:break和continue語句的正確使用,三種循環(huán)之間的相互轉(zhuǎn)換。6.數(shù)組(1)知識目標:①了解數(shù)組的概念②熟練掌握一維數(shù)組與引用③掌握二維數(shù)組與引用④掌握字符數(shù)組與字符串(2)技能目標:①會定義一維數(shù)組、能夠進行數(shù)組元素的引用②會定義二維數(shù)組能夠進行數(shù)組元素的引用③會定義字符數(shù)組④能夠區(qū)別字符串數(shù)組和字符數(shù)組(3)任務目標①任務一:學生成績存儲②任務二:學生成績計算與查找最值③任務三:學生成績排序④任務四:多門課程學生成績存儲⑤任務五:多門課程學生成績計算與查找最值⑥任務六:密碼加密(4)重點和難點重點:一維數(shù)組、二維數(shù)組、字符數(shù)組的定義、初始化和數(shù)組元素的使用,數(shù)組中的查找和排序,字符串處理函數(shù)的使用。難點:數(shù)組中的地址概念,字符串與字符數(shù)組的區(qū)別、存放若干字符和存放字符串的字符數(shù)組的差別。7.函數(shù)(1)知識目標①學會函數(shù)的定義與調(diào)用②理解實參與形參的關系③了解變量的作用域與生存期(2)技能目標①能夠掌握函數(shù)的定義與調(diào)用②能夠正確運用實參和形參(3)任務目標①任務一:菜單輸出②任務二:學生成績計算③任務三:猜年齡(4)重點、難點重點:函數(shù)的定義和調(diào)用方法,調(diào)用函數(shù)時數(shù)據(jù)傳遞方法,變量的屬性和作用域。難點:值傳遞和地址傳遞的區(qū)別,變量的生命期和作用域。8.指針(1)知識目標①了解指針概念②掌握指針變量的定義、賦值、引用③了解指針變量作為函數(shù)參數(shù)④了解指針與數(shù)組(2)技能目標①能夠運用指針指向變量②會運用指針變量作為函數(shù)參數(shù)③會運用指針指向數(shù)組求(3)任務目標①任務一:交換兩個變量的值②任務二:三個數(shù)的排序③任務三:字母放大鏡(4)重點、難點重點:指針變量的定義、初始化和賦值方法,利用指向變量、數(shù)組、字符串的指針變量來正確引用變量、數(shù)組元素、字符串,取變量、數(shù)組、字符串地址的方法。難點:指針的概念,指向多維數(shù)組的指針變量和多維數(shù)組的地址,主函數(shù)中參數(shù)的引用方法。9.結(jié)構(gòu)體與文件(1)知識目標①掌握結(jié)構(gòu)體類型的定義方法②掌握結(jié)構(gòu)體類型變量、數(shù)組和指針的定義方法③掌握結(jié)構(gòu)體成員的引用方法④掌握結(jié)構(gòu)體類型變量的賦值⑤了解編譯預處理命令的使用方法⑥了解文件的基本概念⑦了解文件操作的幾個重要函數(shù)(2)技能目標①能夠利用結(jié)構(gòu)體解決日常工作中的問題②能夠進行文件的基本操作操作(3)任務目標①任務一:存儲職工信息②任務二:實現(xiàn)小型通訊錄(4)重點、難點重點:結(jié)構(gòu)類型數(shù)據(jù)的特點和定義,結(jié)構(gòu)類型變量、數(shù)組、指針變量的定義、初始化和成員引用方法,聯(lián)合類型的定義和引用方法;緩沖文件系統(tǒng)中“文件類型指針”的概念,有關文件操作(打開、關閉、四種形式的讀寫、定位、出錯檢測)的系統(tǒng)函數(shù)使用。難點:鏈表數(shù)據(jù)的處理;有關文件處理的各種系統(tǒng)函數(shù)的使用;特別是讀寫函數(shù)種類較多、功能相近,造成記憶和選擇上的困難。三、教學基本內(nèi)容及學時分配(總學時:56學時)1.課程結(jié)構(gòu)及學時分配序號工作項目/單元/模塊工作任務/學習任務/學習主題建議學時1第一單元認識C語言程序任務1:制作一張自己的小名片42第二單元C語言程序設計基礎任務2:計算圓的面積任務3:密碼編制程序4任務4:分離數(shù)字問題43第三單元順序結(jié)構(gòu)程序設計任務5:菜單設計任務6:小寫字母轉(zhuǎn)換為大寫字母任務7:輸出學生個人信息44第四單元選擇結(jié)構(gòu)程序設計任務8:身高預測任務9:閏年判斷4任務10:劃分考試成績等級任務11:旅游景點門票打折任務12:小型計算器的設計45第五單元循環(huán)結(jié)構(gòu)程序設計任務13:紅歌比賽計算平均分任務14:翻牌游戲任務15:模擬中獎機4任務16:經(jīng)典九九乘法表任務17:找朋友任務18:猜數(shù)游戲46第六單元數(shù)組任務19:學生成績存儲任務20:學生成績計算和查找最值任務21:學生成績排序4任務22:多門課程學生成績的存儲任務23:多門課程學生成績計算和查找最值任務24:密碼加密47第七單元函數(shù)任務25:菜單輸出任務25:學生成績計算任務27:猜年齡88第八單元指針任務28:交換兩個變量的值任務29:三個數(shù)的排序任務30:字母放大鏡89第九單元結(jié)構(gòu)體和文件任務31:存儲聯(lián)系人的信息任務32:實現(xiàn)小型通訊錄4總計562.課程內(nèi)容安排第一單元認識C程序程序基本結(jié)構(gòu)·C語言編寫的程序稱為源程序,擴展名為.C·C語言程序的基本框架包括編譯預處理和函數(shù)組兩部分·編譯預處理以#開頭,格式為:#include<stdio.h>·函數(shù)是構(gòu)成C的基本單位,一個C語言程序有且只有一個main函數(shù),是程序運行的起點。格式為:voidmain()·//為單行注釋,/**/為多行注釋·書寫格式注意規(guī)范,逐層縮進,大括號對齊·printf函數(shù)的簡單使用2學時程序執(zhí)行過程每個C語言程序?qū)懲旰螅际窍染幾g,后鏈接,最后運行。(.c.obj.exe)這個過程中注意.c和.obj文件時無法運行的,只有.exe文件才可以運行。熟悉VisualC++6.0集成開發(fā)環(huán)境·掌握c程序設計編程環(huán)境visualc++6.0,掌握運行一個c程序設計的基本步驟(包括編輯、編譯、連接和運行)2學時第二單元C語言程序設計基礎標識符標識符概念:程序中變量、常量、函數(shù)、數(shù)組、結(jié)構(gòu)體以及文件所起的名稱稱為標識符。2學時關鍵字類型說明符:int\float\char\double等語句定義符:if\for\while\return等預定義標識符:define、include、printf、scanf等·用戶自定義標識符由字母,數(shù)字,下劃線組成,并且第一個必須為字母或下劃線;不允許使用關鍵字作為標識符的名稱;標識符命名以直觀且易于拼讀為宜,即做到“見名知意”;標識符區(qū)分大小寫。數(shù)據(jù)類型·基本數(shù)據(jù)類型整型:int占用空間大小是2個或4個字節(jié)字符型:char占用1字節(jié)(使用時查看ASCII碼表),如’A’ASCII碼為65,而’a’的-ASCII碼為97浮點型:float占用空間4字節(jié)或8字節(jié)有效數(shù)字6-7位Double占用空間為8字節(jié)有效數(shù)字15-16位枚舉類型·指針類型·結(jié)構(gòu)類型:數(shù)組類型,結(jié)構(gòu)體類型、共同體類型·空類型常量?數(shù)字常量i.普通數(shù)字:1,35,2.7ii.指數(shù)形式:2.45e-2等價于2.45*10-2注意e大小寫皆可,e前面的數(shù)字不能省,就算是1也不能省,后面的數(shù)字一定要是整數(shù)iii.長整型,單精度浮點型:3235L,32.5F分別表示3235是長整型數(shù)據(jù),32.5是單精度浮點型,若不寫上L,F(xiàn)則表示3235是整型,32.5是雙精度浮點型,L,F(xiàn)大小寫皆可?字符常量i.普通字符常量:用單引號把一個字符括起來,如’A’,’@’ii.轉(zhuǎn)義字符常量:一對單引號括起來并以“\”開頭的字符序列,如’\n’(回車)、’\123’(8進制123對應的字符),’\x23’(16進制23對應的字符)?字符串常量用一對雙引號把一個字符序列括起來,如“ABCef”,系統(tǒng)存放字符串常量,每個字符分配一個字節(jié),各字符所占字節(jié)緊鄰,并且字符串末尾會給再開一個字節(jié)里面放一個’\0’做為結(jié)束標志。?符號常量定義格式:#define符號常量名符號常量值,如#defineN20則定義了符號常量N,其值為20,·注意符號常量名和符號常量值之間是用空格隔開,而不是寫上=號,#define和符號常量名之間也有空格的。變量?變量的定義格式類型名變量名;如inta;//定義了一個整型變量a。變量名要符合標識符命名規(guī)則類型說明了此變量所占用的空間大小?變量賦值,初始化inta=3;//定義的同時初始化inta;a=6*9;//定義后在程序中進行賦值?變量的值只有在賦值操作時才會被改變,即將其放在等號左邊時才會改變它的值,或自增自減操作:a=5,a++,a--,像a+3并未改變a的值,只是使用了a的值總結(jié):變量三要素,名稱、類型和值運算符及表達式算術(shù)表達式:+,-,*,/,%幾點說明:·若“/”兩邊都是整型,結(jié)果就是一個整型。如:3/2的結(jié)果就是1.·“/”如果有一邊是小數(shù),那么結(jié)果就是小數(shù)。3/2.0的結(jié)果就是1.5·“%”符號是余數(shù),%符號兩邊要求是整數(shù)。2學時·賦值運算符=如:a=3把賦值號右邊的3賦值給賦值號左邊的變量a·復合賦值運算符+=,-=,*=,/=算術(shù)運算符和賦值運算符復合使用·賦值表達式·注意:常量不可以賦值。賦值的左邊只能是一個變量。復合運算符,例a*=2+3;運行完成后,a的值是12。首先要在2+3的上面打上括號。變成(2+3)再運算?!べx值運算優(yōu)先級最低自加與自減運算符:++,--自加、自減表達式:如:a++++a--bb—等不管前綴++還是后綴++,對于變量的作用都是加一操作,但對于表達式來講,++在前的表達式用的是變量加一以后的新值,++在后的表達式用的變量原來的值。--運算符同數(shù)據(jù)類型轉(zhuǎn)換·自動轉(zhuǎn)換,char-int-float-double·強制轉(zhuǎn)換(類型名)表達式一定是(int)a不是int(a),注意類型上一定有括號的?!ぷ⒁猓海╥nt)(a+b)和(int)a+b的區(qū)別。前是把a+b轉(zhuǎn)型,后是把a轉(zhuǎn)型再加b第三單元順序結(jié)構(gòu)程序設計程序算法+數(shù)據(jù)結(jié)構(gòu)2學時算法描述方法流程圖幾種圖形表示方式:框圖;N-S圖;偽代碼等程序基本結(jié)構(gòu)順序結(jié)構(gòu)程序基本概念:按照書寫的順序執(zhí)行,即語句的執(zhí)行順序與書寫順序一致順序結(jié)構(gòu)程序的組成:輸入算法所需要的數(shù)據(jù)、進行運算和數(shù)據(jù)處理、輸出運算結(jié)果數(shù)據(jù)順序結(jié)構(gòu)程序的流程:固定、不跳轉(zhuǎn)選擇結(jié)構(gòu)程序基本概念選擇結(jié)構(gòu)程序流程圖表示法循環(huán)結(jié)構(gòu)基本概念循環(huán)結(jié)構(gòu)程序的流程圖表示方法語句的分類九種控制語句:if…else;switch;for;while;do…while;continue;break;goto;return表達式語句:任意一種類型的表達式加入一個分號就形成了表達式語句復合語句:用一對大括號括起來的一個或若干語句空語句:只有一個分號的語句輸入輸出函數(shù)·字符串的原樣輸出printf(“字符串常量”);把需要輸出的字符放在雙引號中即可·帶格式的輸出printf(“格式說明符”,輸出項列表)格式說明:%d整型int%c字符char%ld長整型longint%s字符串%f浮點型float%o八進制%lf雙精度浮點數(shù)double輸出項列表:可以是一個輸出項,也可以是多個輸出項,若是多個輸出項,中間用逗號分隔舉例:printf(“%2d”,123);第二部分有三位,大于指定的兩位,原樣輸出123printf(“%5d”,123);第二部分有三位,小于指定的五位,左邊補兩個空格123printf(“%-5d”,123);靠左顯示右補空格printf(“%10f”,1.25);小數(shù)要求補足6位的,沒有六位的補0,。結(jié)果為1.250000printf(“%5.3f”,1.25);小數(shù)三位,整個五位,結(jié)果為1.250(小數(shù)點算一位)printf(“%3.1f”,1.25);小數(shù)一位,整個三位,結(jié)果為1.3(要進行四舍五入)·格式輸入函數(shù):Scanf(“格式說明符”,輸入項地址列表)格式說明符的使用與printf()函數(shù)同注意:地址項列表中的&不能省略,多個地址項用逗號隔開屏幕輸入的方法典型例題:編寫程序,求半徑為r的圓的面積#include<stdio.h>#definePI3.14159 //聲明常量voidmain(){floatr,s;//聲明float型變量printf(“請輸入圓的半徑:”);scanf(“%f”,&r);//輸入r的值s=PI*r*r;printf(“s=%f”,s);//格式化輸出}·字符輸出函數(shù):格式:putchar(ch)例如:putchar(‘y’)把字符y輸出到屏幕中?!ぷ址斎牒瘮?shù)格式:getchar()例如:a=getchar()從鍵盤得到輸入的一個字符給變量a。注意:getchar()函數(shù)是沒有參數(shù)的,典型例題:從鍵盤輸入一個小寫字母,把它轉(zhuǎn)換為大寫字母。#include<stdio.h>voidmain(){charch;printf(“請輸入一個小寫字母:”);scanf(“%c”,&ch);//輸入字符型變量的值ch=ch-32;printf(“轉(zhuǎn)換成的大寫字母為:%c”,ch);}學會順序結(jié)構(gòu)程序設計方法·掌握c語言程序設計的基本框架、學會簡單順序結(jié)構(gòu)的程序編寫?!ち私獬绦蛘{(diào)試的思想,能找出并改正c程序中的語法錯誤2學時第四單元選擇結(jié)構(gòu)程序設計關系運算符和關系表達式·關系運算符(>、<、>=、<=、、==、!=),注意書寫與數(shù)學上的書寫的區(qū)別,關系運算符==和賦值運算符=之間的區(qū)別·關系表達式:用關系運算符連接起來的表達式,例如:a>b·關系表達式的值:1或0;在C語言中非0即為真,0為假2學時邏輯運算符和邏輯表達式邏輯運算符(&&、||、?。┻壿嫳磉_式:用邏輯表達式連接起來的表達式,邏輯運算符的左右兩邊一般情況下是關系表達式,例如:(x%5==0)&&x%(7==0)邏輯表達式的值:1或0;選擇結(jié)構(gòu)·選擇結(jié)構(gòu)概念:選擇結(jié)構(gòu)是三種結(jié)構(gòu)之一,選擇結(jié)構(gòu)也稱為分支結(jié)構(gòu),是對給定的條件進行判斷,依據(jù)條件成立與否選擇執(zhí)行不同的操作的一種程序設計方法·選擇結(jié)構(gòu)的表示方法:用流程圖表示實現(xiàn)選擇結(jié)構(gòu)的方法單分支選擇語句·語法:If(表達式){語句體}…·功能:判斷括號內(nèi)表達式的值,若其值不為0,則執(zhí)行語句體中的語句,否則,跳過語句體,執(zhí)行語句體的后續(xù)語句·流程圖:·典型例題編一個程序,若通過鍵盤輸入的是大寫字母,則把它轉(zhuǎn)換成小寫字母輸出,若輸入的是小寫字母,則不轉(zhuǎn)換#include<stdio.h>voidmain(){charch;printf(“請輸入一個字母:”);scanf(“%c”,&ch);if(ch>=’a’&&ch<=’z’)ch=ch-32;printf(“轉(zhuǎn)換成的大寫字母為:%c”,ch);}雙分支選擇語句·語法:If(表達式){語句體1}else{語句體2}·功能:判斷括號內(nèi)表達式的值,若其值不為0,則執(zhí)行語句體1中的語句,否則,執(zhí)行語句體2中語句·流程圖·典型例題設計一個應用程序,判斷某一年是否為閏年#include<stdio.h>voidmain(){inty,leap;;printf(“請輸入一個年份:”);scanf(“%n”,&y);if((y%4==0)&&(y%100!=0)||(y%400==0))//閏年條件,經(jīng)典leap=1;elseleap=0;if(leap==1)printf(“%d是一個閏年”,y);elseprintf(“%d不是一個閏年”,y);}條件表達式實現(xiàn)選擇結(jié)構(gòu)·條件運算符::?:運算符是C語言中唯一一個三目運算符號,即它有三個參與運算的操作數(shù)·條件表達式的表示:表達式1?表達式2:表達式3·條件表達式的值:先求表達式1的值,如果表達式1的值為非0,則整個條件表達式獲取表達式2的值,否則獲取表達式3的值表達式1通常為關系表達式或邏輯表達式;條件表達式通常用在賦值語句中,如man=(a>b)?a:b;條件運算符是一對運算符,不能分開使用·典型例題編寫一個程序,找出兩方數(shù)據(jù)中的最大數(shù)#include<stdio.h>voidmain(){Inta,b,max;printf(“請輸入兩個數(shù)據(jù):”);scanf(“%d%d”,&a,&b);man=(a>b)?a:b;printf(“兩個數(shù)據(jù)中的最大數(shù)為:%d”,max);}2學時嵌套if語句·基本概念:if語句體中有出現(xiàn)了if語句,稱為if語句的嵌套·語法:if(表達式1)If(表達式2){語句體1}else{語句體2}elseIf(表達式3){語句體3}else{語句體4}·功能:先判斷表達式1的值,若表達式1的值為非0,再判斷表達式2的值,若表達式2的值為非0,則執(zhí)行語句體1,否則若表達式2的值為0,則執(zhí)行語句體2;若表達式1的值為0,再判斷表達式3的值,若表達式3的值為非0,則執(zhí)行語句體3,否則執(zhí)行語句體4·流程圖·注意:嵌套if語句的使用非常靈活,不僅單分支的if可以嵌套,其它形式的if語句都可以嵌套;被嵌套的if語句本身又可以使一個嵌套的if語句,稱為if語句的多重嵌套;·注意:在多重嵌套的if語句中else總是與離它最近并且沒有與其它else配對的if配對·典型例題從鍵盤輸入三個實數(shù)a,b,c,求出其中的最小數(shù)#include<stdio.h>voidmain(){floata,b,cmin;printf(“請您輸入三個實數(shù):”);scanf(“%f%f%f”,&a,&b.&c);if(a<b){if(a<c)min=a;elsemin=c;}else{If(a<c)min=b;else{if(b<c)min=b;elsemin=c;}}Printf(“三個數(shù)據(jù)中的最小數(shù)為:%f”,min);}·多重if…else語句語法:if(表達式1){語句體1}elseif(表達式2){語句體2}elseif(表達式3){語句體3}………elseif(表達式n){語句體n}else{語句體n+1}·功能:先判斷表達式1的值,若表達式1的值為非0,則執(zhí)行語句體1,然后跳出多分支語句結(jié)構(gòu),繼續(xù)執(zhí)行選擇結(jié)構(gòu)下邊的語句;若表達式1的值為假,不執(zhí)行語句體1,再來判斷表達式2的值是否為真,如果表達式2為真,則執(zhí)行語句體2,然后跳出選擇語句結(jié)構(gòu),若為假,繼續(xù)判斷表達式3是否為真………以此類推如果所有的條件都不成立,則執(zhí)行最后一個else下面的語句體n+1,然后繼續(xù)執(zhí)行選擇結(jié)構(gòu)下面的語句·流程圖·典型例題編寫一個程序,要求輸入一個學生的考試成績,輸出其分數(shù)和對應的等級。學生成績分為5個等級:小于60分的為不及格;60-70之間的為及格;70-80之間的為中等;80-90分之間的良好;90分以上的為優(yōu)秀。#include<stdio.h>voidmain(){intf;printf(“請輸入一個學生的成績:”);scanf(“%d”,&f);if(f<60)printf(“不及格”);elseif(f<70)printf(“及格”);elseif(f<80)printf(“中等”);elseif(f<90)printf(“良好”);elseif(f<=100)printf(“優(yōu)秀”);}注意:多重if語句更適用于區(qū)間判斷。如果if后的表達式只寫了半幅,如上題f<80,而不是f>70&&f<80,那么if后的表達式順序不能顛倒,否則得不到希望的結(jié)果。switch語句實現(xiàn)多路分支·概念:switch語句又稱為開關語句,在C語言中專門用來處理多分支選擇問題,比嵌套if語句更加靈活方便·語法:Switch(表達式){case常量1:語句組1;break;case常量2:語句組2;break;……….case常量n:語句組n;break;default:語句組n+1;break;}·功能:先計算switch后面表達式的值,再依次與每一個case后的常量表達式的值進行比較,如果匹配,則以該case為入口,執(zhí)行相應的語句序列。若相應的語句序列后面有break,,則跳出switch結(jié)構(gòu),執(zhí)行switch結(jié)構(gòu)后面的語句;若相應的語句序列后面沒有break,則執(zhí)行下一個case后面的語句序列。若所有case后面的常量表達式的值沒有與switch后表達式的值相等的情況,執(zhí)行default后面語句?!ち鞒虉D:·有關說明:括號內(nèi)的表達式可以使整型或字符型;case后的每個常量表達式必須各不相同;case子句和default子句的位置可以使任意的;每個case之后的執(zhí)行語句可以多于一個,但不必加{};·典型例題:編寫一個程序,要求輸入一個學生的考試成績,輸出其分數(shù)和對應的等級。學生成績分為5哥等級:小于60分的為不及格;60-70之間的為及格;70-80之間的為中等;80-90分之間的良好;90分以上的為優(yōu)秀(用switch語句完成)#include<stdio.h>voidmain(){intf;printf(“請輸入一個學生的成績:”);scanf(“%d”,&f);Switch(f/10){case10:case9:printf(“優(yōu)秀”);break;case8:printf(“良好”);break;case7:printf(“中等”);break;case6:printf(“及格”);bresk;defaukt:printf(“不及格”);break;}}掌握選擇結(jié)構(gòu)程序設計方法·了解C語句表示邏輯量的方法(以0代表“假”以1代表“真”);·學會正確使用邏輯、關系運算符,學會書寫邏輯表達式;·學會使用if語句和switch語句編寫選擇結(jié)構(gòu)程序;·學會使用switch語句中break語句。4學時第五單元循環(huán)結(jié)構(gòu)程序設計循環(huán)結(jié)構(gòu)·概念:程序中有需要多次執(zhí)行的語句組·設計循環(huán)要完成的任務:循環(huán)變量的初始化;循環(huán)條件(終止值);循環(huán)的任務(循環(huán)體)2學時當型循環(huán)While語句·格式:While(表達式){循環(huán)語句組}·功能:當表達式的值為非0時,執(zhí)行while語句中的循環(huán)語句組,否則執(zhí)行循環(huán)體后續(xù)語句。·說明:(1)循環(huán)體如果包含一個以上的語句,應該用大括號括起來,以復合語句的形式出現(xiàn),否則while語句范圍只到while后面第一個分號處。(2)在循環(huán)中應有使循環(huán)趨向于結(jié)束的語句,即設置修改條件的語句。例如:i=0,s=0;while(i<10){s=s+I;i=i+1;}注意:循環(huán)體中如果無i=i+I;語句,則i的值一直不變,循環(huán)永不結(jié)束,這就稱為“死循環(huán)”。(3)while語句的特點是先判斷表達式的值,然后決定是否執(zhí)行循環(huán)體中的語句,如果表達式的值一開始為假(即值為0),則退出循環(huán),并轉(zhuǎn)入循環(huán)體的后續(xù)語句執(zhí)行?!さ湫屠}:求1+2+3+……+100的值。#include<stdio.h>voidmain(){inti=1,sum=0;while(i<=100){sum=sum+i;i++;}printf("1-100的和是%d",sum);}不限定次數(shù)的循環(huán)·典型例題:輸入字符直到回車’\n’結(jié)束,進行大小寫字符的轉(zhuǎn)換。#include<stdio.h>voidmain(){intcharch;printf(“請輸入字符:”);while((getchar(ch))!=’\n’){if(ch>=’a’&&ch<=”z’)ch-=32;elseif(ch>=’A’&&ch<=”Z’)ch+=32;Putchar(ch);}直到型循環(huán)Do-while語句·格式do{循環(huán)語句組}while(表達式);·功能:先執(zhí)行一次指定的循環(huán)體語句,然后判斷表達式的值,當表達式的值為非0時,返回重新執(zhí)行該語句,如此反復,直到表達式的值等于0為止,此時循環(huán)結(jié)束?!ふf明:(1)do-while語句的特點是:先執(zhí)行語句,后判斷表達式的值。(2)如果do-while語句的循環(huán)體部分是多個語句組成,則必須用左右大括號括起來,使其形成復合語句。(3)while圓括號后面有一個分號“;”,書寫時不要忘記?!さ湫屠}:求1-100偶數(shù)之和(固定次數(shù)的循環(huán))#include<stdio.h>voidmain(){inti,s1=0;do{if(i%2==0)s1+=i;i++;}while(i<=100);printf("1-100的奇數(shù)和是%d偶數(shù)和%d",s1,s2);}·典型例題:輸入字符直到回車”\n”結(jié)束,進行大小寫字符的轉(zhuǎn)換(非固定次數(shù)的循環(huán))。#include‘stdio.h’main(){intcharch;printf(“請輸入字符:”);putchar(ch);do{if(ch>=’a’&&ch<=”z’)ch-=32;elseif(ch>=’A’&&ch<=”Z’)ch+=32;printf(“請輸入字符:”);putchar(ch);}while((getchar(ch))!=’\n’);For語句·格式for(表達式1;表達式2;表達式3){循環(huán)語句組}·功能:(1)先計算表達式1的值。(2)再計算表達式2的值,若其值為真,則執(zhí)行循環(huán)體一次;否則跳轉(zhuǎn)第(5)步。(3)然后計算表達式3的值。(4)回轉(zhuǎn)上面第(2)步。(5)結(jié)束循環(huán),執(zhí)行for語句的后續(xù)語句?!ふf明:(1)表達式1一般為賦值表達式,用于進入循環(huán)之前給循環(huán)變量賦初值。(2)表達式2一般為關系表達式或邏輯表達式,用于執(zhí)行循環(huán)的條件判定,它與while、do-while循環(huán)中的表達式作用完全相同。(3)表達式3一般為賦值表達式或自增(i=i+1可表示成i++)、自減(i=i-1可表示成i--)表達式,用于修改循環(huán)變量的值。(4)如果循環(huán)體部分是多個語句組成的,則必須用大括號括起來,使其成為一個復合語句。·進一步說明:for語句的一般形式中的“表達式1”可以省略。但要注意省略表達式1時,其后的分號不能省略。舉例:i=1;for(;i<=100;i++)sum=sum+i;如果省略表達式2,即表示表達式2的值始終為真,循環(huán)將無終止地進行下去。舉例:for(i=1;;i++)printf("%d",i);(3)如果省略表達式3,也將產(chǎn)生一個無窮循環(huán)。因此,應另外設法保證循環(huán)能正常結(jié)束,可以將循環(huán)變量的修改部分(即表達式3)放在循環(huán)語句中控制。舉例:for(i=1;i<=100;){sum=sum+i;i++;}(4)可以同時省略表達式1和表達式3,即省略了循環(huán)的初值和循環(huán)變量的修改部分,此時完全等價于while語句。舉例:i=1;for(;i<=10;){printf("%d",i);i++;}(5)在for語句中,表達式1和表達式3也可以使用逗號表達式,即包含一個以上的簡單表達式,中間用逗號間隔。在逗號表達式內(nèi)按從左至右求解,整個表達式的值為其中最右邊的表達式的值。舉例:for(i=1;i<=100;i++,sum=sum+i;)2學時break和continue的語句·break語句格式:break;功能:該語句可以使程序運行時中途跳出循環(huán)體,即強制結(jié)束循環(huán),接著執(zhí)行循環(huán)體的后續(xù)語句。典型例題:從鍵盤輸入若干字符,輸出其中的字母,直到輸入回車結(jié)束。#include<stdio.h> voidmain() {charch; while(1){ch=getchar();if(ch=='\n') break;elseif(ch>='a'&&ch<='z'||ch>='A'&&ch<='Z')putchar(ch);} }·continue語句格式:continue;功能:結(jié)束本次循環(huán),即不再執(zhí)行循環(huán)體中continue語句下面尚未執(zhí)行的語句,而進行下一次是否執(zhí)行循環(huán)的判定。典型例題:打印出數(shù)字0~10,但跳過(即不輸出)數(shù)字7。main(){inti;for(i=0;i<=10;i++){if(i==7)continue;printf("%5d",i);}}·continue語句和break語句的區(qū)別是:continue語句只是結(jié)束本次循環(huán),而不終止整個循環(huán)的執(zhí)行;而break語句則是強制終止整個循環(huán)過程。循環(huán)嵌套·格式:(1)for(;;){……for(;;){……}}(2)do{……do{……}while();}while();(3)while(){……while(){……}}(4)while(){……do{……}while();…}(5)for(;;){……while(){……}}(6)do{……for(;;){}……}while();·典型例題:利用雙重for循環(huán)結(jié)構(gòu)打印出9*9乘法表。#include<stdio.h>voidmain(){inti,j;for(i=1;i<=9;i++){for(j=1;j<=i;j++)printf("%d*%d=%d",j,i,i*j);printf("\n");}}掌握循環(huán)程序設計基本方法·熟練使用while、do-while、for語句實現(xiàn)循環(huán)程序設計·掌握嵌套循環(huán)程序設計·熟練掌握下拉菜單Debug的程序調(diào)試方法·熟練掌握使用break、continue語句在循環(huán)程序設計中的實現(xiàn)·熟練掌握VC++的程序調(diào)試方法4學時第六單元數(shù)組數(shù)組的概念·概念:具有相同數(shù)據(jù)類型的數(shù)據(jù)的有序集合稱為數(shù)組。數(shù)組是一種最簡單的構(gòu)造類型,它包含著一組具有同一類型的變量,這些變量在內(nèi)存中的存儲位置是連續(xù)的。·C語言規(guī)定:數(shù)組必須先定義,后使用?!し诸悾阂痪S數(shù)組、多維數(shù)組2學時一維數(shù)組的定義·定義:類型說明符數(shù)組名[常量表達式];例如:floatscore[10];它表示定義了一個名為score的數(shù)組,該數(shù)組有10個元素,其存放的數(shù)據(jù)類型應為實型?!ふf明:(1)類型說明符用來說明數(shù)組元素的類型:常用的數(shù)據(jù)類型有:int,char,float或double。(2)數(shù)組名的命名應遵守標識符的命名規(guī)則。(3)數(shù)組名后是用方括號括起來的常量表達式。常量表達式表示的是數(shù)組元素的個數(shù),即數(shù)組的長度。在上例中定義了數(shù)組score[10],該數(shù)組有10個元素,其下標從0到9可用。注意:不要使用score[10],因為它不是該數(shù)組的元素。(4)常量表達式中可以包括常量和符號常量,不能包含變量,因為C語言規(guī)定數(shù)組不能動態(tài)定義。一維數(shù)組的初始化·初始化定義:數(shù)組的初始化是指在定義數(shù)組時給數(shù)組元素賦初值。·格式:類型說明符數(shù)組名[常量表達式]={常量列表};例如inta[5]={2,4,6,8,10};其作用是在定義數(shù)組的同時將常量2、4、6、8、10分別置于數(shù)組元素a[0]、a[1]、a[2]、a[3]、a[4]中?!ふf明:(1)常量列表可以是數(shù)值型、字符常量或字符串。(2)數(shù)組元素的初值必須依次放在一對大括號內(nèi),各值之間用逗號隔開。(3)可以只給部分數(shù)組元素賦初值。例如:inta[10]={1,2,3,4,5};(4)在進行數(shù)組的初始化時,{}中值的個數(shù)不能超過數(shù)組元素的個數(shù)。例如:inta[5]={1,2,3,4,5,6,7,8};是一種錯誤的數(shù)組初始化方式。(5)在給數(shù)組所有元素賦初值時,可以不指定數(shù)組長度。例如:inta[]={1,2,3,4,5};則系統(tǒng)會自動定義數(shù)組a的長度為5。(6)定義數(shù)組時不進行初始化,則該數(shù)組元素的值是不確定的。如果欲將數(shù)組所有元素的初值置為0,可以采用如下方式:staticinta[10];一維數(shù)組元素的引用C語言規(guī)定數(shù)組不能以整體形式參與數(shù)據(jù)處理,只能逐個引用數(shù)組元素?!じ袷剑簲?shù)組名[下標];其中下標可以是整型常量、整型變量或整型表達式。例如:inta[10],i=2;則以下是正確的表達式:a[0]=a[1]+a[i]+a[i+3];典型應用·典型應用1.動態(tài)給數(shù)組賦值,輸出數(shù)組的值2.數(shù)組中元素求和、求平均值3.求數(shù)組中元素最大、最小值4.冒泡排序(理解)輸入10整數(shù)存入數(shù)組,求和、求平均值,找出其中的最大數(shù)和最小數(shù)#include<stdio.h>voidmain(){ intarr[10],i,sum=0,max,min; floatavg; for(i=0;i<10;i++) { printf("請輸入第%d個元素的值",i+1); scanf("%d",&arr[i]);//輸入數(shù)組元素的值 sum=sum+arr[i];//數(shù)組元素求和 } avg=sum/10.0;//求平均值 for(i=0;i<10;i++) { printf("%d\n",arr[i]); } printf("數(shù)組元素的和是%d,平均值是%.2f",sum,avg); max=min=arr[0]; for(i=1;i<10;i++) { if(arr[i]>max)max=arr[i];//求最大值 if(arr[i]<min)min=arr[i];//求最小值 } printf("最大值是%d,最小值是%d",max,min);}·典型應用2:用冒泡法對10個整數(shù)由小到大進行排序main(){inti,j,t,a[11];printf("input10numbers:\n");for(i=1;i<=10;i++)scanf("%d",&a[i]);printf("\n");for(j=1;j<=9;j++)/*控制比較的趟數(shù)*/for(i=1;i<=10-j;i++)/*控制每趟比較的次數(shù)*/if(a[i]>a[i+1])/*相鄰元素相比較*/{t=a[i];a[i]=a[i+1];a[i+1]=t;}/*交換數(shù)組元素的值*/printf("thesortednumbers:\n");for(i=1;i<=10;i++)printf(“%d“,a[i]);}二維數(shù)組定義·格式:類型說明符數(shù)組名[常量表達式1][常量表達式2];例如:inta[3][4];定義a為3×4(3行4列)的整型數(shù)組。該數(shù)組有12個元素,分別為: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]·說明:(1)類型說明符、數(shù)組名、常量表達式的意義與一維數(shù)組相同。(2)二維數(shù)組中元素的排列順序是按行存放,即內(nèi)存中先順序存放第一行的元素,再存放第二行的元素。(3)可以把二維數(shù)組看成是特殊的一維數(shù)組,它的每個元素又是一個一維數(shù)組。2學時二維數(shù)組初始化二維數(shù)組也可以在定義時對指定元素賦初值。(1)按行分段賦值。例如:inta[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};(2)將所有的初值寫在一個大括號內(nèi),按數(shù)組元素的排列順序?qū)Ω鱾€元素賦初值。例如:inta[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};(3)可以對數(shù)組部分元素賦初值。例如:inta[3][4]={{1},{5,6},{9}};又如:inta[3][4]={{1,2},{},{0,10}};其作用是使a[0][0]=1,a[0][1]=2,a[2][1]=10,數(shù)組的其它元素都為0。(4)如果對數(shù)組的全部元素都賦初值,則定義數(shù)組時可以不指定數(shù)組的第一維長度,但第二維長度不能省略。例如:若有定義:inta[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};此定義也可以寫成:inta[][4]={1,2,3,4,5,6,7,8,9,10,11,12};二維數(shù)組元素的引用·格式:數(shù)組名[下標1][下標2]其中下標可以是整型常量、整型變量或整型表達式?!さ湫屠}1.輸入和輸出二維數(shù)組的值#include<stdio.h>voidmain(){inta[2][3];inti,j;for(i=0;i<=1;i++)for(j=0;j<=2;j++)scanf("%5d",&a[i][j]);/*輸入a數(shù)組*/printf("\n");for(i=0;i<=2;i++)for(j=0;j<=1;j++)printf("%5d",a[i][j]);}2.將數(shù)組a(2×3矩陣)行列轉(zhuǎn)置后保存到另一數(shù)組b中。12314a=b=2545636#include<stdio.h>voidmain(){inta[2][3]={{1,2,3},{4,5,6}};inti,j,b[3][2];printf("arraya:\n");for(i=0;i<=1;i++){for(j=0;j<=2;j++){printf("%5d",a[i][j]);/*輸出a數(shù)組*/b[j][i]=a[i][j];/*數(shù)組轉(zhuǎn)置*/}printf("\n");}printf("arrayb:\n");for(i=0;i<=2;i++){for(j=0;j<=1;j++)printf("%5d",b[i][j]);printf("\n");}}字符數(shù)組定義·一維字符數(shù)組:格式:類型說明符數(shù)組名[常量表達式];例如:charstr[10];定義str為一維字符數(shù)組,該數(shù)組包含10個元素,最多可以存放10個字符型數(shù)據(jù)?!ざS字符數(shù)組的格式為:格式:類型說明符數(shù)組名[常量表達式1][常量表達式2];例如:chara[3][20];定義a為二維字符數(shù)組,該數(shù)組有3行,每行20列,該數(shù)組最多可以存放60個字符型數(shù)據(jù)。在C語言中,很多情況下字符型與整型是通用的,因此字符型數(shù)組也可以這樣定義:intstr[10];inta[3][20];·注意:字符型數(shù)據(jù)在內(nèi)存中是以ASCII碼方式存儲的,在字符數(shù)組中也是如此。字符數(shù)組初始化字符數(shù)組的初始化方式與其它類型數(shù)組的初始化方式類似。(1)逐個元素賦初值chars[5]={′C′,′h′,′i′,′n′,′a′};(2)如果初值的個數(shù)多于數(shù)組元素的個數(shù),則按語法錯誤處理。(3)如果初值的個數(shù)少于數(shù)組元素的個數(shù),則C編譯系統(tǒng)自動將未賦初值的元素定為空字符(即ASCII碼為0的字符:′\0′)。(4)如果省略數(shù)組的長度,則系統(tǒng)會自動根據(jù)初值的個數(shù)來確定數(shù)組的長度。例如:charc[]={′H′,′o′,′w′,′′,′a′,′r′,′e′,′′,′y′,′o′,′u′,′?′};數(shù)組c的長度自動設定為12。(5)二維數(shù)組也可以進行初始化。字符串·字符串和字符串結(jié)束標志字符串常量是用雙引號括起來的一串字符。C語言系統(tǒng)在處理字符串時,一般會在其末尾自動添加一個′\0′作為結(jié)束符?!び米址A拷o數(shù)組賦初值可以用字符串常量來使字符數(shù)組初始化。例如:charc[]={"student"};也可以省略大括號而直接寫成charc[]="student";字符數(shù)組輸入輸出·典型例題:將數(shù)組元素逐個輸入與輸出,即用格式符"%c"輸入或輸出一個字符。例5.10從鍵盤讀入一串字符,將其中的大寫字母轉(zhuǎn)換成小寫字母后輸出該字符串。main(){chars[80];inti=0;for(i=0;i<80;i++){scanf("%c",&s[i]);if(s[i]==′\n′)break;elseif(s[i]>=′A′&&s[i]<=′Z′)s[i]+=32;}s[i]=′\0′;for(i=0;s[i]!=′\0′;i++)printf("%c",s[i]);printf("\n");}·典型例題:將字符數(shù)組整體輸入或輸出,即用格式符"%s"控制字符串的輸入與輸出。例5.11將上例改寫成整體輸入輸出形式。main(){chars[80];inti;scanf("%s",s);for(i=0;s[i]!=′\0′;i++)if(s[i]>=′A′&&s[i]<=′Z′)s[i]+=32;printf("%s",s);}注意:(1)用"%s"格式符讀入字符串時,scanf函數(shù)中的地址項是數(shù)組名,不要在數(shù)組名前加取地址符號′&′,因為數(shù)組名本身就是地址(在后面的內(nèi)容中將介紹到)。(2)用"%s"格式符輸出字符串時,printf函數(shù)中的輸出項是字符數(shù)組名,而不是數(shù)組元素。(3)以scanf("%s",數(shù)組名);形式讀入字符串時,遇空格或回車都表示字符串結(jié)束,系統(tǒng)只是將第一個空格或回車前的字符置于數(shù)組中。字符串處理函數(shù)的使用在C的庫函數(shù)中提供了一些字符串處理函數(shù),使用它們可以很方便地處理字符串,如輸入、輸出、拷貝、連接、比較、測試長度等?!ぷ址敵龊瘮?shù):puts格式:puts(字符數(shù)組名)功能:將一個字符串輸出到終端,字符串中可以包含轉(zhuǎn)義字符。典型例題:chars[]="China\nBeijing";puts(s);輸出結(jié)果是:ChinaBeijing·字符串讀入函數(shù):gets格式:gets(字符數(shù)組名)功能:從終端讀入一個字符串到字符數(shù)組。該函數(shù)可以讀入空格,遇回車結(jié)束輸入。典型例題:chars[20];gets(s);puts(s);運行時輸入:Howdoyoudo?↙輸出結(jié)果為:Howdoyoudo?·字符串連接函數(shù):strcat格式:strcat(字符數(shù)組1,字符數(shù)組2)功能:將字符數(shù)組2中的字符串連接到字符數(shù)組1中的字符串的后面,結(jié)果放在字符數(shù)組1中。典型例題:chars1[14]="China",s2[]="Beijing";strcat(s1,s2);printf("%s",s1);輸出結(jié)果為:ChinaBeijing說明:使用strcat函數(shù)時,字符數(shù)組1應作夠大,以便能容納連接后的新字符串?!ぷ址截?復制)函數(shù):strcpy格式:strcpy(字符數(shù)組1,字符數(shù)組2)功能:將字符數(shù)組2中的字符串拷貝到字符數(shù)組1中。典型例題:chars1[8],s2[]="China";strcpy(s1,s2);puts(s1);程序段的輸出結(jié)果是China說明:(1)字符數(shù)組1的長度應大于或等于字符數(shù)組2的長度,以便容納被復制的字符串。(2)字符數(shù)組1必須寫成數(shù)組名的形式(如上例中的s1),字符數(shù)組2也可以是一個字符串常量。(3)執(zhí)行strcpy函數(shù)后,字符數(shù)組1中原來的內(nèi)容將被字符數(shù)組2的內(nèi)容(或字符串)所代替。(4)不能用賦值語句將一個字符串常量或字符數(shù)組直接賦給另一個字符數(shù)組。下面的用法是錯誤的:chars1[8],s2[]="China";s1=s2;在進行字符串的整體賦值時,必須使用strcpy函數(shù)。5.字符串比較函數(shù):strcmp格式:strcmp(字符串1,字符串2)功能:比較兩個字符串的大小,例如:strcmp(s1,s2);strcmp("Beijing","Shanghai");strcmp(s1,"China");比較的結(jié)果由函數(shù)值帶回。(1)如果字符串1等于字符串2,函數(shù)值為0。(2)如果字符串1大于字符串2,函數(shù)值為一個正整數(shù)(第一個不相同字符的ASCII碼值之差)。(3)如果字符串1小于字符串2,函數(shù)值為一個負整數(shù)。6.測試字符串長度函數(shù):strlen格式:strlen(字符數(shù)組名)功能:測試字符數(shù)組的長度,函數(shù)值為字符數(shù)組中第一個′\0′前的字符的個數(shù)(不包括′\0′)。典型例題:chars[10]="China";printf("%d",strlen(s));輸出結(jié)果為:57.字符串小寫函數(shù):strlwr格式:strlwr(字符串)功能:將字符串中的大寫字母轉(zhuǎn)換成小寫字母。8.字符串大寫函數(shù):strupr格式:strupr(字符串)功能:將字符串中的小寫字母轉(zhuǎn)換成大寫字母。4學時學會使用數(shù)組解決實際工作中的問題·熟練掌握數(shù)組的定義和初始化·熟練掌握數(shù)組元素的引用·學會數(shù)組的操作·熟練掌握字符數(shù)組的定義、初始化和元素引用·熟練掌握字符串處理函數(shù)第七單元函數(shù)函數(shù)的定義·語法格式函數(shù)類型函數(shù)名(形式參數(shù)列表){內(nèi)部變量定義和聲明部分;執(zhí)行語句;}·典型例題intmax(intx,inty){intz;z=x>y?x:y;return(z);}·注意事項1.函數(shù)類型是指返回值的類型,即要與return語句后跟的表達式的值的類型一致。若函數(shù)類型為void則說明該函數(shù)無返回值,即函數(shù)體里不能出現(xiàn)return語句。2.形式參數(shù)列表里定義的變量要指定類型,而且如果同時要定義多個,應在每個前面都分別指定類型名,而不能寫成intx,y;2學時函數(shù)的調(diào)用·調(diào)用函數(shù)的格式函數(shù)名(實際參數(shù)列表);·典型例題以上面的函數(shù)為例,在main函數(shù)進行調(diào)用:voidmain(){inta,b,c;scanf(“%d%d”,&a,&b);printf(“%d”,max(a,b));或c=max(a,b);printf(“%d”,c);以上兩種方法都會在屏幕中打印出a,b間的較大值。max(a,b)中max就是函數(shù)名,a,b是實際參數(shù)列表,執(zhí)行這個調(diào)用語句時,會先把a,b的值給相應位置的形式參數(shù)即執(zhí)行x=a,y=b,然后開始執(zhí)行max函數(shù)的函數(shù)體的語句。當max函數(shù)體里執(zhí)行到return語句時,則max函數(shù)結(jié)束執(zhí)行,將return后的表達式的值返回給main函數(shù)調(diào)用max函數(shù)的位置,即若上面a=3,b=5則max(a,b)return后的表達式的值應該是5也就是說執(zhí)行完max后把5返回到調(diào)用max的位置可看成printf(“%d”,5);或另一種解法的c=5?!ぷ⒁猱敱徽{(diào)函數(shù)的函數(shù)定義出現(xiàn)在主調(diào)函數(shù)之后時,在主調(diào)函數(shù)中必須對被調(diào)函數(shù)作聲明。·遞歸調(diào)用一個函數(shù)在它的函數(shù)體內(nèi)調(diào)用它自身稱為遞歸調(diào)用。為了防止遞歸調(diào)用無終止地進行必須在函數(shù)內(nèi)有終止遞歸調(diào)用的手段。常用的辦法是加條件判斷滿足某種條件后就不再作遞歸調(diào)用然后逐層返回。2學時·數(shù)組作為函數(shù)參數(shù)1.數(shù)組元素與普通變量并無區(qū)別2.在數(shù)組名作函數(shù)參數(shù)時所進行的傳送只是地址的傳送,也就是說把實參數(shù)組的首地址賦予形參數(shù)組名。形參數(shù)組名取得該首地址之后,實際上是形參數(shù)組和實參數(shù)組為同一數(shù)組,共同擁有一段內(nèi)存空間。變量的作用域:局部變量和全局變量·局部變量也稱為內(nèi)部變量。局部變量是在函數(shù)內(nèi)作定義說明的。其作用域僅限于函數(shù)內(nèi)。離開該函數(shù)后再使用這種變量是非法的。形參變量是屬于被調(diào)函數(shù)的局部變量實參變量是屬于主調(diào)函數(shù)的局部變量?!と肿兞恳卜Q為外部變量。是在函數(shù)外部定義的變量。它不屬于哪一個函數(shù),它屬于一個源程序文件。其作用域是整個源程序。變量的存儲類別·auto變量函數(shù)中的局部變量關鍵字,auto可以省略·static靜態(tài)局部變量局部變量的值在函數(shù)調(diào)用結(jié)束后不消失而保留原值,靜態(tài)局部變量在編譯時賦初值,即只賦初值一次?!egister變量將局部變量得值放在CPU中的寄存器中·extern外部變量即全局變量。是在函數(shù)的外部定義的,它的作用域為從變量定義處開始,到本程序文件的末尾。·內(nèi)部函數(shù)和外部函數(shù)根據(jù)函數(shù)能否被其他源文件調(diào)用,將函數(shù)區(qū)分為內(nèi)部函數(shù)和外部函數(shù)掌握利用函數(shù)解決日常工作中的復雜問題·學會函數(shù)的定義方法·學會函數(shù)的調(diào)用方法4學時第八單元指針指針概念一個變量的地址稱為該變量的指針。2學時變量與指針指針變量的定義·格式:基類型*指針變量名舉例:int*p1;(定義p1為指向整型變量的指針變量)char*p2;(定義p2為指向字符型變量的指針變量)float*p3;(定義p3為指向?qū)嵭妥兞康闹羔樧兞浚﹊nt、char、float分別稱為指針變量p1、p2、p3的“基類型”,“基類型”意為指針變量所指變量的類型,不是指針變量的類型。指針變量賦值·通過取地址運算符(&)獲得地址值單目運算符(&)用來求出運算對象的地址,利用它可以把一個變量的地址賦給指針變量。舉例:inta=5,*p,*q;p=&a;因此當有語句:p=&a;時,scanf((″%d″,&a);和scanf(″%d″,p)是等價的?!ねㄟ^指針變量獲得地址值可以通過賦值運算,把一個指針變量中的地址值賦給另一個指針變量,從而使這兩個指針變量指向同一地址。例如,若有上面的定義,則語句:q=p;使指針變量q中也存放了變量a的地址,也就是說指針變量p和q都指向了整型變量a。注意:賦值號兩邊指針變量的基類型必須相同?!そo指針變量賦“空”值:p=NULL;NULL是在stdio.h頭文件中定義的預定義符,因此在使用NULL時,應該在程序的前面出現(xiàn)預定義行:#include″stdio.h″。NULL的代碼值為0,指針變量的引用·&:取地址運算符·*:間接訪問運算符(指針運算符)·典型例題1:通過指針變量訪問指針變量#include″stdio.h″main(){inta,b,*p1,*p2;a=10;b=20;p1=&a;/*把變量a的地址賦給指針變量p1*/p2=&b;/*把變量b的地址賦給指針變量p2*/printf(″%d,%d\n″,a,b);printf(″%d,%d\n″,*p1,*p2);}·典型例題2:輸入兩個整數(shù),按大小順序輸出。#include″stdio.h″main(){inta,b,*p1,*p2,*p;scanf(″%d,%d″,&a,&b);p1=&a;p2=&b;if(a<b){p=p1;p1=p2;p2=p;}printf(″\na=%d,b=%d\n″,a,b);printf(″max=%d,min=%d\n″,*p1,*p2);}注意:變量a,b的值沒有變化,只是p1,p2指針變化了。指針變量作為函數(shù)參數(shù)函數(shù)的參數(shù)不僅可以是整型、實型、字符型等數(shù)據(jù),還可以是指針類型?!じ拍睿簩⒅羔樧兞康闹担ㄔ撝羔樧兞克缸兞康牡刂罚﹤魉偷搅硪粋€函數(shù)中?!さ湫屠}:用函數(shù)來實現(xiàn)兩個變量值的交換。voidswap(int*q1,int*q2){intt;t=*q1;*q1=*q2;*q2=t;}#include″stdio.h″Voidmain(){inta,b,*p1,*p2;scanf(″%d,%d″,&a,&b);p1=&a;p2=&b;if(a<b)swap(p1,p2);printf(″%d,%d\n″,a,b);}2學時第九單元結(jié)構(gòu)體與文件結(jié)構(gòu)體類型·結(jié)構(gòu)體類型說明struct結(jié)構(gòu)體標識名{類型名1結(jié)構(gòu)體成員1;類型名2結(jié)構(gòu)體成員2;…..類型名n結(jié)構(gòu)體成員n;};·幾點說明:結(jié)構(gòu)體標識名是用戶定義的結(jié)構(gòu)體的名字,命名規(guī)則遵循自定義標識符規(guī)則;成員列表時對結(jié)構(gòu)體數(shù)據(jù)匯總每一個數(shù)據(jù)項成員變量的說明,格式與定義一個變量的一般格式相同;struct是關鍵字;struct結(jié)構(gòu)體標識名是結(jié)構(gòu)體類型標識符,在類型定義和類型使用中“struct”不能省略;結(jié)構(gòu)體標識名可以省略,此時定影的結(jié)構(gòu)體為無名結(jié)構(gòu)體;整個結(jié)構(gòu)體類型的定義作為一個完整的語句用分號結(jié)束;結(jié)構(gòu)體成員名允許和程序中的其他變量同名·嵌套定義的一般格式struct結(jié)構(gòu)體標識名1{類型名1結(jié)構(gòu)體成員1;類型名2結(jié)構(gòu)體成員2;…..類型名n結(jié)構(gòu)體成員n;};struct結(jié)構(gòu)體標識名2{類型名1結(jié)構(gòu)體成員1;Struct結(jié)構(gòu)體標識符1結(jié)構(gòu)成員名2;…..類型名n結(jié)構(gòu)體成員n;};2學時結(jié)構(gòu)體類型變量、數(shù)組和指針的定義·緊跟在結(jié)構(gòu)體類型說明之后進行定義structstudent{charnum[10];charname[20];charsex;intage;floatc,vb,os;charadd[30];}a,b[4],*f;·在說明一個無名結(jié)構(gòu)體類型的同時,直接進行定義struct{charnum[10];charname[20];charsex;intage;floatc,vb,os;charadd[30];}a,b[4],*f;·先說明結(jié)構(gòu)體類型,再單獨進行變量的定義structstudent{charnum[10];charname[20];charsex;intage;floatc,vb,os;charadd[30];};structstudenta,b[4],*f;·幾點說明:不能只是用struct,而不寫結(jié)構(gòu)體標識名student;不能只寫結(jié)構(gòu)體標識名student而省掉struct。結(jié)構(gòu)體類型成員的引用方法·結(jié)構(gòu)體變量名.成員名·結(jié)構(gòu)體指針變量名->成員名·(*結(jié)構(gòu)體指針變量名).成員名·幾點說明:“.“稱為結(jié)構(gòu)成員運算符;”->“稱為結(jié)構(gòu)指向運算符,由減號和大于號組成·舉例:structstudent{charnum[10];charname[20];charsex;intage;floatc,vb,os;charadd[30];}a,b[4],*f;f=&a;對age成員的引用可以寫成:a,age=18;或(*f).age=18;或f->sge=18;結(jié)構(gòu)體類型變量的賦值·初始化賦值:類似于一般變量,結(jié)構(gòu)體變量也可以再定義的同時賦值;structstudent{charnum[10];charname[20];charsex;intage;floatc,vb,os;charadd[30];}a={“04201”,”anshili”,’f’,18.78.5,83,85,”Shijiazhuang”};·注意事項{}中初始化數(shù)據(jù)用逗號分隔每個初始化數(shù)據(jù)必須與其對應的成員的數(shù)據(jù)類型一一對應賦值沒和初始化數(shù)據(jù)必須與其對應的成員的數(shù)據(jù)類型一致·通過成員引用方法單獨賦值structstudent{charnum[10];charname[20];charsex;intage;floatc,vb,os;charadd[30];}a;sex=’f’;age=18;scanf(“%s”,name);結(jié)構(gòu)體的典型應用——鏈表·動態(tài)鏈表的基本概念動態(tài)鏈表中的節(jié)點具有完全相同的結(jié)構(gòu);鏈表中的節(jié)點有系統(tǒng)隨機分配。·幾個重要函數(shù)void*malloc(unsignedsize):向系統(tǒng)申請一個size字節(jié)的連續(xù)內(nèi)存空間;void*calloc(unsignednum,unsignedsize):向系統(tǒng)申請一個size*num個字節(jié)的連續(xù)內(nèi)存空間;voidfree(void*ptr):釋放ptr為首地址的一段內(nèi)存空間?!そ㈡湵砘静襟E:讀取數(shù)據(jù);生成新節(jié)點;講數(shù)據(jù)存入節(jié)點數(shù)據(jù)域的成員變量中;將心節(jié)點插入到鏈表中;重復上述操作直到輸入

溫馨提示

  • 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

提交評論