第9講-結(jié)構(gòu)體指針結(jié)構(gòu)體與函數(shù)課件_第1頁
第9講-結(jié)構(gòu)體指針結(jié)構(gòu)體與函數(shù)課件_第2頁
第9講-結(jié)構(gòu)體指針結(jié)構(gòu)體與函數(shù)課件_第3頁
第9講-結(jié)構(gòu)體指針結(jié)構(gòu)體與函數(shù)課件_第4頁
第9講-結(jié)構(gòu)體指針結(jié)構(gòu)體與函數(shù)課件_第5頁
已閱讀5頁,還剩25頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

第9講結(jié)構(gòu)體與指針、函數(shù)本講內(nèi)容:(1)結(jié)構(gòu)體類型的指針變量(2)結(jié)構(gòu)體與函數(shù)第9講結(jié)構(gòu)體與指針、函數(shù)本講內(nèi)容:17.4.1指向結(jié)構(gòu)體變量的指針1.定義structstudent{charname[20];intage;ints1,s2;}stu={"Mary",19,78,86};structstudent

*p;p=&stu;

struct

結(jié)構(gòu)體名*結(jié)構(gòu)體變量名Mary197886stu2010203020342038p2010結(jié)構(gòu)體的地址為結(jié)構(gòu)體第一個(gè)成員的地址。p=&;是否可以?

不可以,類型不匹配。

p=(structstudent*)&;改為:7.4.1指向結(jié)構(gòu)體變量的指針1.定義struct27.4.1指向結(jié)構(gòu)體變量的指針2.成員的引用格式(1)結(jié)構(gòu)體變量名.成員名

stu.age(2)(*指針變量名).成員名

(*p).age(3)指針變量名->成員名

p->age指向運(yùn)算符p->age++分析:++p->age等價(jià)于(p->age)++等價(jià)于++(p->age)不等于(++p)->agep->age類型?不是指針類型structstudent{charname[20];intage;ints1,s2;};structstudent

stu,*p;p=&stu;

gets(

);(*p).age

=21;p->s1

=87;p->s2

=90;7.4.1指向結(jié)構(gòu)體變量的指針2.成員的引用格式(2)31.定義structstudent

a[3],*p

;7.4.2指向結(jié)構(gòu)體數(shù)組的指針2.使用for(

p=a;p<a+3;p++

)

{gets(

p->name

);

scanf("%d%d%d",&p->age,&p->s1,&p->s2);}

賦初值為數(shù)組名p++表示使指針指向下一個(gè)結(jié)構(gòu)體,而不是下一個(gè)成員Mary217886Alex209080Mike197568st[0]st[1]st[2]pp'p''1.定義structstudenta[3]47.4.2指向結(jié)構(gòu)體數(shù)組的指針?biāo)伎迹?.(++p)->age先使p加1,然后的到p->age的值先得到p->age的值,然后使p加12.(p++)->age3.++p->age4.p->age++先使p->age,然后的到p->age的值先得到p->age的值,然后使p->age加17.4.2指向結(jié)構(gòu)體數(shù)組的指針?biāo)伎迹?.(++p)->a51.函數(shù)實(shí)參和形參都用結(jié)構(gòu)體變量,參數(shù)之間為值傳遞實(shí)參結(jié)構(gòu)體變量各成員的值依次傳給形參結(jié)構(gòu)體變量7.5.1

結(jié)構(gòu)體變量作為函數(shù)參數(shù)

structstudent{charname[20];intage;ints1,s2;};voidmain(){structstudent

stu={"Alex",22,98,100};

aaa(stu);printf("%d",stu.age);}voidaaa(structstudent

sss){sss.age=33;}nameages1s2Alex2298100nameages1s2stusssAlex2298100331.函數(shù)實(shí)參和形參都用結(jié)構(gòu)體變量,參數(shù)之間為值傳遞

