現(xiàn)實(shí)生活中存在的大部分對(duì)象具有不同的屬性,需要用不同的數(shù)據(jù)類型去描述。類如,一個(gè)公司員工的信息包括工號(hào),姓名,性別,年齡,工資等。這些屬性都是有聯(lián)系的,因?yàn)樗麄儗儆谕粋€(gè)員工。為了能夠表示同一個(gè)對(duì)象的多種屬性,C語言給出了另一種構(gòu)造數(shù)據(jù)類型——結(jié)構(gòu)體。利用結(jié)構(gòu)體能夠?qū)⒉煌愋偷臄?shù)據(jù)組合在一起,用來描述上述具有不同屬性的對(duì)象,從而解決實(shí)際問題。
在程序中使用結(jié)構(gòu)體,首先要對(duì)結(jié)構(gòu)體進(jìn)行定義。定義結(jié)構(gòu)體類型的一般形式為:
struct 結(jié)構(gòu)體名{ 數(shù)據(jù)類型 成員名1; 數(shù)據(jù)類型 成員名2; 數(shù)據(jù)類型 成員名3; … 數(shù)據(jù)類型 成員名n;};
“struct”是關(guān)鍵字,是結(jié)構(gòu)體的標(biāo)志;”結(jié)構(gòu)體名”是用戶定義的標(biāo)識(shí)符,要符合C語言的標(biāo)識(shí)符命名規(guī)則;各成員的數(shù)據(jù)類型可以是基本類型,也可以是構(gòu)造類型。例如:
struct employee{ int num; char name[20]; char sex; int age; float salary;};
定義了一個(gè)結(jié)構(gòu)體類型,結(jié)構(gòu)體類型名是employee,該結(jié)構(gòu)體由5個(gè)成員組成。
定義的結(jié)構(gòu)體類型是一種數(shù)據(jù)類型。它和系統(tǒng)提供的標(biāo)準(zhǔn)數(shù)據(jù)類型(如int,char,float,double等)具有相同的地位和作用,只不過結(jié)構(gòu)體類型需要用戶自己指定而與,而標(biāo)準(zhǔn)數(shù)據(jù)類型由系統(tǒng)定義。
說明:
1)結(jié)構(gòu)體類型的定義是程序語句,因此一定注意右花括號(hào)后面的分號(hào)不能丟。
2)結(jié)構(gòu)體中的成員可以定義成不同的數(shù)據(jù)類型,他們不是變量,因此成員名可以與程序中其他變量同名,不同結(jié)構(gòu)體中的成員也可以同名。
3)定義結(jié)構(gòu)體類型,只是定義一種和基本類型地位相同的新的數(shù)據(jù)類型,不是定義的變量。
4)定義好一個(gè)結(jié)構(gòu)體類型后,可以將其看作是與int,char,和float等數(shù)據(jù)類型一樣的一個(gè)新的數(shù)據(jù)類型,其中并無具體數(shù)據(jù),系統(tǒng)對(duì)之也沒有分配實(shí)際的內(nèi)存單元。為了能夠在程序中使用結(jié)構(gòu)體類型的數(shù)據(jù),應(yīng)當(dāng)定義結(jié)構(gòu)體類型的變量,并在其中存放具體的數(shù)據(jù)。
例1.輸入一個(gè)學(xué)生的英語期中和期末成績(jī),計(jì)算并輸出平均成績(jī)。
#include void main(){ struct study //定義結(jié)構(gòu)類型,類型名為study { float mid; float end; float average; }english; //定義結(jié)構(gòu)體類型變量english scanf(“%f,%f”,&english.mid,&english.end); //輸入期中,期末成績(jī) english.average=(english.mid+english.end)/2; //求期中,期末的平均成績(jī) printf(“average=%.1f”,english.average); //輸出所求的平均成績(jī)}
程序運(yùn)行情況如下:
如果輸入:90.5,80.5
結(jié)果如下:average=85.5
例2.建立兩個(gè)學(xué)生的基本情況表,然后將其輸出。
#include#include void main(){ struct stud //定義結(jié)構(gòu)體類型 ,類型名為stud { int num; char name[20]; char sex; int age; float score; }student1={10001,”Liu”,’F’,18,75.0},student2; //定義結(jié)構(gòu)體類型變量 student2=student1; //將student1變量中各成員的值逐個(gè)賦給student2中的相應(yīng)成員 student2.num=10002; strcpy(student2.name,”Zhang”); //將字符串復(fù)制到student2.name成員中 printf(“student1:%d,%s,%c,%d,%.1f”,student1.num,student1.name,student1.sex,student1.age,student1.score); printf(“student2:%d,%s,%c,%d,%.1f”,student2.num,student2.name,student2.sex,student2.age,student2.score);}
程序運(yùn)行結(jié)果如下:
student1:10001,Liu,F(xiàn),18,75.0
student2:10002,Zhang,F(xiàn),18,75.0