版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、第 24 頁 共 24 頁思維導(dǎo)圖1:C語言程序設(shè)計知識結(jié)構(gòu)第一課 C語言程序設(shè)計基礎(chǔ)思維導(dǎo)圖2:第一課 C語言程序設(shè)計基礎(chǔ)本課主要知識點:1.知識點:C程序基礎(chǔ)l C語言是一種結(jié)構(gòu)化程序設(shè)計語言。三種基本結(jié)構(gòu):順序、選擇、循環(huán)。2.知識點:C語言程序的構(gòu)成l C程序是由函數(shù)構(gòu)成的,一個C程序有且僅有一個main函數(shù)。一個函數(shù)由兩部分組成:函數(shù)的首部和函數(shù)體。函數(shù)體包括聲明部分和執(zhí)行部分。一個C程序總是從main函數(shù)開始執(zhí)行(即程序的入口),由main函數(shù)結(jié)束,(即程序的出口)。3.知識點:標(biāo)識符l 命名規(guī)則: 標(biāo)識符中只能包含字母 (a-z,A-Z),數(shù)字(0-9),下劃線(_)。第一個字符
2、必須是字母或下劃線。類型說明符:int,float,double等語句定義符:if,for,while等l 分類都是小寫 關(guān)鍵字(32個) (有固定含義,不可改變)庫函數(shù)的名字:printf , scanf 等編譯預(yù)處理命令名:include等 預(yù)定義標(biāo)識符 (有特殊含義,可以改變) 用戶自定義的標(biāo)識符 格式合法,不能使用關(guān)鍵字,見名知意4.知識點:數(shù)據(jù)類型5.知識點:常量l 整型常量十進(jìn)制整常數(shù):沒有前綴,其數(shù)碼為0-9。例如65535,-568八進(jìn)制整常數(shù):以0開頭,其數(shù)碼為0-7。例如015十六進(jìn)制整常數(shù):以0X或0x開頭,其數(shù)碼為0-9,A-F或a-f。例如0x2A長整型數(shù):整型常數(shù)后
3、綴為L或l。例如358000L無符號數(shù):整型常數(shù)后綴為U或u。例如158ul 實型常量的形式小數(shù)形式:必須有小數(shù)點,小數(shù)點前后不能同時沒有數(shù)字。指數(shù)形式:aEn(其中a表示十進(jìn)制數(shù),E階碼標(biāo)志,n階碼)。E前E后必須有數(shù)字,E后必為整數(shù),可以帶符號。例如2.1E-3、5E8l 字符常量:用單引號括起來的一個字符。包括普通字符常量和轉(zhuǎn)義字符。普通字符常量:如a、A、1。轉(zhuǎn)義字符:由一對單引號引起來的以開頭的若干字符的組合。如n表示回車換行、表示反斜線符、表示單引號符、”表示雙引號、ddd表示八進(jìn)制數(shù)、xhh表示十六進(jìn)制數(shù)。6.知識點:變量l 整型變量和實型變量以考試標(biāo)準(zhǔn)Viusal c+6.0為
4、例,說明各類型變量所占的位數(shù)。 類型所占位數(shù)所占字節(jié)數(shù)類型所占位數(shù)所占字節(jié)數(shù)short162unsigned int324int324unsigned long324long324float324unsigned short162double6487.知識點:ASCII碼l 0的ASCII碼值為48;A的ASCII碼值為65;a的ASCII碼值為97。l 大寫字母與小寫字母的ASCII碼值相差32。8.知識點:運(yùn)算符的優(yōu)先級級別由大到小:(邏輯)非 算(術(shù)運(yùn)算符) 關(guān)(系運(yùn)算符) (邏輯)與 (邏輯)或 條(件運(yùn)算符) 賦(值運(yùn)算符)9.知識點:強(qiáng)制類型轉(zhuǎn)換運(yùn)算符l 一般形式:(類型說明符)(
5、表達(dá)式)l 功能:把表達(dá)式的運(yùn)算結(jié)果強(qiáng)制轉(zhuǎn)換成類型說明符所表示的類型10.知識點:算術(shù)運(yùn)算符: +、*、/、%:參與運(yùn)算的量均為整型。/:當(dāng)除號左右兩邊都是整數(shù)的時候,商也要是整數(shù),如果不是整數(shù)則舍棄小數(shù)部分。當(dāng)參與運(yùn)算量有一個為實型,則商為double型。11.知識點:逗號表達(dá)式l 一般形式:表達(dá)式1,表達(dá)式2表達(dá)式nl 求值過程:自左向右依次求解,最后一個表達(dá)式的值為整個逗號表達(dá)式的值。12.知識點:自增自減運(yùn)算符+i i自加1后再參與運(yùn)算 i+ i參與運(yùn)算后再自加1-i i自減1后再參與運(yùn)算 i- i參與運(yùn)算后再自減1+和- -的運(yùn)算對象只能為變量,不能是常量或表達(dá)式。13.知識點:賦值
6、表達(dá)式l 一般形式:變量名=表達(dá)式l 賦值運(yùn)算符左邊必須是變量,而不是表達(dá)式。14.知識點:位運(yùn)算l 按位與運(yùn)算&規(guī)則:0&0=0 0&1=0 1&0=0 1&1=1l 按位或運(yùn)算|規(guī)則:0|0=0 0|1=1 1|0=1 1|1=1l 按位異或運(yùn)算規(guī)則:00=0 01=1 10=1 11=0l 求反運(yùn)算規(guī)則:0=1 1=0l 左移運(yùn)算規(guī)則:把把左邊的運(yùn)算數(shù)的各二進(jìn)位全部右移若干位。高位補(bǔ)0,低位丟棄。右移一位相當(dāng)于該數(shù)除以2。右移n位相當(dāng)于除以2n。15.知識點:關(guān)系運(yùn)算符和表達(dá)式16.知識點:邏輯運(yùn)算符和表達(dá)式l 邏輯運(yùn)算符優(yōu)先級從高到低:!、&、|l 邏輯運(yùn)算的真值表aba&ba|b!a
7、真真真真假真假假真假假真假真真假假假假真l 進(jìn)行邏輯運(yùn)算時,若&左邊的值為0,則不再對右邊的運(yùn)算對象進(jìn)行運(yùn)算,整個表達(dá)式的值為0。l 若|左邊的運(yùn)算對象的值為1,則不再對右邊的運(yùn)算對象進(jìn)行運(yùn)算,整個表達(dá)式的值為1。17.知識點:格式輸入函數(shù)printf()(1)一般形式:printf(“格式控制字符串”,輸出列表);(2)遇到控制字符,按照控制字符的規(guī)定輸出,遇到非格式字符串按原樣輸出。18.知識點:格式輸入函數(shù)scanf()(1)一般形式:scanf(“格式控制字符串”,地址列表);(2)若格式控制字符串中有非格式字符串,則按原樣輸入。若格式控制字符串中(3)在輸入字符數(shù)據(jù)時,若格式控制字符
8、串中無非格式字符,則認(rèn)為所有輸入的字符均為有效字符??崭駮划?dāng)作字符賦值給變量。(4)格式字符串l 一般形式:%*輸入數(shù)據(jù)寬度長度類型l *表示該輸入項,讀入后不賦予相應(yīng)的變量。l 輸入數(shù)據(jù)寬度:用十進(jìn)制數(shù)指定輸入的字符數(shù)。l 當(dāng)定義的變量類型和scanf中“格式符”類型不一致時(這里只限定在字符型和整型兩種類型,其他數(shù)據(jù)類型不可以。)整型和字符型之間通過ASCALL可以相互轉(zhuǎn)化。19.知識點:字符輸出函數(shù)putchar()一般形式:putchar(a);putchar(101);20.知識點:字符輸入函數(shù)getchar()一般形式:getchar();或ch=getchar();l getc
9、har經(jīng)常作為while循環(huán)條件,判斷輸入哪一個字符時,循環(huán)結(jié)束。例如,輸入字符串,直到輸入0,程序結(jié)束,則可寫成while( getchar()!=0)第二課 選擇結(jié)構(gòu)與循環(huán)結(jié)構(gòu)本課重要知識點:1.知識點:if語句l if(表達(dá)式),其中表達(dá)式可以是任意合法的C語言表達(dá)式。l 對于單個if語句,其后跟隨的受if控制的只能是1個語句或者是1個復(fù)合語句。l 當(dāng)多個if(表達(dá)式)單分支形式并行出現(xiàn)時,其執(zhí)行順序是:先判斷第一if單分支的條件,如果為真,執(zhí)行其后面的語句,執(zhí)行完后,繼續(xù)向下執(zhí)行。判斷第二個if單分支語句,依次類推。如果第一個if表達(dá)式的值為假,則不執(zhí)行其后的語句,而去判斷第二個if單
10、分支條件。2.知識點:if語句的嵌套l 內(nèi)嵌結(jié)構(gòu)中,else總是與前面最近的且未曾配對的if語句配對,組成一對if-else語句。3.知識點:條件表達(dá)式l 一般形式:表達(dá)式1?表達(dá)式2:表達(dá)式3l 執(zhí)行過程:表達(dá)式1的值為真,條件表達(dá)式取表達(dá)式2的值;表達(dá)式1的值為假,條件表達(dá)式取表達(dá)式3的值。4.知識點:switch語句l switch語句的圓括號中的表達(dá)式的值必須是整型或字符型,不能為實型。l case后的表達(dá)式可以是求得整型和字符型的常量表達(dá)式,但不能含有變量。l default的位置對程序的執(zhí)行沒有影響。l 當(dāng)switch語句和循環(huán)語句(for、while)時,要注意switch里面的
11、break語句退出的位置。解決這一問題的方法是:首先劃分結(jié)構(gòu),確定循環(huán)的語句體包括哪些語句。然后,在繼續(xù)劃分循環(huán)體內(nèi)的語句,如果循環(huán)體內(nèi)的語句只有一條switch語句,其內(nèi)部出現(xiàn)了break,遇到break,要結(jié)束當(dāng)前switch語句的執(zhí)行,繼續(xù)執(zhí)行下一次循環(huán)。5.知識點:while,do-while,for三種循環(huán)結(jié)構(gòu)l 循環(huán)體部分可以只有一條空語句,不做任何操作。l while, for如果第一次判斷表達(dá)式的值為0,則循環(huán)一次也不執(zhí)行。即while循環(huán)體最少執(zhí)行0次。do-while循環(huán)體最少執(zhí)行1次6.知識點:for語句l 表達(dá)式1、表達(dá)式2、表達(dá)式3可以缺省,但兩個分號不能省略。l 表
12、達(dá)式1和表達(dá)式3也可以是逗號表達(dá)式。l 注意區(qū) 賦值語句和判斷語句l 表達(dá)式1、表達(dá)式2、表達(dá)式3執(zhí)行的過程7.知識點:循環(huán)嵌套8.知識點:break語句l 功能:跳出整個switch語句;跳出循環(huán)體,防止死循環(huán)。l break語句只能出現(xiàn)在switch、while、do-while、for循環(huán)中,不能出現(xiàn)在其他地方。l 作用范圍:所在循環(huán)體從屬的最內(nèi)層循環(huán),而不是外層的某個循環(huán)。9.知識點:continue語句l 功能:結(jié)束本次循環(huán),接著判斷是否繼續(xù)下一次循環(huán)。l continue語句只能出現(xiàn)在while、do-while、for循環(huán)中。l 作用范圍:所在循環(huán)體從屬的最內(nèi)層循環(huán),而不是外層的
13、某個循環(huán)。第三課 數(shù)組本課重要知識點:1.知識點:一維數(shù)組的定義2.知識點:一維數(shù)組元素的引用3.知識點:一維數(shù)組的初始化l 順序列出數(shù)組元素的全部初值,例如int a5=1,2,3,4,5;l 只給數(shù)組的前面一部分元素設(shè)定初值,未賦初值的元素自動取0值。例如,int a5=1,2;l 對全部數(shù)組元素賦初值時,可以不指定數(shù)組元素的個數(shù)。例如,int a=1,2,3,4,5;4.知識點:二維數(shù)組的初始化l 按行分段給二維數(shù)組賦初值l 按行連續(xù)賦值l 對部分元素賦初值,未賦初值的元素自動取0值l 若對全部元素賦初值,則第一維的長度可以不指定5.知識點:二維數(shù)組和for語句6.知識點:字符串定義:由
14、“”引起來的,由若干個字符所組成的序列。字符串的結(jié)束標(biāo)志:0如字符串“china”,在內(nèi)存中存儲形式是china0該字符串的長度為5字節(jié),所占的存儲空間為6字節(jié)。7.知識點:字符數(shù)組的定義及初始化l 字符數(shù)組名是地址常量,不能賦值給數(shù)組名。8.知識點:字符數(shù)組的輸入與輸出9.知識點:字符串處理函數(shù)第四課 指針本課重要知識點:1.知識點:指針的概念與指針變量l 指針就是地址。指針變量是用來存儲地址,而一般變量是用來存儲數(shù)值。2. 知識點:指針的引用l 指針的引用是通過兩個運(yùn)算符實現(xiàn)“&”和“*”實現(xiàn)的 &是取地址符號,它的一半格式是:&變量名。例如:int i ; &i表示取i的地址。 *是取值
15、運(yùn)算符,它的一般格式:*指針變量名。例如:int i=10,*p=&i; *p表示取i的值103.知識點:指針變量的初始化l 指針變量在使用前必須要初始化,把一個具體的地址賦給它,否則引用時會出錯,如果不指向任何數(shù)據(jù)就賦“空值”NULL。l 指針變量兩種初始化方法:方法一:int a=2,*p=&a;(定義的同時初始化) 方法二:int a=2,*p;p=&a;(先定義后初始化)4.知識點:指針的運(yùn)算l *p+和(*p)+之間的差別:*p+是地址變化,(*p)+是指針變量所指的數(shù)據(jù)變化。一個指針變量加一個整數(shù)不是簡單的數(shù)學(xué)相加,而是連續(xù)移動若干地址。當(dāng)兩個指針指向同一數(shù)組時,它們可以比較大小進(jìn)
16、行減法運(yùn)算。例如:int a10,*p; p=a; p+;表示p移動一個存儲單元,p指向a1,只有當(dāng)指著指向數(shù)組元素時,指針的運(yùn)動才有意義。5:知識點:指針與數(shù)組l 指針與一維數(shù)組數(shù)組名代表數(shù)組的首地址。一維數(shù)組中,第一個元素的地址即為該數(shù)組的起始地址。建立指針變量與一維數(shù)組的聯(lián)系:例如:int a6,*pa;pa=a;或pa=&a0;說明:數(shù)組名a代表該數(shù)組的首地址,也即a0的地址。 pa=a;或pa=&a0;使pa保存了數(shù)組a的首地址,pa,a,&a0都指向一個地址。 以上操作可等價于 int a6,*pa=a; 如果pa=&a3;表示*pa的值就是a3的地址。注意:數(shù)組a是一個地址常量,
17、它永遠(yuǎn)指向數(shù)組的首地址,不能重新賦值。因此 a=&i;或a+都是錯誤的。6.知識點:用指針訪問數(shù)組元素l 通過指針引用數(shù)組元素例如:int *p,a5;p=&a0;說明:指針變量p指向了數(shù)組元素a0,可以使用訪問運(yùn)算符“*”來引用變量a0; 例:*p=18;等價于a0=18; *(p+1)表示a1 p+1表示&a1l 通過數(shù)組的首地址引用數(shù)組元素例如:int a5;說明:a是數(shù)組名,表示收地址,可以把a(bǔ)當(dāng)做一個指針常量。*a等價與a0,*(a+1)等價與a1;a等價于&a0,a+1等價與&a1;l 用帶下標(biāo)的指針變量引用一維數(shù)組元素例如:int *p,a5; p=a;說明:p0表示p指針指向的
18、內(nèi)存單元,p1表示p指向的內(nèi)存單元 ai的等價引用方法:ai、pi、*(a+i)、*(p+i) ai的地址等價引用方法:&ai、&pi、a+i、p+i7.知識點:指針與二維數(shù)組l 任何一個二維數(shù)組均由若干個一維數(shù)組組成,a0、a1和a2是一維數(shù)組名,數(shù)組名代表數(shù)組的首地址,因此a0就代表數(shù)組元素a00的地址,也即&a00。注意:a的值與a0相同,但它們的基類型不同,a可以等價于一個二維指針,而a0是一維指針。因此 int a34,*p=a;錯誤取數(shù)組元素aij的地址的幾種方法:&aij;ai+j; *(a+i)+j;l 指針數(shù)組的定義方式:*指針數(shù)組名常量表達(dá)式;如:int *p3;l 行指針
19、的一般定義形式如下:類型名 (*指針數(shù)組名)常量表達(dá)式;如:int (*p)2;l 指針數(shù)組與行指針的區(qū)別1、int *p3;定義的是指針數(shù)組,表示一個數(shù)組,含有3個元素p0、p1、p2,且這3個元素只能存放整型元素的地址 2、int (*p)3;定義的是行指針,表示一個指針變量,它僅有一個存儲空間,只能存放一個長度為2的一維數(shù)組指針。8.知識點:指針與函數(shù)9.知識點:指針與字符串l 可以通過字符指針來處理字符串 “三名主義”(考試的重點) 數(shù)組名:表示第一個元素的地址。數(shù)組名是地址常量名,不能進(jìn)行賦值和自加(減)等運(yùn)算。(考了很多次) 函數(shù)名:表示該函數(shù)的入口地址。 字符串常量名:表示第一個
20、字符的地址。第五課 函數(shù)本課重要知識點:1、知識點:函數(shù)的概述l 源程序是由函數(shù)組成的,函數(shù)由函數(shù)首部與函數(shù)體組成,函數(shù)體包括聲明部分和執(zhí)行語句部分組成。l 語言程序可以由多個源程序組成,其中一個源程序文件包含main函數(shù),其他函數(shù)可以寫在另外的源程序文件中,為單獨(dú)文件,并且可以單獨(dú)編譯。程序的執(zhí)行總是從main函數(shù)開始,完成對其它函數(shù)的調(diào)用后再返回到main函數(shù),最后由main函數(shù)結(jié)束整個程序。main 函數(shù)可以調(diào)用其它函數(shù),而不允許被其它函數(shù)調(diào)用。一個源程序必須有,也只能有一個主函數(shù)main。l 在一個函數(shù)的函數(shù)體內(nèi),不能再定義另一個函數(shù),即不能嵌套定義。2、知識點:函數(shù)的定義l 函數(shù)返回
21、return語句的一般形式:return 表達(dá)式;或return (表達(dá)式);在函數(shù)中允許有多個return語句,但每次只能有一個return語句被執(zhí)行。3、知識點:形參和實參及函數(shù)調(diào)用l 形參出現(xiàn)在函數(shù)定義中(即定義函數(shù)時函數(shù)名后面括號中的參數(shù)),實參出現(xiàn)在主調(diào)函數(shù)中(調(diào)用函數(shù)時函數(shù)名后面括號中的參數(shù))l 形參在本函數(shù)體內(nèi)都可以使用,離開該函數(shù)則不能使用。實參在主調(diào)函數(shù)中內(nèi)有效,進(jìn)入被調(diào)函數(shù)后,實參變量也不能使用。(注:在進(jìn)行函數(shù)調(diào)用時,函數(shù)必須有確定的值)l 實參向形參單向傳遞數(shù)值,不能將形參的值反向的傳送給實參。實參和形參在數(shù)據(jù)上、類型上、順序上要一致。在函數(shù)調(diào)用過程中,形參的變化不會改
22、變實參的變化。l 在傳遞數(shù)值時,形參和實在分別占據(jù)不同的存儲單元(形參變量只有在被調(diào)用時才分配內(nèi)存單元,調(diào)用結(jié)束后,即刻釋放分配的內(nèi)存單元) “傳值”與“傳址”的區(qū)別:傳數(shù)值的話,形參的變化不會改變實參的變化。傳地址的話,形參的變化就有可能改變實參所對應(yīng)的量。4、知識點:函數(shù)調(diào)用的一般形式和調(diào)用方式l 函數(shù)調(diào)用的一般形式為:函數(shù)名(實際參數(shù)表);實參可以是常數(shù)、變量或其他構(gòu)造類型數(shù)據(jù)及表達(dá)式,也可以沒有(當(dāng)為無參函數(shù)時)l 函數(shù)調(diào)用的方式:(1)函數(shù)表達(dá)式:函數(shù)作為表達(dá)式中的一項出現(xiàn)在表達(dá)式中,以函數(shù)返回值參與表達(dá)式運(yùn)算。例如:z=max(x,y);(2)函數(shù)語句:函數(shù)調(diào)用的一般形式上加上分號
23、。例如:printf(“%dn”,a);(3)函數(shù)實參:函數(shù)作為另一個函數(shù)調(diào)用的實際參數(shù)出現(xiàn)。例如:printf(“%d”,max(x,y);l 程序從main函數(shù)進(jìn)入,上往下執(zhí)行,當(dāng)碰到函數(shù)名后,把值傳給調(diào)用函數(shù),當(dāng)程序得到了返回值或調(diào)用函數(shù)結(jié)束,再順序往下執(zhí)行,最后到main函數(shù)結(jié)束。5、知識點:函數(shù)的聲明及其位置l 函數(shù)要“先定義后調(diào)用”,或“先聲明再調(diào)用后定義”。函數(shù)的聲明一定要有函數(shù)名、函數(shù)返回值類型、函數(shù)參數(shù)類型,但不一定要有形參的名稱。一般形式為:類型說明符 被調(diào)函數(shù)名(類型 形參,類型 形參); 或 類型說明符 被調(diào)函數(shù)名(類型,類型);注意:其末尾“;”不能省例如:int m
24、ax(int a,int b); 或 int max(int ,int); 兩者功能相同l 省去主調(diào)函數(shù)中對被調(diào)函數(shù)的函數(shù)說明的幾種情況:(1)被調(diào)函數(shù)的返回值是整型或字符型時(返回值自動按整型處理)(2)當(dāng)被調(diào)函數(shù)的函數(shù)定義在主調(diào)函數(shù)之前時(3)在所有函數(shù)定義之前,在函數(shù)外預(yù)先說明了各個函數(shù)的類型6、知識點:函數(shù)的嵌套調(diào)用l C語言中不允許作嵌套的函數(shù)定義,但是允許在一個函數(shù)的斷定儀中出現(xiàn)對另一個函數(shù)的調(diào)用,即嵌套調(diào)用。7、知識點:函數(shù)的遞歸調(diào)用l 函數(shù)直接或間接地調(diào)用自己稱為函數(shù)的遞歸調(diào)用。遞歸調(diào)用必須有一個明確的結(jié)束遞歸的條件。在做遞歸題時可把遞歸的步驟一步步寫下來,不要弄顛倒了。8、知
25、識點:局部變量和全局變量l 在一個函數(shù)內(nèi)部或復(fù)合語句內(nèi)部定義的變量,它只在本函數(shù)范圍內(nèi)有效,也就是說只有在本函數(shù)內(nèi)才能使用它們,在函數(shù)以外是不能使用這些變量的。這稱為局部變量,局部變量又稱為內(nèi)部變量。函數(shù)的形參也屬于局部變量。l 在函數(shù)外部定義的變量,稱為全局變量,又稱為外部變量。全局變量可以被本文件的其他函數(shù)所共用。9知識點:變量存儲類別(auto變量、register變量、static變量) 靜態(tài)變量(static):(1)在編譯時分配存儲空間,所占存儲單元直到程序結(jié)束時才釋放,它的值在程序運(yùn)行過程中一直存在,且變量的初始化只進(jìn)行一次。(2)static說明符可以用于全局變量,也可用于局部
26、變量(auto和resgiter不可以定義全局變量)但是,當(dāng)它說明變量后,只要這個變量還在程序中存在,那么不管用到還是沒有用到,它都將會占用內(nèi)存單元。 自動變量(auto)(1)自動變量的存儲空間是當(dāng)程序執(zhí)行到定義它的函數(shù)或語句塊時才分配,當(dāng)函數(shù)執(zhí)行結(jié)束后自動釋放,變量的值也就不再存在。(2)局部變量的存儲類別默認(rèn)為auto,可以省略不寫,但它不能定義全局變量。 寄存器變量(register):12、知識點:數(shù)組與函數(shù)l 數(shù)組用作函數(shù)參數(shù)有兩種形式:把數(shù)組元素(下標(biāo)變量)作為實參使用和把數(shù)組名作為函數(shù)的形參和實參使用。l 數(shù)組元素作函數(shù)的實參與普通變量并無區(qū)別,所進(jìn)行的傳遞是值,形參變量和實參
27、變量占據(jù)由編譯系統(tǒng)分配的兩個不同的內(nèi)存單元;l 數(shù)組名作為函數(shù)參數(shù)時,所進(jìn)行的傳遞是地址(相當(dāng)于把實參數(shù)組的首地址賦予形參數(shù)組名或指針名),形參數(shù)組與實參數(shù)組為同一數(shù)組,共同擁有一段內(nèi)存單元; 13指針與函數(shù)l 函數(shù)指針變量是指向函數(shù)的指針變量。定義的一般形式為: 類型說明符 (*指針變量名)(); 例如: int (*pf)();調(diào)用函數(shù)的一般形式:(*指針變量名)(實參表) 例如:z=(*p)(x,y); 注: (*指針變量名)中的“()”不能少l 函數(shù)指針變量不能進(jìn)行算術(shù)運(yùn)算。l 指針型函數(shù)是指返回指針值的函數(shù)。定義的一般形式為:類型說明符 *函數(shù)名(形參表) 例如:int *ap(in
28、t x,int y)第五課 結(jié)構(gòu)體、鏈表與共用體本課重要知識點:1.知識點:用typedef定義類型l 功能:為已有數(shù)據(jù)類型取別名l 類型定義形式: typedef 舊類型名 新類型名;(例如:typedef double D ; )注意:(1) 定義的新名只是原名的一個別名,并不是建立一個新的數(shù)據(jù)類型;(2) 用新名和原名定義的對象具有相同的性質(zhì)和效果。2. 知識點:結(jié)構(gòu)體變量的定義具體形式實例說明形式1struct 結(jié)構(gòu)體名類型標(biāo)識符 成員名;類型標(biāo)識符 成員名; .;struct 結(jié)構(gòu)體名 變量名表列;struct student char num20;char name20; char
29、 sex;float score4;struct student stu1,stu2;特點:先定義類型,后定義變量注意:定義變量時,必須以struct student 開頭,缺一不可形式2struct 結(jié)構(gòu)體名 類型標(biāo)識符 成員名; 類型標(biāo)識符 成員名; .變量名表列;struct student char num20;char name20; char sex;float score4; stu1,stu2;特點:定義類型的同時定義變量注意:之后再定義同類型變量時,也必須必須以struct student 開頭形式3struct 類型標(biāo)識符 成員名;類型標(biāo)識符 成員名; .變量名表列;str
30、uct char num20;char name20; char sex;float score4; stu1,stu2;特點:定義類型的同時定義變量注意:此形式省略了結(jié)構(gòu)體名,預(yù)示著后續(xù)程序中將不再定義該類型變量形式4typedef struct 結(jié)構(gòu)體名 類型標(biāo)識符 成員名; 類型標(biāo)識符 成員名; . STU;STU 變量名表列;typedef struct student char num20;char name20; char sex;float score4; STU;STU stu1,stu2;特點:先定義類型,后定義變量注意:用STU或struct student定義變量具有同等
31、效果,用STU形式簡潔方便3.知識點: 結(jié)構(gòu)體變量各成員的引用l 引用結(jié)構(gòu)體變量的成員的方法是:結(jié)構(gòu)體變量名成員名 (例如:stu1.sex)l 結(jié)構(gòu)體指針變量引用成員的方法是:形式1:(*指針變量名)成員名 (例如:(*p).num)形式2: 指針變量名-成員名 (例如:p-num)l 運(yùn)算符級別,注意:()和-和 . 同級別,均大于*設(shè)有:struct student char num;char name20; struct date int year,mon,day birth;float score4;struct student *p,stu1;p=&stu1;成員類型成員操作方式說
32、明普通變量例如:引用成員變量num直接賦值:stu1.num=201101;間接賦值:p-num=201101輸入:scanf(“%d”,& stu1.num);輸出:printf(“%d”,stu1.num);數(shù)組例如:引用成員數(shù)組元素score0賦值:stu1.score0=75;間接賦值:p- score0=75;輸入:scanf(“%f”,& stu1. score0);輸出:printf(“%f”,stu1. score0);字符串例如:字符數(shù)組成員作為字符串name賦值:strcpy(,”zhangsan”);間接賦值:strcpy(,”zhangs
33、an”);輸入:scanf(“%s”, );輸出:printf(“%s”,);%s作為格式控制時,scanf和printf的輸入和輸出項均為地址結(jié)構(gòu)體嵌套例如:引用內(nèi)嵌結(jié)構(gòu)體變量birth的成員year賦值:stu1.birth.year=1989;間接賦值:p- birth.year=1989;輸入:scanf(“%d”,& stu1. birth.year)輸出:printf(“%d”,stu1. birth.year)4.知識點: 結(jié)構(gòu)體變量與函數(shù)調(diào)用l 將一個結(jié)構(gòu)體變量的值傳遞給另一個函數(shù),有3個方法: (1)用結(jié)構(gòu)體變量的成員作參數(shù)。例如,用stu
34、1.num作實參,將值傳遞給形參。用法和用普通變量作實參是一樣的,屬于“單向值傳遞”方式。應(yīng)當(dāng)注意實參與形參的類型應(yīng)保持一致。 (2)用結(jié)構(gòu)體變量作實參。 對應(yīng)形參也是同類型結(jié)構(gòu)體變量,也屬于“單向值傳遞”方式。 (3)用指向結(jié)構(gòu)體變量(或數(shù)組)的指針作實參,將結(jié)構(gòu)體變量(或數(shù)組元素)的地址傳給形參。屬于“地址傳遞”方式,應(yīng)注意在被調(diào)用函數(shù)中是否對該地址的值有影響。5.知識點:鏈表l 當(dāng)一個結(jié)構(gòu)體中有一個或多個成員的基類型就是本結(jié)構(gòu)體類型時,通常把這種結(jié)構(gòu)體稱為可以“引用自身的結(jié)構(gòu)體”,也稱為“鏈表結(jié)構(gòu)”例如:struct link char ch; Struct link *p; a; 在此
35、,p是一個可以指向struct link類型變量的指針成員,因此,a.p=&a是合法的表達(dá)式,由此構(gòu)成的存儲結(jié)構(gòu)如圖所示。l 對鏈表進(jìn)行的操作通常有以下四種:1.建立帶有頭結(jié)點的單向鏈表2.順序訪問單向鏈表各結(jié)點數(shù)據(jù)域的值(即遍歷鏈表)struct stdint data; /*數(shù)據(jù)域*/ struct std * next; /*指針域*/;建立頭結(jié)點和數(shù)個節(jié)點,即建立以下鏈表datadatadatadatahead遍歷鏈表:p=head;while(p!=0) printf(%4d,p-data); p=p-next;datadatadatadataheadp q r3.刪除單向鏈表中的某
36、個結(jié)點刪除q指向的節(jié)點:p-next=q-next;或者p-next=r;free(p);datadatadataheadp q datar4.向單向鏈表中插入結(jié)點將r指向的節(jié)點插入p、q所指的兩個結(jié)點之間:r-next=q; 或者r-next=p-next;p-next=r;5.知識點:共用體類型定義l 共用體是一種構(gòu)造數(shù)據(jù)類型(遵循先定義類型,再定義該類型變量的原則)l 用途:使幾個不同類型的變量共占一段內(nèi)存(相互覆蓋)l 與結(jié)構(gòu)體結(jié)構(gòu)體與共用體1.區(qū)別: 存儲方式不同,結(jié)構(gòu)體變量占用的內(nèi)存單元,是其所有成員占內(nèi)存單元的總和,而共用體變量是其所有成員中占用空間最大的成員的內(nèi)存單元2.聯(lián)系:
37、 類型定義、變量定義、成員引用等操作方式相同,兩種類型可相互嵌套第六課 編譯預(yù)處理、文件本課重要知識點:1.知識點:main()函數(shù)的參數(shù)l 定義形式:main(int argc,char *argv) l int argc是命令行中的字符串?dāng)?shù),char *argv是指向字符串的指針數(shù)組,系統(tǒng)使用空格把各個字符串隔開。2.知識點:不帶參數(shù)的宏定義l 一般形式:#define 宏名 字符串(或數(shù)值)即用字符串或數(shù)值取代宏名。l 宏名一般采用大寫字母表示,以與變量名區(qū)別,也可用小寫字母。l 宏定義不是C語句,不必在行末加分號。l 對程序中用“”括起來的字符串內(nèi)的字符,即使與宏名相同,也不進(jìn)行置換。
38、l 宏定義可以嵌套使用,例如:#define R 3.0#define PI 3.14159#define L L*PI*R3.知識點:帶參數(shù)的宏定義l 一般形式:#define 宏名(參數(shù)表) 字符串l 帶參數(shù)的宏不占運(yùn)行時間,只占編譯時間;只是簡單、機(jī)械字符替換;宏名無類型。l 要注意有括號和沒括號的區(qū)別4.知識點:文件包含l 一般形式:#include 或者#include “文件名”l 與” ”的區(qū)別:即系統(tǒng)到存放C庫函數(shù)頭文件的目錄中尋找要包含的文件;” ”即系統(tǒng)先在用戶當(dāng)前目錄中尋找,若找不到,再到存放C庫函數(shù)頭文件的目錄中尋找。l 文件包含可以嵌套。l 凡是以“#”開頭的行都是預(yù)處理命令行。5.知識點:calloc()函數(shù)l 函數(shù)原型:void *calloc(unsigned n,unsigne
溫馨提示
- 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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025版能源交易居間服務(wù)合同模板3篇
- 2025年度烏龍茶批發(fā)合同茶葉定購協(xié)議書4篇
- 2025年度叉車租賃與新能源動力改造協(xié)議3篇
- 二零二五年度礦山開采安全生產(chǎn)與環(huán)境保護(hù)承諾書3篇
- 2025年度危險品運(yùn)輸承包及保險保障服務(wù)合同3篇
- 2025年度臨街雙層鋪面租賃合同書4篇
- 二零二五年度網(wǎng)絡(luò)安全責(zé)任書責(zé)任落實2篇
- 二零二四年三輪車充電樁建設(shè)與運(yùn)營合同3篇
- 二零二五年石油化工設(shè)備安裝大型吊車租賃合同2篇
- 2025年度綠化工程材料供應(yīng)合同范本4篇
- 《藥品招商營銷概論》課件
- 曙光磁盤陣列DS800-G10售前培訓(xùn)資料V1.0
- 寺廟祈?;顒臃桨?共6篇)
- 2025年病案編碼員資格證試題庫(含答案)
- 企業(yè)財務(wù)三年戰(zhàn)略規(guī)劃
- 提高膿毒性休克患者1h集束化措施落實率
- 山東省濟(jì)南市天橋區(qū)2024-2025學(xué)年八年級數(shù)學(xué)上學(xué)期期中考試試題
- 主播mcn合同模板
- 2024測繪個人年終工作總結(jié)
- DB11 637-2015 房屋結(jié)構(gòu)綜合安全性鑒定標(biāo)準(zhǔn)
- 制造業(yè)生產(chǎn)流程作業(yè)指導(dǎo)書
評論
0/150
提交評論