第8章 根據(jù)需要?jiǎng)?chuàng)建數(shù)據(jù)類型_第1頁
第8章 根據(jù)需要?jiǎng)?chuàng)建數(shù)據(jù)類型_第2頁
第8章 根據(jù)需要?jiǎng)?chuàng)建數(shù)據(jù)類型_第3頁
第8章 根據(jù)需要?jiǎng)?chuàng)建數(shù)據(jù)類型_第4頁
第8章 根據(jù)需要?jiǎng)?chuàng)建數(shù)據(jù)類型_第5頁
已閱讀5頁,還剩20頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

11龐立華2016年9月高級(jí)語言(yǔyán)程序設(shè)計(jì)(C語言)1共二十五頁第8章根據(jù)(gēnjù)需要?jiǎng)?chuàng)建數(shù)據(jù)類型8.1定義和引用結(jié)構(gòu)(jiégòu)體變量8.2使用結(jié)構(gòu)體數(shù)組8.3結(jié)構(gòu)體指針8.4用指針處理鏈表8.5使用枚舉類型2共二十五頁重點(diǎn)(zhòngdiǎn)

Focus結(jié)構(gòu)(jiégòu)體第8章根據(jù)需要?jiǎng)?chuàng)建數(shù)據(jù)類型3共二十五頁難點(diǎn)(nádiǎn)

Difficulties

8.2使用(shǐyòng)結(jié)構(gòu)體數(shù)組8.3結(jié)構(gòu)體指針第8章根據(jù)需要?jiǎng)?chuàng)建數(shù)據(jù)類型4共二十五頁有時(shí)需要將不同類型的數(shù)據(jù)組合成一個(gè)有機(jī)的整體如:一個(gè)學(xué)生的信息:學(xué)號(hào)(num),姓名(name),性別(sex),年齡(age),成績(score),家庭地址(addr)等結(jié)構(gòu)體:若干個(gè)數(shù)據(jù)類型不同(也可相同(xiānɡtónɡ))的數(shù)據(jù)項(xiàng)的組合結(jié)構(gòu)體是一種數(shù)據(jù)結(jié)構(gòu),需要用戶根據(jù)自己的需要,按照某種規(guī)則創(chuàng)建,即創(chuàng)建結(jié)構(gòu)體類型numnamestudent_1addrscoreagesex0502LiYanM1891Zhejiang8.1定義和引用(yǐnyòng)結(jié)構(gòu)體變量5共二十五頁8.1.1

創(chuàng)建(chuàngjiàn)結(jié)構(gòu)體類型的一般形式:struct

結(jié)構(gòu)體名{成員列表};struct是關(guān)鍵字,表示(biǎoshì)是結(jié)構(gòu)體類型student

是結(jié)構(gòu)體名structstudent是結(jié)構(gòu)體類型名結(jié)構(gòu)體中的各成員形式:類型符成員名;8.1定義和引用結(jié)構(gòu)體變量struct

student{intnum;charname[20];charsex;intage;floatscore;charaddr[30];};student并非變量名成員也可以是結(jié)構(gòu)體類型類似int6共二十五頁8.1.2怎樣定義結(jié)構(gòu)體類型變量(1)先聲明結(jié)構(gòu)體類型再定義變量名將一個(gè)變量定義為結(jié)構(gòu)體類型:不僅要求指定(zhǐdìng)變量為結(jié)構(gòu)體類型而且要求指定為某一特定的結(jié)構(gòu)體類型。一般形式:struct結(jié)構(gòu)(jiégòu)體名{成員表列};struct結(jié)構(gòu)體名變量名表列;8.1定義和引用結(jié)構(gòu)體變量structstudent{intnum;charname[20];charsex;intage;floatscore;charaddr[30];};structstudentstudent1,student2;7共二十五頁(2)在定義(dìngyì)結(jié)構(gòu)體類型的同時(shí)定義變量一般形式:struct結(jié)構(gòu)(jiégòu)體類型名{成員表列}

變量名表列;8.1定義和引用結(jié)構(gòu)體變量structstudent{intnum;charname[20];charsex;intage;floatscore;charaddr[30];}student1,student2;8共二十五頁(3)直接(zhíjiē)定義結(jié)構(gòu)體類型的變量一般(yībān)形式:struct{成員表列}

