數(shù)據(jù)結(jié)構(gòu)c語言復(fù)習(xí)-(修改于20060223-for04級(jí)地方生)_第1頁
數(shù)據(jù)結(jié)構(gòu)c語言復(fù)習(xí)-(修改于20060223-for04級(jí)地方生)_第2頁
數(shù)據(jù)結(jié)構(gòu)c語言復(fù)習(xí)-(修改于20060223-for04級(jí)地方生)_第3頁
數(shù)據(jù)結(jié)構(gòu)c語言復(fù)習(xí)-(修改于20060223-for04級(jí)地方生)_第4頁
數(shù)據(jù)結(jié)構(gòu)c語言復(fù)習(xí)-(修改于20060223-for04級(jí)地方生)_第5頁
已閱讀5頁,還剩37頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

C語言計(jì)算機(jī)輔助教學(xué)MarketShareMarketShare1C語言的數(shù)據(jù)類型一、為什么要規(guī)定數(shù)據(jù)類型:

C語言規(guī)定,在程序中用到的每一個(gè)變量都要指定它們屬于哪一種類型,這是因?yàn)椋?.不同類型的數(shù)據(jù)在內(nèi)存中占不同長度的存儲(chǔ)區(qū),而且數(shù)據(jù)在計(jì)算機(jī)內(nèi)的表示形式也不同.例如:一般微機(jī)2bytes存放一個(gè)整型4bytes存放一個(gè)實(shí)型2.一種數(shù)據(jù)對應(yīng)著一個(gè)值的范圍int-32768~32767float10-38~1038之間例如:整型數(shù)據(jù)可以進(jìn)行求余(5%2=1),而實(shí)數(shù)不能進(jìn)行求余運(yùn)算。數(shù)值型數(shù)據(jù)可以進(jìn)行四則運(yùn)算,而結(jié)構(gòu)型數(shù)據(jù)就不能進(jìn)行四則運(yùn)算?!粋€(gè)變量應(yīng)有確定的類型,在一個(gè)程序中一個(gè)變量只能屬于一個(gè)類型,不能先后被定義為二個(gè)或多個(gè)不同的類型。3.一種數(shù)據(jù)類型對應(yīng)一組允許的操作二、C的數(shù)據(jù)類型:數(shù)據(jù)類型基本類型整型短整型(short)整型(int)長整型(long)實(shí)型(浮點(diǎn)型)單精度型(float)雙精度型(double)數(shù)值類型字符類型(char)枚舉類型(enum)構(gòu)造類型(組合類型)數(shù)組類型結(jié)構(gòu)體類型(struct)共同體類型(union)文件類型(file)指針類型空類型(void)不返回任何類型的數(shù)據(jù)在程序中,不同類型的數(shù)據(jù)既可以以常量形式出現(xiàn),也可以以變量形式出現(xiàn)。所謂常量是指在程序執(zhí)行期間其值是不能發(fā)生變化。變量則其值可以變化的。2常量與變量例如:1.2,3,‘a(chǎn)’都是常量,分別代表實(shí)型、整型和字符型常量。它們的特點(diǎn)是從字面上即可判斷它們是某一類型的常量,所以又稱為字面常量或直接常量。

符號(hào)常量:是在一個(gè)程序(或程序的一部分)中指定一符號(hào)或標(biāo)識(shí)符代表一個(gè)常量。一、(直接)常量和符號(hào)常量:例:#definePRICE30main(){

intnum,total;num=10;total=num*PRICE;

printf(“total=%d”,total);}輸出結(jié)果:total=300說明:(2)符號(hào)常量不同于變量,它的值在其作用域內(nèi)不能改變,也不能再被賦值.(1)習(xí)慣上符號(hào)常量用大寫,變量用小寫以示區(qū)別PRICE=50╳注意:‘a(chǎn)’和“a”的區(qū)別:‘a(chǎn)’是單個(gè)字符常量,一個(gè)字符“a”是字符串常量,含有二個(gè)字符‘a(chǎn)’,‘\0’charc;c=‘a(chǎn)’;√c=“a”;×存儲(chǔ)單元所存儲(chǔ)的數(shù)據(jù)稱為變量的值,這個(gè)存儲(chǔ)空間的首地址就稱為該變量的地址。

