C語言程序設(shè)計(jì)案例教程:結(jié)構(gòu)體_第1頁
C語言程序設(shè)計(jì)案例教程:結(jié)構(gòu)體_第2頁
C語言程序設(shè)計(jì)案例教程:結(jié)構(gòu)體_第3頁
C語言程序設(shè)計(jì)案例教程:結(jié)構(gòu)體_第4頁
C語言程序設(shè)計(jì)案例教程:結(jié)構(gòu)體_第5頁
已閱讀5頁,還剩28頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

結(jié)構(gòu)體TeacherteachingdesignCONTENTS

目錄結(jié)構(gòu)體的定義方式結(jié)構(gòu)體變量的引用結(jié)構(gòu)體數(shù)組案例分析仿真演練結(jié)構(gòu)體的定義方式點(diǎn)PART01第一步:定義結(jié)構(gòu)體類型的名稱和成員構(gòu)成第二步:用結(jié)構(gòu)體類型名定義結(jié)構(gòu)體變量定義結(jié)構(gòu)體類型變量struct<結(jié)構(gòu)體類型名>{

<類型標(biāo)識(shí)符><成員名1>;

<類型標(biāo)識(shí)符><成員名n>;};定義結(jié)構(gòu)體變量的格式是:struct<結(jié)構(gòu)體類型名><結(jié)構(gòu)體變量表>;(一)先定義(構(gòu)造)結(jié)構(gòu)體類型,再定義結(jié)構(gòu)體類型變量structstudent{

charname[10];

charno[8];

charsex;

intage;

floatscore;};structstudentstud1,stud2;例如格式舉例structstudent{

charname[10];

charno[8];

charsex;

intage;

floatscore;}stud1,stud2;例如struct<結(jié)構(gòu)體類型名>{<類型標(biāo)識(shí)符><成員名1>;…<類型標(biāo)識(shí)符><成員名n>;}<結(jié)構(gòu)體變量表>;(二)在定義結(jié)構(gòu)體類型的同時(shí)定義結(jié)構(gòu)體變量struct{<類型標(biāo)識(shí)符><成員名1>;

…<類型標(biāo)識(shí)符><成員名n>;}<結(jié)構(gòu)體變量表>;struct{charname[10];charno[8];charsex;intage;floatscore;}stud1,stud2;例如(三)在定義結(jié)構(gòu)體類型時(shí),不設(shè)置結(jié)構(gòu)體名,而是直接定義結(jié)構(gòu)體變量說明:這種形式一般不使用。這種定義格式一定要用大括號(hào)把初始化表括起來,不同的成員初值用逗號(hào)隔開,且字符要加單引號(hào)定界,字符串要加雙引號(hào)定界,數(shù)組加大括號(hào)定界。說明:staticstructstudent{charname[20];charsex;intage;floatscore;}stu1,stu2={“Wangwu”,’m’,20,88.5};(四)靜態(tài)變量的結(jié)構(gòu)體變量定義格式例如:structstudent{intnum,age;charname[20],sex,addr[30];structstudy{floatChinese,Math,Physics,English;}score;};例如:(五)嵌套定義,即在結(jié)構(gòu)體類型定義中又有結(jié)構(gòu)體類型的成員不要把結(jié)構(gòu)體類型名和結(jié)構(gòu)體變量名混淆起來(2)花括號(hào)外的分號(hào)不能省略,它標(biāo)示結(jié)構(gòu)體定義語句的終止(4)struct是關(guān)鍵字,作為定義結(jié)構(gòu)體類型的標(biāo)志,后面緊跟的是結(jié)構(gòu)體類型名,由用戶自行定義。(3)花括號(hào)內(nèi)是結(jié)構(gòu)體的成員說明表,也稱為數(shù)據(jù)項(xiàng),也稱為成員或分量,用來說明該結(jié)構(gòu)體有哪些成員及它們屬于哪種數(shù)據(jù)類型,占多少個(gè)字節(jié),按什么形式存儲(chǔ),但不會(huì)為其分配存儲(chǔ)空間,只有在定義一個(gè)結(jié)構(gòu)體變量時(shí),才會(huì)為該變量分配內(nèi)存空間。其中成員之間名稱不能相同,但數(shù)據(jù)類型可以相同。(1)補(bǔ)充說明結(jié)構(gòu)體變量的引用PART02動(dòng)態(tài)存儲(chǔ)的結(jié)構(gòu)體變量,不能在定義時(shí)進(jìn)行初始化,只能通過賦值語句,輸入函數(shù)等形式分別對(duì)其中的成員賦值。<結(jié)構(gòu)體變量名>.<成員名>成員的引用格式“.”是成員運(yùn)算符,表示對(duì)結(jié)構(gòu)體變量的哪個(gè)成員進(jìn)行引用,成員運(yùn)算符的優(yōu)先級(jí)在所有運(yùn)算中是最高的。結(jié)構(gòu)體變量的引用

