程序設(shè)計(jì)基礎(chǔ)及應(yīng)用(C語言版)課件:利用復(fù)雜的構(gòu)造類型解決實(shí)際問題_第1頁(yè)
程序設(shè)計(jì)基礎(chǔ)及應(yīng)用(C語言版)課件:利用復(fù)雜的構(gòu)造類型解決實(shí)際問題_第2頁(yè)
程序設(shè)計(jì)基礎(chǔ)及應(yīng)用(C語言版)課件:利用復(fù)雜的構(gòu)造類型解決實(shí)際問題_第3頁(yè)
程序設(shè)計(jì)基礎(chǔ)及應(yīng)用(C語言版)課件:利用復(fù)雜的構(gòu)造類型解決實(shí)際問題_第4頁(yè)
程序設(shè)計(jì)基礎(chǔ)及應(yīng)用(C語言版)課件:利用復(fù)雜的構(gòu)造類型解決實(shí)際問題_第5頁(yè)
已閱讀5頁(yè),還剩34頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

利用復(fù)雜的構(gòu)造類型解決實(shí)際問題

利用復(fù)雜的構(gòu)造類型解決實(shí)際問題【單元導(dǎo)讀】

單元學(xué)習(xí)目標(biāo):能利用結(jié)構(gòu)體變量和結(jié)構(gòu)體數(shù)組分別處理一組數(shù)據(jù)和多組數(shù)據(jù),并學(xué)會(huì)使用結(jié)構(gòu)體指針引用結(jié)構(gòu)體數(shù)據(jù);能利用共用體類型節(jié)省內(nèi)存空間;能利用枚舉類型簡(jiǎn)化程序;能用typedef聲明類型別名;能利用鏈表處理一組數(shù)據(jù),以彌補(bǔ)數(shù)組在處理數(shù)據(jù)時(shí)的一些缺陷。

數(shù)組是將相同類型的多個(gè)數(shù)據(jù)組合在一起。對(duì)于不同類型的一組數(shù)據(jù),如一名學(xué)生的學(xué)號(hào)為整型,姓名為字符型,性別為字符型,成績(jī)?yōu)閷?shí)型,能否用數(shù)組存放該學(xué)生的這些信息呢?——可用結(jié)構(gòu)體類型將不同類型的若干個(gè)數(shù)據(jù)組合在一起。

有時(shí)需要將多個(gè)不同類型的變量存放到同一段內(nèi)存單元中,以便節(jié)省內(nèi)存的開銷——可用共用體類型來實(shí)現(xiàn)。

有些變量的取值僅限于幾種可能的列舉值,例如一星期只有7天,這種變量可聲明為枚舉類型。C語言允許用戶自己建立由不同類型(或同類型)數(shù)據(jù)組成的組合型數(shù)據(jù)結(jié)構(gòu)——“結(jié)構(gòu)體”。6.1聲明一個(gè)結(jié)構(gòu)體類型【課堂練習(xí)】聲明同步練習(xí)6-2中的商品結(jié)構(gòu)體類型。6.2

利用結(jié)構(gòu)體變量處理一組數(shù)據(jù)6.2.1定義結(jié)構(gòu)體變量的方法

在聲明類型后可以隨時(shí)定義變量,使用靈活。

聲明的結(jié)構(gòu)體類型,僅相當(dāng)于一個(gè)模型,其中并無具體數(shù)據(jù),系統(tǒng)并不對(duì)其分配內(nèi)存空間。系統(tǒng)只對(duì)變量或數(shù)組分配內(nèi)存空間,因此為了能在程序中使用結(jié)構(gòu)體類型的數(shù)據(jù),應(yīng)當(dāng)定義結(jié)構(gòu)體類型的變量或數(shù)組。

能直接看到結(jié)構(gòu)體的結(jié)構(gòu),較為直觀,在編寫小程序時(shí)常用此方法。

沒有結(jié)構(gòu)體名,不能再用此結(jié)構(gòu)體類型去定義其他變量,實(shí)際應(yīng)用較少。注意:結(jié)構(gòu)體變量在程序執(zhí)行期間,所有成員一直駐留在內(nèi)存中。【課后作業(yè)】用sizeof運(yùn)算符測(cè)試結(jié)構(gòu)體類型

structStudent

