C語言程序設(shè)計譚浩強重點筆記_第1頁
C語言程序設(shè)計譚浩強重點筆記_第2頁
C語言程序設(shè)計譚浩強重點筆記_第3頁
C語言程序設(shè)計譚浩強重點筆記_第4頁
C語言程序設(shè)計譚浩強重點筆記_第5頁
已閱讀5頁,還剩23頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、.C語言設(shè)計學(xué)習(xí)筆記早晨:06:40起床07:2008:20英語 1小時 新概念英語(單詞、語法、聽讀背)大學(xué)英語(單詞、語法、聽讀背)上午:08:3010:30計算機基礎(chǔ) 2小時10:5011:30計算機科學(xué)技術(shù)導(dǎo)論計算機組成原理微機原理及接口技術(shù)Intel微處理器結(jié)構(gòu)編程與接口深入理解計算機系統(tǒng)80x86匯編語言程序設(shè)計8086-8088宏匯編語言程序設(shè)計教程BIOS研發(fā)技術(shù)剖析自己動手寫操作系統(tǒng)操作系統(tǒng)原理Windows操作系統(tǒng)原理Windows內(nèi)部原理系列Windows程序內(nèi)部運行原理計算機網(wǎng)絡(luò)第五版中午:12:0002:00午休下午:02:3004:30計算機應(yīng)用及編程Windows

2、用戶管理指南、AD配置指南、網(wǎng)絡(luò)專業(yè)指南、Windows即學(xué)即會教程Windows下32位匯編語言程序設(shè)計、C#編程晚上:05:3008:00鍛煉、晚餐08:0009:00輔導(dǎo)09:0011:00專業(yè)基礎(chǔ) 2小時大學(xué)數(shù)學(xué)、大學(xué)物理、電機及拖動、電力電子技術(shù)、通信技術(shù)11:30休息.目 錄第一章 C語言概述- 1 -1.1 C程序結(jié)構(gòu)特點16- 1 -1.2 C程序上機步驟17- 1 -第二章 程序的靈魂算法23- 2 -2.1 算法24- 2 -2.2 算法的三種基本結(jié)構(gòu)- 2 -2.3 結(jié)構(gòu)化程序設(shè)計方法42- 2 -第三章 數(shù)據(jù)類型 運算符與表達式48- 2 -3.1 C語言的基本元素48

3、- 2 -3.2 C的數(shù)據(jù)類型48- 2 -3.3 常量與變量48- 3 -3.4 基本類型- 3 -3.5 變量63- 4 -3.6 不同類型數(shù)據(jù)間的混合運算- 5 -3.7 函數(shù)的調(diào)用過程(補充)- 5 -第四章 最簡單的C程序設(shè)計順序程序設(shè)計77- 5 -4.1 字符數(shù)據(jù)的輸入輸出- 5 -第五章 選擇結(jié)構(gòu)的程序設(shè)計97- 6 -第六章 循環(huán)結(jié)構(gòu)程序設(shè)計- 6 -6.1 語句標(biāo)號- 6 -6.2 break語句和continue語句- 6 -第七章 數(shù)組132- 6 -7.1 構(gòu)造類型- 6 -7.2 數(shù)組133- 6 -7.3 二維數(shù)組- 6 -7.4 字符串字符數(shù)組- 7 -7.5

4、字符串處理函數(shù) #include - 7 -第八章 函數(shù)153- 8 -8.1 c程序的結(jié)構(gòu)154- 8 -8.2 函數(shù)調(diào)用參數(shù)傳遞- 8 -8.3 函數(shù)變量的作用范圍- 8 -8.4 變量的存儲類別- 8 -第九章 預(yù)處理命令197- 9 -9.1 預(yù)編譯命令作用- 9 -第十章 指針211- 10 -10.1 變量的訪問方式- 10 -10.2 指針變量- 10 -第十一章 結(jié)構(gòu)體270- 11 -11.1 結(jié)構(gòu)體270- 11 -11.2 聲明結(jié)構(gòu)體類型變量的方法271- 11 -11.3 結(jié)構(gòu)體變量引用273- 11 -11.4 結(jié)構(gòu)體變量初始化- 12 -11.5 結(jié)構(gòu)體數(shù)組275-

5、 12 -11.6 結(jié)構(gòu)體類型指針- 12 -11.7 鏈表283- 12 -11.8 共用體 297- 13 -11.9 枚舉類型301- 13 -11.10 用typedef定義的類型304- 14 -第十二章 位運算308- 14 -12.1 位段 315- 14 -第十三章 文件319- 14 -13.1 文件319- 14 -13.2 文件的分類319- 15 -13.3 C語言對文件的處理方法319- 15 -13.4 文件結(jié)構(gòu)體類型321- 15 -13.5 文件結(jié)構(gòu)體數(shù)組和指針321- 16 -13.6 文件的操作321- 16 -13.7 文件的定位333- 17 -13.8

6、 出錯檢測335- 18 -13.9 小結(jié)336- 18 -第十四章 C+對C的擴充 338- 19 -14.1 C+的特點338- 19 -14.2 C+的輸入輸出 339- 19 -14.3 C+的輸出cout- 19 -14.4 C+的輸入 cin 341- 21 -14.4 函數(shù)的重載342- 21 -14.5 帶缺省參數(shù)的函數(shù)344- 21 -14.6 變量的引用類型345- 22 -14.7 內(nèi)置函數(shù) 348- 23 -14.8 作用域運算符349- 24 -第一章 C語言概述1.1 C程序結(jié)構(gòu)特點161、C程序的基本構(gòu)件函數(shù)。2、一個函數(shù)由函數(shù)首部和函數(shù)體兩部分構(gòu)成。 函數(shù)首部一