二、變量:變量是其值可以改變的量稱為變量。每一個(gè)變量都有一個(gè)名字,稱之為變量名,它代表了某個(gè)存儲(chǔ)空間及其所存儲(chǔ)的數(shù)據(jù)?!鶚?biāo)識(shí)符是以字母或下劃線開頭,由字母、數(shù)字或下劃線組成的字符序列

3C語言概述一、控制語句:完成一定的控制功能.

①if()~else~條件語句②for()~③while()~④do~while()⑤continue結(jié)束本次循環(huán)⑥break終止循環(huán)或switch⑦switch多路分支語句⑧goto

轉(zhuǎn)移語句⑨return返回語句循環(huán)語句上面9種語句中的括號(hào)()表示其中是一個(gè)條件,~表示內(nèi)嵌的語句.如:i++;a=3;i=i+1;都是賦值語句

二、表達(dá)式語句:表達(dá)式加分號(hào)構(gòu)成表達(dá)式語句

典型的是:由賦值表達(dá)式構(gòu)成賦值語句.1.i的初值為3

k=(i++)+(i++)+(i++)值為9(3+3+3),i的值為6

k=(++i)+(++i)+(++i)值為18(6+6+6),i的值為6邏輯運(yùn)算符及優(yōu)先級(jí):&&(與)||(或)!(非)二元一元三、邏輯運(yùn)算符:4一維數(shù)組一、一維數(shù)組的定義:定義方式:類型說明符數(shù)組名[常量表達(dá)式];例:inta[10];floatfa[100],fb[100];chars1[20],s2[40];1.常量表達(dá)式表示數(shù)組元素個(gè)數(shù),下標(biāo)變化范圍0到N-1

2.C不允許動(dòng)態(tài)數(shù)組常量表達(dá)式中只能有常量和符號(hào)常量,不能有變量。二、一維數(shù)組的引用:

數(shù)組必須先定義,后使用,而且只能逐個(gè)引用數(shù)組元素,而不能一次引用整個(gè)數(shù)組。數(shù)組的表示形式:

數(shù)組名[下標(biāo)]下標(biāo)可以是整型常量或整型表達(dá)式inta[N];下標(biāo)變化范圍0到N-1for(i=0;i<N;i++){scanf(“%d”,&a[i]);

printf(“%d”,a[i]);}5函數(shù)

一個(gè)較大的程序一般應(yīng)分為若干個(gè)程序模塊,每一個(gè)模塊用來實(shí)現(xiàn)一個(gè)定的功能。所有的高級(jí)語言中都有子程序這個(gè)概念,用子程序來實(shí)現(xiàn)模塊功能。在C語言中,子程序的作用是由函數(shù)來完成的。一個(gè)C程序可由一個(gè)主函數(shù)和若干個(gè)函數(shù)構(gòu)成。由主函數(shù)調(diào)用其它函數(shù),其它函數(shù)也可以互相調(diào)用。同一個(gè)函數(shù)可以被一個(gè)或多個(gè)函數(shù)調(diào)用任意多次。在程序設(shè)計(jì)中,常將一些常用的功能模塊編寫成函數(shù),放在函數(shù)庫中供公共選用。要善于用函數(shù),以減少重復(fù)編寫程序段的工作量。

C語言提倡把一個(gè)大問題劃分成許多個(gè)小塊,每一小塊編制一個(gè)函數(shù)。這樣C程序是由許多小函數(shù)而不是由少量大函數(shù)構(gòu)成。這樣作的好處:各部分充分獨(dú)立,任務(wù)單一,便于書寫和調(diào)試。有些小函數(shù)還可以作為構(gòu)件,被別的程序利用。先看一個(gè)簡單的例子例7.1main(){printstar();

/*調(diào)用prinstar函數(shù)*/

print_message();

/*調(diào)用print_message函數(shù)*/

printstar();

/*調(diào)用printstar函數(shù)*/}printstar()

/*printstar函數(shù)*/{

printf(“******************\n”);}print_message()

/*printmessage函數(shù)*/{

printf(“Howdoyoudo!\n”);}

運(yùn)行情況如下:

******************Howdoyoudo!******************6指針指針類型是C語言中使用十分普遍的數(shù)據(jù)類型,它與一般的變量不同之處是它包含的不是數(shù)據(jù)的值,而是另一變量的地址。指針是C語言中的一個(gè)重要概念,也是一個(gè)比較難掌握的概念,正確而熟練地掌握了指針的概念和指針的使用,就能設(shè)計(jì)出復(fù)雜的數(shù)據(jù)結(jié)構(gòu)和高效的程序,沒有掌握指針就沒有掌握C語言的精華。凡是程序中定義的變量,在編譯時(shí)系統(tǒng)都給他們分配相應(yīng)的存貯單元,一般微機(jī)C系統(tǒng)給整型分配2個(gè)字節(jié),給實(shí)型分配4個(gè)字節(jié),每個(gè)變量所占的存貯單元都有確定的地址,具體地址在編譯時(shí)分配。348.6xy4.5例:inta=3,b=4;floatc=4.5,d=8.6;chare=‘x’,f=‘y’;101010121014a101810221023bcdef

要訪問內(nèi)存中的變量,在程序中是通過變量名來引用變量的值。但實(shí)際上,在編譯時(shí)將每個(gè)變量名對應(yīng)一個(gè)地址,在內(nèi)存中不再出現(xiàn)變量名而只有地址。若程序中引用變量a,系統(tǒng)找到對應(yīng)地址1010,然后從1010,1011兩個(gè)字節(jié)中取出其中的值。直接訪問:通過變量名或地址訪問一個(gè)變量的方式為

“直接訪問”。間接訪問:把地址存放在一個(gè)變量中,然后通過先找出地址變量中的值(一個(gè)地址),再由此地址找到最終要訪問的變量的方法稱為“間接訪問”。存放地址的變量是一種特殊的變量,它只能用來存放地址而不能用來存放其它類型的數(shù)據(jù),需要專門加以定義。y101010121014a101810221023bcdef344.58.6x200220042006pa201010141016pbpcpdpepf10101012101410181022102320082012物理關(guān)系角度pa3apb4bpcpdpe4.5c8.5dxepfyf邏輯關(guān)系角度一、指針變量的定義在程序中對于存放地址的變量要專門定義。如:int*p;

定義了一個(gè)指針變量p,它指向一個(gè)整型變量在定義一個(gè)指針變量p以后,系統(tǒng)為這個(gè)指針變量分配了一個(gè)存儲(chǔ)單元,用它來存放地址,但此時(shí)該指針變量并未指向一個(gè)確定的變量,因?yàn)樵撝羔樧兞恐形摧斎氪_定的地址,要使一個(gè)指針變量指向整型變量,必須將整型變量的地址賦給該指針變量。例:&k取變量k地址&c[2]取數(shù)組元素c[2]的地址&()取結(jié)構(gòu)st變量name項(xiàng)的地址&233,&(i+233)int*p,i=3;p=&i;P3i&iP3i&:(取地址運(yùn)算符)取當(dāng)前變量的地址運(yùn)算對象不能是常量表達(dá)式或寄存器變量指針變量定義的一般形式:[存儲(chǔ)類型]類型標(biāo)識(shí)符*標(biāo)識(shí)符;注1.標(biāo)識(shí)符前面的“*”標(biāo)示該變量為指針變量。2.一個(gè)指針變量只能指向同一類型的變量。請區(qū)別:指針:就是地址變量的指針:就是變量的地址指針變量:存放地址的變量int*p,a;printf(“%o”,p);以八進(jìn)制形式輸出指針變量p的值(地址)p=&a;將整型變量a的地址賦給指針變量p,此時(shí)p指向a二、指針變量的引用在定義了指針變量之后,可以對指針變量進(jìn)行各種操作。例如:給指針變量賦地址;輸出指針變量的值;訪問指針變量所指的變量等。scanf(“%d”,p);向p所指的整型變量輸入一個(gè)整型值printf(“%d”,*p);將指針變量p所指向的變量的值輸出*p=5;

將5賦給p所指的變量C語言中有關(guān)指針的運(yùn)算符◆&運(yùn)算符:取地址運(yùn)算符◆*運(yùn)算符:指針運(yùn)算符或指明運(yùn)算符,*p代表p所指變量注意:此處的*p與定義指針變量時(shí)用的*p的含義是不同的。定義int*p;中的*不是運(yùn)算符,它只是表示其后的變量是一指針變量程序中的*p,其中的*是一個(gè)指針運(yùn)算符,*p表示p指向的變量如:printf(“%d”,*p);