的長(zhǎng)度。(1)先聲明結(jié)構(gòu)體類型

再定義結(jié)構(gòu)體變量(2)在聲明結(jié)構(gòu)體類型的

同時(shí)定義結(jié)構(gòu)體變量

(3)不指定結(jié)構(gòu)體名而

直接定義結(jié)構(gòu)體變量

定義的兩個(gè)變量stu1和stu2都具有structStudent類型的結(jié)構(gòu):stu1stu2說明:

(1)結(jié)構(gòu)體中的成員也可以是一個(gè)結(jié)構(gòu)體類型的變量。例如:(2)結(jié)構(gòu)體中的成員名可與程序中其它變量同名,但二者代表不同的對(duì)象,互不干擾。6.2.1定義結(jié)構(gòu)體變量的方法6.2

利用結(jié)構(gòu)體變量處理一組數(shù)據(jù)【課后作業(yè)】同步練習(xí)6-1:知識(shí)鞏固。6.2.2結(jié)構(gòu)體變量的初始化

和其他類型的變量一樣,結(jié)構(gòu)體變量可以在定義時(shí)進(jìn)行初始化賦值。初始化列表是用花括號(hào)括起來的一些常量(依次賦給結(jié)構(gòu)體變量中的成員)。6.2

利用結(jié)構(gòu)體變量處理一組數(shù)據(jù)6.2.3結(jié)構(gòu)體變量的引用

在定義結(jié)構(gòu)體變量以后,便可引用該變量。C允許具有相同類型的結(jié)構(gòu)體變量相互賦值;而對(duì)結(jié)構(gòu)體變量的輸入、輸出及各種運(yùn)算都是通過結(jié)構(gòu)體變量的成員來實(shí)現(xiàn)的。6.2

利用結(jié)構(gòu)體變量處理一組數(shù)據(jù)

結(jié)構(gòu)體變量成員的引用形式:結(jié)構(gòu)體變量名.成員名

若成員本身又是一個(gè)結(jié)構(gòu)體類型,則必須逐級(jí)找到最低級(jí)的成員才能使用。例如:stu1.birthday.month為第1名學(xué)生出生的月份例如:stu1.stu_ID即第一名學(xué)生的學(xué)號(hào)

stu2.sex

即第二名學(xué)生的性別

成員(分量)運(yùn)算符“.”的優(yōu)先級(jí)最高。stu1.stu_ID作為一個(gè)整體看待。說明:

(1)結(jié)構(gòu)體變量成員可以和普通變量一樣進(jìn)行各種運(yùn)算。

(2)可以引用結(jié)構(gòu)體變量成員的地址,也可以引用結(jié)構(gòu)體變量的地址?!纠?.1】結(jié)構(gòu)體變量的初始化和引用。6.2.3結(jié)構(gòu)體變量的引用6.2

利用結(jié)構(gòu)體變量處理一組數(shù)據(jù)#include

<stdio.h>#include

<string.h>structStudent

//聲明結(jié)構(gòu)體類型{

int

stu_ID;

//學(xué)號(hào)

charname[20];//姓名

floatscore;

//成績(jī)};intmain(void){

structStudent

stu1

=

{1001,"SunLi",

75.0};//定義stu1變量并初始化

structStudentstu2,

stu3;//定義stu2、stu3變量

stu2.stu_ID=

1002;

//引用結(jié)構(gòu)體變量成員,并賦值strcpy(stu2.name,

"ZhangPing");

stu2.score

=

80.0;

stu3

=

stu1;

//結(jié)構(gòu)體變量相互賦值printf("學(xué)號(hào)\t姓名\t\t成績(jī)\n");printf("%d%-20s%4.1f\n",stu1.stu_ID,stu1.name,stu1.score);printf("%d%-20s%4.1f\n",stu2.stu_ID,stu2.name,stu2.score);printf("%d%-20s%4.1f\n",stu3.stu_ID,stu3.name,stu3.score);}【課后作業(yè)】

同步練習(xí)6-2:學(xué)以致用。6.3.1定義結(jié)構(gòu)體數(shù)組的方法

一個(gè)結(jié)構(gòu)體變量可以存放一名學(xué)生的信息,而結(jié)構(gòu)體數(shù)組可以存放多名學(xué)生的信息,結(jié)構(gòu)體數(shù)組中的每個(gè)元素都是一個(gè)結(jié)構(gòu)體類型的數(shù)據(jù)。