7、般包括函數(shù)類型、函數(shù)名、函數(shù)參數(shù)等。 函數(shù)體一般包括聲明部分和執(zhí)行部分。其中:在聲明部分中定義所用到的變量;執(zhí)行部分則由若干個語句組成。3、C程序只有一個main函數(shù),且總是從main函數(shù)開始執(zhí)行。4、C語言語句必須以“;”結(jié)束。5、用/* */作為注釋。6、C編譯器一般自頂向下順序編譯C源程序,如果被調(diào)函數(shù)定義在主調(diào)函數(shù)之后位置時,要在主調(diào)函數(shù)前,給出被調(diào)函數(shù)的原型說明。以便編譯器在編譯被調(diào)函數(shù)的調(diào)用語句時,對調(diào)用語句進行參數(shù)檢查。如果不進行原型說明,則無法通過編譯檢查。原型說明:類型說明 函數(shù)名(參數(shù)類型,參數(shù)類型,)7、頭文件頭文件包含了C語言的標(biāo)準(zhǔn)函數(shù)庫的原型說明。C語言通過使用#in

8、clude 預(yù)處理命令,將庫函數(shù)的原型說明插入到源文件中。1.2 C程序上機步驟171、編輯源文件 .c;2、編譯成目標(biāo)文件.obj;3、連接將目標(biāo)程序和庫函數(shù)及其他目標(biāo)程序連接起來,生產(chǎn)可執(zhí)行文件,文件擴展名為.exe;4、執(zhí)行。第二章 程序的靈魂算法232.1 算法241、算法指為求解某一問題而采用的具體方法和步驟。2、兩類算法數(shù)值運算算法和非數(shù)值運算算法3、算法的特性有窮性、確定性、有效性等4、算法描述文字描述法(如偽代碼描述算法)、圖形描述法(如流程圖和NS流程圖描述算法)。2.2 算法的三種基本結(jié)構(gòu)順序、選擇、循環(huán)2.3 結(jié)構(gòu)化程序設(shè)計方法421、自頂向下首先對問題進行分析,確定算法

9、思路。2、逐步細化根據(jù)算法思路,制定原始算法流程,并不斷細化流程。3、模塊設(shè)計分解算法流程,將功能相對獨立的部分劃分為一個模塊。4、結(jié)構(gòu)化編碼利用高級語言正確實現(xiàn)3種基本結(jié)構(gòu)。第三章 數(shù)據(jù)類型 運算符與表達式483.1 C語言的基本元素481、符號集C語言使用的基本符號。2、標(biāo)識符用來標(biāo)記常量、變量、函數(shù)及文件名字的字符序列。3、關(guān)鍵字C程序規(guī)定的,具有特定含義、專門用作語言特定成分的一類標(biāo)識符。ANSI推薦的C語言關(guān)鍵字是32個。關(guān)鍵字全部應(yīng)該小寫。3.2 C的數(shù)據(jù)類型48數(shù)據(jù)是操作的對象,數(shù)據(jù)類型是指數(shù)據(jù)的內(nèi)在表現(xiàn)形式。如(數(shù)據(jù)代碼、存儲、運算)。1、基本類型:整型、字符型、實型。2、構(gòu)造

10、類型:在基本類型的基礎(chǔ)上,按照某種構(gòu)成規(guī)則構(gòu)造而成的類型。數(shù)組、結(jié)構(gòu)體、共用體、枚舉型。3、指針類型:用于存儲地址的一類數(shù)據(jù)類型。 4、空類型:編譯器根據(jù)變量的數(shù)據(jù)類型,給變量分配存儲單元。3.3 常量與變量481、符號常量符號常量在其作用域內(nèi)不能改變,也不能被賦值。#define 符號常量(大寫) 常量2、變量變量由變量名和變量值標(biāo)識。數(shù)據(jù)類型 變量; 變量名實際上是一個符號地址,編譯連接程序時給每個變量名分配一個內(nèi)存地址,當(dāng)程序訪問變量值時,實際上是通過變量名找到相應(yīng)的內(nèi)存地址,從其存儲單元中讀取數(shù)據(jù)。3.4 基本類型1、整形數(shù)據(jù)在內(nèi)存中的存放,是以補碼形式存放的。2、實型數(shù)據(jù):單精度 雙

11、精度。 在內(nèi)存中以指數(shù)形勢存放。 若數(shù)據(jù)超過有效位,則超過C語言規(guī)定有效位的數(shù)據(jù)將被舍去,故產(chǎn)生誤差。3、字符型數(shù)據(jù):用一個字節(jié)存儲單元存儲。即將字符的ASCII碼存儲到內(nèi)存單元中。 用單引號括起來的一個字符。 轉(zhuǎn)義字符特殊字符常量或者控制字符常量,它們都以“”開頭。 Char、unsigned char區(qū)別:char用7位數(shù)表示,最大表示編碼為127的字符;unsigned char用8位數(shù)表示,最大表示編碼為255的字符。 字符數(shù)據(jù)與整型數(shù)據(jù)可以相互賦值。 字符數(shù)據(jù)可以以字符數(shù)據(jù)輸出,也可以以整型數(shù)據(jù)形式輸出。4、字符串常量:C語言中,必須是用字符數(shù)組來保存字符串常量。在內(nèi)存中順序存儲。