變量名表列;8.1定義和引用結(jié)構(gòu)體變量struct{intnum;charname[20];charsex;intage;floatscore;charaddr[30];}student1,student2;9共二十五頁說明:1、類型與變量的區(qū)別(qūbié):定義時(shí)先定義結(jié)構(gòu)體類型,然后定義變量。類型不分配空間,變量分配空間。2、結(jié)構(gòu)體可以嵌套定義:結(jié)構(gòu)體成員也可以是結(jié)構(gòu)體變量。3、成員名可以與變量名相同structdate{intmonth;intday;intyear;};structdate

data1;structstudent{intnum;charname[20];charsex;intage;structdatebirthday;charaddr[30];}student1;8.1定義和引用結(jié)構(gòu)(jiégòu)體變量10共二十五頁8.1.3引用結(jié)構(gòu)體變量

結(jié)構(gòu)體變量名.成員名規(guī)則:1、不能將結(jié)構(gòu)體變量作為一個(gè)整體(zhěngtǐ)進(jìn)行賦值、輸出,只能對(duì)結(jié)構(gòu)體中各個(gè)成員分別進(jìn)行;但允許將一個(gè)結(jié)構(gòu)體變量直接賦值給另一個(gè)具有相同結(jié)構(gòu)的結(jié)構(gòu)體變量;2、如果是嵌套定義,用若干個(gè)成員運(yùn)算符,一級(jí)一級(jí)的找到最低一級(jí)的成員。如:student1.num=10000;strcpy(student1.name,"zhangsan");student1=student2;如:student1.num;;student1.birthday.month;student1.birthday.day;student1.birthday.year;8.1定義和引用(yǐnyòng)結(jié)構(gòu)體變量11共二十五頁3、結(jié)構(gòu)體成員變量可以像普通變量一樣使用、運(yùn)算(yùnsuàn);(但是用形式不同)4、可以引用成員的地址,也可以引用結(jié)構(gòu)體變量的地址如:student2.score=student1.score;sum=student1.score+student2.score;student1.age++;++student1.age;如:scanf("%d",&student1.num);(輸入的數(shù)據(jù)(shùjù)送到student1.num所在的存儲(chǔ)空間)8.1定義和引用結(jié)構(gòu)體變量最低級(jí)成員變量為基本類型12共二十五頁結(jié)構(gòu)體變量(biànliàng)的初始化和其他變量一樣,在定義結(jié)構(gòu)體變量時(shí)可以賦初值8.1定義(dìngyì)和引用結(jié)構(gòu)體變量例8.1#include<stdio.h>intmain(){structstudent{intnum;charname[20];charsex;charaddr[20];}a={504,"Liming",'M',"陜鼓大道123"};printf("學(xué)號(hào):%d\n姓名:%s\n性別:%c\n住址:%s\n",a.num,,a.sex,a.addr);return0;}13共二十五頁8.2結(jié)構(gòu)(jiégòu)體數(shù)組由多個(gè)相同類型的結(jié)構(gòu)體變量組成的數(shù)組——結(jié)構(gòu)體數(shù)組數(shù)組中每一個(gè)元素都是一個(gè)結(jié)構(gòu)體類型的數(shù)據(jù)。8.2.1如何定義結(jié)構(gòu)體數(shù)組與定義結(jié)構(gòu)體變量相似(xiānɡsì),只需說明其為數(shù)組2、struct結(jié)構(gòu)體名{成員表列}數(shù)組名[數(shù)組長度];3、struct

{成員表列}數(shù)組名[數(shù)組長度];1、struct結(jié)構(gòu)體名{成員表列};struct結(jié)構(gòu)體類型

數(shù)組名[數(shù)組長度];structperson{charname[20];intcount;};structpersonleader[3];structperson{charname[20];intcount;}leader[3];struct{charname[20];intcount;}leader[3];14共二十五頁初始化一般(yībān)形式:結(jié)構(gòu)體類型

數(shù)組名[數(shù)組長度]={初值表列};例:8.2結(jié)構(gòu)(jiégòu)體數(shù)組structstudent{intnum;charname[20];charsex;intage;floatscore;charaddr[30];};structstudent

stu[3]={{10101,"李林",'M',18,87.5,"103北京路"},{10102,"張奇",'M',19,89,"130上海路"},{10104,"王敏",'F',17,95,"1010學(xué)院路"}};15共二十五頁結(jié)構(gòu)(jiégòu)體數(shù)組在內(nèi)存中連續(xù)存放10101"李林"'M'1887.5"103北京路"10102"張奇"'M'1989"130上海路"stu[1].numstu[1].namestu[1].sexstustu+18.2結(jié)構(gòu)(jiégòu)體數(shù)組引用方式16共二十五頁例8-2.有三個(gè)候選人,每個(gè)選民只能投一票選一人,要求編寫一個(gè)統(tǒng)計(jì)選票(xuǎnpiào)的程序,先輸入被選人的名字,最后輸出各人得票結(jié)果。#include<stdio.h>#include<string.h>intmain(){inti,j;charleader_name[20];