定義的結(jié)構(gòu)體數(shù)組stu,共有5個(gè)元素:stu[0]~stu[4]。每個(gè)數(shù)組元素都是structStudent結(jié)構(gòu)體類型的。6.3

利用結(jié)構(gòu)體數(shù)組處理多組數(shù)據(jù)6.3.2結(jié)構(gòu)體數(shù)組的初始化

對(duì)結(jié)構(gòu)體數(shù)組,可以進(jìn)行初始化賦值。6.3

利用結(jié)構(gòu)體數(shù)組處理多組數(shù)據(jù)例如:6.3.2結(jié)構(gòu)體數(shù)組的應(yīng)用【例6.2】計(jì)算一組學(xué)生的平均成績(jī),并統(tǒng)計(jì)、輸出不及格的人數(shù)。6.3

利用結(jié)構(gòu)體數(shù)組處理多組數(shù)據(jù)#include

<stdio.h>structStudent

//聲明結(jié)構(gòu)體類型{

int

stu_ID;

//學(xué)號(hào)

charname[20];//姓名

floatscore;

//成績(jī)};structStudent

stu[5]

=

{

{1001,

"Liping",

45},

{1002,

"Zhaomin",

62.5},

{1003,

"Hefen",

92.5},

{1004,

"Chenlin",

87},

{1005,

"Wanmin",

58}

};intmain(void){

inti,

count=0;

floatave,

sum=0;for(i=0;i<5;i++){sum

=

sum

+

stu[i].score;if(stu[i].score<60)count++;

//統(tǒng)計(jì)不及格人數(shù)

}ave

=

sum/5;

//計(jì)算平均分printf("平均分:%.1f\n",

ave);//輸出數(shù)據(jù)保留1位小數(shù)printf("不及格人數(shù):%d\n",

count);}【課后作業(yè)】(1)【例6.3】建立同學(xué)通訊錄。

(2)同步練習(xí)6-3:知識(shí)鞏固與學(xué)以致用。6.4.1指向結(jié)構(gòu)體變量的指針

定義結(jié)構(gòu)體指針變量的一般形式為:

struct結(jié)構(gòu)體名

*結(jié)構(gòu)體指針變量名;

例如:structStudent*pstu;

指針變量pstu就可以用來指向structStudent類型的變量或數(shù)組元素。

結(jié)構(gòu)體指針是用來指向結(jié)構(gòu)體數(shù)據(jù)(結(jié)構(gòu)體變量或結(jié)構(gòu)體數(shù)組元素)的指針,若把一個(gè)結(jié)構(gòu)體數(shù)據(jù)的起始地址賦給一個(gè)指針變量,則該指針變量就指向這個(gè)結(jié)構(gòu)體數(shù)據(jù)。6.4

利用結(jié)構(gòu)體指針引用結(jié)構(gòu)體數(shù)據(jù)【例6.4】通過3種方式訪問結(jié)構(gòu)體變量中的成員。

若結(jié)構(gòu)體指針變量指向了一結(jié)構(gòu)體數(shù)據(jù)(結(jié)構(gòu)體變量或結(jié)構(gòu)體數(shù)組元素),則訪問結(jié)構(gòu)體數(shù)據(jù)的成員有3種形式:(1)結(jié)構(gòu)體變量名.成員名

例如stu1.name

結(jié)構(gòu)體數(shù)組元素名.成員名(2)(*結(jié)構(gòu)體指針變量名).成員名例如(*pstu).name(3)結(jié)構(gòu)體指針變量名->成員名例如pstu->name6.4.1指向結(jié)構(gòu)體變量的指針6.4

利用結(jié)構(gòu)體指針引用結(jié)構(gòu)體數(shù)據(jù)#include

<stdio.h>structStudent

//聲明結(jié)構(gòu)體類型{

int

stu_ID;

//學(xué)號(hào)

charname[20];//姓名

float

score;

//成績(jī)};intmain(void){

structStudent

stu1

=

{1002,

"張三強(qiáng)",

78.5};//定義結(jié)構(gòu)體變量stu1并賦值

structStudent*pstu

=