12、用一對雙引號括起來的字符序列。 每個字符串常量結(jié)尾以一個字符0作為結(jié)束標(biāo)記。(一般由系統(tǒng)自動加上)。3.5 變量631、自動變量在函數(shù)體內(nèi)或復(fù)合語句中定義的非靜態(tài)變量稱為自動變量。 C語言編譯時,不對自動變量賦初值。 當(dāng)程序執(zhí)行到自動變量的作用域時,程序才為自動變量分配空間。當(dāng)定義自動變量的函數(shù)或復(fù)合語句執(zhí)行結(jié)束后,程序釋放自動變量的存儲空間。 自動變量保存在程序的動態(tài)存儲空間。2、靜態(tài)局部變量在函數(shù)體內(nèi)或復(fù)合語句中用static定義的變量稱為靜態(tài)局部變量。 C語言編譯時,對靜態(tài)局部變量賦初值。 靜態(tài)局部變量存儲在程序的靜態(tài)存儲空間。 靜態(tài)局部變量在程序的整個運行期間均占用程序的靜態(tài)存儲空間,

13、直到程序退出后才釋放存儲空間。3、寄存器變量用register聲明的變量。4、外部變量(全局變量)在函數(shù)的外部定義的變量。它的作用域是從定義處開始,到本程序文件的末尾結(jié)束,在此作用域內(nèi),全局變量可以為程序的各個函數(shù)引用。 C語言編譯時,對全局變量賦初值。 全局變量存儲在程序的靜態(tài)存儲空間。 全局變量在程序的整個運行期間均占用程序的靜態(tài)存儲空間,直到程序退出后才釋放存儲空間。注意:(1)當(dāng)引用本源文件后面定義的全局變量或引用在其他源文件中定義的全局變量是,應(yīng)在引用位置前,利用extern 聲明該全局變量,以告訴編譯器編譯時,引用的是一個外部變量,在編譯器連接時,將引用的外部變量的作用域擴展到本文

14、件extern 聲明處。(2)用static 聲明的全局變量,不能被其他文件引用。注意:(1)變量聲明分為定義性聲明和引用性聲明。(2)一般把建立存儲空間的聲明稱為變量定義,把不需要建立存儲空間的聲明成為變量聲明。3.6 不同類型數(shù)據(jù)間的混合運算 不同類型數(shù)據(jù)進行混合運算時,不同類型的數(shù)據(jù)要先轉(zhuǎn)換成同一類型,按照類型級別由低到高(char,shortintunsignedlongdouble;floatdouble)的順序進行轉(zhuǎn)換。 強制類型轉(zhuǎn)換(類型名) 表達式。強制類型轉(zhuǎn)換也就是將存儲數(shù)據(jù)的內(nèi)存單元強制轉(zhuǎn)換為另一種數(shù)據(jù)類型的單元大小。即強制將存放數(shù)據(jù)的內(nèi)存單元改變。 賦值時進行類型轉(zhuǎn)換:將

15、數(shù)據(jù)復(fù)制給變量時,將會將數(shù)據(jù)強制轉(zhuǎn)換為要賦值變量的類型。一般短類型轉(zhuǎn)換為長類型時,進行符號擴展;長類型轉(zhuǎn)換為短類型時,僅賦值低位,難以保證數(shù)據(jù)的正確性。3.7 函數(shù)的調(diào)用過程(補充) C函數(shù)其實就是一個程序模塊。 C函數(shù)在編譯時,單獨編譯成一個指令模塊,在函數(shù)模塊開始處定義保護現(xiàn)場指令,將用到的CPU寄存器壓入堆棧。在返回時定義了恢復(fù)現(xiàn)場指令,將堆棧數(shù)據(jù)恢復(fù)到CPU寄存器。 在調(diào)用函數(shù)時,一般利用堆棧傳遞輸入?yún)?shù);利用EAX傳遞輸出參數(shù),注意在函數(shù)調(diào)用完成后,要維持堆棧平衡,且函數(shù)返回輸出參數(shù)在EAX中,在使用輸出參數(shù)前,不要改變EAX的值。第四章 最簡單的C程序設(shè)計順序程序設(shè)計774.1 字

16、符數(shù)據(jù)的輸入輸出1、C語言沒有輸入輸出語句,IO操作通過調(diào)用系統(tǒng)函數(shù)實現(xiàn)。2、在程序的開頭,要有:#include “stdio.h”或 #include ,預(yù)定義語句,用來引用頭文件,在編譯時將頭文件中的函數(shù)原型聲明添加到源文件中。stdio.h 輸入輸出語句string.h 字符串操作函數(shù)math.h 定義數(shù)字函數(shù)ctype.h 字符函數(shù)庫intrins.h 內(nèi)部函數(shù)stdlib.h 標(biāo)準(zhǔn)函數(shù)庫absacc.h 絕對地址訪問reg.h 專用寄存器文件默認(rèn)輸出設(shè)備顯示屏,默認(rèn)輸入設(shè)備鍵盤。第五章 選擇結(jié)構(gòu)的程序設(shè)計第六章 循環(huán)結(jié)構(gòu)程序設(shè)計6.1 語句標(biāo)號語句標(biāo)號用于定義程序中的某個位置,用標(biāo)

17、識符表示,不能只用數(shù)字。6.2 break語句和continue語句1、break語句結(jié)束循環(huán)語句和switch語句。2、continue 結(jié)束本次循環(huán),即忽略循環(huán)體中剩余的語句。第七章 數(shù)組1327.1 構(gòu)造類型構(gòu)造類型是由基本類型按照一定規(guī)則構(gòu)造而成的。(如數(shù)組、結(jié)構(gòu)體、共同體、枚舉型)構(gòu)造類型的每個分量(元素),是一個變量,它可以是一個簡單類型或者構(gòu)造類型。構(gòu)造類型的分量占用相鄰的存儲空間。7.2 數(shù)組1331、數(shù)組是有序數(shù)據(jù)的集合,數(shù)據(jù)元素類型相同,順序存儲,占用相鄰的存儲空間。2、數(shù)組數(shù)組必須先定義后引用。靜態(tài)數(shù)組變量定義時編譯器自動初始化數(shù)據(jù)元素為0,動態(tài)數(shù)組變量在程序執(zhí)行時分配存