結(jié)構(gòu)體變量作為函數(shù)參數(shù)例1輸入任意日期,計(jì)算該天是本年中第幾天。使用函數(shù)計(jì)算天數(shù)。分析:1.日期如何表示?定義日期結(jié)構(gòu)體。structdate{intyear;intmonth;intday;};2.函數(shù)如何設(shè)計(jì)?函數(shù)形參(輸入):日期結(jié)構(gòu)體變量函數(shù)返回值(輸出):天數(shù)intfun(structdated)函數(shù)原形:7.5.1結(jié)構(gòu)體變量作為函數(shù)參數(shù)例1輸入任意日期,計(jì)算77.5.1

結(jié)構(gòu)體變量作為函數(shù)參數(shù)3.如何計(jì)算?如1999.2.1231+12如1999.3.1331+28

+13如2000.3.1331+29+13天數(shù)=前幾個(gè)月份天數(shù)之和+當(dāng)月第幾天考慮閏年如何計(jì)算前幾個(gè)月天數(shù)之和?for(i=1;i<d.month;i++)

{switch(i){case1:case3:case5:case7:case8:case10:

case12:t=31;break;case4:case6:case9:case11:t=30;break;case2:if(d.year%4==0&&d.year%100!=0||d.year%400==0)t=29;elset=28;}

days=days+t;

}7.5.1結(jié)構(gòu)體變量作為函數(shù)參數(shù)3.如何計(jì)算?如19987.5.1

