




版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 廠里職工安全培訓(xùn)試題附完整答案【全優(yōu)】
- 企業(yè)員工崗前安全培訓(xùn)試題及答案考試直接用
- 家庭養(yǎng)老對(duì)居民儲(chǔ)蓄的影響研究
- 項(xiàng)目部治理人員安全培訓(xùn)試題【B卷】
- 新工人入場安全培訓(xùn)試題帶答案(黃金題型)
- 公司項(xiàng)目部安全培訓(xùn)試題及答案(奪冠)
- 水體生態(tài)修復(fù)底棲動(dòng)物引入企業(yè)制定與實(shí)施新質(zhì)生產(chǎn)力戰(zhàn)略研究報(bào)告
- 演唱會(huì)直播平臺(tái)行業(yè)跨境出海戰(zhàn)略研究報(bào)告
- 心血管疾病小分子治療劑企業(yè)制定與實(shí)施新質(zhì)生產(chǎn)力戰(zhàn)略研究報(bào)告
- 環(huán)境風(fēng)險(xiǎn)評(píng)估行業(yè)深度調(diào)研及發(fā)展戰(zhàn)略咨詢報(bào)告
- 核能行業(yè)智能化核反應(yīng)堆與輻射防護(hù)方案
- 股權(quán)作抵押借款協(xié)議7篇
- 2025年甘肅省慶陽市華能慶陽煤電有限責(zé)任公司招聘筆試參考題庫附帶答案詳解
- 八年級(jí)下冊(cè)《勾股定理的逆定理》課件與練習(xí)
- 市政排水管網(wǎng)改造項(xiàng)目背景與必要性
- 外科學(xué)-闌尾疾病
- 施工現(xiàn)場動(dòng)火分級(jí)審批制度(3篇)
- 2024年黑龍江哈爾濱市中考化學(xué)真題卷及答案解析
- 衡水中學(xué)學(xué)習(xí)計(jì)劃
- 棋牌室消防應(yīng)急預(yù)案
- 智能家居的智能門鎖
評(píng)論
0/150
提交評(píng)論