版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
C語言程序設(shè)計(jì)主講:王曉峰主講內(nèi)容:一.C語言概述二.數(shù)據(jù)類型、運(yùn)算符與表達(dá)式三.順序結(jié)構(gòu)、輸入輸出四.選擇結(jié)構(gòu)五.循環(huán)結(jié)構(gòu)六.數(shù)組七.函數(shù)八.指針、結(jié)構(gòu)體、共用體九.文件操作注:算法和結(jié)構(gòu)體指針的內(nèi)容放入數(shù)據(jù)結(jié)構(gòu)課程1.兩個(gè)C語言的實(shí)例2.C語言的特點(diǎn)3.C語言的基本語法4.C語言的程序結(jié)構(gòu)一、C語言概述C語言是與計(jì)算機(jī)交互的第三代高級語言,采用結(jié)構(gòu)化和面向過程的特點(diǎn)。有過編程經(jīng)驗(yàn)的讀者最想完成的程序:HelloWorld!沒有任何編程經(jīng)驗(yàn)的讀者,請考慮下面的需求實(shí)現(xiàn):隨機(jī)產(chǎn)生一百以內(nèi)的加法算式4道,與用戶交互,用戶輸入答案后進(jìn)行正確錯(cuò)誤判斷,最終給出用戶成績。注:用戶應(yīng)該是小學(xué)一年級的學(xué)生。兩個(gè)C語言實(shí)例C語言的特點(diǎn)1.C語言源程序由多個(gè)相互獨(dú)立的函數(shù)組成2.簡潔,32個(gè)關(guān)鍵字,9種控制語句,34個(gè)運(yùn)算符3.結(jié)構(gòu)化控制,語法限制不嚴(yán)格4.允許訪問物理地址,位操作(bit)5.執(zhí)行效率高C語言的基本語法成分1.C語言字符集:字符是C語言的最基本的元素,C語言字符集由字母、數(shù)字、空白、標(biāo)點(diǎn)和特殊字符組成(在字符串常量和注釋中還可以使用漢字等其它圖形符號)。a).字母:A-Z,a-zb).數(shù)字:0-9c).空白符:空格,制表符(跳格),換行符(空行)的總稱。d).標(biāo)點(diǎn)符號、特殊字符:
!#%^&+-*/=~<>\|.,;:?‘“()[]{}
2.標(biāo)識符標(biāo)識符用來標(biāo)識變量名、符號常量名、函數(shù)名、類型名、文件名等的有效字符序列。
3.關(guān)鍵字C語言中一些具有特殊意義的標(biāo)識符稱為關(guān)鍵字。這些關(guān)鍵字在任何時(shí)候都不得用作變量名、符號常量名、函數(shù)名、類型名、文件名等。5.分隔符:分號,空格。起分隔、間隔作用。6.注釋符:“/*”和“*/”構(gòu)成一組注釋符。"http://"可用于單行注釋。
4.運(yùn)算符:運(yùn)算符將常量、變量、函數(shù)連接起來組成表達(dá)式,表示各種運(yùn)算。C語言的程序結(jié)構(gòu)
1.C程序全部由一個(gè)一個(gè)的函數(shù)構(gòu)成。至少有一個(gè)主函數(shù)main(),其它函數(shù)可被主函數(shù)調(diào)用或相互調(diào)用。其它函數(shù)可為C函數(shù)庫中函數(shù),也可為自己編的函數(shù)。2.一個(gè)函數(shù)由兩部分組成1).函數(shù)的說明部分
包括函數(shù)名、函數(shù)類型、函數(shù)屬性、函數(shù)參數(shù)(形參)名、形式參數(shù)類型。2).函數(shù)體
最外層{}中的部分。由變量定義和執(zhí)行語句兩部分組成。3.一個(gè)C程序總是從main函數(shù)開始執(zhí)行,而main函數(shù)可以出現(xiàn)在整個(gè)程序中的任何位置。4.C程序書寫格式自由,一行內(nèi)可寫多個(gè)語句,一個(gè)語句可分寫在多行上。5.每個(gè)語句(包括最后一個(gè)語句)和數(shù)據(jù)定義的后面必須有一個(gè)分號。6.C語言本身沒有輸入輸出語句。輸入輸出操作由庫函數(shù)scanf和printf等函數(shù)完成。7.可以用“/……/”在C程序中的任何地方作注釋以提高程序的可讀性。理解C語言的概念數(shù)據(jù)類型變量與常量標(biāo)識符規(guī)則表達(dá)式語句復(fù)合語句控制流函數(shù)數(shù)組指針結(jié)構(gòu)體C語言上機(jī)步驟開始編輯源程序f.c編譯目標(biāo)程序f.obj有錯(cuò)?
連接庫函數(shù)和其它目標(biāo)程序可執(zhí)行目標(biāo)程序f.exe執(zhí)行正確?不正確正確結(jié)束有無二、數(shù)據(jù)類型運(yùn)算符與表達(dá)式常量與變量變量:在程序運(yùn)行過程中,其值可以被改變的量稱為變量。變量代表內(nèi)存中具有特定屬性的一個(gè)存儲單元,它用來存放數(shù)據(jù),這就是變量的值,在程序運(yùn)行期間,這些值是可以改變的。常量:程序運(yùn)行過程中不能被改變的量。常量的分類1)整型常量(如12、0、-3為整型常量)2)實(shí)型常量(4.6、-1.23為實(shí)型常量)3)字符常量(’a’、’d’字符常量)4)符號常量(具有含義清楚、見名知意、修改方便、一改全改的優(yōu)點(diǎn))。1.整型數(shù)據(jù)的分類最基本的整型類型基本整型(int型):占2個(gè)或4個(gè)字節(jié)短整型(shortint):VC++6.0中占2個(gè)字節(jié)長整型(longint):VC++6.0中占4個(gè)字節(jié)雙長整型(longlongint):C99新增的整型數(shù)據(jù)擴(kuò)充的整型類型:有符號基本整型[signed]int;無符號基本整型unsignedint;有符號短整型[signed]short[int];無符號短整型unsignedshort[int];有符號長整型[signed]long[int];無符號長整型unsignedlong[int];有符號雙長整型[signed]longlong[int];無符號雙長整型unsignedlonglong[int];1.字符與字符代碼大多數(shù)系統(tǒng)采用ASCII字符集字母:A~Z,a~z數(shù)字:0~9專門符號:29個(gè):!”#&‘()*等空格符:空格、水平制表符、換行等不能顯示的字符:空(null)字符(以‘\0’表示)、警告(以‘\a’表示)、退格(以‘\b’表示)、回車(以‘\r’表示)等字符型數(shù)據(jù)字符’1’和整數(shù)1是不同的概念:字符’1’只是代表一個(gè)形狀為’1’的符號,在需要時(shí)按原樣輸出,在內(nèi)存中以ASCII碼形式存儲,占1個(gè)字節(jié)整數(shù)1是以整數(shù)存儲方式(二進(jìn)制補(bǔ)碼方式)存儲的,占2個(gè)或4個(gè)字節(jié)001100010000000000000001字符型數(shù)據(jù)浮點(diǎn)型數(shù)據(jù)是用來表示具有小數(shù)點(diǎn)的實(shí)數(shù)float型(單精度浮點(diǎn)型)double型(雙精度浮點(diǎn)型)編譯系統(tǒng)為double型變量分配8個(gè)字節(jié)15位有效數(shù)字浮點(diǎn)型數(shù)據(jù)字符常量:由單撇號括起來的單個(gè)字符或轉(zhuǎn)義字符整型常量:不帶小數(shù)點(diǎn)的數(shù)值系統(tǒng)根據(jù)數(shù)值的大小確定int型還是long型等浮點(diǎn)型常量:凡以小數(shù)形式或指數(shù)形式出現(xiàn)的實(shí)數(shù)C編譯系統(tǒng)把浮點(diǎn)型常量都按雙精度處理分配8個(gè)字節(jié)確定常量類型1.基本的算術(shù)運(yùn)算符:+:正號運(yùn)算符(單目運(yùn)算符)-:負(fù)號運(yùn)算符(單目運(yùn)算符)*:乘法運(yùn)算符/:除法運(yùn)算符%:求余運(yùn)算符+:加法運(yùn)算符-:減法運(yùn)算符二、數(shù)據(jù)類型
運(yùn)算符與表達(dá)式說明兩個(gè)整數(shù)相除的結(jié)果為整數(shù)如5/3的結(jié)果值為1,舍去小數(shù)部分如果除數(shù)或被除數(shù)中有一個(gè)為負(fù)值,舍入方向不固定。例如,-5/3,有的系統(tǒng)中得到的結(jié)果為-1,在有的系統(tǒng)中則得到結(jié)果為-2VC++采取“向零取整”的方法
如5/3=1,-5/3=-1,取整后向零靠攏%運(yùn)算符要求參加運(yùn)算的運(yùn)算對象(即操作數(shù))為整數(shù),結(jié)果也是整數(shù)。如8%3,結(jié)果為2二、數(shù)據(jù)類型
運(yùn)算符與表達(dá)式2.自增、自減運(yùn)算符:作用是使變量的值1或減1++i,--i:在使用i之前,先使i的值加(減)1i++,i--:在使用i之后,使i的值加(減)1二、數(shù)據(jù)類型
運(yùn)算符與表達(dá)式3.算術(shù)表達(dá)式和運(yùn)算符的優(yōu)先級與結(jié)合性:用算術(shù)運(yùn)算符和括號將運(yùn)算對象(也稱操作數(shù))連接起來的、符合C語法規(guī)則的式子,稱為C算術(shù)表達(dá)式運(yùn)算對象包括常量、變量、函數(shù)等C語言規(guī)定了運(yùn)算符的優(yōu)先級和結(jié)合性二、數(shù)據(jù)類型
運(yùn)算符與表達(dá)式4.不同類型數(shù)據(jù)間的混合運(yùn)算:(1)+、-、*、/運(yùn)算的兩個(gè)數(shù)中有一個(gè)數(shù)為float或double型,結(jié)果是double型。系統(tǒng)將float型數(shù)據(jù)都先轉(zhuǎn)換為double型,然后進(jìn)行運(yùn)算(2)如果int型與float或double型數(shù)據(jù)進(jìn)行運(yùn)算,先把int型和float型數(shù)據(jù)轉(zhuǎn)換為double型,然后進(jìn)行運(yùn)算,結(jié)果是double型(3)字符型數(shù)據(jù)與整型數(shù)據(jù)進(jìn)行運(yùn)算,就是把字符的ASCII代碼與整型數(shù)據(jù)進(jìn)行運(yùn)算二、數(shù)據(jù)類型
運(yùn)算符與表達(dá)式5.強(qiáng)制類型轉(zhuǎn)換運(yùn)算符強(qiáng)制類型轉(zhuǎn)換運(yùn)算符的一般形式為:(類型名)(表達(dá)式)(double)a(將a轉(zhuǎn)換成double類型)(int)(x+y)(將x+y的值轉(zhuǎn)換成int型)(float)(5%3)(將5%3的值轉(zhuǎn)換成float型)有兩種類型轉(zhuǎn)換系統(tǒng)自動進(jìn)行的類型轉(zhuǎn)換強(qiáng)制類型轉(zhuǎn)換二、數(shù)據(jù)類型
運(yùn)算符與表達(dá)式6.C運(yùn)算符(1)算術(shù)運(yùn)算符
(+-*/%++--)(2)關(guān)系運(yùn)算符
(><==>=<=?。剑?3)邏輯運(yùn)算符
(?。Γ|)(4)位運(yùn)算符
(<<>>~|∧&)(5)賦值運(yùn)算符
(=及其擴(kuò)展賦值運(yùn)算符)(6)條件運(yùn)算符
(?:)二、數(shù)據(jù)類型
運(yùn)算符與表達(dá)式6.C運(yùn)算符(7)逗號運(yùn)算符
(,)(8)指針運(yùn)算符
(*和&)(9)求字節(jié)數(shù)運(yùn)算符
(sizeof)(10)強(qiáng)制類型轉(zhuǎn)換運(yùn)算符
((類型))(11)成員運(yùn)算符
(.->)(12)下標(biāo)運(yùn)算符
([
])(13)其他
(如函數(shù)調(diào)用運(yùn)算符())二、數(shù)據(jù)類型
運(yùn)算符與表達(dá)式主講內(nèi)容:一.C語言概述二.數(shù)據(jù)類型、運(yùn)算符與表達(dá)式三.順序結(jié)構(gòu)、輸入輸出四.選擇結(jié)構(gòu)五.循環(huán)結(jié)構(gòu)六.數(shù)組七.函數(shù)八.指針、結(jié)構(gòu)體、共用體九.文件操作注:算法和結(jié)構(gòu)體指針的內(nèi)容放入數(shù)據(jù)結(jié)構(gòu)課程C語句的作用和分類最基本的語句----賦值語句三、順序結(jié)構(gòu)輸入輸出C語句分為以下5類:(1)控制語句:if、switch、for、while、do…while、continue、break、return、goto等(2)函數(shù)調(diào)用語句(3)表達(dá)式語句(4)空語句(5)復(fù)合語句C語句的作用與分類在C程序中,最常用的語句是:賦值語句輸入輸出語句其中最基本的是賦值語句賦值語句題目:給出三角形的三邊長,海倫公式求三角形面積。賦值語句解題思路:假設(shè)給定的三個(gè)邊符合構(gòu)成三角形的條件關(guān)鍵是找到求三角形面積的公式公式為:其中s=(a+b+c)/2歸納總結(jié):1.賦值運(yùn)算符“=”是賦值運(yùn)算符作用是將一個(gè)數(shù)據(jù)賦給一個(gè)變量也可以將一個(gè)表達(dá)式的值賦給一個(gè)變量2.復(fù)合的賦值運(yùn)算符在賦值符“=”之前加上其他運(yùn)算符,可以構(gòu)成復(fù)合的運(yùn)算符a+=3
等價(jià)于
a=a+3賦值語句歸納總結(jié):1.賦值運(yùn)算符2.復(fù)合的賦值運(yùn)算符3.賦值表達(dá)式一般形式為:
變量
賦值運(yùn)算符
表達(dá)式對賦值表達(dá)式求解的過程:求賦值運(yùn)算符右側(cè)的“表達(dá)式”的值賦給賦值運(yùn)算符左側(cè)的變量賦值語句歸納總結(jié):1.賦值運(yùn)算符2.復(fù)合的賦值運(yùn)算符3.賦值表達(dá)式4.賦值過程中的類型轉(zhuǎn)換兩側(cè)類型一致時(shí),直接賦值兩側(cè)類型不一致,但都是算術(shù)類型時(shí),自動將右側(cè)的類型轉(zhuǎn)換為左側(cè)類型后賦值定義變量時(shí)要防止數(shù)據(jù)溢出賦值語句歸納總結(jié):1.賦值運(yùn)算符2.復(fù)合的賦值運(yùn)算符3.賦值表達(dá)式4.賦值過程中的類型轉(zhuǎn)換5.賦值表達(dá)式和賦值語句賦值表達(dá)式的末尾沒有分號,而賦值語句有分號一個(gè)表達(dá)式可以包含賦值表達(dá)式,但決不能包含賦值語句賦值語句歸納總結(jié):1.賦值運(yùn)算符2.復(fù)合的賦值運(yùn)算符3.賦值表達(dá)式4.賦值過程中的類型轉(zhuǎn)換5.賦值表達(dá)式和賦值語句6.變量賦初值inta=3,b=3,c;inta=3;相當(dāng)于inta;a=3;賦值語句有關(guān)數(shù)據(jù)輸入輸出的概念用printf函數(shù)輸出數(shù)據(jù)用scanf函數(shù)輸入數(shù)據(jù)字符數(shù)據(jù)的輸入輸出三、順序結(jié)構(gòu)輸入輸出輸入輸出是程序中最基本的操作之一(1)所謂輸入輸出是以計(jì)算機(jī)主機(jī)為主體而言的(2)C語言本身不提供輸入輸出語句printf和scanf不是C語言的關(guān)鍵字,而只是庫函數(shù)的名字putchar、getchar、puts、gets同樣(3)在使用輸入輸出函數(shù)時(shí),要在程序文件的開頭用預(yù)編譯指令
#include<stdio.h>或#include″stdio.h″輸入輸出的概念在C程序中用來實(shí)現(xiàn)輸出和輸入的,主要是printf函數(shù)和scanf函數(shù)這兩個(gè)函數(shù)是格式輸入輸出函數(shù)用這兩個(gè)函數(shù)時(shí),必須指定格式printf與scanf1.printf函數(shù)的一般格式:printf(格式控制,輸出表列)printf2.常用格式字符d格式符。用來輸出一個(gè)有符號的十進(jìn)制整數(shù)c格式符。用來輸出一個(gè)字符s格式符。用來輸出一個(gè)字符串f格式符。用來輸出實(shí)數(shù),以小數(shù)形式輸出e格式符。指定以指數(shù)形式輸出實(shí)數(shù)1.scanf函數(shù)的一般形式:scanf(格式控制,地址表列)scanf2.scanf函數(shù)中的格式聲明與printf函數(shù)中的格式聲明相似以%開始,以一個(gè)格式字符結(jié)束,中間可以插入附加的字符scanf("a=%f,b=%f,c=%f",&a,&b,&c);1.用putchar函數(shù)輸出一個(gè)字符從計(jì)算機(jī)向顯示器輸出一個(gè)字符putchar函數(shù)的一般形式為:putchar(c)字符數(shù)據(jù)的輸入輸出2.用getchar函數(shù)輸入一個(gè)字符向計(jì)算機(jī)輸入一個(gè)字符getchar函數(shù)的一般形式為:getchar()主講內(nèi)容:一.C語言概述二.數(shù)據(jù)類型、運(yùn)算符與表達(dá)式三.順序結(jié)構(gòu)、輸入輸出四.選擇結(jié)構(gòu)五.循環(huán)結(jié)構(gòu)六.數(shù)組七.函數(shù)八.指針、結(jié)構(gòu)體、共用體九.文件操作注:算法和結(jié)構(gòu)體指針的內(nèi)容放入數(shù)據(jù)結(jié)構(gòu)課程選擇結(jié)構(gòu)程序設(shè)計(jì)選擇結(jié)構(gòu)和條件判斷用if語句實(shí)現(xiàn)選擇結(jié)構(gòu)關(guān)系運(yùn)算符和關(guān)系表達(dá)式邏輯運(yùn)算符和邏輯表達(dá)式條件運(yùn)算符和條件表達(dá)式選擇結(jié)構(gòu)的嵌套用switch語句實(shí)現(xiàn)多分支選擇結(jié)構(gòu)在現(xiàn)實(shí)生活中,需要進(jìn)行判斷和選擇的情況是很多的如果你在家,我去拜訪你如果考試不及格,要補(bǔ)考如果遇到紅燈,要停車等待周末我們?nèi)ソ加?0歲以上的老年人,入公園免票選擇結(jié)構(gòu)和條件判斷C語言有兩種選擇語句:(1)if語句,實(shí)現(xiàn)兩個(gè)分支的選擇結(jié)構(gòu)(2)switch語句,實(shí)現(xiàn)多分支的選擇結(jié)構(gòu)選擇結(jié)構(gòu)和條件判斷最常用的3種if語句形式:1.if(表達(dá)式)語句1(沒有else子句)2.if(表達(dá)式)語句1else語句2(有else子句)3.if(表達(dá)式1)
語句1elseif(表達(dá)式2)語句2
┆elseif(表達(dá)式m)語句melse語句m+1(在else部分又嵌套了多層的if語句)用if語句實(shí)現(xiàn)選擇結(jié)構(gòu)說明:(1)整個(gè)if語句可寫在多行上,也可寫在一行上但都是一個(gè)整體,屬于同一個(gè)語句(2)“語句1”…“語句m”是if中的內(nèi)嵌語句
內(nèi)嵌語句也可以是一個(gè)if語句(3)“語句1”…“語句m”可以是簡單的語句,也可以是復(fù)合語句關(guān)系運(yùn)算符及其優(yōu)先次序關(guān)系運(yùn)算符和關(guān)系表達(dá)式用來對兩個(gè)數(shù)值進(jìn)行比較的比較運(yùn)算符C語言提供6種關(guān)系運(yùn)算符:①<(小于)②<=(小于或等于)③>(大于)④>=(大于或等于)⑤==(等于)⑥!=(不等于)優(yōu)先級相同(高)優(yōu)先級相同(低)關(guān)系、算術(shù)、賦值運(yùn)算符的優(yōu)先級算術(shù)運(yùn)算符(高)賦值運(yùn)算符(低)關(guān)系運(yùn)算符關(guān)系運(yùn)算符和關(guān)系表達(dá)式c>a+b等效于c>(a+b)a>b==c等效于(a>b)==ca==b<c等效于a==(b<c)a=b>c等效于a=(b>c)關(guān)系表達(dá)式用關(guān)系運(yùn)算符將兩個(gè)數(shù)值或數(shù)值表達(dá)式連接起來的式子關(guān)系表達(dá)式的值是一個(gè)邏輯值,即“真”或“假”在C的邏輯運(yùn)算中,以“1”代表“真”,以“0”代表“假”關(guān)系表達(dá)式邏輯運(yùn)算符及其優(yōu)先次序
&&(邏輯與)||(邏輯或)!(邏輯非)邏輯表達(dá)式用邏輯運(yùn)算符將關(guān)系表達(dá)式或其他邏輯量連接起來的式子判斷年齡在13至17歲之內(nèi)?age>=13&&age<=17判斷年齡小于12或大于65?age<12||age>65邏輯運(yùn)算符和邏輯表達(dá)式ab!a!ba&&ba||b真真假假真真真假假真假真假真真假假真假假真真假假邏輯運(yùn)算真值表ab!a!ba&&ba||b非0非00011非000101假非01001假01100邏輯運(yùn)算符的優(yōu)先次序!→&&→||(!為三者中最高)與其他運(yùn)算符的優(yōu)先次序
!(高)算術(shù)運(yùn)算符關(guān)系運(yùn)算符&&和||賦值運(yùn)算符(低)邏輯運(yùn)算符及其優(yōu)先次序邏輯表達(dá)式的值應(yīng)該是邏輯量“真”或“假”編譯系統(tǒng)在表示邏輯運(yùn)算結(jié)果時(shí)以數(shù)值1代表“真”,以0代表“假”但在判斷一個(gè)量是否為“真”時(shí)以0代表“假”,以非0代表“真”注意:將一個(gè)非零的數(shù)值認(rèn)作為“真”邏輯表達(dá)式(1)若a=4,則!a的值為0(2)若a=4,b=5,則a&&b的值為1(3)a和b值分別為4和5,則a||b的值為1(4)a和b值分別為4和5,則!a||b的值為1(5)4&&0||2的值為1邏輯表達(dá)式判別某一年是否閏年,用邏輯表達(dá)式表示閏年的條件是符合下面二者之一:①能被4整除,但不能被100整除,如2008②能被400整除,如2000(year%4==0&&year100!=0)||year%400==0如果表達(dá)式值為1,則閏年;否則為非閏年邏輯表達(dá)式條件運(yùn)算符的執(zhí)行順序:求解表達(dá)式1若為非0(真)則求解表達(dá)式2,此時(shí)表達(dá)式2的值就作為整個(gè)條件表達(dá)式的值若表達(dá)式1的值為0(假),則求解表達(dá)式3,表達(dá)式3的值就是整個(gè)條件表達(dá)式的值條件運(yùn)算符和條件表達(dá)式條件表達(dá)式的一般形式為表達(dá)式1?表達(dá)式2:
表達(dá)式3條件運(yùn)算符優(yōu)先于賦值運(yùn)算符條件運(yùn)算符的結(jié)合方向?yàn)椤白杂抑磷蟆币韵聻楹戏ǖ氖褂梅椒ǎ篴>b?(max=a):(max=b);a>b?printf(“%d”,a):printf(“%d”,b);條件運(yùn)算符和條件表達(dá)式在if語句中又包含一個(gè)或多個(gè)if語句稱為if語句的嵌套一般形式:if()if()語句1else語句2elseif()語句3else語句4內(nèi)嵌ifelse總是與它上面最近的未配對的if配對選擇結(jié)構(gòu)的嵌套switch語句的作用是根據(jù)表達(dá)式的值,使流程跳轉(zhuǎn)到不同的語句switch語句的一般形式:switch(表達(dá)式){case常量1:語句1case常量2:語句2
┇
┇
┇case常量n:語句ndefault:語句n+1}整數(shù)類型(包括字符型)switch語句不能相同用while語句實(shí)現(xiàn)循環(huán)用do---while語句實(shí)現(xiàn)循環(huán)用for語句實(shí)現(xiàn)循環(huán)循環(huán)的嵌套幾種循環(huán)的比較改變循環(huán)執(zhí)行的狀態(tài)循環(huán)程序舉例循環(huán)結(jié)構(gòu)程序設(shè)計(jì)大多數(shù)的應(yīng)用程序都會包含循環(huán)結(jié)構(gòu)循環(huán)結(jié)構(gòu)和順序結(jié)構(gòu)、選擇結(jié)構(gòu)是結(jié)構(gòu)化程序設(shè)計(jì)的三種基本結(jié)構(gòu),它們是各種復(fù)雜程序的基本構(gòu)造單元循環(huán)結(jié)構(gòu)程序設(shè)計(jì)while語句的一般形式如下:while(表達(dá)式)語句“真”時(shí)執(zhí)行循環(huán)體語句“假”時(shí)不執(zhí)行循環(huán)條件表達(dá)式while循環(huán)的特點(diǎn)是:先判斷條件表達(dá)式,后執(zhí)行循環(huán)體語句while語句do---while語句的特點(diǎn):先無條件地執(zhí)行循環(huán)體,然后判斷循環(huán)條件是否成立do---while語句的一般形式為:do
語句while(表達(dá)式);表達(dá)式Y(jié)N循環(huán)體語句do---while語句for語句的一般形式為for(表達(dá)式1;表達(dá)式2;表達(dá)式3)語句
設(shè)置初始條件,只執(zhí)行一次??梢詾榱銈€(gè)、一個(gè)或多個(gè)變量設(shè)置初值執(zhí)行for語句循環(huán)條件表達(dá)式,用來判定是否繼續(xù)循環(huán)。在每次執(zhí)行循環(huán)體前先執(zhí)行此表達(dá)式,決定是否繼續(xù)執(zhí)行循環(huán)作為循環(huán)的調(diào)整器,例如使循環(huán)變量增值,它是在執(zhí)行完循環(huán)體后才進(jìn)行的for語句的執(zhí)行過程:(1)先求解表達(dá)式1(2)求解表達(dá)式2,若其值為真,執(zhí)行循環(huán)體,然后執(zhí)行下面第(3)步。若為假,則結(jié)束循環(huán),轉(zhuǎn)到第(5)步(3)求解表達(dá)式3(4)轉(zhuǎn)回上面步驟(2)繼續(xù)執(zhí)行(5)循環(huán)結(jié)束,執(zhí)行for語句下面的一個(gè)語句for語句一個(gè)循環(huán)體內(nèi)又包含另一個(gè)完整的循環(huán)結(jié)構(gòu),稱為循環(huán)的嵌套內(nèi)嵌的循環(huán)中還可以嵌套循環(huán),這就是多層循環(huán)3種循環(huán)(while循環(huán)、do…while循環(huán)和for循環(huán))可以互相嵌套循環(huán)的嵌套(1)一般情況下,3種循環(huán)可以互相代替(2)在while和do---while循環(huán)中,循環(huán)體應(yīng)包含使循環(huán)趨于結(jié)束的語句。(3)用while和do---while循環(huán)時(shí),循環(huán)變量初始化的操作應(yīng)在while和do---while語句之前完成。而for語句可以在表達(dá)式1中實(shí)現(xiàn)循環(huán)變量的初始化。幾種循環(huán)的比較用break語句提前終止循環(huán)break語句可以用來從循環(huán)體內(nèi)跳出循環(huán)體,即提前結(jié)束循環(huán),接著執(zhí)行循環(huán)下面的語句用continue語句提前結(jié)束本次循環(huán)有時(shí)并不希望終止整個(gè)循環(huán)的操作,而只希望提前結(jié)束本次循環(huán),而接著執(zhí)行下次循環(huán)。這時(shí)可以用continue語句break語句和continue語句的區(qū)別改變循環(huán)執(zhí)行的狀態(tài)N表達(dá)式1Y表達(dá)式2N……Y…………N表達(dá)式1Y表達(dá)式2NY…………break語句continue語句強(qiáng)行退出循環(huán)只結(jié)束本次循環(huán)break語句和continue語句的區(qū)別主講內(nèi)容:一.C語言概述二.數(shù)據(jù)類型、運(yùn)算符與表達(dá)式三.順序結(jié)構(gòu)、輸入輸出四.選擇結(jié)構(gòu)五.循環(huán)結(jié)構(gòu)六.數(shù)組七.函數(shù)八.指針、結(jié)構(gòu)體、共用體九.文件操作注:算法和結(jié)構(gòu)體指針的內(nèi)容放入數(shù)據(jù)結(jié)構(gòu)課程教學(xué)目的: 通過本章的學(xué)習(xí),要求能熟練掌握數(shù)組的基本概念,熟練掌握一維數(shù)組、二維數(shù)組和字符數(shù)組的定義、賦值,熟練掌握數(shù)組的輸入和輸出方法,掌握字符串和字符數(shù)組的不同特點(diǎn),掌握數(shù)組的排序、查詢等基本操作方法。學(xué)習(xí)數(shù)組知識為后續(xù)章節(jié)做好準(zhǔn)備,也為后續(xù)面向?qū)ο笳Z言課程的學(xué)習(xí)打下基礎(chǔ)。數(shù)組重點(diǎn)和難點(diǎn)
(1)一維數(shù)組的定義與應(yīng)用
(2)數(shù)組的排序
(3)二維數(shù)組的定義與應(yīng)用
(4)字符數(shù)組與字符串的應(yīng)用數(shù)組1.一般定義一維數(shù)組的定義方法一般為:類型說明符
數(shù)組名[常量表達(dá)式]其中類型可以是任何的C語言數(shù)據(jù)類型,例如char,int,long,float,double等,數(shù)組名與普通變量名一樣,常量表達(dá)式是數(shù)組在內(nèi)存中的單元數(shù),在定義時(shí)必須是一個(gè)常數(shù),不能是變量,數(shù)組的每個(gè)單元占的字節(jié)數(shù)就是對應(yīng)類型占的字節(jié)數(shù),顯然數(shù)組占的總字節(jié)數(shù)是:常量表達(dá)式*sizeof(類型)例如:chars[20]; /*定義能存儲20個(gè)字符的數(shù)組*/intn[20];/*定義能存儲20個(gè)整數(shù)的數(shù)組*/floatf[20];/*定義能存儲20個(gè)float數(shù)的數(shù)組*/一維數(shù)組的定義和引用數(shù)組定義中常見的錯(cuò)誤舉例說明如下:floata[0]; /*數(shù)組大小為0沒有意義*/intb(2);/*不能使用圓括號*/intk,a[k];/*不能用變量說明數(shù)組大小*/2.定義及初始化數(shù)組在定義時(shí)還可以同時(shí)為各個(gè)單元設(shè)置初始值。⑴定義時(shí)給所有元素賦值,例如:
chars[5]={’a’,’b’,’c’,’d’,’e’};定義數(shù)組s[5],并且設(shè)置s[0]=’a’,s[1]=’b’,s[2]=’c’,s[3]=’d’,s[4]=’e’⑵定義時(shí)給部分元素賦值,例如:
chars[5]={’a’,’b’};定義數(shù)組s[5],并且設(shè)置s[0]=’a’,s[1]=’b’,s[2]=’\0’,s[3]=’\0’,s[4]=’\0’,即后面沒有賦值的元素全部設(shè)置為0。⑶定義時(shí)給所有的元素賦值,則可以不設(shè)置數(shù)組的大小,例如:
chars[]={’a’,’b’,’c’,’d’,’e’};與
chars[5]={’a’,’b’,’c’,’d’,’e’};是等價(jià)的。1.一維數(shù)組元素的引用方式數(shù)組名[下標(biāo)]下標(biāo)可以是整型常量或整型表達(dá)式。例如:a[0]=a[5]+a[7]-a[2*3]一維數(shù)組的引用二維數(shù)組的定義二維數(shù)組實(shí)際上就是一維數(shù)組的數(shù)組,即它的每一個(gè)一維元素都是一個(gè)一維數(shù)組,定義如下:類型說明符數(shù)組名[常量表達(dá)式][常量表達(dá)式];例如:inta[3][5];二維數(shù)組的定義和引用a是一個(gè)二維數(shù)組,其中a[0],a[1],a[2]每一個(gè)都是一維數(shù)組,它們各有5個(gè)元素,分別是:a[0][0]、a[0][1]、a[0][2]、a[0][3]、a[0][4]a[1][0]、a[1][1]、a[1][2]、a[1][3]、a[1][4]a[2][0]、a[2][1]、a[2][2]、a[2][3]、a[2][4]其中a[i][j](i=0,1,2,j=0,1,2,3,4)是一個(gè)整數(shù)單元,這個(gè)數(shù)組共有15個(gè)整數(shù)單元,它們在內(nèi)存中的分布是先按行排列再按列排列,a[0][0]是第1個(gè)元素,a[1][0]是第6個(gè)元素,……,a[2][4]是第15個(gè)元素,如下表所示。a[0][0]a[0][1]a[0][2]a[0][3]a[0][4]a[1][0]a[1][1]a[1][2]a[1][3]a[1][4]a[2][0]a[2][1]a[2][2]a[2][3]a[2][4]二維數(shù)組在定義時(shí)也可以對各個(gè)元素初始化,例如:inta[3][5]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};初始化的數(shù)據(jù)按先排列行再排列列的順序?yàn)槊恳粋€(gè)元素賦值,賦值的結(jié)果如下表所示。a[0][0]=1a[0][1]=2a[0][2]=3a[0][3]=4a[0][4]=5a[1][0]=6a[1][1]=7a[1][2]=8a[1][3]=9a[1][4]=10a[2][0]=11a[2][1]=12a[2][2]=13a[2][3]=14a[2][4]=15在初始化時(shí)如提供的數(shù)據(jù)不夠,則后面的元素自動為0,例如:inta[3][5]={1,2,3,4,5,6,7,8,9,10,11};賦值的結(jié)果如下表所示。a[0][0]=1a[0][1]=2a[0][2]=3a[0][3]=4a[0][4]=5a[1][0]=6a[1][1]=7a[1][2]=8a[1][3]=9a[1][4]=10a[2][0]=11a[2][1]=0a[2][2]=0a[2][3]=0a[2][4]=0也可以用大括號來劃分初始值,例如:
inta[3][5]={{1,2,3,4,5},{6},{7,8}};其中{1,2,3,4,5}對a[0]數(shù)組賦初始值,{6}對a[1]數(shù)組賦初始值,{7,8}對a[2]數(shù)組賦初始值,賦值的結(jié)果如下表所示。a[0][0]=1a[0][1]=2a[0][2]=3a[0][3]=4a[0][4]=5a[1][0]=6a[1][1]=0a[1][2]=0a[1][3]=0a[1][4]=0a[2][0]=7a[2][1]=8a[2][2]=0a[2][3]=0a[2][4]=0在明確了括號的對數(shù)后,數(shù)組的第1維可以不寫,但第2維不能不寫,例如:inta[][5]={{1,2,3,4,5},{6},{7,8}};系統(tǒng)也會知道第1維是3,等價(jià)于:inta[3][5]={{1,2,3,4,5},{6},{7,8}};
s[0]‘o‘‘n‘‘e‘‘\0‘s[1]‘t‘‘w‘‘o‘‘\0‘s[2]‘t‘‘h‘‘r‘‘e‘‘e‘‘\0‘二維數(shù)組的數(shù)值數(shù)組被廣泛應(yīng)用于數(shù)學(xué)的矩陣計(jì)算中,二維數(shù)組的字符數(shù)組可用來存儲一組字符串,例如:chars[3][8]={"one","two","three"};其中,s[0],s[1],s[2]都是一個(gè)8個(gè)字符的一維字符數(shù)組,分別存儲"one"、"two"、"three"字符串,賦值的結(jié)果如下表5-5所示。表5-5二維數(shù)組的引用1.二維數(shù)組元素的表示形式:數(shù)組名[下標(biāo)][下標(biāo)]例如:a[2][3]下標(biāo)可以是整型表達(dá)式,如a[2-1][2*2-1]數(shù)組元素可以出現(xiàn)在表達(dá)式中,也可以被賦值。例如:b[1][2]=a[2][3]/2在使用數(shù)組元素時(shí),應(yīng)該注意下標(biāo)值應(yīng)在已定義的數(shù)組大小的范圍內(nèi)。一維字符數(shù)組一維字符數(shù)組是char型的數(shù)組,因?yàn)樗拿恳粋€(gè)元素是一個(gè)char型變量,可以用來存放字符串,因此比較特別,例如:chara[5];定義了一個(gè)字符數(shù)組,它有a[0],a[1],a[2],a[3],a[4]共5個(gè)元素,可以為它們賦值,例如:a[0]=‘H‘;a[1]=‘e‘;a[2]=‘l‘;a[3]=‘l‘;a[4]=‘o‘;也可以在定義時(shí)就對各個(gè)元素賦值,例如:chara[5]={‘H‘,‘e‘,‘l‘,‘l‘,‘o‘};字符數(shù)組和字符串一維字符數(shù)組與字符串 字符串是一組字符,這些字符在內(nèi)存中連續(xù)分布,在最后一個(gè)字節(jié)單元中用‘\0‘表示結(jié)束,這種結(jié)構(gòu)與字符數(shù)組十分相似,實(shí)際上字符數(shù)組可以用來表示和存儲字符串。例如:charb[6]={"Hello"};charb[6]={‘H‘,‘e‘,‘l‘,‘l‘,‘o‘,‘\0‘};以上兩種定義方法是完全等價(jià)的。字符串輸入輸出函數(shù)gets是用來輸入字符串的函數(shù),使用方法是:
gets(字符數(shù)組);
gets()函數(shù)從輸入流中讀取一行字符,一直讀到‘‘\n’’,但不包括‘‘\n’’字符,最后在末尾自動加上‘‘\0’’的結(jié)束標(biāo)志。如果字符串的長度超過字符數(shù)組的容量,C程序不會自動停止讀取字符,程序設(shè)計(jì)人員應(yīng)設(shè)法保證讀取的字符數(shù)不要超過字符數(shù)組的容量,不然數(shù)組越界會帶來預(yù)想不到的錯(cuò)誤。puts函數(shù)是用來輸出字符串,使用方法是:
puts(字符數(shù)組);
puts()輸出一個(gè)字符串,之后輸出‘‘\n‘‘換行。常用字符串函數(shù)字符串在程序中大量用到,關(guān)于字符串有一些常用的函數(shù),這些函數(shù)在string.h頭文件中說明,在使用時(shí)程序的開始部分要包含下面語句:#include<string.h>1.strlen函數(shù)strlen意思是stringlength。strlen函數(shù)用來測試字符串的長度,即從第一個(gè)字符開始一直到‘\0‘之前的一個(gè)字符的總字符數(shù),方法是:strlen(字符數(shù)組或字符串);
該函數(shù)返回一個(gè)整數(shù)表示字符串的長度,例如:strlen("How");值為3strlen("Howabout?");值為10strlen("C語言");值為5,一個(gè)漢字占兩個(gè)字節(jié)2.strcpy函數(shù)strcpy意思是stringcopy。strcpy函數(shù)把一個(gè)字符串或字符數(shù)組復(fù)制到另一個(gè)字符數(shù)組中,方法是:strcpy(字符數(shù)組,字符數(shù)組或字符串);例如:
chars[18],t[18];strcpy(s,"Hello");/*s數(shù)組中存儲了"Hello"*/strcpy(t,s);/*t數(shù)組中也存儲了"Hello"*/
在字符串的使用中千萬不能把一個(gè)字符串直接賦值給另外一個(gè)字符數(shù)組,例如以下語句是錯(cuò)誤的:
chars[]={"Hello"};chart[10];t=s;/*錯(cuò)誤!應(yīng)該是strcpy(t,s);*/在使用strcpy時(shí)一定要保證存儲字符串的數(shù)組空間要足夠大,能容納所復(fù)制的字符串,不然也會導(dǎo)致越界,例如下面的語句是不合適的:chars[5];strcpy(s,"123456");strcpy的作用就是把字符串中的字符連同‘\0‘一起復(fù)制給另外一個(gè)字符數(shù)組。
3.strcat函數(shù)strcat意思是stringcatenate。strcat函數(shù)完成兩個(gè)字符串的連接,方法是:strcat(字符數(shù)組,字符數(shù)組或字符串);執(zhí)行后會把另一個(gè)字符串連接在已有字符串后面,形成一個(gè)更長的字符串,例如:chars[18];strcpy(s,"How");/*s為"How"*/strcat(s,"are");/*s為"Howare"*/strcat(s,"you?");/*s為"Howareyou?"*/在使用strcat函數(shù)時(shí)一定要保證存儲字符串的數(shù)組空間要足夠大,能容納所連接后的字符串,不然也會導(dǎo)致越界,例如下面的語句是不合適的:chars[]={"How"};strcat(s,“are”);/*s只有4個(gè)字節(jié)的空間,不能容 納"Howare"*/4.strcmp函數(shù)strcmp函數(shù)是用來比較兩個(gè)字符串的大小的,方法是:strcmp(字符串1,字符串2);當(dāng)字符串1>字符串2時(shí),返回一個(gè)正整數(shù);當(dāng)字符串1=字符串2時(shí),返回0;當(dāng)字符串1<字符串2時(shí),返回一個(gè)負(fù)整數(shù)。兩個(gè)字符串的比較是按字母的ASCII碼或漢字內(nèi)碼的值來比較的,程序把字符串在內(nèi)存中的每一個(gè)字節(jié)看成是一個(gè)無符號二進(jìn)制數(shù),比較在兩個(gè)字符串的字節(jié)之間進(jìn)行,比較規(guī)則如下:⑴比較兩個(gè)字符串的字節(jié)值,如兩個(gè)對應(yīng)字節(jié)一樣,則繼續(xù)比較下一個(gè)字節(jié)。⑵如兩個(gè)對應(yīng)的字節(jié)不同,則字節(jié)值大的字符串大。⑶如比較時(shí)其中一個(gè)字符串結(jié)束,字節(jié)值都一樣,則字符串長的那一個(gè)大。⑷兩個(gè)字符串相等當(dāng)而且僅當(dāng)它們兩個(gè)一樣長,而且每一個(gè)字節(jié)值完全相等。根據(jù)ASCII碼規(guī)則,字符比較一般有以下原則:空格<‘0‘<‘1‘<…<‘9‘<‘A‘<‘B‘<…<‘Z‘<‘a(chǎn)‘<‘b‘<…<‘z‘<漢字主講內(nèi)容:一.C語言概述二.數(shù)據(jù)類型、運(yùn)算符與表達(dá)式三.順序結(jié)構(gòu)、輸入輸出四.選擇結(jié)構(gòu)五.循環(huán)結(jié)構(gòu)六.數(shù)組七.函數(shù)八.指針、結(jié)構(gòu)體、共用體九.文件操作注:算法和結(jié)構(gòu)體指針的內(nèi)容放入數(shù)據(jù)結(jié)構(gòu)課程教學(xué)目的 通過本章的學(xué)習(xí),要求能熟練掌握函數(shù)的定義和調(diào)用方法,掌握函數(shù)的嵌套調(diào)用和遞歸調(diào)用,理解變量的作用域和存儲類別,掌握內(nèi)部函數(shù)和外部函數(shù),并能夠在不同情況下靈活選擇函數(shù)來解決實(shí)際問題。掌握編譯預(yù)處理命令的使用方法。函數(shù)和預(yù)處理命令是編寫模塊化程序的重要方法,這將為編寫比較復(fù)雜的程序設(shè)計(jì)的學(xué)習(xí)打下基礎(chǔ)。2023/5/18函數(shù)與預(yù)處理教學(xué)內(nèi)容2023/5/18函數(shù)與預(yù)處理函數(shù)編譯預(yù)處理文件包含命令宏定義條件編譯函數(shù)調(diào)用變量的作用域和存儲類別內(nèi)部函數(shù)和外部函數(shù)函數(shù)的定義重點(diǎn)難點(diǎn)
(1)函數(shù)的定義和函數(shù)調(diào)用
(2)函數(shù)的參數(shù)傳遞
(3)變量的作用域和存儲特性2023/5/18函數(shù)與預(yù)處理從函數(shù)使用的角度看,函數(shù)可分為庫函數(shù)和用戶定義函數(shù)兩種。(1)庫函數(shù):由編譯系統(tǒng)提供的已設(shè)計(jì)好的函數(shù),用戶只需調(diào)用而無須實(shí)現(xiàn)它,在編譯C程序時(shí),應(yīng)盡可能的使用庫函數(shù)。這樣可以提高編程效率和編程的質(zhì)量。在前面各章的例題中反復(fù)用到的printf、scanf、getchar、putchar、gets、puts、strcat等函數(shù)均屬于庫函數(shù)。使用庫函數(shù)時(shí)應(yīng)注意:
1) 函數(shù)的功能;
2) 函數(shù)參數(shù)的數(shù)目、順序以及每個(gè)參數(shù)的意義和類型;
3) 函數(shù)返回值的意義和類型;
4) 需要使用的包含文件。要調(diào)用某個(gè)庫函數(shù),則需在程序的頭部用包含命令(#include)將說明該函數(shù)原型的頭文件包含進(jìn)本程序中。2023/5/18函數(shù)的分類
(2)用戶定義函數(shù):顧名思義,就是程序員自行定義和設(shè)計(jì)的函數(shù)。庫函數(shù)一般只能提供一些低層服務(wù)的功能。而用戶自定義的函數(shù)則能針對具體的應(yīng)用實(shí)現(xiàn)一些特殊的功能。用自定義函數(shù)需要程序員自己來編寫函數(shù)功能的實(shí)現(xiàn)代碼。用戶自定義函數(shù)是由用戶按需要寫的函數(shù)。對于用戶自定義函數(shù),不僅要在程序中定義函數(shù)本身,而且在主調(diào)函數(shù)模塊中還必須對該被調(diào)函數(shù)進(jìn)行類型說明,然后才能使用。2023/5/18函數(shù)的分類
C語言的函數(shù)兼有其它語言中的函數(shù)和過程兩種功能,從這個(gè)角度看,又可把函數(shù)分為有返回值函數(shù)和無返回值函數(shù)兩種。(1)有返回值函數(shù):此類函數(shù)被調(diào)用執(zhí)行完后將向調(diào)用者返回一個(gè)執(zhí)行結(jié)果,稱為函數(shù)返回值。如數(shù)學(xué)函數(shù)即屬于此類函數(shù)。由用戶定義的這種要返回函數(shù)值的函數(shù),必須在函數(shù)定義和函數(shù)說明中明確返回值的類型。(2)無返回值函數(shù):此類函數(shù)用于完成某項(xiàng)特定的處理任務(wù),執(zhí)行完成后不向調(diào)用者返回函數(shù)值。這類函數(shù)類似于其它語言的過程。由于函數(shù)無須返回值,用戶在定義此類函數(shù)時(shí)可指定它的返回為“空類型”,空類型的說明符為“void”。2023/5/18函數(shù)的分類
定義無參函數(shù)的一般形式為:
【函數(shù)類型】函數(shù)名() {
聲明語句部分 可執(zhí)行語句部分
}
2023/5/18函數(shù)的定義無參函數(shù)定義的一般形式
定義有參函數(shù)的一般形式為:
【函數(shù)類型】函數(shù)名(數(shù)據(jù)類型參數(shù)【,數(shù)據(jù)類型參數(shù)2…】) {
聲明語句部分 可執(zhí)行語句部分
}2023/5/18有參函數(shù)定義的一般形式
一個(gè)較大的程序一般應(yīng)分為若干個(gè)程序模塊,每一個(gè)模塊用來實(shí)現(xiàn)一個(gè)特定的功能。而在第一個(gè)階段只設(shè)計(jì)最基本的模塊,功能可以在設(shè)計(jì)好框架以后慢慢補(bǔ)上。在編寫程序的開始階段,往往是先寫上一個(gè)空函數(shù),占個(gè)位置,以后再用編寫好的函數(shù)來替換它。這樣,程序的結(jié)構(gòu)比較清楚,可讀性比較好,以后擴(kuò)充新功能也比較方便,對程序結(jié)構(gòu)影響不大。在程序設(shè)計(jì)中空函數(shù)常常被使用到,它的定義形式為:
【函數(shù)類型】函數(shù)名() { }2023/5/18空函數(shù)
函數(shù)的參數(shù)分為形參和實(shí)參兩種。形參出現(xiàn)在函數(shù)定義中,在整個(gè)函數(shù)體內(nèi)都可以使用,離開該函數(shù)則不能使用。實(shí)參出現(xiàn)在主調(diào)函數(shù)中,進(jìn)入被調(diào)函數(shù)后,實(shí)參變量也不能使用。形參和實(shí)參的功能是作數(shù)據(jù)傳送。發(fā)生函數(shù)調(diào)用時(shí),主調(diào)函數(shù)把實(shí)參的值傳送給被調(diào)函數(shù)的形參從而實(shí)現(xiàn)主調(diào)函數(shù)向被調(diào)函數(shù)的數(shù)據(jù)傳送。2023/5/18函數(shù)的參數(shù)和返回值形式參數(shù)和實(shí)際參數(shù)
函數(shù)的形參和實(shí)參具有以下特點(diǎn):
1.形參變量只有在被調(diào)用時(shí)才分配內(nèi)存單元,在調(diào)用結(jié)束時(shí),所分配的內(nèi)存單元也將被釋放。因此,形參只有在函數(shù)內(nèi)部有效。函數(shù)調(diào)用結(jié)束返回主調(diào)函數(shù)后則不能再使用該形參變量。
2.實(shí)參可以是常量、變量、表達(dá)式、函數(shù)等,無論實(shí)參是何種類型的量,在進(jìn)行函數(shù)調(diào)用時(shí),它們都必須具有確定的值,以便把這些值傳送給形參。因此應(yīng)預(yù)先用賦值、輸入等辦法使實(shí)參獲得確定值。
3.實(shí)參和形參在數(shù)量、類型、順序上應(yīng)嚴(yán)格一致,否則會發(fā)生類型不匹配的錯(cuò)誤。
4.函數(shù)調(diào)用中發(fā)生的數(shù)據(jù)傳送是單向的。即只能把實(shí)參的值傳送給形參,而不能把形參的值反向地傳送給實(shí)參。因此在函數(shù)調(diào)用過程中,形參的值發(fā)生改變,而實(shí)參中的值不會變化。2023/5/18函數(shù)的參數(shù)和返回值形式參數(shù)和實(shí)際參數(shù)
函數(shù)的返回值是指函數(shù)被調(diào)用之后,執(zhí)行函數(shù)體中的程序段所取得的并通過return語句返回給主調(diào)函數(shù)的值。如調(diào)用sqrt()函數(shù)取得開根號的值,調(diào)用例6.2的sum函數(shù)取得的兩數(shù)之和等。對函數(shù)的返回值(或稱函數(shù)的值)有以下一些說明:
1.函數(shù)的值只能通過return語句返回主調(diào)函數(shù)。return語句的一般形式為:return表達(dá)式;或者為:return(表達(dá)式);該語句的功能是計(jì)算表達(dá)式的值,并返回給主調(diào)函數(shù)。在函數(shù)中允許有多個(gè)return語句,但每次調(diào)用只能有一個(gè)return語句被執(zhí)行,因此一個(gè)函數(shù)最多只能返回一個(gè)函數(shù)值。
2023/5/18函數(shù)的返回值2.函數(shù)返回值的類型和函數(shù)定義中的函數(shù)類型應(yīng)保持一致。如果兩者不一致,則以函數(shù)類型為準(zhǔn),自動進(jìn)行類型轉(zhuǎn)換。3.如果函數(shù)返回值為整型,在函數(shù)定義時(shí)可以省去類型說明。4.沒有返回值的函數(shù),可以明確定義為“空類型”,類型說明符為“void”。2023/5/18函數(shù)的返回值使用函數(shù)定義時(shí)的幾點(diǎn)說明:1)最好在參數(shù)列表中列出每個(gè)參數(shù)的類型,即使參數(shù)是默認(rèn)的int。2)如果參數(shù)的類型聲明放在()內(nèi)的形參表中,則對每個(gè)形參都要進(jìn)行對應(yīng)的類型說明,不能省略。如:
floatmax(floatx,floaty)不能寫成floatmax(foatx,y)。此時(shí)y為系統(tǒng)缺省的int類型。3)無論有無形參,函數(shù)名后的括號都不能省略。4)函數(shù)不能嵌套定義,既一個(gè)函數(shù)的定義不能從屬于另外一個(gè)函數(shù)。5)應(yīng)盡可能多的使用系統(tǒng)提供的庫函數(shù)。6)為避免混淆,傳遞給函數(shù)的參數(shù)和函數(shù)定義中的相應(yīng)的參數(shù)盡量不使用相同的名字。7)選擇有意義的參數(shù)名和函數(shù)名可以使程序具有良好的可讀性,這可以避免過多地使用注釋。8)需要大量參數(shù)的函數(shù)可能包含較多的功能(任務(wù)),這種情況應(yīng)該考慮將該函數(shù)分成完成單個(gè)任務(wù)的較小的函數(shù)。9)函數(shù)原型、函數(shù)頭部和函數(shù)調(diào)用應(yīng)該具有一致的參數(shù)個(gè)數(shù)、參數(shù)類型、參數(shù)順序和返回值類型。函數(shù)的返回值
函數(shù)名(實(shí)參列表);如果調(diào)用無參函數(shù),則”實(shí)參列表”是空的,但括號不能省略。如果實(shí)參列表包含多個(gè)實(shí)參,則各參數(shù)間用逗號隔開。實(shí)參和形參的個(gè)數(shù)應(yīng)相等,類型應(yīng)匹配。實(shí)參與形參按順序?qū)?yīng),一一傳遞數(shù)據(jù)。當(dāng)實(shí)參列表包括多個(gè)值時(shí),對實(shí)參求值的順序并不確定。有的系統(tǒng)按自左向右求實(shí)參的值,有的則按自右向左的順序。要注意的是,visualc++6.0編譯器是按自右向左的順序求實(shí)參列表的值的。2023/5/18函數(shù)調(diào)用函數(shù)調(diào)用的一般形式按函數(shù)在程序中出現(xiàn)的位置來分,可以有一下三種函數(shù)調(diào)用的方式。1. 函數(shù)語句把函數(shù)調(diào)用作為一個(gè)語句。如例6.1中的printstart();這時(shí)不要求函數(shù)帶返回值,只要求函數(shù)完成一些操作。2. 函數(shù)表達(dá)式函數(shù)出現(xiàn)在一個(gè)表達(dá)式中,這種表達(dá)式稱為函數(shù)表達(dá)式。這時(shí)要求函數(shù)帶回一個(gè)確定的值以參加表達(dá)式的運(yùn)算。例如:s=sum(a,b)+sum(x,y);函數(shù)sum是表達(dá)式的一部分,將sum(a,b)的值加上sum(x,y)的和賦值給s。3. 函數(shù)參數(shù)函數(shù)調(diào)用作為一個(gè)函數(shù)的參數(shù),例如:s=sum(a,sum(b,c));其中,sum(b,c)是一次函數(shù)調(diào)用,它的值作為sum另一次調(diào)用的參數(shù)。s的值為a,b,c三數(shù)的總和。函數(shù)調(diào)用的方式如果一個(gè)函數(shù)要調(diào)用另外一個(gè)函數(shù),首先是被調(diào)用的函數(shù)必須存在。其次還應(yīng)在主調(diào)函數(shù)中對所有被調(diào)函數(shù)加以說明,否則,在連接時(shí)會出現(xiàn)找不到所調(diào)用函數(shù)的錯(cuò)誤信息。同變量一樣,函數(shù)的調(diào)用也應(yīng)遵循“先定義后使用”的原則。對被調(diào)函數(shù)的聲明分為兩種情況:(1)如果被調(diào)函數(shù)是C語言系統(tǒng)提供的標(biāo)準(zhǔn)庫函數(shù),則在源程序文件的開頭處,使用#include命令,將存放所調(diào)用庫函數(shù)的有關(guān)“頭文件”包含到該程序文件中來。
#include<math.h>或#include"stdio.h"(2)如果被調(diào)用函數(shù)為用戶自己定義的函數(shù),一般情況下,應(yīng)在主調(diào)函數(shù)中對被調(diào)用函數(shù)(返回值)的類型進(jìn)行說明。函數(shù)的說明方法是:在主調(diào)函數(shù)的聲明部分對被調(diào)函數(shù)進(jìn)行聲明。在主調(diào)函數(shù)中對被調(diào)函數(shù)作說明的目的是使編譯系統(tǒng)知道被調(diào)函數(shù)返回值的類型,以便在主調(diào)函數(shù)中按此種類型對返回值作相應(yīng)的處理。對被調(diào)用函數(shù)的聲明和函數(shù)原型
一般地說,函數(shù)的嵌套調(diào)用是指在執(zhí)行被調(diào)用函數(shù)時(shí),該函數(shù)又調(diào)用其它函數(shù)的情形。C語言中不允許作嵌套的函數(shù)定義。因此各函數(shù)之間是平行的,不存在上一級函數(shù)和下一級函數(shù)的問題。但是C語言允許在一個(gè)函數(shù)的定義中出現(xiàn)對另一個(gè)函數(shù)的調(diào)用,這樣就出現(xiàn)了函數(shù)的嵌套調(diào)用,即在被調(diào)函數(shù)中又調(diào)用其它函數(shù)。這與其它語言的子程序嵌套的情形是類似的。注意:被調(diào)用函數(shù)執(zhí)行完畢后,將返回到調(diào)用函數(shù)的斷點(diǎn)繼續(xù)執(zhí)行。簡言之,誰調(diào)用返回到誰的斷點(diǎn)繼續(xù)執(zhí)行。 函數(shù)的嵌套調(diào)用說明
一個(gè)函數(shù)如果只能被本文件中其它函數(shù)所調(diào)用,稱為內(nèi)部函數(shù),內(nèi)部函數(shù)又稱靜態(tài)函數(shù)。在定義內(nèi)部函數(shù)時(shí)在函數(shù)名和函數(shù)類型前面加static。即:
static函數(shù)類型函數(shù)名(形參列表){
函數(shù)體
}
例:staticintfun(inta,intb)
特點(diǎn):只能被本文件中的函數(shù)所調(diào)用。優(yōu)點(diǎn):不用擔(dān)心與其它源文件中的函數(shù)同名,因?yàn)榧词雇矝]關(guān)系。內(nèi)部函數(shù)和外部函數(shù)內(nèi)部函數(shù)一個(gè)函數(shù)可以被其它文件中其它函數(shù)所調(diào)用,就稱為外部函數(shù)。在定義函數(shù)時(shí)可冠以關(guān)鍵字extern(省略也可),表示此函數(shù)是外部函數(shù)。即:extern函數(shù)類型函數(shù)名(形參列表){函數(shù)體}如:externintfun(inta,intb)特點(diǎn):允許被所有源文件中的函數(shù)所調(diào)用。注意:調(diào)用其它源文件中的外部函數(shù)時(shí),需要對其進(jìn)行說明。外部函數(shù)
局部變量也稱為內(nèi)部變量。局部變量是在函數(shù)內(nèi)(包括函數(shù)說明和函數(shù)體)作定義說明的,其作用域僅限于函數(shù)內(nèi),離開該函數(shù)后再使用這種變量是非法的。
關(guān)于局部變量的作用域還要說明以下幾點(diǎn):(1)主函數(shù)中定義的變量只能在主函數(shù)中使用,不能在其它函數(shù)中使用。同時(shí),主函數(shù)中也不能使用其它函數(shù)中定義的變量。因?yàn)橹骱瘮?shù)也是一個(gè)函數(shù),它與其它函數(shù)是平行關(guān)系。這一點(diǎn)是與其它語言不同的,應(yīng)予以注意。(2)形參變量是屬于被調(diào)函數(shù)的局部變量,實(shí)參變量是屬于主調(diào)函數(shù)的局部變量。(3)允許在不同的函數(shù)中使用相同的變量名,它們代表不同的對象,分配不同的單元,互不干擾,也不會發(fā)生混淆。(4)在復(fù)合語句中也可定義變量,其作用域只在復(fù)合語句范圍內(nèi)。
變量的作用域局部變量
全局變量也稱為外部變量,它是在函數(shù)外部定義的變量。它不屬于哪一個(gè)函數(shù),它屬于整個(gè)源程序文件。其作用域是整個(gè)源程序。在函數(shù)中使用全局變量,一般應(yīng)作全局變量說明。只有在函數(shù)內(nèi)經(jīng)過說明的全局變量才能使用。全局變量的說明符為extern。但在一個(gè)函數(shù)之前定義的全局變量,在該函數(shù)內(nèi)使用可不再加以說明。2023/5/18全局變量(1)外部變量的作用域:從定義點(diǎn)到本文件結(jié)束。為方便使用,建議將外部變量的定義放在文件開頭。(2)在同一源文件中,允許外部變量和內(nèi)部變量同名。在內(nèi)部變量的作用域內(nèi),外部變量不起作用。(3)外部變量可實(shí)現(xiàn)函數(shù)之間的數(shù)據(jù)共享,但又使這些函數(shù)依賴這些外部變量,因而使得這些函數(shù)的獨(dú)立性降低。從模塊化程序設(shè)計(jì)觀點(diǎn)來看,這是不利的。因此不是非用不可時(shí),不要使用外部變量。全局變量
C語言中的變量,不僅有類型特性,還有存儲特性,從變量值存在的時(shí)間(即生存期)角度來分,可以分為靜態(tài)存儲方式和動態(tài)存儲方式。
1.動態(tài)存儲方式:是在程序運(yùn)行期間根據(jù)需要進(jìn)行動態(tài)的分配存儲空間的方式。自動內(nèi)部變量(auto)、寄存器變量(register)2.靜態(tài)存儲方式:是指在程序運(yùn)行期間分配固定的存儲空間的方式。靜態(tài)內(nèi)部變量(static)、外部變量(extern)。變量的存儲類別動態(tài)存儲和靜態(tài)存儲對靜態(tài)局部變量的說明:(1)靜態(tài)局部變量屬于靜態(tài)存儲類別,在靜態(tài)存儲區(qū)內(nèi)分配存儲單元。在程序整個(gè)運(yùn)行期間都不釋放。而自動變量(即動態(tài)局部變量)屬于動態(tài)存儲類別,占動態(tài)存儲空間,函數(shù)調(diào)用結(jié)束后即釋放。(2)靜態(tài)局部變量在編譯時(shí)賦初值,即只賦初值一次;而對自動變量賦初值是在函數(shù)調(diào)用時(shí)進(jìn)行,每調(diào)用一次函數(shù)重新給一次初值,相當(dāng)于執(zhí)行一次賦值語句。(3)如果在定義局部變量時(shí)不賦初值的話,則對靜態(tài)局部變量來說,編譯時(shí)自動賦初值0(對數(shù)值型變量)或空字符(對字符變量)。而對自動變量來說,如果不賦初值則它的值是一個(gè)不確定的值。2023/5/18用static聲明的局部變量在C語言源程序中允許用一個(gè)標(biāo)識符來表示一個(gè)字符串,稱為”宏”。被定義為“宏”的標(biāo)識符稱為”宏名”。在編譯預(yù)處理時(shí),對程序中所有出現(xiàn)的”宏名”,都用宏定義中的字符串去代換,這稱為”宏代換”或”宏展開”。宏定義是由源程序中的宏定義命令完成的,宏代換是由預(yù)處理程序自動完成的。在C語言中,”宏”分為有參數(shù)和無參數(shù)的兩種。下面分別討論這兩種“宏”的定義和調(diào)用。1.無參宏定義無參宏的宏名后不帶參數(shù)。其定義的一般形式為:#define標(biāo)識符字符串其中的”#”表示這是一條預(yù)處理命令,凡是以”#”開頭的均為預(yù)處理命令,”define”為宏定義命令,”標(biāo)識符”為所定義的宏名,”字符串”可以是常數(shù)、表達(dá)式、格式串等。宏定義使用中應(yīng)注意下面幾點(diǎn):(1)習(xí)慣上宏名一般用大寫字母表示;(2)宏定義不是C語句,書寫時(shí)行末不應(yīng)加分號;(3)在進(jìn)行宏定義時(shí),可以引用已定義的宏名;(4)當(dāng)宏體是表達(dá)式時(shí),為穩(wěn)妥起見常將它用括弧括起來;(5)宏名在源程序中若用引號括起來,則預(yù)處理程序不對其作宏代換。#include”stdio.h”#defineOK100voidmain(){ printf("OK"); }上例中定義宏名OK表示100,但在printf語句中OK被引號括起來,因此不作宏代換。程序的運(yùn)行結(jié)果為:OK而不是100.這表示把”O(jiān)K”當(dāng)字符串處理。宏定義(6)若宏名字出現(xiàn)在標(biāo)識符內(nèi),則預(yù)處理時(shí)它也不被替換。(7)同一個(gè)宏名可以重復(fù)定義,如果不一致,編譯時(shí)會發(fā)出警告,并以最后一次定義為準(zhǔn)。(8)當(dāng)宏定義在一行中寫不下時(shí),可在行尾用反斜杠“\”進(jìn)行續(xù)行。(9)宏定義通常放在源程序文件的開頭,其作用域是整個(gè)源程序.也可以在函數(shù)內(nèi)部作宏定義,這時(shí)宏名字的作用域只在本函數(shù).可用#undef終止宏定義的作用域。(10)與變量定義不同,宏定義只作字符替換,不分配內(nèi)存空間,也不做正確性檢查。(11)宏定義時(shí)可以不包含宏體,即寫成:#define宏名這種寫法也是合法的,此時(shí)僅說明宏名已被定義。宏定義2.帶參宏定義
C語言允許宏帶有參數(shù)。在宏定義中的參數(shù)稱為形式參數(shù),在宏調(diào)用中的參數(shù)稱為實(shí)際參數(shù)。對帶參數(shù)的宏,在調(diào)用中,不僅要宏展開,而且要用實(shí)參去代換形參。
帶參宏定義的一般形式為:
#define宏名(形參表)字符串
在字符串中含有各個(gè)形參。
帶參宏調(diào)用的一般形式為:
宏名(實(shí)參表);宏定義主講內(nèi)容:一.C語言概述二.數(shù)據(jù)類型、運(yùn)算符與表達(dá)式三.順序結(jié)構(gòu)、輸入輸出四.選擇結(jié)構(gòu)五.循環(huán)結(jié)構(gòu)六.數(shù)組七.函數(shù)八.指針、結(jié)構(gòu)體、共用體九.文件操作注:算法和結(jié)構(gòu)體指針的內(nèi)容放入數(shù)據(jù)結(jié)構(gòu)課程教學(xué)目的: 通過本章的學(xué)習(xí),要求能掌握指針的基本概念,熟練掌握指針變量的類型說明和指針變量的賦值和運(yùn)算方法,熟練掌握一維數(shù)組指針的表示方法,掌握二維數(shù)組的指針表示方法,掌握指針在字符串和函數(shù)中的使用方法。本章內(nèi)容為后續(xù)結(jié)構(gòu)體、文件、課程設(shè)計(jì)的學(xué)習(xí)作好準(zhǔn)備,同時(shí),本章的內(nèi)容為后續(xù)課程數(shù)據(jù)結(jié)構(gòu)的學(xué)習(xí)奠定基礎(chǔ)。指針指針內(nèi)容指針與指針變量指針變量的類型說明指針變量的賦值和運(yùn)算一維數(shù)組的指針表示方法指針與數(shù)組二維數(shù)組的指針表示方法數(shù)組名和數(shù)組指針變量作函數(shù)參數(shù)字符串指針變量的說明和使用指針與函數(shù)字符串指針變量與字符數(shù)組的區(qū)別指針與字符串指針型函數(shù)指針數(shù)組函數(shù)指針變量指針型函數(shù)字符串指針變量的說明和使用對指針變量的類型說明包括三個(gè)內(nèi)容:(1)指針類型說明,即定義變量為一個(gè)指針變量;(2)指針變量名;(3)變量值(指針)所指向的變量的數(shù)據(jù)類型。指針變量的一般形式為:類型說明符*變量名;其中,*表示這是一個(gè)指針變量,變量名即為定義的指針變量名,類型說明符表示本指針變量所指向的變量的數(shù)據(jù)類型。指針變量的類型說明(1)指針變量初始化inta=10;int*p=&a;或者直接使用:inta=10,*p=&a;(2)賦值語句inta;int*p;p=&a;不允許把一個(gè)數(shù)賦予指針變量,下面的賦值是錯(cuò)誤的:
int*p;p=1000;被賦值的指針變量前不能再加“*”說明符,如寫為*p=&a;也是錯(cuò)誤的。指針變量的賦值指針變量可以進(jìn)行某些運(yùn)算,但其運(yùn)算的種類是有限的。它只能進(jìn)行賦值運(yùn)算和部分算術(shù)運(yùn)算及關(guān)系運(yùn)算。1.指針運(yùn)算符(1)取地址運(yùn)算符&(2)取內(nèi)容運(yùn)算符*指針變量的運(yùn)算2.指針變量的運(yùn)算1)賦值運(yùn)算2)加減算術(shù)運(yùn)算指針變量的賦值運(yùn)算有以下幾種形式:(1)指針變量初始化賦值,前面已作介紹。(2)把一個(gè)變量的地址賦予指向相同數(shù)據(jù)類型的指針變量。(3)把一個(gè)指針變量的值賦予指向相同類型變量的另一個(gè)指針變量。(4)把數(shù)組的首地址賦予指向數(shù)組的指針變量。(5)把字符串的首地址賦予指向字符類型的指針變量。(6)把函數(shù)的入口地址賦予指向函數(shù)的指針變量。指針變量的運(yùn)算數(shù)組指針變量說明的一般形式為:類型說明符*指針變量名其中類型說明符表示所指數(shù)組的類型。從一般形式可以看出指向數(shù)組的指針變量和指向普通變量的指針變量的說明是相同的。引入指針變量后,就可以用兩種方法來訪問數(shù)組元素了。第一種方法為下標(biāo)法,即用a[i]形式訪問數(shù)組元素。在第5章中介紹數(shù)組時(shí)都是采用這種方法。第二種方法為指針法,即采用*(pa+i)形式,用間接訪問的方法來訪問數(shù)組元素。一維數(shù)組的指針表示方法字符串指針變量的定義說明與指向字符變量的指針變量說明是相同的,只能按對指針變量的賦值不同來區(qū)別。對指向字符變量的指針變量應(yīng)賦予該字符變量的地址。如:charc,*p=&c;表示p是一個(gè)指向字符變量c的指針變量。而:char*s="CLanguage";則表示s是一個(gè)指向字符串的指針變量。把字符串的首地址賦予s。指針與字符串用字符數(shù)組和字符指針變量都可實(shí)現(xiàn)字符串的存儲和運(yùn)算,但是兩者是有區(qū)別的。在使用時(shí)應(yīng)注意以下幾個(gè)問題:1.字符串指針變量本身是一個(gè)變量,用于存放字符串的首地址,而字符串本身是存放在以該首地址為首的一塊連續(xù)的內(nèi)存空間中并以‘\0’作為串的結(jié)束。字符數(shù)組是由若干個(gè)數(shù)組元素組成的,它可用來存放整個(gè)字符串。2.對字符數(shù)組作初始化賦值,必須采用外部類型或靜態(tài)類型,如:staticcharst[]={“CLanguage”};而對字符串指針變量則無此限制,如:char*ps="CLanguage";3.對字符串指針方式char*ps="CLanguage";可以寫為:char*ps;
ps="CLanguage";而對數(shù)組方式:staticcharst[]={"CLanguage"};不能寫為:charst[20];st={"CLanguage"};只能對字符數(shù)組的各元素逐個(gè)賦值。使用字符串指針變量與字符數(shù)組的區(qū)別在C語言中規(guī)定,一個(gè)函數(shù)總是占用一段連續(xù)的內(nèi)存區(qū),而函數(shù)名就是該函數(shù)所占內(nèi)存區(qū)的首地址??梢园押瘮?shù)的這個(gè)首地址(或稱入口地址)賦予一個(gè)指針變量,使該指針變量指向該函數(shù),然后通過指針變量就可以找到并調(diào)用這個(gè)函數(shù)。我們把這種指向函數(shù)的指針變量稱為“函數(shù)指針變量”。函數(shù)指針變量定義的一般形式為:類型說明符(*指針變量名)(形參類型1,形參類型2…);其中“類型說明符”表示被指向函數(shù)的返回值的類型?!?*指針變量名)”表示“*”后面的變量是定義的指針變量。最后的括號和括號內(nèi)的形參,表示指針變量所指的是一個(gè)函數(shù)。例如:int(*pf)(int,int);表示pf是一個(gè)指向函數(shù)入口的指針變量,該函數(shù)的返回值(函數(shù)值)是整型。指針與函數(shù)函數(shù)指針變量如果一個(gè)數(shù)組的元素值為指針則該數(shù)組稱為指針數(shù)組。指針數(shù)組是一組有序的指針的集合。指針數(shù)組的所有元素都必須是具有相同存儲類型和指向相同數(shù)據(jù)類型的指針變量。指針數(shù)組說明的一般形式為:類型說明符*數(shù)組名[數(shù)組長度]其中類型說明符為指針值所指向的變量的類型。例如:int*pa[3]表示pa是一個(gè)指針數(shù)組,它有三個(gè)數(shù)組元素,每個(gè)元素值都是一個(gè)指針,指向整型變量。通??捎靡粋€(gè)指針數(shù)組來指向一個(gè)二維數(shù)組。指針數(shù)組中的每個(gè)元素被賦予二維數(shù)組每一行的首地址,因此也可理解為指向一個(gè)一維數(shù)組。指針數(shù)組指向指針的指針變量定義如下:類型標(biāo)識符**指針變量名例如:float**ptr;其含義為定義一個(gè)指針變量ptr,它指向另一個(gè)指針變量(該指針變量又指向一個(gè)實(shí)型變量)。由于指針運(yùn)算符"*"是自右至左結(jié)合,所以上述定義相當(dāng)于:float*(*ptr);指向指針的指針變量與指針有關(guān)的各種說明和意義:int*p;
p為指向整型量的指針變量int*p[n];
p為指針數(shù)組,由n個(gè)指向整型量的指針元素組成。int(*p)[n];
p為指向整型二維數(shù)組的指針變量,二維數(shù)組的列數(shù)為nint*p()
p為返回指針值的函數(shù),該指針指向整型量int(*p)()
p為指向函數(shù)的指針,該函數(shù)返回整型量int**p
p為指向另一指針的指針變量,該指針指向一個(gè)整型量。在解釋組合說明符時(shí),標(biāo)識符右邊的方括號和圓括號優(yōu)先于標(biāo)識符左邊的“*”號,而方括號和圓括號以相同的優(yōu)先級從左到右結(jié)合。但可以用圓括號改變約定的結(jié)合順序。內(nèi)容
結(jié)構(gòu)體、共用體和枚舉類型結(jié)構(gòu)型的引入,很好的處理生活總的各種表格或表格中的記錄結(jié)構(gòu)型的定義,結(jié)構(gòu)型變量的定義、賦值、引用及引用鏈表等方法共用型的定義,共用型變量的定義、賦值、引用枚舉型的定義,共用型變量的定義、賦值、引用結(jié)構(gòu)體類型的定義結(jié)構(gòu)體類型定義的一般形式struct結(jié)構(gòu)型名{數(shù)據(jù)類型標(biāo)識符成員1;數(shù)據(jù)類型標(biāo)識符成員2;
…
數(shù)據(jù)類型標(biāo)識符成員n;};請讀者注意結(jié)構(gòu)體定義語句的右花括號后面用分號(;)做語句結(jié)束標(biāo)記。結(jié)構(gòu)型變量成員的引用格
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025版港口工程分包消防安全生產(chǎn)管理服務(wù)合同3篇
- 洗衣機(jī)課程設(shè)計(jì)論文
- 我國創(chuàng)新創(chuàng)業(yè)課程設(shè)計(jì)
- 2024年土方工程車隊(duì)租賃合同及施工環(huán)境保護(hù)協(xié)議3篇
- 文華學(xué)院FPGA課課程設(shè)計(jì)
- 2025年度新能源車輛LOGO設(shè)計(jì)及品牌推廣服務(wù)協(xié)議3篇
- 2025年度LED廣告車租賃與戶外廣告投放合同2篇
- 2025版新能源車合伙人合作協(xié)議書3篇
- 2025版快遞快件代發(fā)代收及快遞售后服務(wù)合同3篇
- 2025版汽車二手車鑒定評估及收購合同3篇
- 【課件】Unit1ReadingforWriting課件高中英語人教版(2019)必修第二冊
- 液壓爬模作業(yè)指導(dǎo)書
- 劇院的建筑設(shè)計(jì)規(guī)范標(biāo)準(zhǔn)
- 遺傳分析的一個(gè)基本原理是DNA的物理距離和遺傳距離方面...
- Agilent-E5061B網(wǎng)絡(luò)分析儀使用方法
- 初一英語單詞辨音專項(xiàng)練習(xí)(共4頁)
- 龐中華鋼筆行書字帖(完整36后4張)課件
- 最新版入團(tuán)志愿書填寫模板
- 河北省建設(shè)工程竣工驗(yàn)收報(bào)告
- 畢業(yè)設(shè)計(jì)范本
- 醫(yī)藥企業(yè)研發(fā)人員考核制度
評論
0/150
提交評論