printf(“%d”,a);結(jié)果都為3P3i&iP3imain(){int*p1,*p2,i,j,k;i=3;j=5;p1=&i;p2=&j;k=*p1;*p1=*p2;*p2=k;

printf(“i=%d,j=%d\n”,i,j);}例:交換兩指針變量所指向的值運(yùn)行情況:i=5,j=3&i1P15i&i2P23j*p1*p2三、指針變量的運(yùn)算當(dāng)指針指向一個(gè)具有基本類型或組合類型中具有基本類型的成分分量時(shí),則它可以象基本變量一樣使用。inti,*pi;pi=&i;i=0;&iPi0i*pi=0;i+=1;*pii++;*pi+=1;(*pi)++;C語言的函數(shù)的參數(shù)傳遞是以“傳值”方式進(jìn)行變量參數(shù)的信息傳遞,被調(diào)函數(shù)不能直接改變主調(diào)函數(shù)中參數(shù)的值。當(dāng)引入指針的概念后,我們可以在主調(diào)函數(shù)中將要改變內(nèi)容的變量地址作為參數(shù)傳遞給被調(diào)函數(shù),而被調(diào)函數(shù)執(zhí)行時(shí),就按這個(gè)地址去訪問變量參數(shù)的值,相應(yīng)的參數(shù)要被說明成指針類型。swap(int

x,inty){

intt;t=x;x=y;y=t;}main(){inta,b;a=3;b=5;swap(a,b);

printf(“%d,%d”,a,b);}swap(int*x,int*y){

intt;t=*x;*x=*y;*y=t;}main(){inta,b;a=3;b=5;swap(&a,&b);

printf(“%d,%d”,a,b);}

其中:a是數(shù)組名,它表示該數(shù)組的起始地址,是個(gè)常量。

a恒等于&a[0],&a[i]是a[i]元素的地址,即a+i==&a[i]

四、一維數(shù)組的指針表示法inta[10];/*a[0],a[1],a[2],a[3],a[4]...a[9]*/在編譯系統(tǒng)計(jì)算實(shí)際地址時(shí),a+i中的i要乘上數(shù)據(jù)元素所占的字節(jié)數(shù),即:a+i×(一個(gè)元素所占字節(jié)數(shù))例如:若整型數(shù)組a的起始地址為1010,則a+1的實(shí)際地址是1010+1×2=1012a數(shù)組a[0]a[1]a[2]

a[i]a[9]aa+1

a+ia+9◆指針與數(shù)組的一致性:

inta[10],*p;p=a;p=&a[0]p+1:指向a[1]p+i:指向第i個(gè)元素p-i:指向p前的第i個(gè)元素*p所以*(a+i)a[0]*(p+1)a[1]*(p+i)a[i]要引用一個(gè)數(shù)組元素,有兩種不同的方法:(1)下標(biāo)法a[i](2)地址法*(a+i)a[i]

&a[i]而且*(p+i)a+ip[i],a[i]a數(shù)組a[0]a[1]a[2]

a[i]a[9]p,ap+1,a+1

p+i,a+ip+9,a+9例:main(){inta[5]={1,3,5,7,9},i,*p;for(i=0;i<5;i++)

printf(“%d”,a[i]);printf(“\n”);for(i=0;i<5;i++)

printf(“%d”,*(a+i));printf(“\n”);for(p=a;p<a+5;p++)

printf(“%d”,*p);}注意:不能用以下方法輸出a數(shù)組的5個(gè)元素,因?yàn)閍是起始地址,是個(gè)常數(shù)。for(i=0;i<5;i++)

printf(“%d”,*a++);p=a;for(i=0;i<5;i++)

printf(“%d”,*p++);而應(yīng)寫成:a數(shù)組a[0]a[1]a[2]a[3]a[4]p,ap+1,a+1

p+4,a+47結(jié)構(gòu)

“結(jié)構(gòu)”數(shù)據(jù)類型,與組合數(shù)據(jù)類型數(shù)組一樣,在結(jié)構(gòu)類型的變量中,可以有若干個(gè)成分分量(成員、元素),并且這些成分分量的個(gè)數(shù)是確定的。但結(jié)構(gòu)與數(shù)組不同點(diǎn):(1)數(shù)組表示的是同一數(shù)據(jù)類型的集合(2)結(jié)構(gòu)表示的是不同數(shù)據(jù)類型的集合(也可以相同)