18、儲空間,在未被賦值初始化之前其值隨機。3、C語言只能逐個引用數(shù)組元素,不能一次引用整個數(shù)組。4、數(shù)組引用是“數(shù)組名+下標(biāo)”引用,數(shù)組下標(biāo)均為整數(shù)。如a2。7.3 二維數(shù)組1、數(shù)組元素為數(shù)組。2、在內(nèi)存中,C語言的二維數(shù)組中數(shù)組元素的存放順序是按行存放的。3、二維數(shù)組引用是“數(shù)組名+下標(biāo)+下標(biāo)”。如a12。7.4 字符串字符數(shù)組1、一般用0來標(biāo)識字符串結(jié)尾。0占用一個字符變量空間。2、用字符串賦值字符數(shù)組時,C編譯器在字符串后自動加0賦給字符數(shù)字。3、字符數(shù)組可以一次引用整個字符串?dāng)?shù)組。如整個字符串(數(shù)組)的輸入輸出,用%s格式,且在輸入字符數(shù)組時,用數(shù)組名代表數(shù)組的首地址,對于二維數(shù)組,僅僅寫

19、行下標(biāo)不寫列下標(biāo),也可以代表給行數(shù)組的首地址。在用%s輸入輸出字符串?dāng)?shù)組時,遇到0結(jié)束。7.5 字符串處理函數(shù) #include 1、gets(字符數(shù)組名)從鍵盤輸入一個字符串(以回車結(jié)束),并返回字符數(shù)組的起始地址。如get(str)。2、puts(字符數(shù)組名/字符串)將數(shù)組中的字符串(0結(jié)尾的字符序列)輸出到終端上,輸完換行。如puts(str),puts(“ok”)。3、strcpy(目的字符數(shù)組1名,源字符串/字符數(shù)組2名)拷貝時,將“0”一起拷貝過去。4、strcat(字符數(shù)組1名,字符串/字符數(shù)組2名)將字符串/字符數(shù)組2連接到字符數(shù)組1中。連接時,編譯器去掉字符數(shù)組1的“0”。5

20、、strcmp(字符串/字符數(shù)組1名,字符串/字符數(shù)組2名)比較字符串/字符數(shù)組1名 和字符串/字符數(shù)組2名的大小。字符串/字符數(shù)組1字符串/字符數(shù)組2,返回正數(shù)字符串/字符數(shù)組1=字符串/字符數(shù)組2,返回0字符串/字符數(shù)組1字符串/字符數(shù)組2,返回負(fù)數(shù)。第八章 函數(shù)1538.1 c程序的結(jié)構(gòu)1541、一個C程序可以分為若干個函數(shù)。2、每個程序只能有一個主函數(shù),C程序的執(zhí)行從main函數(shù)開始,從main函數(shù)結(jié)束。3、函數(shù)間可以互相調(diào)用,但主函數(shù)不能被調(diào)用。4、從用戶角度看,函數(shù)可分為標(biāo)準(zhǔn)函數(shù)(庫函數(shù))和自定義函數(shù)。其中,編譯器僅編譯自定義函數(shù),在連接時才將標(biāo)準(zhǔn)庫函數(shù)的目標(biāo)代碼連接到程序。5、一

21、個C源程序由一個或多個文件構(gòu)成,一個源程序文件是一個編譯單位。8.2 函數(shù)調(diào)用參數(shù)傳遞1、值傳遞如數(shù)值形參。此時,將實參值復(fù)制壓棧,被調(diào)函數(shù)對復(fù)制到棧中的數(shù)值進行操作,不改變原來實參值。2、地址傳遞如數(shù)組形參(指針形參),此時,將實參數(shù)組的首地址壓棧,被調(diào)函數(shù)引用實參數(shù)組的首地址,找到實參數(shù)組,對實參數(shù)組進行操作,改變實參數(shù)組值。即形參數(shù)組和實參數(shù)組共享同一單元。8.3 函數(shù)變量的作用范圍1、局部變量在定義局部變量的范圍內(nèi)有效。當(dāng)局部變量重名時,有效范圍小的優(yōu)先。 在函數(shù)內(nèi)部定義局部變量 函數(shù)的形式參數(shù) 在某個復(fù)合語句中定義的變量。2、全局變量在函數(shù)之外定義的變量。有效范圍是從定義變量的位置開

22、始到源文件結(jié)束。8.4 變量的存儲類別變量的存儲類別,即生存期。內(nèi)存中供用戶使用的存儲空間包括:程序區(qū)、靜態(tài)存儲區(qū)、動態(tài)存儲區(qū)。1、靜態(tài)存儲區(qū)在編譯時分配空間,在程序運行完后才釋放存儲空間。存儲靜態(tài)局部變量和全局變量。 局部靜態(tài)變量在編譯時賦初值,在執(zhí)行時可改變該值,但該存儲空間一直保存到程序結(jié)束。 定義局部靜態(tài)變量,如果沒有賦初值,編譯時會自動賦默認(rèn)初值。 局部靜態(tài)變量只能在定義它的函數(shù)中使用。 全局變量都是靜態(tài)的。 利用extern 外部變量方式表示變量的定義在別的文件中,提示編譯器遇到此變量時,在其他模塊中尋找其定義。而函數(shù)則是利用函數(shù)原型來聲明。 用static 關(guān)鍵字說明一個不能在其