結(jié)構(gòu)體變量作為函數(shù)參數(shù)intfun(structdated){intdays=0,i,t;

for(i=1;i<d.month;i++)

{switch(i){case1:…}

days=days+t;

}

days=days+d.day;returndays;}計(jì)算前幾個(gè)月的天數(shù)之和加上當(dāng)月天數(shù)7.5.1結(jié)構(gòu)體變量作為函數(shù)參數(shù)intfun(struc97.5.1

結(jié)構(gòu)體變量作為函數(shù)參數(shù)voidmain(){structdated;intdays;

scanf("%d%d%d",&d.year,&d.month,&d.day);

days=fun(d);printf("dayofyearis:%d\n",days);}structdate{intyear;intmonth;intday;};輸入日期傳遞整個(gè)日期結(jié)構(gòu)體到函數(shù)定義日期結(jié)構(gòu)體7.5.1結(jié)構(gòu)體變量作為函數(shù)參數(shù)voidmain()st107.5.2

結(jié)構(gòu)體指針作為函數(shù)參數(shù)2.指向結(jié)構(gòu)體變量(數(shù)組)的指針做實(shí)參,將結(jié)構(gòu)體變量(數(shù)組)的地址傳給形參

structstudent{charname[20];intage;ints1,s2;};voidmain(){structstudent

stu,*p;

p=&stu;

aaa(p);

printf("%d",stu.age);}voidaaa(structstudent*sss){sss->age=33;}Alex2298100stup100010201024102833sss100010007.5.2結(jié)構(gòu)體指針作為函數(shù)參數(shù)2.指向結(jié)構(gòu)體變量(數(shù)組11例2按成績對(duì)學(xué)生信息進(jìn)行從高到底的排序#include<stdio.h>#defineN30structstud{intn;charname[10];ints;};7.5.2

結(jié)構(gòu)體指針作為函數(shù)參數(shù)voidsort(structstud

*p

){inti,j;

structstud

temp;

for(i=0;i<N-1;i++)for(j=i+1;j<N;j++)

if((p+i)->s<(p+j)->s)

{temp=*(p+i);*(p+i)=*(p+j);*(p+j)=temp;}}注意進(jìn)行比較的是元素st[i]和st[j]的成績成員s,但進(jìn)行交換的是元素st[i]和st[j]例2按成績對(duì)學(xué)生信息進(jìn)行從高到底的排序#include12voidmain(){

inti;structstud

st[N];

for(i=0;i<N;i++)

scanf("%d%s%d",&st[i].n,st[i].name,&st[i].s);

sort(st);for(i=0;i<N;i++)

printf("%4d%10s%4d",st[i].n,st[i].name,st[i].s);

}7.5.2

結(jié)構(gòu)體指針作為函數(shù)參數(shù)//傳遞的結(jié)構(gòu)體數(shù)組名voidmain()7.5.2結(jié)構(gòu)體指針作為函數(shù)參數(shù)137.5.3

函數(shù)返回值為結(jié)構(gòu)體類型格式:結(jié)構(gòu)體類型函數(shù)名(形參表){函數(shù)體;}例3編寫函數(shù)輸入結(jié)構(gòu)體變量,在主函數(shù)中輸出

structstudent{intnum;charname[20];floatscore;};structstudentinput(){structstudentb;

scanf("%d%s%f",&b.num,,&b.score);returnb;}voidmain(){structstudentstu;stu=input();printf("%d,%s,%5.2f\n",stu.num,,stu.score);}7.5.3函數(shù)返回值為結(jié)構(gòu)體類型格式:結(jié)構(gòu)體類型函數(shù)名(14實(shí)驗(yàn)實(shí)驗(yàn):P99實(shí)驗(yàn)1(3)Classisover實(shí)驗(yàn)實(shí)驗(yàn):P99實(shí)驗(yàn)1(3)Classisover15第9講結(jié)構(gòu)體與指針、函數(shù)本講內(nèi)容:(1)結(jié)構(gòu)體類型的指針變量(2)結(jié)構(gòu)體與函數(shù)第9講結(jié)構(gòu)體與指針、函數(shù)本講內(nèi)容:167.4.1指向結(jié)構(gòu)體變量的指針1.定義structstudent{charname[20];intage;ints1,s2;}stu={"Mary",19,78,86};structstudent

*p;p=&stu;

struct

結(jié)構(gòu)體名*結(jié)構(gòu)體變量名Mary197886stu2010203020342038p2010結(jié)構(gòu)體的地址為結(jié)構(gòu)體第一個(gè)成員的地址。p=&;是否可以?

不可以,類型不匹配。

p=(structstudent*)&;改為:7.4.1指向結(jié)構(gòu)體變量的指針1.定義struct177.4.1指向結(jié)構(gòu)體變量的指針2.成員的引用格式(1)結(jié)構(gòu)體變量名.成員名

stu.age(2)(*指針變量名).成員名

(*p).age(3)指針變量名->成員名

p->age指向運(yùn)算符p->age++分析:++p->age等價(jià)于(p->age)++等價(jià)于++(p->age)不等于(++p)->agep->age類型?不是指針類型structstudent{charname[20];intage;ints1,s2;};structstudent

stu,*p;p=&stu;

gets(

);(*p).age

=21;p->s1

=87;p->s2

=90;7.4.1指向結(jié)構(gòu)體變量的指針2.成員的引用格式(2)181.定義structstudent

a[3],*p

;7.4.2指向結(jié)構(gòu)體數(shù)組的指針2.使用for(

p=a;p<a+3;p++

)

{gets(

p->name

);

scanf("%d%d%d",&p->age,&p->s1,&p->s2);}

賦初值為數(shù)組名p++表示使指針指向下一個(gè)結(jié)構(gòu)體,而不是下一個(gè)成員Mary217886Alex209080Mike197568st[0]st[1]st[2]pp'p''1.定義structstudenta[3]197.4.2指向結(jié)構(gòu)體數(shù)組的指針?biāo)伎迹?.(++p)->age先使p加1,然后的到p->age的值先得到p->age的值,然后使p加12.(p++)->age3.++p->age4.p->age++先使p->age,然后的到p->age的值先得到p->age的值,然后使p->age加17.4.2指向結(jié)構(gòu)體數(shù)組的指針?biāo)伎迹?.(++p)->a201.函數(shù)實(shí)參和形參都用結(jié)構(gòu)體變量,參數(shù)之間為值傳遞實(shí)參結(jié)構(gòu)體變量各成員的值依次傳給形參結(jié)構(gòu)體變量7.5.1

結(jié)構(gòu)體變量作為函數(shù)參數(shù)

structstudent{charname[20];intage;ints1,s2;};voidmain(){structstudent

stu={"Alex",22,98,100};

aaa(stu);printf("%d",stu.age);}voidaaa(structstudent

sss){sss.age=33;}nameages1s2Alex2298100nameages1s2stusssAlex2298100331.函數(shù)實(shí)參和形參都用結(jié)構(gòu)體變量,參數(shù)之間為值傳遞

結(jié)構(gòu)體變量作為函數(shù)參數(shù)例1輸入任意日期,計(jì)算該天是本年中第幾天。使用函數(shù)計(jì)算天數(shù)。分析:1.日期如何表示?定義日期結(jié)構(gòu)體。structdate{intyear;intmonth;intday;};2.函數(shù)如何設(shè)計(jì)?函數(shù)形參(輸入):日期結(jié)構(gòu)體變量函數(shù)返回值(輸出):天數(shù)intfun(structdated)函數(shù)原形:7.5.1結(jié)構(gòu)體變量作為函數(shù)參數(shù)例1輸入任意日期,計(jì)算227.5.1

結(jié)構(gòu)體變量作為函數(shù)參數(shù)3.如何計(jì)算?如1999.2.1231+12如1999.3.1331+28

+13如2000.3.1331+29+13天數(shù)=前幾個(gè)月份天數(shù)之和+當(dāng)月第幾天考慮閏年如何計(jì)算前幾個(gè)月天數(shù)之和?for(i=1;i<d.month;i++)

{switch(i){case1:case3:case5:case7:case8:case10:

case12:t=31;break;case4:case6:case9:case11:t=30;break;case2:if(d.year%4==0&&d.year%100!=0||d.year%400==0)t=29;elset=28;}

days=days+t;

}7.5.1結(jié)構(gòu)體變量作為函數(shù)參數(shù)3.如何計(jì)算?如199237.5.1

結(jié)構(gòu)體變量作為函數(shù)參數(shù)intfun(structdated){intdays=0,i,t;

for(i=1;i<d.month;i++)

{switch(i){case1:…}

days=days+t;

}

days=days+d.day;returndays;}計(jì)算前幾個(gè)月的天數(shù)之和加上當(dāng)月天數(shù)7.5.1結(jié)構(gòu)體變量作為函數(shù)參數(shù)intfun(struc247.5.1

結(jié)構(gòu)體變量作為函數(shù)參數(shù)voidmain(){structdated;intdays;

scanf("%d%d%d",&d.year,&d.month,&d.day);

days=fun(d);printf("dayofyearis:%d\n",days);}structdate{intyear;intmonth;intday;};輸入日期傳遞整個(gè)日期結(jié)構(gòu)體到函數(shù)定義日期結(jié)構(gòu)體7.5.1結(jié)構(gòu)體變量作為函數(shù)參數(shù)voidmain()st257.5.2

結(jié)構(gòu)體指針作為函數(shù)參數(shù)2.指向結(jié)構(gòu)體變量(數(shù)組)的指針做實(shí)參,將結(jié)構(gòu)體變量(數(shù)組)的地址傳給形參

structstudent{charname[20];intage;ints1,s2;};voidmain(){structstudent

stu,*p;

p=&stu;

aaa(p);

printf("%d",stu.age);}voidaaa(structstudent*sss){sss->age=33;}Alex2298100stup100010201024102833sss100010007.5.2結(jié)構(gòu)體指針作為函數(shù)參數(shù)2.指向結(jié)構(gòu)體變量(數(shù)組26例2按成績對(duì)學(xué)生信息進(jìn)行從高到底的排序#include<stdio.h>#defineN30structstud{intn;charname[10];ints;};7.5.2

結(jié)構(gòu)體指針作為函數(shù)參數(shù)voidsort(structstud

*p

){inti,j;

structstud

temp;

for(i=0;i<N-1;i++)for(j=i+1;j<N;j++)

if((p+i)->s<(p+j)->s)

溫馨提示

  • 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)論