如:today.year=2012;如果成員本身又是一個(gè)結(jié)構(gòu)體則必須逐級(jí)找到最低級(jí)的成員進(jìn)行引用。

例如,today.time.second=15;單獨(dú)引用結(jié)構(gòu)體變量的成員1如:nextday=today;結(jié)構(gòu)體變量作為一個(gè)整體引用2structclock{inthour,minute,second;};structdate{intyear,month,day;structclocktime;}today,nextday;引用舉例stud2=stud1;要求具有相同的結(jié)構(gòu)體數(shù)據(jù)類型。整體賦值把結(jié)構(gòu)體變量stud1各成員的值分別賦值給結(jié)構(gòu)體變量stud2的各成員成員分別賦值strcpy(,);stud2.score=stud1.score;成員賦值舉例結(jié)構(gòu)體變量的賦值注意:字符數(shù)組之間賦值不能使用賦值運(yùn)算符,必須使用字符串賦值函數(shù)strcpy。scanf("%d,%s,%c,%d,%f,%s\n",&student1);錯(cuò)誤示例1scanf("%s",);scanf("%f",&stud2.score);正確示例2如果使用scanf函數(shù)接收結(jié)構(gòu)體變量的值,不能直接針對(duì)結(jié)構(gòu)體變量接收輸入,要將成員分開接收輸

入結(jié)構(gòu)體變量的輸入和輸出結(jié)構(gòu)體變量的輸出也是被分解到各成員的輸出上,以正確的引用方式和對(duì)應(yīng)的類型輸出控制符對(duì)應(yīng)即可。例:printf("%s\n",);輸

出sizeof(stud1)的字節(jié)數(shù)為25,sizeof(stud2)的字節(jié)數(shù)也為25。struct{charname[10];charno[8];charsex;intage;floatscore;}stud1,stud2;舉例感知結(jié)構(gòu)體變量存儲(chǔ)空間的大小等于結(jié)構(gòu)體類型各成員分量所占字節(jié)數(shù)之和存儲(chǔ)空間計(jì)算結(jié)構(gòu)體變量存儲(chǔ)空間結(jié)構(gòu)體數(shù)組PART03struct<結(jié)構(gòu)體類型名><結(jié)構(gòu)體數(shù)組名>[<長度>];定義格式要定義一個(gè)結(jié)構(gòu)體數(shù)組,首先要定義一個(gè)結(jié)構(gòu)體類型,然后再把數(shù)組定義為結(jié)構(gòu)體類型。說明先定義結(jié)構(gòu)體類型,再定義結(jié)構(gòu)體數(shù)組格式一定義結(jié)構(gòu)體類型的同時(shí),定義結(jié)構(gòu)體數(shù)組格式二結(jié)構(gòu)體數(shù)組的定義structstudent{intnum;charname[20];charsex;

intage;floatscore;}stu[30];structstudentstud[10];格式一舉例structstudent{intnum;charname[20];charsex;intage;floatscore;}stu[30];格式二舉例結(jié)構(gòu)體數(shù)組的定義先定義結(jié)構(gòu)體類型再定義結(jié)構(gòu)體數(shù)組定義結(jié)構(gòu)體類型的同時(shí),定義結(jié)構(gòu)體數(shù)組structstudentstud[10];structstudent{intnum;charname[20];charsex;intage;floatscore;charaddr[30];}stu[3]={{101,”WGJ”,’M’,28,88.5,“CS”},{102,”DYH”,’F’,26,88.0,”CS”},{103,”DYC”,’M’,24,78.5,”CZ”}};結(jié)構(gòu)體數(shù)組中每個(gè)元素的初始化列表都要用一對(duì)花括號(hào)括起來以示區(qū)分,花括號(hào)之間用逗號(hào)相隔結(jié)構(gòu)體數(shù)組的初始化每個(gè)元素的初始化表中的數(shù)據(jù)類型要與對(duì)一個(gè)成員的類型一致<數(shù)組名>[<下標(biāo)號(hào)>].<成員名>引用格式在引用數(shù)組元素時(shí),每個(gè)元素就是一個(gè)結(jié)構(gòu)體變量,要把元素的引用和結(jié)構(gòu)體變量成員的引用結(jié)合起來舉例感知結(jié)構(gòu)體數(shù)組元素的引用stu[1].num=102;表示引用下標(biāo)為1的元素的成員num。案例分析