結(jié)構(gòu)的使用有利于復(fù)雜數(shù)據(jù)和相關(guān)聯(lián)數(shù)據(jù)的組織和處理,同時(shí)也便于程序的編制和閱讀。在數(shù)據(jù)處理領(lǐng)域,常常要求把一些屬于不同類型的數(shù)據(jù)作為一個(gè)整體來處理。如一個(gè)學(xué)生的信息包括:一、結(jié)構(gòu)體類型概述它們是同一個(gè)處理對象(學(xué)生的屬性),但又不屬于同一類型。如果用簡單來分別代表各個(gè)屬性,就難以反映出它們之間的內(nèi)在聯(lián)系,而且使程序冗長難讀。用數(shù)組則無法容納不同類型的元素。學(xué)號(hào)姓名性別年齡成績地址C語言用結(jié)構(gòu)體類型來描述一個(gè)學(xué)生的信息。

structstudent{intnum;charname[20];charsex;

intage;floatscore;charaddr[30];}stu1,stu2;關(guān)鍵字結(jié)構(gòu)名結(jié)構(gòu)成員表變量說明表二、結(jié)構(gòu)體的定義及結(jié)構(gòu)體變量的說明例:對一個(gè)學(xué)生的描述1.結(jié)構(gòu)體定義的一般形式

struct

標(biāo)識(shí)符{結(jié)構(gòu)成員表};或struct{結(jié)構(gòu)成員表};

structstudent{intnum;charname[20];charsex;

intage;floatscore;charaddr[30];};struct

{intnum;charname[20];charsex;

intage;floatscore;charaddr[30];};(1)先定義結(jié)構(gòu)類型再定義變量名

struct

標(biāo)識(shí)符{結(jié)構(gòu)成員表};

struct

標(biāo)識(shí)符(同上)結(jié)構(gòu)變量標(biāo)識(shí)符;例:structstudent{intnum;charname[20];charsex;

intage;floatscore;charaddr[30];};structstudentstudent1,student2;2.結(jié)構(gòu)體變量的說明例:structstudent{intnum;charname[20];charsex;

intage;floatscore;charaddr[30];}student1,student2;(2)在定義結(jié)構(gòu)類型的同時(shí)定義變量

struct

標(biāo)識(shí)符{結(jié)構(gòu)成員表}結(jié)構(gòu)變量標(biāo)識(shí)符;(3)直接定義結(jié)構(gòu)類型變量(無名定義)

struct{結(jié)構(gòu)成員表}結(jié)構(gòu)變量標(biāo)識(shí)符;例:

struct

{intnum;charname[20];charsex;

intage;floatscore;charaddr[30];}student1,student2;1.對結(jié)構(gòu)可以取地址&結(jié)構(gòu)名(取結(jié)構(gòu)的地址)如:&student1&成員名(取結(jié)構(gòu)成員的地址)如:&student1.num

其中:&為取地址運(yùn)算符三、對結(jié)構(gòu)體的操作3.訪問結(jié)構(gòu)的成員

a.“.”

方式:student1.numb.“->”方式:p=&student1(*p).age或p->age,二者等價(jià)2.可定義指向結(jié)構(gòu)的指針

structstudent*p;structstudent{intnum;charname[20];charsex;

intage;floatscore;charaddr[30];}student1;4.對結(jié)構(gòu)變量可以像普通變量一樣進(jìn)行各種運(yùn)算(根據(jù)其類型決定可以進(jìn)行的運(yùn)算)如:student2.score=student1.score;sum=student1.score+student2.score;student1.age++;++student1.age;printf(“%d\n”,student1);scanf(“%d”,&student1);printf(“%d,%s,%c,%d,%f,%s”,student1);printf(“%d,%s\n”,student1.num,);scanf(“%d,%s\n”,&student1.num,);注意1.C不允許把一個(gè)結(jié)構(gòu)體變量作為一個(gè)整體進(jìn)行輸入/輸出操作╳√√╳╳2.如果成員本身又屬于一個(gè)結(jié)構(gòu)體類型,則要用若干個(gè)成員運(yùn)算符,一級(jí)一級(jí)地找到最低的一級(jí)的成員。只能對最低級(jí)的成員進(jìn)行賦值或存取以及運(yùn)算。如:employ.birthday.daystructdate{intmonth;

intday;

intyear;};structperson{charname[20];

structdatebirthday;charsex;longnum;charnation;}employ;

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論