&stu1;//定義結(jié)構(gòu)體指針變量pstu,并指向變量stu1printf("學(xué)號(hào)姓名成績(jī)\n");printf("%d%s%.1f\n",stu1.stu_ID,stu1.name,stu1.score);printf("%d%s%.1f\n",(*pstu).stu_ID,(*pstu).name,(*pstu).score);printf("%d%s%.1f\n",pstu->stu_ID,pstu->name,pstu->score);}【課堂練習(xí)】同步練習(xí)6-4:知識(shí)鞏固。stu1pstu6.4.2指向結(jié)構(gòu)體數(shù)組的指針

當(dāng)結(jié)構(gòu)體指針變量指向結(jié)構(gòu)體數(shù)組中的某個(gè)元素時(shí),結(jié)構(gòu)體指針變量的值是該結(jié)構(gòu)體數(shù)組元素的起始地址。6.4

利用結(jié)構(gòu)體指針引用結(jié)構(gòu)體數(shù)據(jù)【例6.5】用結(jié)構(gòu)體指針變量輸出結(jié)構(gòu)體數(shù)組。#include

<stdio.h>structStudent

//聲明結(jié)構(gòu)體類型{

int

stu_ID;//學(xué)號(hào)

charname[20];//姓名

floatscore;

//成績(jī)};intmain(void){ structStudentstu[3]

=

{

{1001,"Liping",45},

{1002,"Zhaomin",62.5},

{1003,"Hefen",92.5}

};//定義結(jié)構(gòu)體數(shù)組,并賦初值structStudent

*ps;

//定義結(jié)構(gòu)體指針變量printf("學(xué)號(hào)\t姓名\t\t成績(jī)\n");for(ps=stu;ps<stu+3;ps++)printf("%-6d%-20s%.1f\n",

ps->stu_ID,

ps->name,ps->score);}【課后作業(yè)】同步練習(xí)6-5:知識(shí)鞏固與學(xué)以致用。6.4.3結(jié)構(gòu)體指針變量作函數(shù)參數(shù)

將一個(gè)結(jié)構(gòu)體數(shù)據(jù)傳遞給另一個(gè)函數(shù)時(shí),若采用“地址傳遞”的方式(用指向結(jié)構(gòu)體數(shù)據(jù)的指針變量作函數(shù)參數(shù),將結(jié)構(gòu)體數(shù)據(jù)的起始地址傳遞給形參),則會(huì)減少時(shí)間和空間上的開銷,大大提高程序執(zhí)行效率。6.4

利用結(jié)構(gòu)體指針引用結(jié)構(gòu)體數(shù)據(jù)【例6.6】用結(jié)構(gòu)體指針變量作函數(shù)參數(shù),輸出結(jié)構(gòu)體變量的值。#include<stdio.h>structStudent

//聲明結(jié)構(gòu)體類型{ intstu_ID;

//學(xué)號(hào)

charname[20];

//姓名

floatscore;

//成績(jī)};voidoutput(structStudent

*p);

//函數(shù)聲明intmain(void){ structStudentstu1={1002,"張三強(qiáng)",

78.5};

//定義結(jié)構(gòu)體變量stu1并賦值

structStudent

*pstu

=

&stu1;//定義結(jié)構(gòu)體指針變量pstu,并指向變量stu1

output(pstu);

//調(diào)用函數(shù),結(jié)構(gòu)體指針變量作函數(shù)實(shí)參}voidoutput(structStudent

*p)

//結(jié)構(gòu)體指針變量作函數(shù)形參{printf("學(xué)號(hào)姓名成績(jī)\n");printf("%d%s%.1f\n",p->stu_ID,p->name,p->score);}pstu1pstu【例6.7】改寫例6.2程序:計(jì)算一組學(xué)生的平均成績(jī),并統(tǒng)計(jì)、輸出不及格的人數(shù)。6.4.3結(jié)構(gòu)體指針變量作函數(shù)參數(shù)6.4

利用結(jié)構(gòu)體指針引用結(jié)構(gòu)體數(shù)據(jù)#include

<stdio.h>structStudent

//聲明結(jié)構(gòu)體類型{

int

stu_ID;

//學(xué)號(hào)

charname[20];//姓名

floatscore;

//成績(jī)};

voidave(structStudent

*ps,

intn);

//函數(shù)聲明intmain(void){

structStudentstu[5]

=

