




已閱讀5頁,還剩95頁未讀, 繼續(xù)免費閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
C 程序設(shè)計語言 回顧 軟件工程 07級 2007年12月5日,第1章 C語言概述,計算機科學(xué):信息在計算機內(nèi)使用數(shù)據(jù)來表示, 研究信息表示 和信息處理。,數(shù)據(jù):是用以描述客觀事物的數(shù)值、字符,以及一切可以輸入到 計算機中并由計算機程序加以處理的符號的集合。 數(shù)據(jù)的基本單位稱為數(shù)據(jù)元素 數(shù)據(jù)的最小單位稱為數(shù)據(jù)項,問題 數(shù)學(xué)模型 算法 程序 測試 計算,計算機解題過程, 程序設(shè)計語言, 高級語言程序調(diào)試過程,C語言特點 1、語言簡潔、緊湊,使用方便靈活 2、運算符豐富 3、數(shù)據(jù)結(jié)構(gòu)豐富,具有現(xiàn)代化語言的各總數(shù)據(jù)結(jié)構(gòu) 4、具有結(jié)構(gòu)化的控制語句 5、語法限制不太嚴(yán)格,程序設(shè)計自由度大 6、C語言允許直接訪問物理地址,能進行位操作 可實現(xiàn)匯編語言的大部分功能 7、生成目標(biāo)代碼的質(zhì)量高,程序執(zhí)行效率高 8、程序可執(zhí)行性好,C語言程序結(jié)構(gòu) C程序是由函數(shù)構(gòu)成的。一個C源程序至少包含一個主函數(shù)(main或主程序)和若干個其它函數(shù)(子函數(shù)或子程序) 一個函數(shù)由兩部分程序組成:說明部分和函數(shù)體 一個C程序總是從main函數(shù)開始執(zhí)行,不論main函數(shù)放在程序中的什么位置。程序的流程是通過主函數(shù)main調(diào)用其它子函數(shù),或子函數(shù)間的相互調(diào)用 C程序書寫格式自由,一行內(nèi)可以寫多條語句,但每一語句必須用分號(“;”)結(jié)束 C語言本身沒有輸入/輸出語句,而是用函數(shù)完成相應(yīng)操作 可以用/* , */在程序的任何部分做注釋,算法(Algorithm) 是對特定問題求解步驟的一種描述,它是指令(規(guī)則)的 有限序列,其中每一條指令表示一個或多個操作。,“好”的算法的標(biāo)準(zhǔn) 正確性,算法能滿足具體問題的需求 可讀性,首先方便閱讀與交流,其次才是機器執(zhí)行 健壯性,輸入錯誤時,能作出反應(yīng),避免異常出錯 效率與低存儲量要求,算法的特征 有窮性、確定性、輸入、輸出、有效性,第2章 算法 Algorithm,對算法“正確性”的要求 不含語法錯誤; 對于幾組輸入數(shù)據(jù)能得到滿足要求的結(jié)果; 對精心選擇苛刻并帶有刁難的數(shù)據(jù)能得到滿足要求的結(jié)果; 對于一切合法的輸入均得到滿足要求的結(jié)果;,算法描述 自然語言;程序設(shè)計語言;類語言*; 流程圖,N.Wirth: Programming = Algorithm + Data Structure 程序設(shè)計 = 算法 + 數(shù)據(jù)結(jié)構(gòu),問題總是先于算法,程序設(shè)計的四個里程碑 子程序、高級語言、結(jié)構(gòu)程序設(shè)計、面向?qū)ο?OOP),結(jié)構(gòu)程序設(shè)計 限制使用GO TO語句(基于三種基本結(jié)構(gòu)) 逐步求精的設(shè)計方法 自頂向下的設(shè)計、編碼與調(diào)試 主程序員組的組織形式,三種基本結(jié)構(gòu),順序結(jié)構(gòu),選擇結(jié)構(gòu),循環(huán)結(jié)構(gòu),常量,符號常量,#define PRICE 30 #define PI 3.1415926 #define MAX 1000, Total = num*PRICE ; Area = PI*R*R ; Int xMAX ; ,變量,變量名 變量名命名規(guī)則 變量是有類型的,數(shù)據(jù)類型:變量的取值范圍和所允許操作的集合,第3章 數(shù)據(jù)類型、運算符與表達式,變量的存儲類型 變量的數(shù)據(jù)類型 變量名,變量說明:先定義,后引用,標(biāo)識符 命名 規(guī)則,int float char Pointer to array struct,auto static register extern,變量的: 有效范圍 作用時間,變量的: 取值范圍 操作,數(shù)據(jù)類型,注意:每種類型數(shù)據(jù)的取值范圍 Int :-2bits-1 (2bits-1-1) Unsigned :0 (2bits-1) Float :10-38 1038 Double :10-308 10308,運算符,0、賦值運算: = 1、算術(shù)運算符: + * / % 2、關(guān)系運算符: = - | & 5、賦值運算符: = += = *= /= 6、條件運算符: ? : 7、逗號運算符: , 8、指針運算符: * & 9、求字節(jié)數(shù)運算符: sizeof 10、強制類型轉(zhuǎn)換: (類型) 11、分量運算符: . - 12、下標(biāo)運算符: 13、其他: (),優(yōu)先級 類型轉(zhuǎn)換,表達式,算術(shù)表達式: 算術(shù)運算符 關(guān)系表達式: 關(guān)系運算符 邏輯表達式; 邏輯運算符 賦值表達式: 變量 = 表達式 逗號表達式: 表達式1,表達式2,表達式n 條件表達式: 表達式1?表達式2:表達式3,混合運算,第4章 最簡單的C程序設(shè)計順序程序設(shè)計,C語句,1、控制語句 if() else for() while() dowhile() continue break switch goto return,2、函數(shù)調(diào)用,3、表達式語句,4、空語句,5、復(fù)合語句,賦值語句,輸入/輸出語句綜述,輸入:從鍵盤或文件鍵入或讀入數(shù)據(jù), 并將數(shù)據(jù)賦給程序中的變量。,輸出:將程序中變量的值顯示在顯示器上, 或?qū)懭氲轿募?,或在打印機上打印。,C語言中的輸入/輸出,1、字符輸入/輸出 putchar( chr ) chr = getchar( ),文件的字符輸入/輸出 fputc( chr , fp ) chr = fgetc( fp ),2、字符串輸入/輸出 puts( str ) gets( str ),文件的字符串輸入/輸出 fputs( strr , fp ) fgets( str , n , fp ),3、格式輸入/輸出 printf( 格式控制,輸出表列 ) scanf( 格式控制,地址表列 ),文件的格式輸入/輸出 fprintf(文件變量,格式控制,輸出表列) fscanf(文件變量,格式控制,地址表列 ),Printf(“Format”,表達式1,表達式2,),Scanf(“Format”, &變量名1,&變量名2 ,),格式控制(Format),整 形 int %d %-nd %-m.nd 實 型 float %f %-m.nf 字符型 char %c %-nc 字符串 char c1MAX %s %-ns,4、塊數(shù)據(jù)的輸入/輸出 fread( buffer , size , count , fp ) fwrite( buffer , size , count , fp ),Char str20; sprintf ( str ,格式控制,變量列表 ) ;,Turbo C 函數(shù),系統(tǒng)自動打開和關(guān)閉三個標(biāo)準(zhǔn)文件,標(biāo)準(zhǔn)輸入-鍵盤 stdin,標(biāo)準(zhǔn)輸出-顯示器 stdout,標(biāo)準(zhǔn)出錯輸出-顯示器 stderr,fpringtf(stdout, “x=%d,y=%fn” , x , y) ;,pringtf(“x=%d,y=%fn” , x , y) ;,第5章 選擇結(jié)構(gòu)程序設(shè)計,算術(shù)運算 關(guān)系運算 邏輯運算,邏輯常量,例:,a&b&c a|b|c 當(dāng)a=1,b=2,c=3,d=4時 (m=ab)&(n=cd) 執(zhí)行后m、n=? (m=ad) 執(zhí)行后m、n=?,真值表,條件語句:,三種格式: if() if() else else if 條件表達式: 表達式1?表達式2:表達式3 條件運算: 變量 =表達式1?表達式2:表達式3 Switch,第6章 循環(huán)控制,循環(huán)類型:“當(dāng)”型 “直到”型 計數(shù),while() dowhile() for(表達式1;表達式2;表達式3) Break:結(jié)束循環(huán) Continue:結(jié)束本次循環(huán),進入下一次循環(huán),用流程圖表示各種循環(huán)結(jié)構(gòu),第7章 數(shù) 組,一維數(shù)組 二維數(shù)組,數(shù)組下標(biāo)變量,維數(shù),數(shù)組名 數(shù)組類型 元素個數(shù) 下標(biāo)范圍,先定義后使用原則 數(shù)組的內(nèi)存存儲結(jié)構(gòu),數(shù)組長度,初始化,數(shù)組與指針,地址常量,相同類型元素組成的集合,概述 函數(shù)分類 函數(shù)結(jié)構(gòu) 函數(shù)的參數(shù)和函數(shù)的值 函數(shù)的調(diào)用 被調(diào)用函數(shù)的聲明和函數(shù)原型 函數(shù)的嵌套調(diào)用 函數(shù)的遞歸調(diào)用 函數(shù)與數(shù)組 存儲類型 函數(shù)的指針和指向函數(shù)的指針變量簡介 指針數(shù)組與主函數(shù)main( )的形參,第 8章 函數(shù),C程序是由函數(shù)構(gòu)成的!,函數(shù)分類1:定義的角度看,函數(shù)可分為 庫函數(shù)和用戶定義函數(shù),函數(shù)分類,函數(shù)分類2:從調(diào)用角度,可分為 有返回值函數(shù)和無返回值函數(shù),函數(shù)分類3:參數(shù)傳遞角度,可分為 無參函數(shù)和有參函數(shù),函數(shù)分類4:從功能角度,可分為:,字符串、 轉(zhuǎn)換、目錄路徑、診斷圖形 I/O函數(shù)、接口、內(nèi)存管理、日期和時 間、數(shù)學(xué)、進程等,存儲類型 返值類型 函數(shù)名( 形式參數(shù)表列 ) 聲明部分(局部變量說明) 語句部分(完成函數(shù)的功能) exit(0) return; / return(); / return() / return ,函數(shù)的結(jié)構(gòu),auto static register extern,Int , float , char Pointer to Struct void,類型變量 指針 數(shù)組 結(jié)構(gòu)體 函數(shù),存儲類型 返值類型 函數(shù)名( 形式參數(shù)表列 ),標(biāo)識符 命名 規(guī)則,int float char pointer array Struct void,auto static register extern,變量的: 有效范圍 作用時間,變量的: 取值范圍 操作,類型變量 指針變量 數(shù)組 結(jié)構(gòu)體 函數(shù),函數(shù)的調(diào)用,函數(shù)調(diào)用的一般形式 函數(shù)名(實際參數(shù)表) ;,函數(shù)表達式 例如:z=max(x,y) 函數(shù)語句 例如: printf (“%d“,a);scanf (“%d“,常量 表達式 數(shù)組元素 類型變量 指針變量 數(shù)組 結(jié)構(gòu)體 函數(shù),被調(diào)用函數(shù)的聲明和函數(shù)原型,其一般形式為: 類型說明符 被調(diào)函數(shù)名(類型 形參,類型 形參); 或為: 類型說明符 被調(diào)函數(shù)名(類型,類型); 原則:先聲明,后使用,函數(shù)的嵌套調(diào)用,函數(shù)的遞歸調(diào)用,直接遞歸和間接遞歸,關(guān)于函數(shù)的處理結(jié)果:,無數(shù)據(jù)返回 單值返回 多值返回 批量數(shù)據(jù)返回,調(diào)用函數(shù) 被調(diào)用函數(shù),結(jié)果,數(shù)組作為函數(shù)參數(shù),數(shù)組元素作為函數(shù)實在參數(shù),形參為變量 數(shù)組名作為函數(shù)參數(shù)(指針),形參為指針,但應(yīng)同 時傳送數(shù)組的長度,例:float average( float array10 , int n ) float average( float array , int n ) float average( float * array , int n),指針變量作為函數(shù)參數(shù),存儲類型,變量的數(shù)據(jù)類型:變量的取值范圍和允許的操作,變量的存儲類型:變量的有效時間和作用范圍,變量的存在時間 (1)全局變量(global varible) 定義在所有函數(shù)體之外的變量。 定義位置:在程序中所有函數(shù)體之外; 有效范圍:在定義開始之后的所有函數(shù)中; 使用要求:不能與局部變量重名; 存在時間:從程序開始到程序結(jié)束。,(2)局部變量(local varible) 定義在所函數(shù)體內(nèi)的變量。 定義位置:在某一函數(shù)體內(nèi)定義; 有效范圍:只在定義變量的函數(shù)中有效; 存在時間:函數(shù)調(diào)用時產(chǎn)生,函數(shù)結(jié)束后消失 使用特點:局部變量的存在時間決定了不同函數(shù)中的局部變量 是互不干涉的,即使同名,也完全相互獨立。,(3)外部變量(Extern varible),變量的存儲類型:auto static register extern,1、自動存儲類型(auto) 2、寄存器存儲類型(register) 3、靜態(tài)存儲類型(static) 4、外部存儲類型(extern),存儲變量的特征,從作用于角度,分為局部變量和全局變量。,變量的作用域 存在時間 動態(tài)存儲 靜態(tài)存儲,關(guān)于作用域和生存期的概念: 從前面敘述可以知道,對一個變量的性質(zhì)可以從兩個方面分析,一是從變量的作用域,一是從變量值存在時間的長短,即生存期。 作用域:空間的角度 生存期:時間的角度 如果一個變量在某個文件或函數(shù)范圍內(nèi)是有效的,則稱該文件或函數(shù)為該變量的作用域,在此作用域內(nèi)可以引用該變量,所以又稱變量在此作用域內(nèi)“可見”,這種性質(zhì)又稱為變量的“可見性” 。 如果一個變量值i在某一時刻是存在的,則認(rèn)為這一時刻屬于該變量的“生存期”,或稱該變量在此時刻“存在”。,內(nèi)部函數(shù)與外部函數(shù),內(nèi)部函數(shù):一個函數(shù)只能被定義它的文件內(nèi)的其它函數(shù)調(diào)用。 定義函數(shù)時加 static static 類型說明 函數(shù)名(形參表),外部函數(shù):一個函數(shù)可以被其它文件內(nèi)的函數(shù)調(diào)用。 定義函數(shù)時加 extern extern 類型說明 函數(shù)名(形參表),函數(shù)定義的完整格式: 存儲類型 返回值數(shù)據(jù)類型 函數(shù)名(形參表),使用內(nèi)部函數(shù)的好處是:不同的人編寫不同的函數(shù)時,不用擔(dān)心自己定義的函數(shù),是否會與其它文件中的函數(shù)同名,因為同名也沒有關(guān)系。,函數(shù)的指針和指向函數(shù)的指針變量簡介,1、函數(shù)指針的概念 一個函數(shù)在編譯時,被分配了一個入口地址,這個地址就稱為該函數(shù)的指針。 可以用一個指針變量指向一個函數(shù),然后通過該指針變量調(diào)用此函數(shù)。 2、指向函數(shù)的指針變量 (1)定義格式 函數(shù)返值類型 ( *指針變量 )( ); 注意:“*指針變量”外的括號不能缺,否則成了返回指針值的函數(shù)。 例如,int (*fp)( ); /* fp為指向int函數(shù)的指針變量*/ (2)賦值 函數(shù)名代表該函數(shù)的入口地址。可用函數(shù)名給指向函數(shù)的指針變量賦值。 指向函數(shù)的指針變量 注意:函數(shù)名后不能帶括號和參數(shù);函數(shù)名前的“&”符號是可選的。 (3)調(diào)用格式 (*函數(shù)指針變量)(實參表) 3、指向函數(shù)的指針變量作函數(shù)參數(shù) 指向函數(shù)的指針變量的常用用途之一,就是將函數(shù)指針作參數(shù),傳遞到其它函 數(shù)。函數(shù)名作實參時,因為要缺省括號和參數(shù),造成編譯器無法判斷它是一個 變量還是一個函數(shù),函數(shù)說明的格式與其他函數(shù)一樣。 注意:對指向函數(shù)的指針變量,諸如p+i、p+/p-等運算是沒有意義的。,第 9章 指針,指針的概念 變量的指針和指向變量的指針變量 數(shù)組的指針和指向數(shù)組的指針變量 字符串的指針和指向字符串的指針變量 函數(shù)的指針和指向函數(shù)的指針變量 返回指針值的函數(shù) 指針數(shù)組和指向指針的指針 指針型數(shù)據(jù)小結(jié),指針的概念,指針就是地址。 有變量的、數(shù)組的、函數(shù)的、字符串的指針等。 1、內(nèi)存的訪問方式 1)直接訪問 2)間接訪問,2、指針的概念 一個變量的地址稱為該變量的“指針”。 存放地址的變量叫“指針變量”。換句話說,指針變量存放地址。,變量的指針和指向變量的指針變量,1、指針變量的定義 一般形式: 類型標(biāo)識符 *變量名; 2、指針變量的引用 1)給指針變量賦值 賦變量的地址 2)用指針變量對變量賦值 3、指針運算,重點:指向數(shù)組元素的指針變量及其應(yīng)用 指向多維數(shù)組元素的指針變量及其應(yīng)用 指向一維數(shù)組的指針變量及其應(yīng)用 難點:多維數(shù)組的指針變量及其應(yīng)用 數(shù)組的指針是數(shù)組的起始地址,數(shù)組元素的指針是元素的地址。 引用數(shù)組可以用下標(biāo)法,也可以用指針法,通過指向數(shù)組的元素的指針找到數(shù)組元素。 使用指針法能使目標(biāo)程序占內(nèi)存少,運行速度快。,數(shù)組的指針和指向數(shù)組的指針變量,1.概念 數(shù)組的指針數(shù)組在內(nèi)存中的起始地址,數(shù)組元素的指針數(shù)組 元素在內(nèi)存中的起始地址。 2.指向數(shù)組的指針變量的定義 指向數(shù)組的指針變量的定義,與指向普通變量的指針變量的定義方法一樣。 例如,int array10, *pointer=array( 或 注意:數(shù)組名代表數(shù)組在內(nèi)存中的起始地址,所以可以用數(shù)組名給指針變量賦值。 3.數(shù)組元素的引用 數(shù)組元素的引用,既可用下標(biāo)法,也可用指針法。使用下標(biāo)法,直觀;而 使用指針法,能使目標(biāo)程序占用內(nèi)存少、運行速度快。,1、指向數(shù)組元素的指針變量的定義與賦值,2、通過指針引用數(shù)組元素,3、數(shù)組名作函數(shù)參數(shù),指針變量作函數(shù)參數(shù)(形參),形參和實參均數(shù)組 形參用數(shù)組而實參用指針 形參用指針而實參用數(shù)組 形參和實參均用指針 傳遞的均是數(shù)組的首地址。,第i行、第j列的元素表示方法: (1)下標(biāo)法:aij (2)用 ai+j 地址表示: *(ai+j ) (3)用*(a+i)+j 地址表示: *(*(a+i)+j ) 地址表示方法匯總:,變量的指針只能存放變量的地址,而不能存放數(shù)組的地址,可定義數(shù)組的指針變量來存放數(shù)組的地址。 定義的一般形式: 類型說明符 (*指針變量)數(shù)組長度; 如:int (*p)4 p為一指向具有4個整型元素的一維數(shù)組的指針變量 (不能寫成 *p4, 此為指針數(shù)組),二維數(shù)組的指針及其指針變量:,實參是地址或指針;形參有兩種形式: (1)用指向變量的指針變量, (2)用指向一維數(shù)組的指針變量。,多維數(shù)組的指針作為函數(shù)參數(shù),數(shù)組名作形參時,接收實參數(shù)組的起始地址;作實參時,將數(shù)組的起始地址傳遞給形參數(shù)組。 引入指向數(shù)組的指針變量后,數(shù)組及指向數(shù)組的指針變量作函數(shù)參數(shù)時,可有種等價形式(本質(zhì)上是一種,即指針數(shù)據(jù)作函數(shù)參數(shù)): (1)形參、實參都用數(shù)組名 (2)形參、實參都用指針變量 (3)形參用指針變量、實參用數(shù)組名 (4)形參用數(shù)組名、實參用指針變量,二維數(shù)組指針作函數(shù)參數(shù) 二維數(shù)組的指針作函數(shù)實參時,有列指針和行指針兩種形式。相應(yīng)的,用來接受實參數(shù)組指針的形參,必須使用相應(yīng)形式的指針變量,如下所示: 實參: 列指針 行指針 形參: (列)指針變量 行指針變量,字符串的指針和指向字符串的指針變量,重點:(1)字符串指針的定義、 引用及作函數(shù)參數(shù); (2)字符串指針變量與 字符數(shù)組的區(qū)別。 1、字符串的表示形式 1)用字符數(shù)組 char a 10=“CHINA” 2)用字符指針 char *string=“I love China !”;,string,string,字符串指針作函數(shù)參數(shù): 參數(shù)是字符串或字符串指針,傳遞的是地址。在被調(diào)函數(shù)中改變后,可在主調(diào)函數(shù)中得到改變后的數(shù)據(jù)。,用數(shù)組名、指針變量作函數(shù)參數(shù)的幾種組合: 數(shù)組名 數(shù)組名 數(shù)組名 字符指針變量 字符指針變量 數(shù)組名 字符指針變量 字符指針變量,雖二者均能實現(xiàn)對字符串的存儲和計算,但: 字符數(shù)組由元素組成,元素中放字符;字符指針變量放地址(如字符串的首地址等); 賦初值的方式不同;對字符數(shù)組賦初值一般用static, 如 static char str =“I love China!”; 而字符指針變量賦初值一般不用static,如: char *p=“I love China!”; 賦值方式不同; 對字符數(shù)組要么賦初值(即定義時賦值),要么對元素賦值,下面的賦值方式是錯誤的: char str14; str14 =“I love China!”; 字符指針變量賦值一般可賦初值,或先定義后賦值,如 char *a; a= “I love China!”; 等價于: char *a= “I love China!”;,字符指針變量與字符數(shù)組,1、函數(shù)的指針及指向函數(shù)的指針變量 1)函數(shù)指針的概念 一個函數(shù)在編譯時被分配一個入口地址,這個入口地址稱為函數(shù)的指針。 2)指向函數(shù)的指針變量 定義的一般形式: 數(shù)據(jù)類型標(biāo)識符 (*指針變量名)(),重點:函數(shù)指針的概念及指向函數(shù)的指針變量 用指向函數(shù)的指針變量作函數(shù)參數(shù),函數(shù)的指針和指向函數(shù)的指針變量,2、用指向函數(shù)的指針變量作函數(shù)的參數(shù) 傳遞的是函數(shù)的入口地址,一般的使用形式: : sub( f1, f2); /* 主調(diào)函數(shù)/* : sub(x1, x2) int (*x1)( ), (*x2)( ); int a,b,i,j; : /* 次主調(diào)函數(shù)*/ a=(*x1)(i); /* x1、x2為被調(diào)函數(shù) */ b=(*x2)(i,j); : ,存儲類別 數(shù)據(jù)類型標(biāo)識符 *函數(shù)名(形參表列) 形參說明 函數(shù)體 如: int *a(x,y) /*存儲類別為外部函數(shù)*/ int x,y ; 2、指針函數(shù)的應(yīng)用,返回指針值的函數(shù),1、指針函數(shù)的定義,指針數(shù)組和指向指針的指針,1、指針數(shù)組 其元素均為指針型數(shù)據(jù)的數(shù)組,稱為指針數(shù)組。 定義形式: 類型標(biāo)識符 *數(shù)組名數(shù)組長度說明 如: int *p4; 不能寫成 int (*p)4 指針數(shù)組主要用于指向多個字符串,使字符串處理方便。,2、指向指針的指針 即指向指針數(shù)據(jù)的地址。 定義形式: 類型標(biāo)識符 * * 變量名 如: char *P; p為一個指向字符指針變量的指針變量。 一般指向一數(shù)組的首地址。 如: char *name4, *p; p=name;,間接訪問的“單級間址”和“二級間址” 用指針訪問便是間接訪問。 若指針變量中存放的是目標(biāo)變量的地址,稱為“單級間址”,指向指針 的指針為“二級間址”。還可以有多級間址。見下圖。,1、有關(guān)指針的數(shù)據(jù)類型,指針型數(shù)據(jù)小結(jié),2、指針運算小結(jié) 1)、指針變量加減一個整數(shù) 如:p+ p- p+i p-i p+=i p-=i 等 實際含義如 p+i 代表地址計算: p+c*i , c為字節(jié)數(shù),整型c=2、 實型c=4、字符型c=1。 2)、指針變量賦值 如:p=&a a為變量,p為指針變量 p=array array為數(shù)組名 p=&arrayi p=max max為函數(shù)名 p1=p2 p2為指針變量 注意:不能把一個整數(shù)或常數(shù)賦給p,如p=1000 同樣也不能把p賦給整型變量,如i=p,3)指針變量可以賦空值 如: p=NULL; 實際NULL是整數(shù)0。 4)兩個指針變量可以相減 如兩個指針變量指向同一個數(shù)組的元素(如右圖), 則 p2-p1=4-1=3 但p1+p2無意義。 5)兩個指針變量比較 若兩個指針指向同一個數(shù)組的元素,則可以比較, 如: p1p2 3、空類型指針 ANSI新標(biāo)準(zhǔn)增加了一種空類型指針,定義的一般形式為: void * 變量名 具體使用時要做類型轉(zhuǎn)換,如: void *p; (int *)p;,動態(tài)數(shù)組的實現(xiàn) 在程序運行過程中,數(shù)組的大小是不能改變的。這種數(shù)組稱為靜態(tài)數(shù)組。靜態(tài)數(shù)組的缺點是:對于事先無法準(zhǔn)確估計數(shù)據(jù)量的情況,無法做到既滿足處理需要,又不浪費內(nèi)存空間。 所謂動態(tài)數(shù)組是指,在程序運行過程中,根據(jù)實際需要指定數(shù)組的大小。 在C語言中,可利用內(nèi)存的申請和釋放庫函數(shù),以及指向數(shù)組的指針變量可當(dāng)數(shù)組名使用的特點,來實現(xiàn)動態(tài)數(shù)組。,動態(tài)數(shù)組的本質(zhì)是:一個指向數(shù)組的指針變量。,例 動態(tài)數(shù)組的實現(xiàn)方法實例 #include “alloc.h” #include “stdlib.h” main() int *array=NULL, num, i; printf(“Input the number of element: ”); scanf(“%d”, /*釋放由malloc()函數(shù)申請的內(nèi)存塊*/ ,Struct student int num; char name20; char sex; int age; float score; char addr30; ;,結(jié)構(gòu)體名,成員項定義(列),第10章 結(jié)構(gòu)體與共用體,結(jié)構(gòu)體 結(jié)構(gòu)體是一種構(gòu)造數(shù)據(jù)類型 用途:把不同類型的數(shù)據(jù)組合成一個整體-自定義數(shù)據(jù)類型 結(jié)構(gòu)體定義,struct 結(jié)構(gòu)體名 類型標(biāo)識符 成員名; 類型標(biāo)識符 成員名; . ;,成員類型可以是 基本型或構(gòu)造型,struct是關(guān)鍵字, 不能省略,合法標(biāo)識符 可省:無名結(jié)構(gòu)體,結(jié)構(gòu)體類型的變量(三種方法) 先聲名結(jié)構(gòu)體類型,再用結(jié)構(gòu)體類型定義結(jié)構(gòu)體變量 在聲名結(jié)構(gòu)體類型的同時定義結(jié)構(gòu)體變量 直接定義結(jié)構(gòu)體類型變量,幾點說明 結(jié)構(gòu)體類型與結(jié)構(gòu)體變量概念不同 類型:不分配內(nèi)存; 變量:分配內(nèi)存 類型:不能賦值、存取、運算; 變量:可以 結(jié)構(gòu)體可嵌套 結(jié)構(gòu)體成員名與程序中變量名可相同,不會混淆 結(jié)構(gòu)體類型及變量的作用域與生存期,結(jié)構(gòu)體變量的引用 引用規(guī)則 結(jié)構(gòu)體變量不能整體引用,只能引用變量成員 引用方式: 結(jié)構(gòu)體變量名.成員名 可以將一個結(jié)構(gòu)體變量賦值給另一個結(jié)構(gòu)體變量 結(jié)構(gòu)體嵌套時逐級引用,結(jié)構(gòu)體變量的初始化 - 形式一,struct 結(jié)構(gòu)體名 類型標(biāo)識符 成員名; 類型標(biāo)識符 成員名; . ; struct 結(jié)構(gòu)體名 結(jié)構(gòu)體變量=初始數(shù)據(jù);,形式二,struct 結(jié)構(gòu)體名 類型標(biāo)識符 成員名; 類型標(biāo)識符 成員名; . 結(jié)構(gòu)體變量=初始數(shù)據(jù);,形式三,struct 類型標(biāo)識符 成員名; 類型標(biāo)識符 成員名; . 結(jié)構(gòu)體變量=初始數(shù)據(jù);,結(jié)構(gòu)體數(shù)組 結(jié)構(gòu)體數(shù)組的定義,結(jié)構(gòu)體數(shù)組初始化,結(jié)構(gòu)體數(shù)組引用,引用方式: 結(jié)構(gòu)體數(shù)組名下標(biāo).成員名,結(jié)構(gòu)體和指針 指向結(jié)構(gòu)體變量的指針 定義形式:struct 結(jié)構(gòu)體名 *結(jié)構(gòu)體指針名; 例 struct student *p;,使用結(jié)構(gòu)體指針變量引用成員形式,指向結(jié)構(gòu)體數(shù)組的指針,用指向結(jié)構(gòu)體的指針作函數(shù)參數(shù) 用結(jié)構(gòu)體變量的成員作參數(shù)-值傳遞 用指向結(jié)構(gòu)體變量或數(shù)組的指針作參數(shù)-地址傳遞 用結(jié)構(gòu)體變量作參數(shù)-多值傳遞,效率低,共用體 構(gòu)造數(shù)據(jù)類型,也叫聯(lián)合體 用途:使幾個不同類型的變量共占一段內(nèi)存(相互覆蓋) 共用體類型定義 定義形式:,union 共用體名 類型標(biāo)識符 成員名; 類型標(biāo)識符 成員名; . ;,例 union data int i; char ch; float f; ;,類型定義不分配內(nèi)存,形式一: union data int i; char ch; float f; a,b;,形式二: union data int i; char ch; float f; ; union data a,b,c,*p,d3;,形式三: union int i; char ch; float f; a,b,c;,共用體變量的定義,共用體變量定義分配內(nèi)存, 長度=最長成員所占字節(jié)數(shù),共用體變量任何時刻 只有一個成員存在,共用體變量引用 引用方式:,引用規(guī)則 不能引用共用體變量,只能引用其成員,共用體變量中起作用的成員是最后一次存放的成員,不能在定義共用體變量時初始化,可以用一個共用體變量為另一個變量賦值,結(jié)構(gòu)體與共用體 區(qū)別: 存儲方式不同,聯(lián)系: 兩者可相互嵌套,typedef定義類型 功能:用自定義名字為已有數(shù)據(jù)類型命名 類型定義簡單形式: typedef type name;,typedef定義類型步驟 按定義變量方法先寫出定義體 如 int i; 將變量名換成新類型名 如 int INTEGER; 最前面加typedef 如 typedef int INTEGER; 用新類型名定義變量 如 INTEGER i,j;,類型定義可嵌套,第11章 文件,文件概述 文件類型指針 文件的打開與關(guān)閉 I/O及其重定向 文件的讀寫,Main() FILE *fp; ,Source file .c,輸入數(shù)據(jù) 原始數(shù)據(jù),磁盤/帶文件,處理結(jié)果 輸出數(shù)據(jù),文件概述,一、文件,存儲在外部介質(zhì)上數(shù)據(jù)的集合,使用數(shù)據(jù)文件的目的:,3、長期保存數(shù)據(jù),2、數(shù)據(jù)共享,1、程序與數(shù)據(jù)分離,普通文件:,設(shè)備文件:,存儲介質(zhì)文件(磁盤、磁帶等),非存儲介質(zhì)(鍵盤、顯示器、打印機等),2、按存儲介質(zhì),3、按數(shù)據(jù)的組織形式,文本文件:,ASCII文件,每個字節(jié)存放一個字符的ASCII碼,二進制文件:,數(shù)據(jù)按其在內(nèi)存中的存儲形式原樣存放,二、文件分類,1、按文件的邏輯結(jié)構(gòu),記錄文件:,由具有一定結(jié)構(gòu)的記錄組成 (定長和不定長),流式文件:,由一個個字符(字節(jié))數(shù)據(jù)順序組成,三、文件處理,文件變量:指向文件結(jié)構(gòu)體的指針,typedef struct int _fd; /文件號 int _cleft; /緩沖區(qū)中剩下的字符數(shù) int _mode; /文件操作方式 char *_next; /文件當(dāng)前讀寫位置 char *_buff; /文件緩沖區(qū)位置 FILE ;,Stdio.h,打開文件(fopen),FILE *fopen(char *name,char *mode),FILE *fp ; if(fp=fopen(infile,“r“)=NULL) printf(“Cannot open infile!n“) ; exit(0); ,文件關(guān)閉(fclose),int fclose(FILE *fp) 例: fclose(fp),“r+/rb+” (讀寫),“a/ab” (追加),“w/wb” (只寫),“r/rb” (只讀),“w+/wb+” (讀寫),“a+/ab+” (讀寫),為輸入打開一個文本/二進制文件,為輸出打開或建立一個文本/二進制文件,為讀/寫打開一個文本/二進制文件,為讀/寫建立一個文本/二進制文件,為讀/寫打開或建立一個文本/二進制文件,向文本/二進制文件尾追加數(shù)據(jù),文件使用方式,含 義,文件打開方式:,標(biāo)準(zhǔn)I/O及其重定向,系統(tǒng)自動打開和關(guān)閉三個標(biāo)準(zhǔn)文件,標(biāo)準(zhǔn)輸入-鍵盤 stdin,標(biāo)準(zhǔn)輸出-顯示器 stdout,標(biāo)準(zhǔn)出錯輸出-顯示器 stderr,重定向,輸入、輸出重新定向,(輸入、輸出由文件完成),符號:, 、 ,讀函數(shù)(磁盤 緩沖區(qū)),1、fgetc函數(shù),Char fgetc(fp); / char getch() ;,文件的讀/寫,2、fgets函數(shù),fgets(str,fp); / gets(str) ;,3、fscanf函數(shù),fscanf ( fp,格式控制,地址表 );/ scanf ( 格式控制,地址表 ) ;,4、fread函數(shù),fread(buffer,size,count,fp);,寫函數(shù)(緩沖區(qū) 磁盤),1、fputc函數(shù),fputc(c,fp); / putch(C);,2、fputs函數(shù),fputs(str,fp); / puts(str) ;,4、fwrite函數(shù),3、fprintf函數(shù),fwrite(buffer,size,count,fp);,fprintf (文件類型指針,格式控制,地址表); printf ( 格式控制,變量列表) ;,char str20; sprintf ( str ,格式控制,變量列表 ) ;,指針數(shù)組作main函數(shù)的參數(shù): main ( int argc , char *argv ),命令行 如執(zhí)行 file1.exe 文件,且文件中有以上參數(shù),則可輸入: file1 arg1 arg2 . 使用一般形式: 文件名 參數(shù)1 參數(shù)2 參數(shù)n 形參的意義 (1)argc : int argc (=1+參數(shù)個數(shù)) (2)argv : char *argv ,得到的是命令行各參 數(shù)字符串的首地址; argv0 為命令名,argv1 argvn 各參數(shù),第12章 預(yù)處理命令,無參宏一般形式為: #define 標(biāo)識符 字符串 如要終止其作用域可使用 #undef 命令。,宏定義,帶參數(shù)的宏的一般形式為: #define 宏名(形參表) 字符串 帶參宏調(diào)用的一般形式為: 宏名(實參表); 例如: #define M(y) y*y+3*y #define M(y) (y)*(y)+3*(y) #define M(y) (y)*(y)+3*(y),文件包含,#include“stdio.h“ 在包含文件目錄中去查找(包含目錄是由用戶在設(shè)置環(huán)境時設(shè)置的),而不在源文件目錄去查找; #include 首先在當(dāng)前的源文件目錄中查找,若未找到才到包含目錄中去查找。,條件編譯,第一種形式 #ifdef 標(biāo)識符 程序段1 #else 程序段2 #endif #ifdef 標(biāo)識符 程
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 甘肅林業(yè)職業(yè)技術(shù)學(xué)院《證券投資模擬》2023-2024學(xué)年第二學(xué)期期末試卷
- 西藏大學(xué)《文檔數(shù)據(jù)庫》2023-2024學(xué)年第二學(xué)期期末試卷
- 河北工程大學(xué)科信學(xué)院《變頻器原理及應(yīng)用》2023-2024學(xué)年第二學(xué)期期末試卷
- 溫州職業(yè)技術(shù)學(xué)院《電競賽事運營》2023-2024學(xué)年第二學(xué)期期末試卷
- 安康學(xué)院《小學(xué)生品德發(fā)展與道德教育》2023-2024學(xué)年第二學(xué)期期末試卷
- 湖南大眾傳媒職業(yè)技術(shù)學(xué)院《嵌入式系統(tǒng)原理及應(yīng)用》2023-2024學(xué)年第二學(xué)期期末試卷
- 天津濱海職業(yè)學(xué)院《手球》2023-2024學(xué)年第二學(xué)期期末試卷
- 鎮(zhèn)江市高等??茖W(xué)?!稒C制設(shè)計理論及應(yīng)用》2023-2024學(xué)年第二學(xué)期期末試卷
- 廣西藍天航空職業(yè)學(xué)院《傳播與策劃》2023-2024學(xué)年第二學(xué)期期末試卷
- 濟寧醫(yī)學(xué)院《大氣科學(xué)概論》2023-2024學(xué)年第二學(xué)期期末試卷
- T-CSDA 0005-2024 三維橋架保溫隔聲復(fù)合模塊建筑地面工程應(yīng)用技術(shù)標(biāo)準(zhǔn)
- 【歷史】遼宋夏金元時期的科技與文化教案-2024-2025學(xué)年統(tǒng)編版七年級歷史下冊
- 2024年盾構(gòu)操作工職業(yè)技能競賽理論考試題庫(含答案)
- 術(shù)前月經(jīng)來潮的應(yīng)急預(yù)案
- CDN加速服務(wù)合同(2024年版)
- 韓愈課件身世經(jīng)歷
- 《中國的民主政治》課件
- 部隊安全保密教育課件
- 2024年10月自考00152組織行為學(xué)試題及答案
- 心血管內(nèi)科降低患者橈動脈止血器壓迫不適發(fā)生率品管圈PDCA成果匯報書
- 《研學(xué)旅行課程設(shè)計》研學(xué)旅行課程案例展示 題庫
評論
0/150
提交評論