交流提升PART04main(){structstu{

intnum;char*name;charsex;floatscore;}boy1,boy2;boy1.num=102;="Zhangping";printf("inputsexandscore\n");scanf("%c%f",&boy1.sex,&boy1.score);boy2=boy1;printf("Number=%d\nName=%s\n",boy2.num,);printf("Sex=%c\nScore=%f\n",boy2.sex,boy2.score);}給結(jié)構(gòu)變量賦值并輸出其值。main(){

structobject{

charname[16];floathigh;floatweight;};structobjectbox[3]={{“One”,1.7,33.25},{“Two”,2.9,56.92},{“Three”,0.32,19.78}};inti;for(i=0;i<3;i++)printf(“%-16s%8.2f%8.2f\n”,box[i].name,box[i].high,box[i].weight);}運(yùn)行結(jié)果One1.7033.25Two2.9056.92Three0.3219.78分析以下結(jié)構(gòu)體數(shù)組初始化程序運(yùn)行后輸出結(jié)果源程序結(jié)構(gòu)體數(shù)組的初始化就是將結(jié)構(gòu)體數(shù)組的每個(gè)元素初始化后用“{}”括起來即可main(){structobject{charname[16];floathigh;floatweight;};structobjectbox[3]={{“One”,1.7,33.25},{“Two”,2.9,56.92},{“Three”,0.32,19.78}};inti;for(i=0;i<3;i++)printf(“%-16s%8.2f%8.2f\n”,box[i].name,box[i].high,box[i].weight);}One1.7033.25Two2.9056.92Three0.3219.78運(yùn)行結(jié)果分析以下結(jié)構(gòu)體數(shù)組初始化程序運(yùn)行后輸出結(jié)果源程序main(){inti,c=0;floatave,s=0;for(i=0;i<5;i++){s+=boy[i].score;if(boy[i].score<60)c+=1;}printf("s=%f\n",s);ave=s/5;printf("average=%f\ncount=%d\n",ave,c);}主函數(shù)structstu{intnum;char*name;charsex;floatscore;}boy[5]={{101,"Liping",'M',45},{102,"Zhangping",'M',62.5},{103,"Hefang",'F',92.5},{104,"Chengling",'F',87},{105,"Wangming",'M',58},};定義結(jié)構(gòu)體類型并初始化計(jì)算學(xué)生的平均成績和不及格的人數(shù)仿真演練

體驗(yàn)探索PART05源程序選項(xiàng)A)20045537B)20041580C)20042580D)20041703答案B分析:主函數(shù)中定義并初始化了結(jié)構(gòu)體數(shù)組,輸出為數(shù)組中第一個(gè)元素的num和第二個(gè)數(shù)組元素的TotalScore分析以下程序的運(yùn)行后的輸出結(jié)果#include<string.h>structSTU{

intnum;

floatTotalScore;};main(){

structSTUs[2]={{20041,703},{20042,580}};

printf("%d%3.0f\n",s[0].num,s[1].TotalScore);}C答案structstu{inta;floatb;}stutype;說明語句stutype是定義的結(jié)構(gòu)體類型變量名分析A)struct是結(jié)構(gòu)體類型的關(guān)鍵字B)structstu是用戶定義結(jié)構(gòu)體類型C)stutype是用戶定義的結(jié)構(gòu)體類型名D)a和b都是結(jié)構(gòu)體成員名選項(xiàng)如下說明語句,則下面敘述不正確的是A)1B)2C)8D)11選項(xiàng)若有定義:structdata{inti;charch;doublef;}b;則結(jié)構(gòu)變量b占用內(nèi)存的字節(jié)數(shù)是(

)題目分析結(jié)構(gòu)體變量所占字節(jié)數(shù)√符合結(jié)

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(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ǔ)空間,僅對(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)論