{{101,

"Liping",

45},{102,

"Zhangping",

62.5},

{103,

"Hefang",

92.5},{104,

"Chengling",

87},{105,

"Wangming",

58}};

//定義結(jié)構(gòu)體數(shù)組并賦初值

structStudent

*pstu

=

stu;//定義結(jié)構(gòu)體指針變量,并指向數(shù)組stu首元素ave(pstu,

5);

//調(diào)用ave函數(shù),實(shí)參:結(jié)構(gòu)體指針變量pstu、數(shù)值5}voidave(structStudent

*ps,intn)//形參:結(jié)構(gòu)體指針變量ps、變量n{

intcount=0,i;

floatave,sum=0;for(i=0;i<n;i++,

ps++){sum

=

sum

+

ps->score;if(ps->score

<

60)count++;}ave

=

sum/5;printf("平均分:%.1f\n",ave);printf("不及格人數(shù):%d\n",count);}【課后作業(yè)】

同步練習(xí)6-6:學(xué)以致用。*6.4.4結(jié)構(gòu)體指針數(shù)組及其應(yīng)用6.4

利用結(jié)構(gòu)體指針引用結(jié)構(gòu)體數(shù)據(jù)1、結(jié)構(gòu)體指針數(shù)組的概念結(jié)構(gòu)體指針數(shù)組可以存放多個(gè)結(jié)構(gòu)體數(shù)據(jù)的指針(地址)。【例6.8】用結(jié)構(gòu)體指針數(shù)組輸出結(jié)構(gòu)體數(shù)組。structStudent

//聲明結(jié)構(gòu)體類型{

int

stu_ID;

//學(xué)號(hào)

charname[20];//姓名

floatscore;

//成績(jī)};intmain(void){

int

i;

structStudentstu[3]

=

{

{1001,"Liping",45},{1002,"Zhaomin",62.5},{1003,"Hefen",92.5}

};

//定義結(jié)構(gòu)體數(shù)組,并賦初值structStudent

*ps[3]={stu,stu+1,stu+2};

//定義結(jié)構(gòu)體指針數(shù)組,并賦初值printf("學(xué)號(hào)\t姓名\t\t成績(jī)\n");for(i=0;

i<3;

i++)printf("%-6d%-20s%.1f\n",

ps[i]->stu_ID,

ps[i]->name,ps[i]->score);}*6.4.4結(jié)構(gòu)體指針數(shù)組及其應(yīng)用6.4

利用結(jié)構(gòu)體指針引用結(jié)構(gòu)體數(shù)據(jù)【例6.9】用結(jié)構(gòu)體指針數(shù)組名作為函數(shù)參數(shù),改寫例6.8,輸出結(jié)構(gòu)體數(shù)組。structStudent

//聲明結(jié)構(gòu)體類型{

int

stu_ID;

//學(xué)號(hào)

charname[20];//姓名

floatscore;

//成績(jī)};voidoutput(structStudent*p[],intn);

//函數(shù)聲明intmain(void){structStudentstu[3]

=

{

{1001,"Liping",45},{1002,"Zhaomin",62.5},{1003,"Hefen",92.5}

};

//定義結(jié)構(gòu)體數(shù)組,并賦初值structStudent

*ps[3]

={stu,stu+1,stu+2};

//定義結(jié)構(gòu)體指針數(shù)組,并賦初值

output(ps,3);

//調(diào)用output函數(shù),結(jié)構(gòu)體指針數(shù)組名作函數(shù)實(shí)參

}voidoutput(structStudent*p[],intn)

//結(jié)構(gòu)體指針數(shù)組名作函數(shù)形參{

int

i;

printf("學(xué)號(hào)\t姓名\t\t成績(jī)\n");for(i=0;

i<3;

i++)printf("%-6d%-20s%.1f\n",

p[i]->stu_ID,

p[i]->name,p[i]->score);}2、結(jié)構(gòu)體指針數(shù)組名作為函數(shù)參數(shù)——傳遞結(jié)構(gòu)體指針數(shù)組的首地址*6.4.4結(jié)構(gòu)體指針數(shù)組及其應(yīng)用6.4

利用結(jié)構(gòu)體指針引用結(jié)構(gòu)體數(shù)據(jù)說明:

(1)可在后續(xù)通過第8單元的任務(wù)8.2進(jìn)一步理解并加以掌握結(jié)構(gòu)體指針數(shù)組的應(yīng)用方法。

(2)在嵌入式軟件設(shè)計(jì)中,結(jié)構(gòu)體指針數(shù)組常用于保存嵌入式芯片外設(shè)寄存器的基地址,讀者可在后續(xù)通過參考文獻(xiàn)[2](索明何《基于構(gòu)件化的嵌入式系統(tǒng)設(shè)計(jì)》)進(jìn)一步學(xué)習(xí)。6.5.1共用體類型的概念

將變量c、i、j放在同一地址2000開始的內(nèi)存單元中。這種使多個(gè)不同的變量共用一段內(nèi)存的結(jié)構(gòu),稱為“共用體”——實(shí)現(xiàn)多個(gè)變量分時(shí)復(fù)用內(nèi)存。聲明共用體類型的一般形式:

union共用體名

{

成員列表

};6.5

利用共用體類型節(jié)省內(nèi)存空間6.5.2共用體類型的變量1、定義共用體變量的方法6.5

利用共用體類型節(jié)省內(nèi)存空間(1)先聲明共用體類型

再定義共用體變量(2)在聲明共用體類型的

同時(shí)定義共用體變量(3)不指定共用體名而

直接定義共用體變量2、共用體變量的引用方法

引用共用體變量成員的形式:共用體變量名.成員名

例如,d1.c、d1.i、d1.j分別表示引用共用體變量d1的3個(gè)成員。3、結(jié)構(gòu)體與共用體的比較

結(jié)構(gòu)體變量(所有成員共存)所占內(nèi)存長(zhǎng)度是各成員長(zhǎng)度之和。

共用體變量(各個(gè)成員互斥),在任何時(shí)刻只能使用其中的一個(gè)成員。所占內(nèi)存長(zhǎng)度是最長(zhǎng)成員的長(zhǎng)度。如共用體變量d1占4個(gè)字節(jié)(成員j的長(zhǎng)度)。共用體變量的地址和各成員的地址是相同。&d1和&d1.i、&d1.c、&d1.j相同。4、共用體變量的賦值(1)共用體變量的初始化賦值

定義變量時(shí),只能對(duì)變量的一個(gè)成員賦初值,而不能對(duì)所有的成員賦初值。例如:unionUDatad1={'a'};//'a'賦給變量d1的第1個(gè)成員cunionUDatad1={'a',12,345};//錯(cuò)誤,{}中只能有一個(gè)值unionUDatad1='a';//錯(cuò)誤,初值必須用{}括起來6.5.2共用體類型的變量6.5

利用共用體類型節(jié)省內(nèi)存空間(2)共用體變量在程序中賦值定義了共用體變量以后,只能對(duì)其成員賦值,不可對(duì)其整體賦值。同類型的共用體變量可以相互賦值。例如:unionUDatad1,d2,d[10];//定義共用體類型的變量、數(shù)組d1={'a',12,345};//錯(cuò)誤,不能對(duì)變量整體賦值d1.i=12;//將12賦給d1的成員i//同類型的共用體變量相互賦值d2=d1;d[0].c='a';//將'a'賦給d[0]的成員c【課后作業(yè)】

共用體的應(yīng)用:

例6.10和

例6.11【課堂練習(xí)】

同步練習(xí)6-7:知識(shí)鞏固。

在實(shí)際應(yīng)用中,

如果一個(gè)變量只有幾種可能的取值,例如一星期只有7天,那么該變量可定義為“枚舉(enumeration)類型”。

“枚舉”是指將變量的值一一列舉出來,變量的值僅限于列舉值的范圍內(nèi)。聲明枚舉類型:enumWeekday{Sun,

Mon,Tue,Wed,Thu,Fri,Sat};

花括號(hào)中的Sun、Mon、…、Sat稱為

枚舉元素

枚舉常量。注意:枚舉常量之間是用逗號(hào)間隔,而不是分號(hào)。定義枚舉變量:

枚舉變量只能取枚舉聲明中的某個(gè)枚舉元素值:workday=Mon;restday=Sat;enumWeekday{Sun,Mon,Tue,Wed,Thu,Fri,Sat}

workday,restday;也可以在聲明枚舉類型的同時(shí),定義枚舉變量:或