23、他源文件中引用的全局變量。即靜態(tài)全局變量在聲明它的整個文件都是可見的,但是在文件之外是不可見的。2、動態(tài)存儲區(qū)僅在在執(zhí)行時分配空間,用完后釋放存儲空間。存放自動變量和形式參數(shù)。 寄存器變量用register關(guān)鍵字說明。寄存器變量對寄存器的占用是動態(tài)的。第九章 預(yù)處理命令1979.1 預(yù)編譯命令作用預(yù)編譯命令主要完成宏定義、文件包含、條件編譯三種功能。1、宏定義指用一個指定的標(biāo)識符(名字)來代表一個字符串。在預(yù)編譯時,將宏名替代成字符串的過程稱為宏展開。如: # define PI 3.1415926 定義宏,# undef PI 終止宏定義的作用域。 #define V(a,b,c) a*b*

24、c 定義帶參數(shù)的宏。當(dāng)宏展開時,將引用宏名語句中的實參字符串代替宏定義的形參字符串。int v =V(2,3,4)則宏展開后為:int v= 2*3*4;2、文件包含指一個源文件可以將另一個源文件的全部內(nèi)容包含進來。如: #include “文件名”或#include 編譯預(yù)處理時,將包含文件的全部內(nèi)容復(fù)制到源文件中。在編譯時作為一個源程序來編譯。3、條件編譯在預(yù)編譯處理時,確定編譯時要編譯的部分。如: # ifdef 標(biāo)識符程序段1# else程序段2# endif # if 表達式程序段1# else程序段2# endif第十章 指針21110.1 變量的訪問方式1、直接訪問如:int a

25、 = 10;2、間接訪問定義一個指針變量p,存放變量a的首地址,通過p訪問變量a。則稱指針變量p指向變量a。如:int a=10;int *p1; p=&a;b=*p1; 或*p1=100;等價于a=100;10.2 指針變量1、指針變量的類型是指該變量指向的內(nèi)存數(shù)據(jù)的數(shù)據(jù)類型。2、必須用引用變量的地址給指針變量賦值。3、可以給指針變量賦值空值null,防止指針變量存儲隨機值導(dǎo)致系統(tǒng)錯誤。4、數(shù)組名代表數(shù)據(jù)的首地址。數(shù)組指針或數(shù)組名+1,指向下一個數(shù)組元素的存儲地址。聲明格式:數(shù)據(jù)類型 *p ;賦值格式:p=a;或p=&a0;引用格式:*p=常量;等價于p0=常量;等價于a0=常量;等價于*a

26、=常量; *(p+1)=常量;等價于p1=常量;等價于a1=常量;等價于*(a+1)=常量;5、數(shù)組名和指針變量雖然都可以代表數(shù)組的首地址,但是指針變量值可以改變,而數(shù)組名的值不可以改變。6、函數(shù)的指針專門用來存放函數(shù)的入口地址,當(dāng)把函數(shù)的地址賦值給它時,它就指向該函數(shù)的入口地址。聲明格式:數(shù)據(jù)類型(*指針變量名)()如:int (*P)();賦值格式:p=max; 注max為定義的函數(shù)名;函數(shù)名代表該函數(shù)的入口地址。引用格式:c=(*p)(a,b);等價c=max(a,b);7、只能將變量已分配的地址賦值給指針變量,不能直接將整數(shù)賦值給指針變量。8、指針變量可以有null值,防止指針誤作用。

27、第十一章 結(jié)構(gòu)體27011.1 結(jié)構(gòu)體2701、作用將不同類型的數(shù)據(jù)組合成一個有機的整體。2、結(jié)構(gòu)體的定義結(jié)構(gòu)體是一種數(shù)據(jù)結(jié)構(gòu),按照某種規(guī)則定義,將若干個不同數(shù)據(jù)類型(也可相同)的數(shù)據(jù)項的組合成的一個有機整體。3、聲明結(jié)構(gòu)體類型的形式:struct 結(jié)構(gòu)體類型名字 成員列表; 成員列表形式:類型符 成員名 如:int num;11.2 聲明結(jié)構(gòu)體類型變量的方法2711、先定義結(jié)構(gòu)體類型:struct 結(jié)構(gòu)體類型名字 成員列表;再定義結(jié)構(gòu)體變量:struct結(jié)構(gòu)體類型名字 結(jié)構(gòu)體變量名。2、可在定義結(jié)構(gòu)體類型時,定義結(jié)構(gòu)體類型變量。struct 結(jié)構(gòu)體類型名字 成員列表結(jié)構(gòu)體類型變量1,結(jié)構(gòu)體類

28、型變量2,;11.3 結(jié)構(gòu)體變量引用2731、不能將一個結(jié)構(gòu)體變量作為一個整體進行輸入輸出,只能對結(jié)構(gòu)體變量成員分別賦值。2、結(jié)構(gòu)體變量成員引用方式:結(jié)構(gòu)體變量名.成員名3、如果結(jié)構(gòu)體變量成員是另一個結(jié)構(gòu)體變量,則要用若干個成員運算符,一級一級找到最低一級的成員。11.4 結(jié)構(gòu)體變量初始化1、在聲明變量時整體賦值。2、復(fù)制相同結(jié)構(gòu)的變量賦值。3、除以上兩種情況下可以對結(jié)構(gòu)體類型變量整體賦值,其余情況下只能對變量成員分別賦值。11.5 結(jié)構(gòu)體數(shù)組2751、結(jié)構(gòu)體數(shù)組在內(nèi)存中連續(xù)存放。2、聲明方式:與定義結(jié)構(gòu)體變量方法相同。見11.2,只是在變量名后+n。也可在定義結(jié)構(gòu)體數(shù)組時直接初始化結(jié)構(gòu)體數(shù)組

