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

下載本文檔

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

文檔簡介

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

C語言規(guī)定,在程序中用到的每一個變量都要指定它們屬于哪一種類型,這是因為:1.不同類型的數(shù)據(jù)在內(nèi)存中占不同長度的存儲區(qū),而且數(shù)據(jù)在計算機(jī)內(nèi)的表示形式也不同.例如:一般微機(jī)2bytes存放一個整型4bytes存放一個實型2.一種數(shù)據(jù)對應(yīng)著一個值的范圍int-32768~32767float10-38~1038之間例如:整型數(shù)據(jù)可以進(jìn)行求余(5%2=1),而實數(shù)不能進(jìn)行求余運(yùn)算。數(shù)值型數(shù)據(jù)可以進(jìn)行四則運(yùn)算,而結(jié)構(gòu)型數(shù)據(jù)就不能進(jìn)行四則運(yùn)算?!粋€變量應(yīng)有確定的類型,在一個程序中一個變量只能屬于一個類型,不能先后被定義為二個或多個不同的類型。3.一種數(shù)據(jù)類型對應(yīng)一組允許的操作二、C的數(shù)據(jù)類型:數(shù)據(jù)類型基本類型整型短整型(short)整型(int)長整型(long)實型(浮點型)單精度型(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)’都是常量,分別代表實型、整型和字符型常量。它們的特點是從字面上即可判斷它們是某一類型的常量,所以又稱為字面常量或直接常量。

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

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

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

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

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

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

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

二、表達(dá)式語句:表達(dá)式加分號構(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)先級:&&(與)||(或)!(非)二元一元三、邏輯運(yùn)算符:4一維數(shù)組一、一維數(shù)組的定義:定義方式:類型說明符數(shù)組名[常量表達(dá)式];例:inta[10];floatfa[100],fb[100];chars1[20],s2[40];1.常量表達(dá)式表示數(shù)組元素個數(shù),下標(biāo)變化范圍0到N-1

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

數(shù)組必須先定義,后使用,而且只能逐個引用數(shù)組元素,而不能一次引用整個數(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ù)

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

C語言提倡把一個大問題劃分成許多個小塊,每一小塊編制一個函數(shù)。這樣C程序是由許多小函數(shù)而不是由少量大函數(shù)構(gòu)成。這樣作的好處:各部分充分獨(dú)立,任務(wù)單一,便于書寫和調(diào)試。有些小函數(shù)還可以作為構(gòu)件,被別的程序利用。先看一個簡單的例子例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語言中的一個重要概念,也是一個比較難掌握的概念,正確而熟練地掌握了指針的概念和指針的使用,就能設(shè)計出復(fù)雜的數(shù)據(jù)結(jié)構(gòu)和高效的程序,沒有掌握指針就沒有掌握C語言的精華。凡是程序中定義的變量,在編譯時系統(tǒng)都給他們分配相應(yīng)的存貯單元,一般微機(jī)C系統(tǒng)給整型分配2個字節(jié),給實型分配4個字節(jié),每個變量所占的存貯單元都有確定的地址,具體地址在編譯時分配。348.6xy4.5例:inta=3,b=4;floatc=4.5,d=8.6;chare=‘x’,f=‘y’;101010121014a101810221023bcdef

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

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

定義了一個指針變量p,它指向一個整型變量在定義一個指針變量p以后,系統(tǒng)為這個指針變量分配了一個存儲單元,用它來存放地址,但此時該指針變量并未指向一個確定的變量,因為該指針變量中未輸入確定的地址,要使一個指針變量指向整型變量,必須將整型變量的地址賦給該指針變量。例:&k取變量k地址&c[2]取數(shù)組元素c[2]的地址&()取結(jié)構(gòu)st變量name項的地址&233,&(i+233)int*p,i=3;p=&i;P3i&iP3i&:(取地址運(yùn)算符)取當(dāng)前變量的地址運(yùn)算對象不能是常量表達(dá)式或寄存器變量指針變量定義的一般形式:[存儲類型]類型標(biāo)識符*標(biāo)識符;注1.標(biāo)識符前面的“*”標(biāo)示該變量為指針變量。2.一個指針變量只能指向同一類型的變量。請區(qū)別:指針:就是地址變量的指針:就是變量的地址指針變量:存放地址的變量int*p,a;printf(“%o”,p);以八進(jìn)制形式輸出指針變量p的值(地址)p=&a;將整型變量a的地址賦給指針變量p,此時p指向a二、指針變量的引用在定義了指針變量之后,可以對指針變量進(jìn)行各種操作。例如:給指針變量賦地址;輸出指針變量的值;訪問指針變量所指的變量等。scanf(“%d”,p);向p所指的整型變量輸入一個整型值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與定義指針變量時用的*p的含義是不同的。定義int*p;中的*不是運(yùn)算符,它只是表示其后的變量是一指針變量程序中的*p,其中的*是一個指針運(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)指針指向一個具有基本類型或組合類型中具有基本類型的成分分量時,則它可以象基本變量一樣使用。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ù)的值,相應(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ù)組的起始地址,是個常量。

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)計算實際地址時,a+i中的i要乘上數(shù)據(jù)元素所占的字節(jié)數(shù),即:a+i×(一個元素所占字節(jié)數(shù))例如:若整型數(shù)組a的起始地址為1010,則a+1的實際地址是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個元素p-i:指向p前的第i個元素*p所以*(a+i)a[0]*(p+1)a[1]*(p+i)a[i]要引用一個數(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個元素,因為a是起始地址,是個常數(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)類型的變量中,可以有若干個成分分量(成員、元素),并且這些成分分量的個數(shù)是確定的。但結(jié)構(gòu)與數(shù)組不同點:(1)數(shù)組表示的是同一數(shù)據(jù)類型的集合(2)結(jié)構(gòu)表示的是不同數(shù)據(jù)類型的集合(也可以相同)

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

struct

標(biāo)識符{結(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)識符{結(jié)構(gòu)成員表};

struct

標(biāo)識符(同上)結(jié)構(gòu)變量標(biāo)識符;例: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)類型的同時定義變量

struct

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

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

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,二者等價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不允許把一個結(jié)構(gòu)體變量作為一個整體進(jìn)行輸入/輸出操作╳√√╳╳2.如果成員本身又屬于一個結(jié)構(gòu)體類型,則要用若干個成員運(yùn)算符,一級一級地找到最低的一級的成員。只能對最低級的成員進(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)容里面會有圖紙預(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論