版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
C程式設(shè)計(jì)
第1章C語(yǔ)言概述
“高級(jí)語(yǔ)言”組合語(yǔ)言:優(yōu)點(diǎn):可以充分發(fā)揮機(jī)器硬體的功能,並提高品質(zhì)。缺點(diǎn):必須熟悉機(jī)器的指令系統(tǒng),而指令系統(tǒng)又是和具體機(jī)器的內(nèi)部結(jié)構(gòu)密切相關(guān)的,所以所編寫(xiě)的程式依賴(lài)於電腦硬體,可讀性和可移植性比較差。一般高級(jí)語(yǔ)言:優(yōu)點(diǎn):可讀性和可移植性比較好。缺點(diǎn):難以對(duì)硬體進(jìn)行操作,如記憶體地址、位操作等。
1.1介紹:
C語(yǔ)言:具有一般高級(jí)語(yǔ)言的特性,也具有組合語(yǔ)言的優(yōu)點(diǎn),所以有人稱(chēng)為“中級(jí)語(yǔ)言”高級(jí)語(yǔ)言有的:高級(jí)語(yǔ)言沒(méi)有的:
算術(shù)運(yùn)算關(guān)係運(yùn)算邏輯運(yùn)算
位運(yùn)算單目、三目運(yùn)算複合運(yùn)算
1、語(yǔ)言簡(jiǎn)潔、緊湊,使用方便、靈活。32個(gè)關(guān)鍵字、9種控制語(yǔ)句。
2、運(yùn)算符豐富34種運(yùn)算符
3、數(shù)據(jù)類(lèi)型和數(shù)據(jù)結(jié)構(gòu)豐富?;绢?lèi)型(整型、字元型、實(shí)型)構(gòu)造類(lèi)型(數(shù)組、結(jié)構(gòu)體、共用體)指針、檔、空類(lèi)型數(shù)據(jù)結(jié)構(gòu)(鏈、表、樹(shù)、棧等)1.2C語(yǔ)言的特點(diǎn)
4、具有結(jié)構(gòu)化控制語(yǔ)句
5、語(yǔ)法不嚴(yán)格鬆散結(jié)構(gòu),即語(yǔ)法檢查不嚴(yán)格,編程時(shí)必須控制好。
6、C語(yǔ)言允許直接訪問(wèn)物理地址,能進(jìn)行位操作。
7、目標(biāo)代碼品質(zhì)高,程式執(zhí)行效率高。
8、輸入輸出採(cǎi)用函數(shù)而無(wú)輸入輸出語(yǔ)句,可移植性好1.3用C庫(kù)函數(shù)組裝程式
用庫(kù)函數(shù)必須注意包含相應(yīng)的頭檔
#include<stdio.h>#include<math.h>#include<string.h>1.4
程式格式和特點(diǎn)1、main()函數(shù)必須有且唯一
2、函數(shù)是C語(yǔ)言程式的基本單位3、大小寫(xiě)敏感4、無(wú)行概念(1)、語(yǔ)句以分號(hào)結(jié)束
(2)、以#號(hào)開(kāi)頭的編譯預(yù)處理語(yǔ)句無(wú)分號(hào)(3)、/*…*/加在C語(yǔ)言任何部分作注釋說(shuō)明採(cǎi)用小寫(xiě),大寫(xiě)有特殊意義(宏,常量等)1.5
程式執(zhí)行從main函數(shù)開(kāi)始
TurboC是一個(gè)集成環(huán)境,編輯、編譯、連接、執(zhí)行。1、根源程式擴(kuò)展名.c2、TurboC的使用
TC
選擇工作目錄建立工作環(huán)境建立工作環(huán)境F9編譯、連接。運(yùn)行Alt+R.3、建立工作環(huán)境例題例1-例3講解、說(shuō)明上機(jī)題:1、建立一個(gè)自己的工作環(huán)境2、熟悉TurboC環(huán)境3、輸入並調(diào)試運(yùn)行例1-例34、自己編寫(xiě)C程式習(xí)題1.5、1.6第2章數(shù)據(jù)描述和基本操作
程式
2.1C的數(shù)據(jù)類(lèi)型:對(duì)數(shù)據(jù)的描述(數(shù)據(jù)結(jié)構(gòu))對(duì)操作的描述(演算法)1、不同的數(shù)據(jù)佔(zhàn)用的空間不同2、對(duì)應(yīng)的運(yùn)算不同數(shù)據(jù)類(lèi)型(P38)2.2基本數(shù)據(jù)類(lèi)型:1、整型
shout2位元組int
機(jī)器字長(zhǎng)(2位元組)-215~(215-1)long
4位元組2、無(wú)符號(hào)類(lèi)型只對(duì)整型;也包含字元型,存放正數(shù)的範(fàn)圍擴(kuò)大一倍Unsigned整型x;2.2基本數(shù)據(jù)類(lèi)型:3、實(shí)型
float單精確度4位元組double
雙精度8位元組longdouble長(zhǎng)雙精度16位元組2.2基本數(shù)據(jù)類(lèi)型:4、字元型存貯形式,按ASCII碼值;占一位元組;與整型通用,相當(dāng)一個(gè)位元組整數(shù)。
2.2基本數(shù)據(jù)類(lèi)型:5、類(lèi)型長(zhǎng)度運(yùn)算符sizeof(類(lèi)型)用途:測(cè)試動(dòng)態(tài)分配存貯空間
例如A=sizeof(int);2.3常量和變數(shù):1、常量(1)、數(shù)值常量整型常量實(shí)型常量十進(jìn)位自然表示八進(jìn)制零打頭十六進(jìn)制ox打頭指數(shù)形式E(e)前面有數(shù),後面是整數(shù)小數(shù)形式.必須有“.”(2)、字元型常量用單引號(hào)包圍的單一字元‘a(chǎn)’‘A’字元常量沒(méi)有結(jié)束標(biāo)誌(3)、字串型常量用雙引號(hào)包圍的0個(gè)或多個(gè)字元序列“china”有結(jié)束標(biāo)誌(4)、特殊常量(一)符號(hào)常量如:宏定義#definePI3.14(二)轉(zhuǎn)義字元(換碼序列)\字母表示動(dòng)作見(jiàn)P(48)2、變數(shù)(1)、變數(shù)的定義intx,y;先定義每個(gè)變數(shù)被指定為一確定類(lèi)型便於編譯系統(tǒng)檢查如a%b(2)、變數(shù)識(shí)別字
C語(yǔ)言規(guī)定識(shí)別字只能由字母、數(shù)字和下劃線三種字元組成,且第一個(gè)字元必須是字母或下劃線。用來(lái)標(biāo)識(shí)變數(shù)名、符號(hào)常量名、函數(shù)名、數(shù)組名、類(lèi)型名、檔案名的有效字元序列。保留關(guān)鍵字預(yù)定義識(shí)別字用戶(hù)自定義(3)、變數(shù)的初始化定義變數(shù)的同時(shí)給變數(shù)賦值如:
intx=3,y=5;2.4運(yùn)算式運(yùn)算:1、說(shuō)明例如運(yùn)算式b=(a=x)*5運(yùn)算符的功能與運(yùn)算量的關(guān)係優(yōu)先順序結(jié)合方向結(jié)果類(lèi)型2、算術(shù)運(yùn)算符雙目運(yùn)算符5%3=2
-5%3=?5%-3=?+、-、*、/、%(模運(yùn)算符或求餘運(yùn)算符)a%b這裏a、b必須是整型數(shù)5/3=1-5/3=-1(-2)舍入的方向不因定,“向零取整原則”符號(hào)同左邊的運(yùn)算元3、算術(shù)運(yùn)算式用算術(shù)運(yùn)算符和括弧將運(yùn)算對(duì)象(也稱(chēng)運(yùn)算元)連接起來(lái),符合C語(yǔ)法規(guī)則的式子稱(chēng)C算術(shù)運(yùn)算式。如:a*b/c-1.5+’a’同級(jí)時(shí)“從左到右”的結(jié)合原則4、複合的賦值運(yùn)算
+=、-=、*=、/=、%=、<<=、>>=、&=、^=、|=只要有賦值號(hào)優(yōu)先順序較低,只比逗號(hào)運(yùn)算符高如:a+=ba=a+b累加器,注意a一定是變數(shù)b可以是運(yùn)算式或變數(shù),結(jié)合規(guī)律從右到左A+=3a=a+3X*=y+8x=x*(y+8)5、自增減運(yùn)算
++、--a++,++a自增a=a+1a--,--a自減a=a-1後置運(yùn)算、前置運(yùn)算只能用於變數(shù),不能用於常量或運(yùn)算式;結(jié)合方向是從右至左6、關(guān)係運(yùn)算
<
<=
>
>=
==
!=If(x==y)真(非0為真)假(0為假)7、邏輯運(yùn)算&&(與)||(或)?。ǚ牵?)實(shí)型數(shù)不比較相等的1.0/3.0*3.0==1.0x=-y<ε就是小到一定形式就行了
ε=10-6或ε=10-8e1?e2:e3(e為運(yùn)算式)8、條件運(yùn)算(三目)3+3,6+8逗號(hào)運(yùn)算式,又稱(chēng)順序求值運(yùn)算符9、逗號(hào)運(yùn)算符和逗號(hào)運(yùn)算式2.5類(lèi)型轉(zhuǎn)換:1、隱式轉(zhuǎn)換(1)必然轉(zhuǎn)換(2)由低向高轉(zhuǎn)換,一次到位轉(zhuǎn)換P54(3)賦值轉(zhuǎn)換2、顯示轉(zhuǎn)換強(qiáng)制類(lèi)型運(yùn)算(類(lèi)型)第3章簡(jiǎn)單的C程式設(shè)計(jì)
-順序結(jié)構(gòu)3.1C語(yǔ)句:1、運(yùn)算式語(yǔ)句2、控制語(yǔ)句3、函數(shù)調(diào)用語(yǔ)句4、空語(yǔ)句5、複合語(yǔ)句3.2格式化輸入輸出函數(shù):(一)、格式輸出Printf(“格式控制”,輸出項(xiàng)序列);(二)、格式輸入scanf(“格式控制”,地址序列);3.3字元輸入輸出函數(shù):(一)、輸入字元getchar()(二)、輸出一個(gè)字元Putchar(c);3.4順序結(jié)構(gòu)程式設(shè)計(jì)舉例第4章邏輯運(yùn)算和判斷選取控制4.1條件分支:1、if語(yǔ)句的三種形式(1)、if(運(yùn)算式)語(yǔ)句(2)、if(運(yùn)算式)語(yǔ)句1;
else語(yǔ)句2;(3)if(運(yùn)算式1)語(yǔ)句1;
elseif(運(yùn)算式2)語(yǔ)句2;
elseif(運(yùn)算式3)語(yǔ)句3;
……if語(yǔ)句的說(shuō)明:(1)運(yùn)算式一般為邏輯運(yùn)算式或關(guān)係運(yùn)算式,但可以是任意運(yùn)算式,是任意的數(shù)值類(lèi)型(整型、實(shí)型、字元型、指針型數(shù)據(jù))(2)else前面的分號(hào)不可缺少,它是if語(yǔ)句內(nèi)嵌語(yǔ)句所要求的,缺少時(shí)語(yǔ)法錯(cuò)誤。(3)if和else後面可以是一個(gè)操作語(yǔ)句,也可以是多個(gè)操作語(yǔ)句,若為多個(gè)語(yǔ)句必須用複合語(yǔ)句。2、if語(yǔ)句的嵌套:if語(yǔ)句中又包含一個(gè)或多個(gè)if語(yǔ)句。if(運(yùn)算式1)
if(運(yùn)算式2)語(yǔ)句1;
else語(yǔ)句2;elseif(運(yùn)算式3)語(yǔ)句3;
else語(yǔ)句4;3、條件運(yùn)算符:
在if語(yǔ)句中執(zhí)行一個(gè)賦值語(yǔ)句且給同一個(gè)變數(shù)。(1)條件運(yùn)算符?:(2)條件運(yùn)算符優(yōu)先於賦值運(yùn)算符,低於關(guān)係運(yùn)算符和算術(shù)運(yùn)算符。(3)條件運(yùn)算符的結(jié)合方向“從右至左”(4)條件運(yùn)算符不能取代一般的if語(yǔ)句(5)運(yùn)算式1的類(lèi)型可以與運(yùn)算式2和運(yùn)算式3的類(lèi)型不同。4.2開(kāi)關(guān)分支switch語(yǔ)句:是多分支選擇語(yǔ)句格式:Switch(運(yùn)算式){case判斷值1:語(yǔ)句組1;break;case判斷值2:語(yǔ)句組2;break;……default:語(yǔ)句組n;break;}switch語(yǔ)句的說(shuō)明:(1)switch後面的運(yùn)算式應(yīng)是整型、字元型或是枚舉。(2)若運(yùn)算式的值與某個(gè)case後面的判斷值相等時(shí)就執(zhí)行case後面的語(yǔ)句組,沒(méi)有匹配值時(shí)執(zhí)行default後面的語(yǔ)句組。(3)case後面的判斷值不能重複。(4)case和default出現(xiàn)的次序不影響執(zhí)行結(jié)果。(5)執(zhí)行完一個(gè)case後面的語(yǔ)句,則轉(zhuǎn)到下一個(gè)case繼續(xù)執(zhí)行,所以必須用break語(yǔ)句跳出。第5章迴圈控制5.1迴圈結(jié)構(gòu):迴圈結(jié)構(gòu)是結(jié)構(gòu)化程式設(shè)計(jì)的三種基本結(jié)構(gòu)之一(1)當(dāng)型迴圈結(jié)構(gòu),當(dāng)條件成立時(shí)反復(fù)執(zhí)行操作,直到條件為假時(shí)才停止迴圈。(2)直到型迴圈結(jié)構(gòu):先執(zhí)行操作,再判斷條件是否為假,若條件為假,再執(zhí)行。如此反復(fù),直到條件為真為止。5.2C語(yǔ)言中迴圈語(yǔ)句:1.while2.for3.do……while當(dāng)型迴圈,先判斷後執(zhí)行直到型迴圈,先執(zhí)行後判斷1.while和do……while語(yǔ)句(1)while(條件)
{
語(yǔ)句;
}如:
1.while和do……while語(yǔ)句(2)do{
語(yǔ)句;
}while(條件);如:
需要注意:
(1)迴圈前的初始值(2)循環(huán)體內(nèi)必須改變迴圈條件,使其趨於結(jié)束(3)循環(huán)體如果包含一個(gè)以上語(yǔ)句,應(yīng)以複合語(yǔ)句出現(xiàn)(4)當(dāng)while後面的運(yùn)算式第一次值為真時(shí),二者等價(jià),否則二者不同。迴圈次數(shù)不確定,只給結(jié)束條件。2.for語(yǔ)句“靈活”—迴圈次數(shù)確定或不確定(只給結(jié)束條件)for(初值運(yùn)算式;條件;修正運(yùn)算式){
語(yǔ)句;}如:
s=0;for(i=1;i<=100;i++)s+=i;for語(yǔ)句的說(shuō)明:(1)條件為真,則執(zhí)行for語(yǔ)句中指定的內(nèi)嵌語(yǔ)句(2)初值運(yùn)算式和修正運(yùn)算式可以是逗號(hào)運(yùn)算式(3)e1,e2,e3均可缺少,但分號(hào)保留(4)可以取代while語(yǔ)句(5)初值運(yùn)算式可以和迴圈變數(shù)無(wú)關(guān)5.3輔助控制:1.break語(yǔ)句
(1)跳出switch結(jié)構(gòu)
(2)用於循環(huán)體內(nèi),結(jié)束本層迴圈,一次退出一層迴圈2.continue語(yǔ)句
僅用於循環(huán)體內(nèi),使本次迴圈結(jié)束3.goto語(yǔ)句
goto
語(yǔ)句標(biāo)號(hào);標(biāo)號(hào):用識(shí)別字表示,規(guī)則同變數(shù)退出多重迴圈,從內(nèi)到外5.4迴圈的嵌套:一個(gè)循環(huán)體內(nèi)又包含另一個(gè)完整的迴圈結(jié)構(gòu)三種迴圈結(jié)構(gòu)可以互相嵌套。例題分析:例題分析:例1輸入字元顯示之。#include<stdio.h>Main(){charc;while((c=getchar())!=EOF)
putchar(c);}例題分析:例2列印ASCII碼0-255的字元。第6章數(shù)組6.1一維數(shù)組的定義和引用:1定義類(lèi)型說(shuō)明符數(shù)組名[常量運(yùn)算式]
如inta[10];說(shuō)明:(1)數(shù)組名(2)用方括號(hào)(3)數(shù)組長(zhǎng)度,元素個(gè)數(shù)(4)不能含變數(shù)數(shù)組:是有序數(shù)據(jù)的集合,數(shù)組中的元素應(yīng)是同一類(lèi)型。2引用先定義,後使用的原則C規(guī)定:逐個(gè)引用數(shù)組元素,不能一次引用整個(gè)數(shù)組數(shù)組元素的表示形式:數(shù)組名[下標(biāo)]規(guī)定:下標(biāo)是整型常量或整型運(yùn)算式如a[5]或a[2*3]等3初始化(1)在定義數(shù)組時(shí)對(duì)數(shù)組元素賦以初值規(guī)定:只有靜態(tài)存貯數(shù)組和外部存貯數(shù)組才能初始化
static---靜態(tài)extern---外部(2)只給部分元素賦值(3)使數(shù)組中全部元素為0
(4)在對(duì)全部數(shù)組元素初始化時(shí),可以不指定數(shù)組長(zhǎng)度。6.2二維數(shù)組的定義和引用:1定義類(lèi)型說(shuō)明符數(shù)組名[常量運(yùn)算式][常量運(yùn)算式]
如inta[3][4];是特殊的一維數(shù)組存貯順序:按行存貯,多維數(shù)組同理2引用數(shù)組元素的表示形式:數(shù)組名[下標(biāo)][下標(biāo)]
如a[0][0]或a[0][1]等3初始化6.3字元數(shù)組:用來(lái)存放字元數(shù)據(jù)的數(shù)組是字元數(shù)組,字元數(shù)組中每個(gè)元素存放一個(gè)字元。1定義類(lèi)型說(shuō)明符數(shù)組名[常量運(yùn)算式]
如:chara[10];
inta[10];2初始化staticcharc[5]={‘c’,’h’,’i’,’n’,’a’};注(1)如果字元個(gè)數(shù)大於數(shù)組長(zhǎng)度則語(yǔ)法錯(cuò)(2)如果字元個(gè)數(shù)小於數(shù)組長(zhǎng)度則將字元賦給數(shù)組前面的元素,其餘元素為空格(3)字元個(gè)數(shù)等於數(shù)組長(zhǎng)度時(shí)可以省略數(shù)組長(zhǎng)度3引用可以引用字元數(shù)組中的一個(gè)元素,得到一個(gè)字元。4字串和字串結(jié)束標(biāo)誌字元數(shù)組長(zhǎng)度:實(shí)際長(zhǎng)度\0;有效長(zhǎng)度字串結(jié)束標(biāo)誌‘\0’表示“china”共有5個(gè)字元,但占6個(gè)位元組可以用字符串常量來(lái)初始化字元數(shù)組Staticcharc[]={“china”};也可寫(xiě)成staticcharc[]=“china”;
在C中將字串作為字元數(shù)組來(lái)處理,為了測(cè)定字串的實(shí)際長(zhǎng)度‘\0’作為結(jié)束標(biāo)誌。5字元數(shù)組輸入、輸出(1)getchar()/putchar()(2)用格式符%c輸入、輸出(3)將整個(gè)字串一次輸入、輸出,用格式符%s如Staticcharc[]=“china”;Printf(“%s”,c);注(1)輸出字元不包括結(jié)束符\0;
(2)用%s時(shí)輸出項(xiàng)是數(shù)組名;
(3)長(zhǎng)度大於實(shí)際長(zhǎng)度時(shí)也到、\0結(jié)束;
(4)用scanf函數(shù)輸入一個(gè)字串,利用一個(gè)scanf函數(shù)輸入多個(gè)字串時(shí),以空格分隔。
staticcharc[6];
scanf(“%s”,c);
printf(“%s”,c);所以一維字元數(shù)組可以看作是“字串變數(shù)”6字串輸入、輸出(1)gets(str)
輸入一個(gè)字串到字元數(shù)組(2)puts(str)
可以包含轉(zhuǎn)義字元,如’\0’,’\n’等7字串函數(shù)#include<string.h>(1)拷貝strcpy(str1,str2);
目的源注:str1長(zhǎng)度≥str2長(zhǎng)度str1是數(shù)組名形式,str2可以是字串常量,不能用賦值語(yǔ)句將字串常量或字元數(shù)組賦給一個(gè)字元數(shù)組。如:str1={“china”};str1=str2;(2)字串連接
strcat(str1,str2);
目的源注:作用是把字元2連到字元1後面,結(jié)果放在字元數(shù)組1中,所以字元數(shù)組1必須足夠大,初始化時(shí)不能省略長(zhǎng)度;連接時(shí)第一個(gè)\0取消。(3)字串比較strcmp(str1,str2);(4)測(cè)試字串長(zhǎng)度函數(shù)strlen(str)(5)將字串中大寫(xiě)字母轉(zhuǎn)成小寫(xiě)字母函數(shù)strlwr(str)(6)將字串中小寫(xiě)字母轉(zhuǎn)成大寫(xiě)字母函數(shù)strupr(str)
第8章模組化程式設(shè)計(jì)8.1函數(shù)定義:在C中子程式的作用是由函數(shù)來(lái)完成的,使用的角度函數(shù)有兩種(1)系統(tǒng)函數(shù)(2)用戶(hù)定義函數(shù);從函數(shù)的形式上分(1)無(wú)參函數(shù)(2)有參函數(shù)格式:函數(shù)類(lèi)型函數(shù)名(形式參數(shù))
{
函數(shù)體;
}模組化設(shè)計(jì);結(jié)構(gòu)化編程。說(shuō)明:
函數(shù)類(lèi)型---返回值的類(lèi)型如:floataver(成績(jī)表)
void---無(wú)返值main()就應(yīng)是void類(lèi)型默認(rèn)時(shí)為int型形參:(inta,intb,……,floatr)
或(a,b,……,r)
inta,b;floatr;
函數(shù)類(lèi)型函數(shù)名()
{}稱(chēng)為“空函數(shù)”8.2函數(shù)參數(shù)和函數(shù)值:1、形式參數(shù)和實(shí)際參數(shù)定義函數(shù)時(shí)函數(shù)名後面括弧中的變數(shù)—形參調(diào)用函數(shù)時(shí)函數(shù)名後面括弧中的運(yùn)算式—實(shí)參通過(guò)函數(shù)調(diào)用使兩個(gè)函數(shù)中的數(shù)據(jù)發(fā)生聯(lián)繫說(shuō)明:(1)形參變數(shù)在函數(shù)調(diào)用前無(wú)分配存貯空間(2)實(shí)參可以是常量、變數(shù)、運(yùn)算式或數(shù)組名(3)在被定義的函數(shù)中,必須指定形參類(lèi)型(4)實(shí)參和形參類(lèi)型應(yīng)一致,否則類(lèi)型不匹配錯(cuò)誤(5)形參和實(shí)參間的傳遞是單向的“值傳遞”,不同單元。2、函數(shù)的返值(1)函數(shù)的返值是通過(guò)return語(yǔ)句獲得的,return後面可以是一個(gè)運(yùn)算式。(2)函數(shù)值的類(lèi)型,在定義函數(shù)時(shí)指定函數(shù)值類(lèi)型,如果不指定,按整型處理,函數(shù)類(lèi)型決定返值類(lèi)型。(3)如果被調(diào)函數(shù)中沒(méi)有return語(yǔ)句,則返值不確定。(4)如果不帶回值,應(yīng)將函數(shù)定義為void類(lèi)型。8.3函數(shù)的調(diào)用:1、函數(shù)調(diào)用的一般形式函數(shù)名(實(shí)參表列);說(shuō)明:對(duì)實(shí)參表的求值順序並不是確定的,一般是從右至左,這種情況在printf函數(shù)中也同樣存在如:i=2;Printf(“%d%d\n”,i,++i);結(jié)果:332、函數(shù)的調(diào)用方式函數(shù)在程式中出現(xiàn)的位置;(1)函數(shù)語(yǔ)句(2)函數(shù)運(yùn)算式(3)函數(shù)參數(shù)3、被調(diào)函數(shù)的說(shuō)明在一個(gè)函數(shù)中調(diào)用另一個(gè)函數(shù)所具備的條件是:(1)被調(diào)函數(shù)是已經(jīng)存在的函數(shù)(庫(kù)函數(shù)、自定義)(2)如果是庫(kù)函數(shù)則#include命令相關(guān)頭檔(3)如果是用戶(hù)自定義函數(shù),在主調(diào)函數(shù)中對(duì)被調(diào)函數(shù)聲明:函數(shù)類(lèi)型函數(shù)名(參數(shù)表);特例:(1)函數(shù)的返值是整型或字元型(2)被調(diào)函數(shù)的定義在主調(diào)函數(shù)之前(3)在所有函數(shù)定義之前,說(shuō)明了函數(shù)類(lèi)型8.4函數(shù)的嵌套調(diào)用:關(guān)係:自身可調(diào)用,相互之間可調(diào)用,即在調(diào)用一個(gè)函數(shù)的過(guò)程中,又調(diào)用另一個(gè)函數(shù)。如圖8.5函數(shù)1函數(shù)2函數(shù)3例8.6P1558.5函數(shù)的遞歸調(diào)用:1、直接遞歸2、間接遞歸函數(shù)A函數(shù)A函數(shù)B8.6數(shù)組作為函數(shù)參數(shù):數(shù)組元素作參數(shù)同變數(shù)相同,數(shù)組名作為參數(shù)時(shí)傳遞整個(gè)數(shù)組。當(dāng)用數(shù)組名作函數(shù)參數(shù)時(shí),實(shí)參和形參都應(yīng)用數(shù)組名(或指針變數(shù))。例8.11P165說(shuō)明(1)主調(diào)函數(shù)和被調(diào)函數(shù)分別定義數(shù)組(2)實(shí)參數(shù)組和形參數(shù)組類(lèi)型應(yīng)一致(3)實(shí)參數(shù)組和形參數(shù)組大小可以不一致,C編譯對(duì)形參數(shù)組大小不作檢查,只是將實(shí)參首址傳遞給形參數(shù)組。如:例8.12(4)不是“傳值”而是“傳址”例:8.13(5)也可以用多維數(shù)組名作函數(shù)參數(shù),同上。例:8.148.7局部變數(shù)和全局變數(shù):
1、局部變數(shù)在函數(shù)內(nèi)定義的變數(shù)例:floatf1(inta){
intb,c;
…….}說(shuō)明(1)主函數(shù)main中定義的變數(shù)只在主函數(shù)中有效(2)不同函數(shù)中可以使用相同的變數(shù)(3)形參也是局部變數(shù)(4)在一個(gè)函數(shù)內(nèi)部,可以在複合語(yǔ)句中定義變數(shù),這些變數(shù)只在複合語(yǔ)句中有效,離開(kāi)複合語(yǔ)句該變數(shù)就無(wú)效。8.7局部變數(shù)和全局變數(shù):
2、全局變數(shù)在函數(shù)之外定義的變數(shù)稱(chēng)為外部變數(shù),外部變數(shù)是全局變數(shù),全局變數(shù)可以為本文件中其他函數(shù)所共用,它的有效範(fàn)圍為“從定義的位置開(kāi)始到檔結(jié)束”。例:8.15說(shuō)明(1)設(shè)全局變數(shù)的作用是增加了函數(shù)間數(shù)據(jù)聯(lián)繫,可以從函數(shù)得到一個(gè)以上的返值,是“雙向傳遞的”。(2)不要輕易使用全局變數(shù)在程式執(zhí)行過(guò)程中都佔(zhàn)用存貯單元;通用性降低;不清晰。(3)在定義點(diǎn)之前引用外部變數(shù)要用關(guān)鍵字extern作“外部變數(shù)說(shuō)明”(4)在同一原始檔案中,外部變數(shù)與局部變數(shù)同名,則在局部變數(shù)的作用範(fàn)圍內(nèi),外部變數(shù)不起作用。8.8動(dòng)態(tài)存貯變數(shù)與靜態(tài)存貯變數(shù):
1、變數(shù)的存貯類(lèi)別以上是從變數(shù)的作用域角度分;從變數(shù)值生存期角度分靜態(tài)存貯變數(shù)和動(dòng)態(tài)存貯變數(shù)。靜態(tài)存貯區(qū)存放:全局變數(shù)動(dòng)態(tài)存貯區(qū)存放:(1)函數(shù)形參變數(shù)(2)局部變數(shù)(未加static說(shuō)明的)(3)函數(shù)調(diào)用時(shí)的現(xiàn)場(chǎng)保護(hù)和返回地址程式區(qū)靜態(tài)存貯區(qū)動(dòng)態(tài)存貯區(qū)用戶(hù)區(qū)說(shuō)明C語(yǔ)言中每個(gè)變數(shù)和函數(shù)有兩個(gè)屬性,數(shù)據(jù)類(lèi)型和數(shù)據(jù)存貯類(lèi)別,一般形式。存貯類(lèi)別數(shù)據(jù)類(lèi)型變數(shù)表;存貯類(lèi)別:auto(隱含)自動(dòng)
static
靜態(tài)
register寄存器
extern外部8.8動(dòng)態(tài)存貯變數(shù)與靜態(tài)存貯變數(shù):
2、局部變數(shù)的存貯方式(1)不作專(zhuān)門(mén)說(shuō)明都是動(dòng)態(tài)分配存貯空間的,存貯在動(dòng)態(tài)存貯區(qū)中,編譯系統(tǒng)自動(dòng)處理。(2)有時(shí)希望函數(shù)中的局部變數(shù)值在函數(shù)調(diào)用結(jié)束後不消失這時(shí)就應(yīng)該指定該局部變數(shù)為“局部靜態(tài)變數(shù)”用static說(shuō)明例8.17P174
說(shuō)明C語(yǔ)言中每個(gè)變數(shù)和函數(shù)有兩個(gè)屬性,數(shù)據(jù)類(lèi)型和數(shù)據(jù)存貯類(lèi)別,一般形式。存貯類(lèi)別數(shù)據(jù)類(lèi)型變數(shù)表;存貯類(lèi)別:auto(隱含)自動(dòng)
static
靜態(tài)
register寄存器
extern外部局部靜態(tài)主變數(shù)說(shuō)明(1)局部靜態(tài)變數(shù)屬於靜態(tài)存貯類(lèi)別,在靜態(tài)存貯區(qū)內(nèi)分配,存貯單元在程式整個(gè)運(yùn)行期間都不釋放(2)在編譯時(shí)賦初值,只賦初值一次,並保留上次函數(shù)調(diào)用時(shí)的值(3)不賦值時(shí)編譯時(shí)自動(dòng)賦初值勤0(4)C規(guī)定只有全局變數(shù)和局部靜態(tài)變數(shù)時(shí)才能對(duì)數(shù)組初始化(5)局部靜態(tài)變數(shù)在函數(shù)調(diào)用結(jié)束後仍然存在,但其他函數(shù)是不能引用它的(6)對(duì)使用頻繁的局部自動(dòng)變數(shù)或形參,可以作為寄存器變數(shù),用關(guān)鍵字register說(shuō)明例8.19
(7)全局變數(shù)和局部靜態(tài)變數(shù)不能定義為寄存器變數(shù)8.8動(dòng)態(tài)存貯變數(shù)與靜態(tài)存貯變數(shù):
3、全局變數(shù)的存貯方式(1)允許其他檔中的函數(shù)引用(2)只能被本文件中的函數(shù)引用時(shí),用static說(shuō)明例staticinta;
存貯類(lèi)別小結(jié):P180
8.9內(nèi)部函數(shù)和外部函數(shù)
1、內(nèi)部函數(shù)函數(shù)只能被本文件中其他函數(shù)所調(diào)用。
staticintfun(inta,intb)2、外部函數(shù)
externintfun(inta,intb)
屬於“隱含”例8.22
3、如何運(yùn)行一個(gè)多檔的程式建立一個(gè)“專(zhuān)案檔”
第9章預(yù)處理命令
區(qū)別於其他高級(jí)語(yǔ)言:三種預(yù)處理功能宏定義檔包含條件編譯用命令來(lái)實(shí)現(xiàn)用命令來(lái)實(shí)現(xiàn)並用“#”開(kāi)頭
9.1宏定義用一個(gè)指定的識(shí)別字來(lái)代表一個(gè)字串
1、不帶參數(shù)的宏定義命令的一般形式#define識(shí)別字(宏名)字串如#definePI3.1415929在預(yù)編譯時(shí),將程式中出現(xiàn)的宏名進(jìn)行宏展開(kāi)。說(shuō)明:P1882、帶參數(shù)的宏定義(1)命令的一般形式#define宏名(形參表)字串(2)帶參數(shù)的宏展開(kāi)預(yù)編譯時(shí)遇到帶實(shí)參的宏名時(shí),則按命令行指定的字串從左到右進(jìn)行置換,原則是:遇形參則以實(shí)參代替,非形參字元原樣保留,從而形成展開(kāi)後的內(nèi)容。說(shuō)明P1902、帶參數(shù)的宏定義(1)命令的一般形式#define宏名(形參表)字串(2)帶參數(shù)的宏展開(kāi)預(yù)編譯時(shí)遇到帶實(shí)參的宏名時(shí),則按命令行指定的字串從左到右進(jìn)行置換,原則是:遇形參則以實(shí)參代替,非形參字元原樣保留,從而形成展開(kāi)後的內(nèi)容。說(shuō)明P190(3)宏名的作用域是從宏名定義命令後到本文件結(jié)束,可用#undef
終止宏名的作用域如#undef
宏名(4)宏定義中可以引用已定義過(guò)的宏名(5)程式中雙引號(hào)括起的字串的內(nèi)容若有與宏名相同的子串時(shí),一般不進(jìn)行宏展開(kāi)。
9.2檔包含1、命令的一般形式#include“檔案名”或#include<檔案名>說(shuō)明(1)檔案名應(yīng)是C語(yǔ)言的原始檔案名,該原始檔案可以是系統(tǒng)提供,也可以是用戶(hù)編寫(xiě)。頭檔、標(biāo)題檔.h或.c
9.2檔包含(2)“”和<>的區(qū)別(3)一條include命令只能指定一個(gè)被包含的檔2、檔包含的處理預(yù)編譯時(shí),將被包含檔的內(nèi)容全部複製到包含檔中,檔包含可以是嵌套的。
9.3條件編譯1、#ifdef
識(shí)別字程式段1#else
程式段2#endif當(dāng)指定識(shí)別字已經(jīng)被定義過(guò),則對(duì)程式段1進(jìn)行編譯,否則編譯程序段2
9.3條件編譯2、#ifndef
識(shí)別字程式段1#else
程式段2#endif當(dāng)指定識(shí)別字未被定義過(guò),則對(duì)程式段1進(jìn)行編譯,否則編譯程序段2
9.3條件編譯3、#if運(yùn)算式程式段1#else
程式段2#endif當(dāng)運(yùn)算式的值為“真”(非零)時(shí),編譯程序段1,否則編譯程序段2
說(shuō)明(1)以上的“程式段”可以含語(yǔ)句和命令行(2)“識(shí)別字”一般是用#define命令定義(3)其中的#else部分可以沒(méi)有第10章指針
有利於設(shè)計(jì)系統(tǒng)軟體特點(diǎn):表示複雜的數(shù)據(jù)結(jié)構(gòu);能動(dòng)態(tài)分配記憶體;能方便地使用字串;有效方便地使用數(shù)組;調(diào)用函數(shù)時(shí)得到多於1個(gè)的值;能直接處理記憶體地址。10.1指針的概念一個(gè)變數(shù)的地址稱(chēng)為該變數(shù)的“指針”一個(gè)變數(shù)存放另一個(gè)變數(shù)的地址(指針)則它是指針變數(shù)10.2變數(shù)的指針和指向變數(shù)的指針變數(shù)變數(shù)的“指針”就是變數(shù)的地址“*”--指向p是指針變數(shù)*p是p指向的變數(shù)如i=3;p=&i;一、指針變數(shù)的定義int
i,j;int*p1,*p2;指針變數(shù)定義的一般形式類(lèi)型識(shí)別字*識(shí)別字;如:float*p3;char*p4;二、指針變數(shù)的引用(1)&取地址運(yùn)算符(2)*指針運(yùn)算符(間接訪問(wèn)運(yùn)算符)&a變數(shù)a的地址*p指針變數(shù)p所指向的變數(shù)三、指針變數(shù)作為函數(shù)參數(shù)運(yùn)用指針變數(shù)作參數(shù),可以得到多個(gè)變化的值10.3數(shù)組的指針和指向數(shù)組的指針變數(shù)數(shù)組的“指針”就是數(shù)組的起始地址。
數(shù)組元素的指針是指數(shù)組元素的地址,引用數(shù)組元素可以用下標(biāo)法(如a[3])也可以用指針?lè)ǎ赐ㄟ^(guò)指向數(shù)組元素的指針找到所需的元素。使用指針?lè)苁鼓繕?biāo)程式品質(zhì)高(占記憶體少,運(yùn)行速度快)一、一維數(shù)組和指針指向數(shù)組元素的指針變數(shù)的定義與賦值inta[10];int*p;p=&a[0];或p=a;在定義變數(shù)時(shí)可以賦給初值
int*p=&a[0];或
*p=a;說(shuō)明:1、一維數(shù)組和數(shù)組元素的地址數(shù)組名代表該數(shù)組的首地址,(數(shù)組中第一個(gè)元素的地址)例如inta[10],*p;則p=a和p=&a[0]是等價(jià)的
p=a+1和p=&a[1]等價(jià)
……p=a+i和p=&a[i]等價(jià)2、通過(guò)一維數(shù)組名所代表的地址引用數(shù)組元素?cái)?shù)組名代表該數(shù)組的首地址,(數(shù)組中第一個(gè)元素的地址)*(a+i)代表第i個(gè)元素,即a[i]3、通過(guò)指針引用數(shù)組元素例inta[10],*p;若p=a;或p=&a[0];則p+i代表a數(shù)組第i個(gè)元素的地址,*(p+i)代表第i個(gè)元素a[i]4、通過(guò)帶下標(biāo)的指針引用數(shù)組元素*(p+i)可以寫(xiě)成p[i]綜上所述:在p=a的條件下,對(duì)a[i]數(shù)組元素的引用方式可以是:*(a+i);*(p+i);p[i];注意:
1、a和a[0]具有不同含義,前者是一個(gè)地址常量,是存貯單元a[0]的地址;而後者是一個(gè)變數(shù)名,代表一個(gè)存放數(shù)據(jù)的存貯單元。
2、p是指針變數(shù),可以對(duì)其進(jìn)行加、減和賦值運(yùn)算,如p++,p=a,p=&a[i]等運(yùn)算都是合法的,而由於數(shù)組名a代表一個(gè)地址常量,即一個(gè)常量指針,因此a++,a=p,a+=i是非法的。二、二維數(shù)組和指針1、二維數(shù)組和數(shù)組元素的地址如inta[2][3];二維數(shù)組a中任一元素a[i][j]的地址與a[i]的關(guān)係是:&a[i][j]==a[i]+j注:a+1和a[0]+1的含義不同a和a[i]是兩個(gè)基類(lèi)不同的常量指針,*(a+1)代表a[1]而*(a[0]+1)則代表a[0][1]2、通過(guò)地址引用二維數(shù)組元素設(shè)二維數(shù)組a的定義同上,則a中任一元素a[i][j]的引用可以用以下運(yùn)算式之一來(lái)表示*(a[i]+j)*(*(a+i)+j)(*(a+i))[j]3、通過(guò)一個(gè)指針數(shù)組引用二維數(shù)組元素設(shè)inta[2][3],*p[2]p是一個(gè)一維指針數(shù)組,其中每個(gè)元素都是一個(gè)指向整型變數(shù)的指針。若for(i=0;i<2;i++)
p[i]=a[i];使p數(shù)組中每個(gè)元素依次指向a數(shù)組中每行的起始元素,則二維數(shù)組元素a[i][j]的引用形式可以寫(xiě)成(1)*(p[i]+j)(2)*(*(p+i)+j)(3)(*(p+i))[j](4)p[i][j]4、通過(guò)一個(gè)行指針引用二維數(shù)組元素設(shè)inta[2][3],(*prt)[3];其中prt是一個(gè)指針變數(shù),它指向包含三個(gè)整數(shù)元素的一維數(shù)組。注意,*prt兩側(cè)的園括弧不可缺少,如果寫(xiě)成*prt[3]則prt將成為一個(gè)指針數(shù)組名若prt=a;則a[i][j]可以寫(xiě)成
*(prt[i]+j);*(*(prt+i)+j);(*(prt+i))[j];prt[i][j]10.4字串的指針和指向字串的指針變數(shù)1、字串的表示形式
(1)用字符數(shù)組實(shí)現(xiàn)
staticcharstring[]=“IloveChina”;(2)用字符指針實(shí)現(xiàn)
char*string;string=“ILoveChina”;10.4字串的指針和指向字串的指針變數(shù)2、字串指針作函數(shù)參數(shù)
如:P235例10.203、字元指針變數(shù)與字元數(shù)組的區(qū)別(1)字元數(shù)組由若干個(gè)元素組成,每個(gè)元素中放一個(gè)字元;而字元指針變數(shù)中存放的是地址,決不是將字串放到字元指針變數(shù)中。3、字元指針變數(shù)與字元數(shù)組的區(qū)別(2)賦初值的方式不同對(duì)數(shù)組staticcharstr[]=“ILoveChina!”;對(duì)字元指針char*a=“ILoveChina!”;3、字元指針變數(shù)與字元數(shù)組的區(qū)別(3)賦值方式不同不能用charstr[14];
str=“ILoveChina!”;而字元指針變數(shù)可以
char*a;a=“ILoveChina!”;3、字元指針變數(shù)與字元數(shù)組的區(qū)別(4)指針變數(shù)的值是可以改變的
char*a=“ILoveChina!”;a+=7;3、字元指針變數(shù)與字元數(shù)組的區(qū)別(5)可以表示格式字串
char*format=“a=%d,b=%f\n”;
printf(format,a,b);或:staticcharformat[]=“a=%d,b=%f\n”;
printf(format,a,b);10.5函數(shù)的指針和指向函數(shù)的指針變數(shù)1、指向函數(shù)的指針變數(shù)的一般定義形式數(shù)據(jù)類(lèi)型識(shí)別字(*指針變數(shù)名)()
返值類(lèi)型10.5函數(shù)的指針和指向函數(shù)的指針變數(shù)2、函數(shù)的調(diào)用可以通過(guò)函數(shù)名調(diào)用,也可以通過(guò)函數(shù)指針調(diào)用。如
c=max(a,b);
intmax();
int(*p)();p=max;c=(*p)(a,b);10.5函數(shù)的指針和指向函數(shù)的指針變數(shù)3、函數(shù)的指針變數(shù)可以改變p=min;4、在給函數(shù)指針賦值時(shí),只用函數(shù)名5、用函數(shù)指針調(diào)用函數(shù)時(shí),只需要將(*p)代替函數(shù)名即可,如c=(*p)(a,b);6、函數(shù)指針變數(shù)p+n,p++,p--;運(yùn)算是無(wú)意義的7、可以用指向函數(shù)的指針變數(shù)作函數(shù)的參數(shù)如:P244頁(yè)10.6返回指針值的函數(shù)定義的一般形式:類(lèi)型識(shí)別字*函數(shù)名(參數(shù)表)如int*a(int
x,inty)例:P246例10.25
仔細(xì)讀!10.7指針數(shù)組和指向指針的指針1指針數(shù)組的定義形式類(lèi)型標(biāo)識(shí)*數(shù)組名[數(shù)組長(zhǎng)度說(shuō)明];如int*p[4];2、指向指針的指針定義形式char**p;3、指針數(shù)組作main()函數(shù)的形參
main(int
argc,char*argv[])10.8有關(guān)指針的數(shù)據(jù)類(lèi)型和指針運(yùn)算的小結(jié)1有關(guān)指針的數(shù)據(jù)類(lèi)型的小結(jié)2、指針運(yùn)算的小結(jié)3、void指針類(lèi)型本章的例題需要同學(xué)們仔細(xì)閱讀!第11章結(jié)構(gòu)體與共用體
11.1使用關(guān)鍵字typedef定義新的類(lèi)型識(shí)別字一般形式typedef
類(lèi)型名識(shí)別字;說(shuō)明(1)“類(lèi)型名”為已有定義的類(lèi)型識(shí)別字;“識(shí)別字”為用戶(hù)定義的識(shí)別字。如:typedef
intINTEGER;
typedeffloatREAL;(2)經(jīng)此定義後的識(shí)別字可作為原數(shù)據(jù)類(lèi)型名使用如:INTEGERi,j;REALx,y;11.2結(jié)構(gòu)體一、結(jié)構(gòu)體類(lèi)型定義的一般形式Struct
結(jié)構(gòu)體名{類(lèi)型名結(jié)構(gòu)成員名;
……
};說(shuō)明(1)結(jié)構(gòu)體成員的命名規(guī)則與變數(shù)相同,並且允許與變數(shù)或其他結(jié)構(gòu)體中的成員重名。(2)結(jié)構(gòu)體成員可以是簡(jiǎn)單類(lèi)型,數(shù)組,指針或已定義過(guò)的結(jié)構(gòu)等。如:structstudent{
intnum;charname[20];charsex;
intage;floatscore;charaddr[30];};二、結(jié)構(gòu)體變數(shù)、數(shù)組、指針的四種說(shuō)明方式structstudent是自定義的類(lèi)型名,是結(jié)構(gòu)體類(lèi)型,用其可以定義變數(shù)、數(shù)組、指針。(1)緊跟在類(lèi)型定義之後進(jìn)行說(shuō)明如structstudent{……}student1,student2;(2)先定義結(jié)構(gòu)體類(lèi)型,再單獨(dú)進(jìn)行說(shuō)明如structstudent{……};
structstudentstudent1,student2;(3)定義一個(gè)無(wú)名結(jié)構(gòu)體類(lèi)型,直接進(jìn)行變數(shù)說(shuō)明如struct
{……}student1,student2;(4)用typedef定義一個(gè)結(jié)構(gòu)體類(lèi)型名,再用類(lèi)型名進(jìn)行說(shuō)明。如typedef
struct{intmonth;
……}DATE;DATEbirthday;說(shuō)明:P262三、對(duì)結(jié)構(gòu)體成員的三種引用方式(1)結(jié)構(gòu)體變數(shù)名.成員名如student1.num=10010;(2)指針變數(shù)名->成員名如p->num=10010;(3)(*指針變數(shù)名).成員名如(*p).num=10010;(2)和(3)的前提是:structstudentstudent1,*p;p=&student1;四、給結(jié)構(gòu)體變數(shù)、數(shù)組賦初值(1)在定義結(jié)構(gòu)時(shí),可以給結(jié)構(gòu)變數(shù)、數(shù)組賦初值。如P264例11.1P266例11.2(2)給結(jié)構(gòu)體變數(shù)賦初值不能跨越前邊的成員而只給後面的成員賦值。(3)結(jié)構(gòu)體數(shù)組成員賦初值的規(guī)則與數(shù)組元素賦初值的規(guī)則相同。如例11.2五、引用自身的結(jié)構(gòu)體當(dāng)在一個(gè)結(jié)構(gòu)體中有一個(gè)成員是指向本結(jié)構(gòu)體類(lèi)型的指針時(shí),那麼通過(guò)這樣的指針可以把若干個(gè)相同的結(jié)構(gòu)體存貯單元連在一起,用以建立如鏈表、樹(shù)、圖等各種數(shù)據(jù)結(jié)構(gòu)。如鏈表結(jié)構(gòu):如P273圖11.10
Struct
c_table{charch;Struct
c_table*next;};C語(yǔ)言的記憶體動(dòng)態(tài)分配函數(shù)(1)malloc(運(yùn)算式)該函數(shù)用來(lái)在內(nèi)存中分配一個(gè)指定長(zhǎng)度(以位元組為單位)的存貯空間,其中運(yùn)算式的值表示待分配的存貯空間的位元組數(shù),返值是指向分配域起始地址的指針,不成功為NULL(空值)其函數(shù)原型為
void*malloc(unsigned
intsize);(2)void*calloc(unsigned
num,nusignedsize)該函數(shù)用來(lái)在內(nèi)存中分配一塊連續(xù)的存貯空間,其中num指定需要分配的元素個(gè)數(shù);size用來(lái)指定每個(gè)元素所占的記憶體空間(以位元組為單位),返值是指向分配域起始地址的指針,不成功為NULL(空值)(3)voidfree(void*p)該函數(shù)用來(lái)釋放由malloc或calloc函數(shù)分配的存貯空間,其中指針應(yīng)指向最近一次調(diào)用malloc或calloc時(shí)所分配存貯區(qū)的首地址。對(duì)鏈表的操作:(1)建立鏈表(2)輸出鏈表(3)鏈表的插入及刪除11.3共用體(聯(lián)合體)一、共用體定義的一般形式union[共用體名]{類(lèi)型名共用體成員名;……}[變數(shù)名表];說(shuō)明(1)共用體變數(shù)的定義與結(jié)構(gòu)類(lèi)似,可以把類(lèi)型定義和變數(shù)說(shuō)明放在一起,也可以分開(kāi),還可以直接定義共用體變數(shù)而不要共用體名。(2)共用體的含義與結(jié)構(gòu)體不同,共用體中所有成員均放在以同一地址開(kāi)始的存貯空間中,使用覆蓋的方式共用存貯單元,共用體所占空間大小取決於占存貯空間最大的那個(gè)成員。(3)共用體變數(shù)不能在定義時(shí)賦初值。11.3共用體(聯(lián)合體)二、共用體類(lèi)型數(shù)據(jù)的使用(1)不能對(duì)共用體變數(shù)進(jìn)行整體操作,只能單獨(dú)引用其成員(2)共用體成員的引用方式與結(jié)構(gòu)體完全相同(3)共用體變數(shù)不能作為函數(shù)的參數(shù)或函數(shù)值,但可以使用指向共用體的指針變數(shù)P289(4)共用體可以作為結(jié)構(gòu)成員,結(jié)構(gòu)也可以作為共用體的成員11.4枚舉類(lèi)型一個(gè)變數(shù)只有幾種可能的值,可以定義為枚舉類(lèi)型一、枚舉類(lèi)型的定義和變數(shù)說(shuō)明的兩種方式1、定義和說(shuō)明分開(kāi)類(lèi)型定義形式enum
枚舉類(lèi)型名{枚舉值1,枚舉值2,……,枚舉值n};變數(shù)說(shuō)明形式
enum
枚舉類(lèi)型名變數(shù)名表;2、直接定義枚舉變數(shù)一般形式enum
{枚舉值1,枚舉值2,……,枚舉值n}變數(shù)名表;說(shuō)明(1)枚舉類(lèi)型名為用戶(hù)定義識(shí)別字(2)枚舉值又稱(chēng)枚舉元素、枚舉常量,也是用戶(hù)定義的識(shí)別字二、枚舉元素和它的序號(hào)1、在定義枚舉類(lèi)型的同時(shí),編譯程序按順序給每個(gè)枚舉元素一個(gè)對(duì)應(yīng)的序號(hào),序號(hào)的值從0開(kāi)始,後續(xù)元素順序加12、可以在定義時(shí)人為指定枚舉元素的序號(hào)值,如
enum{sun=7,mon=1,tue,ued,thu,fri,sat}day;沒(méi)有指定序號(hào)值的元素則在前一元素序號(hào)值基礎(chǔ)上順序加1三、枚舉類(lèi)型數(shù)據(jù)的使用1、枚舉類(lèi)型變數(shù)的取值範(fàn)圍只限於類(lèi)型定義時(shí)所列出的值2、只能給枚舉變數(shù)賦枚舉值,若賦序號(hào)值必須進(jìn)行強(qiáng)制類(lèi)型轉(zhuǎn)換,如P2923、枚舉值可以進(jìn)行加(減)一個(gè)整數(shù)n的運(yùn)算,用以得到其後(前)第n個(gè)元素的值4、枚舉值可以按定義時(shí)的序號(hào)進(jìn)行關(guān)係比較5、枚舉值可以按整型輸出其序號(hào)值第12章位運(yùn)算
12.1位運(yùn)算符位運(yùn)算:指進(jìn)行二進(jìn)位位的運(yùn)算運(yùn)算符功能優(yōu)先順序結(jié)合性~按位取反高左右<<>>左移右移左右&按位與左右^按位異或左右|按位或低左右說(shuō)明:(1)只有~為單目運(yùn)算符(2)位運(yùn)算只能用於整型或字元型數(shù)據(jù)(3)位運(yùn)算符可以與賦值運(yùn)算符結(jié)合組成擴(kuò)展的賦值運(yùn)算,即~=,<<=,>>=,&=,^=,!=
(4)兩個(gè)長(zhǎng)度不同的數(shù)據(jù)進(jìn)行位運(yùn)算時(shí),系統(tǒng)先將二者右端對(duì)齊,然後將短的一方按符號(hào)位擴(kuò)充,無(wú)符號(hào)數(shù)則以0擴(kuò)充。12.2位運(yùn)算符的運(yùn)算規(guī)則1、按位取反運(yùn)算符~單目運(yùn)算符如~x~x不是求x的負(fù)數(shù)~1的結(jié)果不是-1如~1=?~8=?2、移位運(yùn)算符>>和<<左邊是移位對(duì)象,右邊是整型運(yùn)算式,表示移位的位數(shù),左移時(shí)低位補(bǔ)0,右移時(shí)補(bǔ)符號(hào)位,若為無(wú)符號(hào)整數(shù)則補(bǔ)03、按位與運(yùn)算符&&和&&不同例如:a=10,b=5;可用於“高位元組清零,低位元組清零”
a&0xffa&0xff004、按位或運(yùn)算符|如果想使a的低位元組全置1則a|0xff如果想使a的高位元組全置1則a|0xff005、異或運(yùn)算符^相同為0不同為1,如果a和b的值相等,則a^b=0,如果想取a
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 合同法81條對(duì)應(yīng)民法典
- 大班數(shù)學(xué)課件《比較多少》
- 專(zhuān)題 10習(xí)作訓(xùn)練 -2022-2023學(xué)年四年級(jí)語(yǔ)文下冊(cè)期末專(zhuān)項(xiàng)復(fù)習(xí)(部編版)
- 旅游局長(zhǎng)述職報(bào)告
- 家庭心理治療師招聘合同
- 航空航天器材招投標(biāo)方法探討
- 幼教志愿者招聘合同
- 科技研發(fā)中心施工合同糾紛模板
- 智能能源工程合同范本節(jié)能
- 曲棍球場(chǎng)地坪施工協(xié)議
- 醫(yī)院院長(zhǎng)一崗雙責(zé)述職報(bào)告
- 西泠版五年級(jí)書(shū)法上冊(cè)《第10課 山字頭與京字頭》教學(xué)設(shè)計(jì)
- 生物統(tǒng)計(jì)及試驗(yàn)設(shè)計(jì)課件
- 新生兒窒息復(fù)蘇臨床指南
- 胎心聽(tīng)診技術(shù)最全課件
- 無(wú)套利分析方法課件
- ERCP+EST+ENBD相關(guān)知識(shí)及護(hù)理
- 住院患者導(dǎo)管滑脫危險(xiǎn)因素評(píng)估表
- 一年級(jí)數(shù)學(xué)老師家長(zhǎng)會(huì)發(fā)言稿
- Linux操作系統(tǒng)應(yīng)用(麒麟系統(tǒng))PPT完整全套教學(xué)課件
- 湖北省旅游PPT簡(jiǎn)介湖北省幻燈片模板
評(píng)論
0/150
提交評(píng)論