29、,此時可采用+的形式。3、初始化方式:同定義結(jié)構(gòu)體變量方法。11.6 結(jié)構(gòu)體類型指針結(jié)構(gòu)體類型指針是指指向結(jié)構(gòu)體變量所占據(jù)的內(nèi)存的起始位置的指針。聲明形式:struct 結(jié)構(gòu)體類型名 *指針名。如:struct student *p;賦值形式:指針名=&結(jié)構(gòu)體變量 。如:p=&studengt1;引用形式:(*P).成員名 或 p-成員名。*p表示指針p指向的結(jié)構(gòu)體變量。注意:1、定義的結(jié)構(gòu)體類型,和聲明結(jié)構(gòu)體變量時不分配空間。2、結(jié)構(gòu)體可以嵌套定義。3、結(jié)構(gòu)體成員名可以與變量名相同。11.7 鏈表2831、單項鏈表結(jié)構(gòu):鏈表有一個頭指針和表尾null指針。每個結(jié)點包含實際數(shù)據(jù)和下一個結(jié)點的地

30、址。2、可以用結(jié)構(gòu)體類型指針,將多個結(jié)構(gòu)體變量鏈接起來形成結(jié)構(gòu)體鏈表。如:11.8 共用體 2971、共用體指將幾種不同類型的變量存儲在同一段內(nèi)存單元中。2、共用體變量的存儲單元大小等于最長成員變量所占內(nèi)存的長度3、共用體變量中起作用的是最后一次存放成員。4、共用體類型聲明方式:union 公用體類型名稱 成員變量列表;5、共用體變量聲明方式:(1)union 公用體類型名稱 成員列表共用體變量;(2)先聲明共用體類型,然后聲明共用體變量,union 公用體類型名稱 共用體變量。11.9 枚舉類型3011、枚舉類型指將變量的值一一列舉出來,變量的值只限于列舉出來的值的范圍內(nèi)的一個。2、聲明枚舉

31、類型:enum 枚舉類型名稱 枚舉常量列表;3、聲明枚舉變量:enum 枚舉類型名稱 枚舉類型變量;11.10 用typedef定義的類型3041、typedef 的作用可以用typedef聲明新的類型名來代替已有的類型名。2、聲明方式:typedef 類型名稱 新的類型名稱。第十二章 位運算30812.1 位段 3151、位段是一種特殊的數(shù)據(jù)結(jié)構(gòu),它允許定義一個由位組成段,并可為它賦以一個名字。位段一般作為結(jié)構(gòu)體的成員。2、聲明方法: 位段結(jié)構(gòu)類型聲明方法:struct 結(jié)構(gòu)體類型名稱 位段成員列表; 位段結(jié)構(gòu)成員(即位段變量)聲明方法:unsigned int 位段變量 : n;如: st

32、ruct packed_struct unsigned int f1 :1; unsigned int f2 :1; unsigned int f3 :1; unsigned int type :4; unsigned int index :9;3、位段結(jié)構(gòu)類型變量聲明方法:同結(jié)構(gòu)體。4、同一位段必須存儲在同一個存儲單元中,不能跨兩個單元。第十三章 文件31913.1 文件3191、文件指存儲在外部介質(zhì)上的數(shù)據(jù)集合(數(shù)據(jù)文件),操作系統(tǒng)以文件為單位對數(shù)據(jù)進行管理。13.2 文件的分類3191、從用戶的觀點看: 特殊文件指標(biāo)準(zhǔn)輸入輸出文件或標(biāo)準(zhǔn)設(shè)備文件。 普通文件指磁盤文件。2、從操作系統(tǒng)的角度

33、看:每一個與主機相關(guān)聯(lián)的輸入輸出設(shè)備都可看作一個文件。(1)根據(jù)文件的組織形式分為:順序存取文件 和 隨機存取文件。(2)根據(jù)文件的存儲形式分為:ASCII文件 和 二進制文件。13.3 C語言對文件的處理方法319C語言中對文件的存取是以字符(字節(jié))為單位的,一個輸入輸出流就是一個字節(jié)流或二進制流。文件的存儲方式分為緩沖文件系統(tǒng)和非緩沖文件系統(tǒng)。區(qū)別是緩沖文件系統(tǒng)是系統(tǒng)自動開辟緩沖區(qū),非緩沖文件系統(tǒng)是由程序為每個文件設(shè)定緩沖區(qū)。ANSI C標(biāo)準(zhǔn)只采用 緩沖文件系統(tǒng) 來處理文件。13.4 文件結(jié)構(gòu)體類型321緩沖文件系統(tǒng)中,每個被使用的文件都在內(nèi)存中開辟一個FILE結(jié)構(gòu)體類型的區(qū),用來存放文件

34、的有關(guān)信息(文件名字、文件狀態(tài)、當(dāng)前位置、緩沖區(qū)等有關(guān)信息),F(xiàn)ILE結(jié)構(gòu)體類型原型: typedef struct short level; *緩沖區(qū)“滿”或“空”的程度* unsigned flags; *文件狀態(tài)標(biāo)志* char fd; *文件描述符* unsigned char hold; *如無緩沖區(qū)不讀取字符* short bsize; *緩沖區(qū)的大小* unsigned char *buffer; / *數(shù)據(jù)緩沖區(qū)的位置*/ unsigned char *curp; /*指針,當(dāng)前的指向*/ unsigned istemp; /*臨時文件,指示器*/ short token;/*

35、用于有效性檢查*/FILE; 13.5 文件結(jié)構(gòu)體數(shù)組和指針321FILE *fp聲明了一個指向FILE類型結(jié)構(gòu)體的指針變量。FILE f5聲明了一個文件結(jié)構(gòu)體數(shù)組f,它有5個元素,存放5個文件的信息。FILE 變量聲明了一個文件結(jié)構(gòu)體變量。13.6 文件的操作321C語言要求,在文件讀寫之前要“打開”文件,在使用結(jié)束后要“關(guān)閉”文件。1、打開文件: FILE *fp; fpfopen(“文件名”,“使用文件方式”);指針變量指向被打開的文件。例如:fp = fopen(“a1”,“r”)。2、關(guān)閉文件:fclose(文件指針);返回值:關(guān)閉成功返回值為;否則返回EOF(-1) 。使文件指針變