structPerson{charname[20];

intcount;}leader[3]={"Li",0,"Zhang",0,"Fan",0};for(i=1;i<=10;i++)//10個(gè)投票(tóupiào)人{(lán)scanf("%s",leader_name);for(j=0;j<3;j++)if(strcmp(leader_name,leader[j].name)==0)

leader[j].count++; }printf("\nResult:\n");for(i=0;i<3;i++)printf("%5s:%d\n",leader[i].name,leader[i].count);return0;}8.2結(jié)構(gòu)體數(shù)組17共二十五頁8.3結(jié)構(gòu)(jiégòu)體指針8.3.1指向結(jié)構(gòu)體變量的指針指向結(jié)構(gòu)體變量的指針:是該變量所占內(nèi)存段的起始地址指向結(jié)構(gòu)體的指針變量既可以指向結(jié)構(gòu)體變量,也可以指向結(jié)構(gòu)體數(shù)組的元素;指針變量的基類型必須與結(jié)構(gòu)體變量的類型相同。定義(dìngyì)形式:struct結(jié)構(gòu)體名*指針名如:structstudentstu,*p=&stu;引用方式:(*p).成員名

*p兩側(cè)的括號(hào)不能省略p->成員名

等價(jià)于(*p).成員名18共二十五頁說明:為了使用方便,c語言用p->num代表(*p).num.->為指向運(yùn)算符如果p指向stu,以下3種寫法等價(jià):1、結(jié)構(gòu)體變量.成員(chéngyuán)名stu.num2、(*p).成員名(*p).num3、p->成員名p->num試分析以下幾種運(yùn)算:p->np指向的結(jié)構(gòu)體變量中的成員n的值p->n++p指向的結(jié)構(gòu)體變量中的成員n的值+1(后加)++p->n

p指向的結(jié)構(gòu)體變量中的成員n的值+1(先加)8.3結(jié)構(gòu)(jiégòu)體指針內(nèi)容19共二十五頁例8-5通過指向結(jié)構(gòu)體變量的指針變量輸出結(jié)構(gòu)體變量中成員(chéngyuán)信息#include<stdio.h>#include<string.h>intmain(){structStudent{intnum;charname[20];charsex;floatscore;}stu1={10110,"LiMing",'M',89.5},*p;p=&stu1;printf("NO.:%d\nname:%s\nsex:%c\nscore:%5.1f\n",stu1.num,,stu1.sex,stu1.score);printf("NO.:%d\nname:%s\nsex:%c\nscore:%5.1f\n",(*p).num,(*p).name,p->sex,p->score);return0;}8.3結(jié)構(gòu)(jiégòu)體指針20共二十五頁8.3.2指向結(jié)構(gòu)(jiégòu)體數(shù)組的指針10101"李林"'M'1887.5"103北京路"10102"張奇"'M'1989"130上海路"stu[0].namestu[0].sexp=stup+1注意:P定義為一個(gè)指向structStudent類型的指針變量,它用來(yònɡlái)指向一個(gè)structStudent類型的對(duì)象。不能用來指向stu數(shù)組元素中的某一成員。p=stu[0].name;

×8.3結(jié)構(gòu)體指針stu[0].num類型不匹配21共二十五頁例8-6有3個(gè)學(xué)生的信息,放在結(jié)構(gòu)體數(shù)組中,要求輸出全部學(xué)生的信息。分析:用指向結(jié)構(gòu)體變量的指針(zhǐzhēn)來處理1、聲明結(jié)構(gòu)體類型、定義結(jié)構(gòu)體數(shù)組并完成初始化;2、定義一個(gè)指向結(jié)構(gòu)體數(shù)組的指針變量p;3、使p指向結(jié)構(gòu)體數(shù)組的首元素,輸出它指向元素的所有內(nèi)容;4、使p指向下一個(gè)元素,輸出內(nèi)容;5、重復(fù)4,直到所有元素內(nèi)容都被輸出。8.3結(jié)構(gòu)(jiégòu)體指針22共二十五頁8.3結(jié)構(gòu)(jiégòu)體指針#include<stdio.h>intmain(){structStudent{intnum;charname[20];charsex;intage;}stu[3]={{10101,"LiMing",'M',18},{10102,"WangYue",'F',

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(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)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論