enum

{Sun,Mon,Tue,Wed,Thu,Fri,Sat}

workday,restday;6.6

利用枚舉類型簡(jiǎn)化程序如何簡(jiǎn)化書中的例題程序?

1、枚舉元素表中的每一個(gè)枚舉元素都代表一個(gè)整數(shù),默認(rèn)值依次為0、1、2、3、…。

在上述聲明中,Sun=0,Mon=1,…,Sat=6。

若人為地指定枚舉元素的數(shù)值:enumWeekday{Sun=7,Mon=1,Tue,Wed,Thu,Fri,Sat};

則:枚舉元素Sun=7,Mon=1,其后的元素按照順序依次加1,如Fri=5。說明://聲明枚舉類型//定義枚舉類型變量

2、只能把枚舉元素賦給枚舉變量,但不能把元素的數(shù)值直接賦給枚舉變量。例如:workday=Mon;//正確

workday=1;//錯(cuò)誤

workday=(enumWeekday)1;//正確(強(qiáng)制類型轉(zhuǎn)換),相當(dāng)于workday=Mon;

3、枚舉元素是常量,不是變量,因此不能在程序中再對(duì)它賦值。例如:enumWeekday{Sun,Mon,Tue,Wed,Thu,Fri,Sat}

workday;

Sun=7;//錯(cuò)誤

4、在ARM嵌入式芯片頭文件中,使用枚舉類型實(shí)現(xiàn)中斷向量號(hào)的編排(見參考文獻(xiàn)[2])。6.6

利用枚舉類型簡(jiǎn)化程序【課堂練習(xí)】

同步練習(xí)6-8:知識(shí)鞏固。

除了可以直接使用C語言提供的基本類型名(如int、char、float、double、long等)和用戶自己聲明的結(jié)構(gòu)體、共用體、枚舉類型外,還可以用typedef為已有的類型名聲明類型別名。1、用“簡(jiǎn)單且見名知意”的類型別名替代已有或復(fù)雜的類型名(1)替代基本類型6.7用typedef聲明類型別名(2)替代結(jié)構(gòu)體類型6.7用typedef聲明類型別名1、用“簡(jiǎn)單且見名知意”的類型別名替代已有或復(fù)雜的類型名_(1)用typedef聲明一個(gè)類型別名的方法步驟:(2)用typedef只是對(duì)已經(jīng)存在的類型指定一個(gè)類型別名,而沒有創(chuàng)造新的類型。2、幾點(diǎn)說明(3)#define

int16

shortint

typedef

shortint

int16;

區(qū)別:#define是在預(yù)編譯時(shí)處理的,它只能作簡(jiǎn)單的字符串替換;而typedef是在編譯階段處理的,并且它不是作簡(jiǎn)單的字符串替換,而是生成一個(gè)類型別名。

(4)可以把所有的typedef聲明單獨(dú)放在一個(gè)頭文件中,然后在需要用到它們的文件中用#include命令把其頭文件包含進(jìn)來,以便提高編程效率。6.7用typedef聲明類型別名【課后作業(yè)】

同步練習(xí)6-9:知識(shí)鞏固與應(yīng)用。6.8利用鏈表處理一組數(shù)據(jù)6.8.1鏈表概述(2)當(dāng)待處理的數(shù)據(jù)個(gè)數(shù)不確定時(shí),很難確定合適的數(shù)組長(zhǎng)度。

數(shù)組占用一片連續(xù)的存儲(chǔ)空間。優(yōu)點(diǎn):可用下標(biāo)隨機(jī)訪問任一數(shù)組元素。

缺點(diǎn):(1)對(duì)數(shù)組元素的插入或刪除操作不方便,效率較低。

鏈表,作為一種新的數(shù)據(jù)結(jié)構(gòu),可以彌補(bǔ)數(shù)組存在的以上缺陷。

一個(gè)單向鏈表由頭指針(head)和若干個(gè)節(jié)點(diǎn)組成。每個(gè)節(jié)點(diǎn)由數(shù)據(jù)域(存放本節(jié)點(diǎn)的實(shí)際數(shù)據(jù))和指針域(存放下一個(gè)節(jié)點(diǎn)的地址)兩部分組成。

頭指針用于存放第1個(gè)節(jié)點(diǎn)的地址,指向第1

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論