36、量不指向該文件,也就是文件指針變量與文件“脫鉤”,此后不能再通過該指針對原來與其相聯(lián)系的文件進行讀寫操作。3、將字符寫到文件中:fputc ( ch,fp ) ;返回值:如果輸出成功,則返回值就是輸出的字符;如果輸出失敗,則返回一個EOF(-1)。將字符(ch的值)輸出到文件指針fp所指向的文件中去。該文件必須是以寫或讀寫方式打開的。4、將字符從文件中讀出:chfgetc(fp);返回值:讀取成功一個字符,賦給c。如果遇到文件結(jié)束符,返回一個文件結(jié)束標(biāo)志EOF(-1)。從指定的文件讀入一個字符,該文件必須是以讀或讀寫方式打開的。 注意:ANSI C提供一個feof()函數(shù)來判斷文件是否真的結(jié)束

37、。如果是文件結(jié)束,函數(shù)feof(fp)的值為(真);否則為(假)。以上也適用于文本文件的讀取。 5、數(shù)據(jù)塊讀寫: fread (buffer,size,count,fp); fwrite(buffer,size,count,fp); buffer:是一個指針。對fread 來說,它是讀入數(shù)據(jù)的存放地址。對fwrite來說,是要輸出數(shù)據(jù)的地址(均指起始地址)。size: 要讀寫的字節(jié)數(shù)。count: 要進行讀寫多少個size字節(jié)的數(shù)據(jù)項。fp: 文件型指針。6、格式化讀寫函數(shù): fprintf ( 文件指針,格式字符串,輸出表列); fscanf ( 文件指針,格式字符串,輸入表列); 注意:

38、用fprintf和fscanf函數(shù)對磁盤文件讀寫,使用方便,容易理解,但由于在輸入時要將ASCII碼轉(zhuǎn)換為二進制形式,在輸出時又要將二進制形式轉(zhuǎn)換成字符,花費時間比較多。因此,在內(nèi)存與磁盤頻繁交換數(shù)據(jù)的情況下,最好不用fprintf和fscanf函數(shù),而用fread和fwrite函數(shù)。7、以“字”或者整數(shù)為單位讀寫函數(shù): putw(int i,FILE * fp); int i = getw(FILE * fp); 8、以“字符串”為單位讀寫文件的函數(shù): fgets(str,n,fp); 從fp指向的文件讀出n-1個字符,在最后加一個0。返回值:str的首地址。如果遇到EOF則讀入結(jié)束。 fp

39、uts(“china”,fp); 把字符串寫入到fp指向的文件。第一個參數(shù)可以是字符串常量、字符數(shù)組名或字符型指針。字符串末尾的不輸出。 13.7 文件的定位3331、將文件當(dāng)前的位置指針重新返回到文件的開頭位置:無返回值。 rewind (fp);執(zhí)行后,將文件的位置指針重新定位到文件的開頭。2、隨機讀寫:改變文件的位置指針,一般用于二進制文件。 fseek(文件類型指針,位移量,起始點);無返回值。起始點:文件開頭 SEEK_SET 0 文件當(dāng)前位置 SEEK_CUR 1 文件末尾 SEEK_END 2位移量:以起始點為基點,向后(前,末尾時)移動的字節(jié)數(shù)。一般要求為long型。3、獲取流

40、式文件當(dāng)前的位置指針:返回當(dāng)前位置用相對于文件開頭的位移量來表示。,出錯時返回EOF。 i = ftell(fp); 13.8 出錯檢測3351、ferror(fp);返回0,表示未出錯;返回非0,表示出錯。注意:在調(diào)用一個輸入輸出函數(shù)后立即檢查ferror函數(shù)的值,否則信息會丟失。在執(zhí)行fopen函數(shù)時,ferror函數(shù)的初始值自動置為。 2、clearerr(fp);使文件錯誤標(biāo)志和文件結(jié)束標(biāo)志置為0。只要出現(xiàn)錯誤標(biāo)志,就一直保留,直到對同一文件調(diào)用clearerr函數(shù)或rewind函數(shù),或任何其他一個輸入輸出函數(shù)。調(diào)用后feeror(fp)的值變?yōu)?,且文件結(jié)束標(biāo)志置為0。13.9 小結(jié)

41、336分類 函數(shù)名 功能 打開文件 fopen() 打開文件 關(guān)閉文件 fclose() 關(guān)閉文件文件定位 fseek() 改變文件位置指針的位置 Rewind() 使文件位置指針重新至于文件開頭 Ftell() 返回文件位置指針的當(dāng)前值文件狀態(tài) feof() 若到文件末尾,函數(shù)值為真 Ferror() 若對文件操作出錯,函數(shù)值為真 Clearerr() 使ferror和feof()函數(shù)值置零文件讀寫 fgetc(),getc()從指定文件取得一個字符 fputc(),putc()把字符輸出到指定文件 fgets()從指定文件讀取字符串 fputs()把字符串輸出到指定文件 getw()從指定

