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

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

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

*p;p=&stu;

struct

結構體名*結構體變量名Mary197886stu2010203020342038p2010結構體的地址為結構體第一個成員的地址。p=&;是否可以?

不可以,類型不匹配。

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

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

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

p->age指向運算符p->age++分析:++p->age等價于(p->age)++等價于++(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指向結構體變量的指針2.成員的引用格式(2)31.定義structstudent

a[3],*p

;7.4.2指向結構體數組的指針2.使用for(

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

)

{gets(

p->name

);

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

賦初值為數組名p++表示使指針指向下一個結構體,而不是下一個成員Mary217886Alex209080Mike197568st[0]st[1]st[2]pp'p''1.定義structstudenta[3]47.4.2指向結構體數組的指針思考:1.(++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指向結構體數組的指針思考:1.(++p)->a51.函數實參和形參都用結構體變量,參數之間為值傳遞實參結構體變量各成員的值依次傳給形參結構體變量7.5.1

結構體變量作為函數參數

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.函數實參和形參都用結構體變量,參數之間為值傳遞

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

結構體變量作為函數參數3.如何計算?如1999.2.1231+12如1999.3.1331+28

+13如2000.3.1331+29+13天數=前幾個月份天數之和+當月第幾天考慮閏年如何計算前幾個月天數之和?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結構體變量作為函數參數3.如何計算?如19987.5.1

結構體變量作為函數參數intfun(structdated){intdays=0,i,t;

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

{switch(i){case1:…}

days=days+t;

}

days=days+d.day;returndays;}計算前幾個月的天數之和加上當月天數7.5.1結構體變量作為函數參數intfun(struc97.5.1

結構體變量作為函數參數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;};輸入日期傳遞整個日期結構體到函數定義日期結構體7.5.1結構體變量作為函數參數voidmain()st107.5.2

結構體指針作為函數參數2.指向結構體變量(數組)的指針做實參,將結構體變量(數組)的地址傳給形參

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結構體指針作為函數參數2.指向結構體變量(數組11例2按成績對學生信息進行從高到底的排序#include<stdio.h>#defineN30structstud{intn;charname[10];ints;};7.5.2

結構體指針作為函數參數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;}}注意進行比較的是元素st[i]和st[j]的成績成員s,但進行交換的是元素st[i]和st[j]例2按成績對學生信息進行從高到底的排序#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

結構體指針作為函數參數//傳遞的結構體數組名voidmain()7.5.2結構體指針作為函數參數137.5.3

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

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函數返回值為結構體類型格式:結構體類型函數名(14實驗實驗:P99實驗1(3)Classisover實驗實驗:P99實驗1(3)Classisover15第9講結構體與指針、函數本講內容:(1)結構體類型的指針變量(2)結構體與函數第9講結構體與指針、函數本講內容:167.4.1指向結構體變量的指針1.定義structstudent{charname[20];intage;ints1,s2;}stu={"Mary",19,78,86};structstudent

*p;p=&stu;

struct

結構體名*結構體變量名Mary197886stu2010203020342038p2010結構體的地址為結構體第一個成員的地址。p=&;是否可以?

不可以,類型不匹配。

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

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

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

p->age指向運算符p->age++分析:++p->age等價于(p->age)++等價于++(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指向結構體變量的指針2.成員的引用格式(2)181.定義structstudent

a[3],*p

;7.4.2指向結構體數組的指針2.使用for(

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

)

{gets(

p->name

);

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

賦初值為數組名p++表示使指針指向下一個結構體,而不是下一個成員Mary217886Alex209080Mike197568st[0]st[1]st[2]pp'p''1.定義structstudenta[3]197.4.2指向結構體數組的指針思考:1.(++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指向結構體數組的指針思考:1.(++p)->a201.函數實參和形參都用結構體變量,參數之間為值傳遞實參結構體變量各成員的值依次傳給形參結構體變量7.5.1

結構體變量作為函數參數

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.函數實參和形參都用結構體變量,參數之間為值傳遞

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

結構體變量作為函數參數3.如何計算?如1999.2.1231+12如1999.3.1331+28

+13如2000.3.1331+29+13天數=前幾個月份天數之和+當月第幾天考慮閏年如何計算前幾個月天數之和?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結構體變量作為函數參數3.如何計算?如199237.5.1

結構體變量作為函數參數intfun(structdated){intdays=0,i,t;

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

{switch(i){case1:…}

days=days+t;

}

days=days+d.day;returndays;}計算前幾個月的天數之和加上當月天數7.5.1結構體變量作為函數參數intfun(struc247.5.1

結構體變量作為函數參數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;};輸入日期傳遞整個日期結構體到函數定義日期結構體7.5.1結構體變量作為函數參數voidmain()st257.5.2

結構體指針作為函數參數2.指向結構體變量(數組)的指針做實參,將結構體變量(數組)的地址傳給形參

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結構體指針作為函數參數2.指向結構體變量(數組26例2按成績對學生信息進行從高到底的排序#include<stdio.h>#defineN30structstud{intn;charname[10];ints;};7.5.2

結構體指針作為函數參數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等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論