scanf("%s",body[i].depa.office);
}
printf("name\tage job class/office\n");
for(i=0;i<2;i++)
{
if(body[i].job=='s')
printf("%s\t%3d %3c %d\n",body[i].name,body[i].age
,body[i].job,body[i].depa.class);
else
printf("%s\t%3d %3c %s\n",body[i].name,body[i].age,
body[i].job,body[i].depa.office);
}
}
本例程序用一個結(jié)構(gòu)數(shù)組body來存放人員數(shù)據(jù), 該結(jié)構(gòu)共有四個成員。其中成員項(xiàng)depa是一個聯(lián)合類型, 這個聯(lián)合又由兩個成員組成,一個為整型量class,一個為字符數(shù)組office。在程序的第一個for語句中,輸入人員的各項(xiàng)數(shù)據(jù),先輸入結(jié)構(gòu)的前三個成員name,age和job,然后判別job成員項(xiàng),如為"s"則對聯(lián)合depa·class輸入(對學(xué)生賦班級編號)否則對depa·office輸入(對教師賦教研組名)。
在用scanf語句輸入時要注意,凡為數(shù)組類型的成員,無論是結(jié)構(gòu)成員還是聯(lián)合成員,在該項(xiàng)前不能再加"&"運(yùn)算符。如程序第18行中
body[i].name是一個數(shù)組類型,第22行中的body[i].depa.office也是數(shù)組類型,因此在這兩項(xiàng)之間不能加"&"運(yùn)算符。程序中的第二個for語句用于輸出各成員項(xiàng)的值:
本章小結(jié)
1. 結(jié)構(gòu)和聯(lián)合是兩種構(gòu)造類型數(shù)據(jù),是用戶定義新數(shù)據(jù)類型的重要手段。結(jié)構(gòu)和聯(lián)合有很多的相似之處,它們都由成員組成。成員可以具有不同的數(shù)據(jù)類型。成員的表示方法相同。都可用三種方式作變量說明。
2. 在結(jié)構(gòu)中,各成員都占有自己的內(nèi)存空間,它們是同時存在的。一個結(jié)構(gòu)變量的總長度等于所有成員長度之和。在聯(lián)合中,所有成員不能同時占用它的內(nèi)存空間,它們不能同時存在。聯(lián)合變量的長度等于最長的成員的長度。
3. “.”是成員運(yùn)算符,可用它表示成員項(xiàng),成員還可用“->”運(yùn)算符來表示。
4. 結(jié)構(gòu)變量可以作為函數(shù)參數(shù),函數(shù)也可返回指向結(jié)構(gòu)的指針變量。而聯(lián)合變量不能作為函數(shù)參數(shù),函數(shù)也不能返回指向聯(lián)合的指針變量。但可以使用指向聯(lián)合變量的指針,也可使用聯(lián)合數(shù)組。
5. 結(jié)構(gòu)定義允許嵌套,結(jié)構(gòu)中也可用聯(lián)合作為成員,形成結(jié)構(gòu)和聯(lián)合的嵌套。
6. 鏈表是一種重要的數(shù)據(jù)結(jié)構(gòu),它便于實(shí)現(xiàn)動態(tài)的存儲分配。本章介紹是單向鏈表,還可組成雙向鏈表,循環(huán)鏈表等。
北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內(nèi)蒙古 |