42、文件讀取一個字(int型) putw()把一個字輸出到指定文件 fread()從指定文件中讀取數(shù)據(jù)項 fwrite()把數(shù)據(jù)項寫到指定文件中 fscanf()從指定文件按格式輸入數(shù)據(jù) fprintf()按指定格式將數(shù)據(jù)寫到指定文件中第十四章 C+對C的擴充 33814.1 C+的特點3381、C+保留了C語言原有的所有優(yōu)點,增加了面向?qū)ο蟮臋C制。2、C+源文件以.cpp為后綴。3、除了可以用 /*/ 形式的注釋行外,還允許使用以/ 開頭的單行注釋。4、除了可以用printf函數(shù)輸出信息外,還可以用cout進行輸出。cout的作用是將運算符右側(cè)的內(nèi)容送到輸出設(shè)備中輸出。使用cout需要用到頭文件

43、iostream.h,在程序的第一行用#include命令將該頭文件“包含”進來。 cout This is a c+ program. n ;14.2 C+的輸入輸出 339C+為了方便使用,除了可以利用printf和scanf函數(shù)進行輸出和輸入外,還增加了標(biāo)準(zhǔn)輸入輸出流cout和cin。cout是由c和out兩個單詞組成的,代表C+的輸出流,cin是由c和in兩個單詞組成的,代表C+的輸入流。它們是在頭文件iostream.h中定義的。在鍵盤和顯示器上的輸入輸出稱為標(biāo)準(zhǔn)輸入輸出,標(biāo)準(zhǔn)流是不需要打開和關(guān)閉文件即可直接操作的流式文件。14.3 C+的輸出cout1、cout必須和輸出運算符一起

44、使用。 在這里不作為位運算的左移運算符,而是起插入的作用,例如:coutHello!n;的作用是將字符串“Hello!n” 插入到輸出流cout中,也就是輸出在標(biāo)準(zhǔn)輸出設(shè)備上。2、也可以不用n控制換行,在頭文件iostream.h中定義了控制符endl代表回車換行操作,作用與n相同。endl的含義是end of line,表示結(jié)束一行。3、可以在一個輸出語句中使用多個運算符 將多個輸出項插入到輸出流cout中,運算符的結(jié)合方向為自左向右,因此各輸出項按自左向右順序插入到輸出流中。每輸出一項要用一個 符號。例如: for (i=1; i=3;i+)coutcount=iendl;輸出結(jié)果為: c

45、ount=1count=2count= 34、用cout和 可以輸出任何類型的數(shù)據(jù)。例如: float a=3.45;int b=5;char c=A;couta=a,b=b,c=cendl;5、如果要指定輸出所占的列數(shù),可以用控制符setw設(shè)置(注意:若使用setw,必須包含頭文件 iomanip.h),如setw(5) 的作用是為其后面一個輸出項預(yù)留5列,如輸出項的長度不足5列則數(shù)據(jù)向右對齊,若超過5列則按實際長度輸出。例如: couta=setw(6)aendlb=setw(6)bendlc=setw(6)cendl; 輸出結(jié)果為:a=3.45b= 5c= A6、在C+中將數(shù)據(jù)送到輸出流

46、稱為“插入”(inserting) ,或“放到”(putting) 。 運算符從輸入設(shè)備鍵盤取得數(shù)據(jù)送到輸入流cin中,然后送到內(nèi)存。在C+中,這種輸入操作稱為“提取”(extracting) 或“得到”(getting) 。 常稱為“提取運算符”。2、cin要與 配合使用。例如:3、C+為流輸入輸出提供了格式控制,如:dec(用十進制形式),hex(用十六進制形式),oct(用八進制形式), 還可以控制實數(shù)的輸出精度等。14.5 函數(shù)的重載3421、C+允許在同一作用域中用同一函數(shù)名定義多個函數(shù),這些函數(shù)的參數(shù)個數(shù)和參數(shù)類型不同,而且函數(shù)類型也可不同,這就是函數(shù)的重載,即一個函數(shù)名多用。2、

47、系統(tǒng)會根據(jù)參數(shù)的類型和個數(shù)找到與之匹配的函數(shù),并調(diào)用不同的函數(shù)。14.6 帶缺省參數(shù)的函數(shù)344C+允許實參個數(shù)與形參個數(shù)不同。辦法是在形參表列中對一個或幾個形參指定缺省值(或稱默認(rèn)值)。例如某一函數(shù)的首部可用如下形式:void fun(int a, int b, int c=100)在調(diào)用此函數(shù)時如寫成fun(2,4,6),則形參a,b,c的值分別為2,4,6(這是與過去一樣的)。如果寫成fun(2,4) ,即少寫了最后一個參數(shù),由于在函數(shù)定義時已指定了c的缺省值為100,因此a,b,c的值分別為2,4,100。請注意:賦予缺省值的參數(shù)必須放在形參表列中的最右端。例如:void f1(flo

48、at a, int b, int c=0, char d=a) (正確)void f2(float a, int c=0, char d=a, int b) (不正確)注意:不要同時使用重載函數(shù)和缺省參數(shù)的函數(shù),因為當(dāng)調(diào)用函數(shù)時少寫一個參數(shù),系統(tǒng)無法判定是利用重載函數(shù)還是利用缺省參數(shù)的函數(shù),會發(fā)生錯誤。14.7 變量的引用類型3451、“引用”(reference)是C+的一種新的變量類型,是對C的一個重要擴充。它的作用是為一個變量起一個別名。2、假如有一個變量a,想給它起一個別名b,可以這樣寫:int a;int &b=a;這就聲明了b是a的“引用”,即a的別名。經(jīng)過這樣的聲明后,使用a或b的作用相同,都代表同一變量。注意:在上述聲明中,&是“引用聲明符”, 并不代表地址。不要理解為“把a的值賦給b的地址”。3、聲明引用并不另開辟內(nèi)存單元,b和a都代表同一變量單元。在聲明一個引用型變量時,必須同時使之初始化,即聲明它代表哪一個

溫馨提示

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

評論

0/150

提交評論