




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- Unit 4 Time Story Time(教學設計)-2023-2024學年人教新起點版英語二年級下冊
- 血透患者高鉀血癥的護理
- 員工安全培訓
- 2025年脈沖反應堆及配套產品項目合作計劃書
- 第一單元 文具第1課時 教案2024-2025學年數學一年級上冊-北師大版
- Module9單元備課(教學設計)-2024-2025學年外研版(一起)英語六年級上冊
- 2025年杭州貨運資格證考試題答案
- 中國傳統(tǒng)行業(yè)介紹
- 2025年寧波運輸從業(yè)資格證考試試題庫
- 2025年江西貨運從業(yè)資格證500道題目答案解析
- 單片機實訓室建設方案
- 材料認質認價單(完整版)
- 四年級下冊科學3保護土壤資源冀人版
- 第六章 肝臟病常用的實驗室檢測
- 南寧市存量房買賣合同范本
- 好書介紹愛德華的奇妙之旅PPT課件
- 環(huán)境違法行立案審批表
- 壓力容器涂敷工藝規(guī)程指導書
- 教研組工作總結PPT
- 交通標線設計圖(與對應cad為一套圖紙)
- 扭王字塊預制專項施工方案
評論
0/150
提交評論