指針與函數(shù)及結(jié)構(gòu)體名師優(yōu)質(zhì)課賽課一等獎(jiǎng)市公開(kāi)課獲獎(jiǎng)?wù)n件_第1頁(yè)
指針與函數(shù)及結(jié)構(gòu)體名師優(yōu)質(zhì)課賽課一等獎(jiǎng)市公開(kāi)課獲獎(jiǎng)?wù)n件_第2頁(yè)
指針與函數(shù)及結(jié)構(gòu)體名師優(yōu)質(zhì)課賽課一等獎(jiǎng)市公開(kāi)課獲獎(jiǎng)?wù)n件_第3頁(yè)
指針與函數(shù)及結(jié)構(gòu)體名師優(yōu)質(zhì)課賽課一等獎(jiǎng)市公開(kāi)課獲獎(jiǎng)?wù)n件_第4頁(yè)
指針與函數(shù)及結(jié)構(gòu)體名師優(yōu)質(zhì)課賽課一等獎(jiǎng)市公開(kāi)課獲獎(jiǎng)?wù)n件_第5頁(yè)
已閱讀5頁(yè),還剩36頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

計(jì)算機(jī)程序設(shè)計(jì)

第7章指針與函數(shù)及結(jié)構(gòu)體

第1頁(yè)指針與函數(shù)

帶參數(shù)main()函數(shù)結(jié)構(gòu)體類型枚舉類型授課內(nèi)容

第2頁(yè)7.1指針與函數(shù)指針作為函數(shù)參數(shù)

如:voidsort(int*p,intn);返回指針函數(shù)

如:char*strchr(char*str,charch);指向函數(shù)指針

如:double(*f)(double);第3頁(yè)一.指針作為函數(shù)參數(shù)指針作函數(shù)形參,能接收實(shí)參地址,被調(diào)函數(shù)經(jīng)過(guò)該指針能夠間接訪問(wèn)實(shí)參,能對(duì)實(shí)參值進(jìn)行修改。

例1:程序填空。函數(shù)功效:找x和y大數(shù),并用參數(shù)帶回結(jié)果。

intmain(){inta,b,c;cin>>a>>b;maxvalue(a,b,___);cout<<“c=“<<c<<endl;return0;}voidmaxvalue(intx,inty,______){if(x>y)_____=x;else_____=y;return;}int*z*z*z&c第4頁(yè)二.返回指針函數(shù)申明格式:

類型*函數(shù)名(形式參數(shù)表);intmain(){char*str;int

n;cin>>n;str=newchar[n+1];cout<<“+”<<mystrspace(str,n);cout<<“+”<<endl;delete[]str;return0;}

char*mystrspce(char

*str,intn)

{char*ptr=str;//保留首地址while(n>0){*ptr=‘’;ptr++;n--;}*ptr=‘\0’;//結(jié)束標(biāo)志returnstr;//返回首地址}例2:編寫一個(gè)函數(shù),用于生成含有n個(gè)空格字符串第5頁(yè)例3將月份數(shù)值(1-12)轉(zhuǎn)換為對(duì)應(yīng)英文名稱char*month_name(intn){ staticchar*month[]= { "Illegalmonth", //月份值錯(cuò)

"January", //一月

"February", //二月

"March", //三月

"April", //四月

"May", //五月

"June", //六月

"July", //七月

"August", //八月

"September", //九月

"October", //十月

"November", //十一月

"December" //十二月

}; return(n>=1&&n<=12)?month[n]:month[0];}靜態(tài)指針數(shù)組intmain(){intn;cin>>n;cout<<n<<"-"<<month_name(n)<<endl;return0;}第6頁(yè)函數(shù)原型:char*strchr(char*str,charc);

算法:

從str第一個(gè)字符查起,查到字符后就返回該字符地址;查不到則返回空值NULL。

while(*str!=‘\0’){if(*str==c)returnstr;str++;}returnNULL;完整程序以下:例4編寫返回指針函數(shù),在一個(gè)用于在字符串中查找某個(gè)字符。第7頁(yè)char*strchr(char*str,charc){while(*str!=c&&*str!=‘\0’)str++;if(*str==c)returnstr;elsereturnNULL;}

intmain(){char*str="abcdefghij";char*p;p=strchr(str,'j');if(p==NULL)cout<<"字符串中無(wú)該字符。"<<endl;elsecout<<"該字符在串中位置是:"<<p-str<<endl;cin.get();return0;}第8頁(yè)三.指向函數(shù)指針指向函數(shù)指針,能夠存放某個(gè)函數(shù)入口地址。

定義以下:

函數(shù)返回值類型

(*指針變量名)(參數(shù)說(shuō)明表);

比如:

double(*pf)(double);

float(*qf)(float,int);

第9頁(yè)使用梯形法計(jì)算定積分,等份區(qū)間n=1000。編寫通用計(jì)算定積分值函數(shù),分別計(jì)算以下定積分:

1.

f(x)=sin(x)

,

a=0,b=1

2.

g(x)=ex+sin(x),

a=0,b=2

3.h(x)=3x3+2x2-1,a=0,b=3例5編寫通用數(shù)值積分函數(shù)分別定義為函數(shù),如:doublef(doublex){returnsin(x);}doubleg(doublex){return(exp(x)+sin(x));}doubleh(doublex){doubley;y=3*x*x*x+2*x*x-1;returny;}第10頁(yè)doubleintegral(doublea,doubleb,double(*fun)(double),intn){ doubleh=(b-a)/n; doublesum=(fun(a)+fun(b))/2; for(inti=1;i<n;i++) sum+=fun(a+i*h); sum*=h; returnsum;}主函數(shù)中調(diào)用格式:

y1=integral(0.0,1.0,f,1000);y2=integral(0.0,2.0,g,1000);y3=integral(0.0,3.0,h,1000);用梯形法求解定積分通用函數(shù)代碼第11頁(yè)運(yùn)行結(jié)果第12頁(yè)7.2帶參數(shù)main()函數(shù)main()函數(shù)頭格式以下:

intmain(intargc,char*argv[])第一個(gè)參數(shù)為int型接收由命令行提供參數(shù)個(gè)數(shù)(包含程序名本身);第二個(gè)參數(shù)為字符型指針數(shù)組,用來(lái)接收命令行中提供各個(gè)參數(shù)字符串。

第13頁(yè)例6使用帶參main()編程,實(shí)現(xiàn)以下功效:若從命令行輸入:cal123+456

計(jì)算2個(gè)數(shù)和若從命令行輸入:cal56–34計(jì)算2個(gè)數(shù)差若從命令行輸入:cal56*34計(jì)算2個(gè)數(shù)乘積若從命令行輸入:cal456/34計(jì)算2個(gè)數(shù)商命令格式:命令名

整數(shù)1

運(yùn)算符

整數(shù)2第14頁(yè)第15頁(yè)結(jié)構(gòu)體類型引入7.3結(jié)構(gòu)體類型比如:1.學(xué)生成績(jī)單數(shù)據(jù):

學(xué)號(hào)、姓名、數(shù)學(xué)、物理、英語(yǔ)2.職員工資單數(shù)據(jù):

編號(hào)、姓名、部門、基本工資數(shù)據(jù)特點(diǎn):每個(gè)數(shù)據(jù)是由相互聯(lián)絡(luò)多個(gè)數(shù)據(jù)項(xiàng)組成各數(shù)據(jù)項(xiàng)數(shù)據(jù)類型可能不一樣將相互關(guān)聯(lián)、不一樣類型多個(gè)數(shù)據(jù)組織成一個(gè)數(shù)據(jù)。第16頁(yè)一.結(jié)構(gòu)體類型定義結(jié)構(gòu)體類型定義普通格式:

struct

結(jié)構(gòu)體類型名{

組員變量說(shuō)明;

};例:使用結(jié)構(gòu)體類型描述“學(xué)生成績(jī)單數(shù)據(jù)”

structgrade_list{

charnumber[10];

charname[20];

floatmath;

floatenglish;

floatphysics;

};或structgrade_list{

charnumber[10];charname[20];floatscore[3];};第17頁(yè)二.結(jié)構(gòu)體變量定義與使用1.結(jié)構(gòu)體變量定義與初始化比如:定義成績(jī)單類型變量和數(shù)組。

grade_lists1,stu[30];

初始化:grade_list

s2={”10001”,”Li”,98,95,89};2.結(jié)構(gòu)體變量使用-分別引用結(jié)構(gòu)變量各個(gè)組員

引用形式:

<結(jié)構(gòu)體變量名>.<組員名>例:s1.number表示s1學(xué)號(hào),表示s1姓名;3.結(jié)構(gòu)變量整體引用

賦值操作;如:s1=s2;作函數(shù)參數(shù)-值傳遞;函數(shù)返回結(jié)構(gòu)類型;第18頁(yè)例7結(jié)構(gòu)體應(yīng)用-統(tǒng)計(jì)學(xué)生平均分程序輸入2個(gè)學(xué)生數(shù)據(jù),每個(gè)學(xué)生數(shù)據(jù)包含:學(xué)號(hào)(字符串)、高數(shù)、英語(yǔ)和體育成績(jī)(均為整型),求其平均成績(jī)(實(shí)型)。輸入輸出格式以下:第19頁(yè)學(xué)生結(jié)構(gòu)定義structStudentType{

charid[10]; //學(xué)號(hào)

intscore[COURSE]; //課程成績(jī)

floatGPA; //平均分};constintPERSON=2;//學(xué)生人數(shù)constintCOURSE=3;//課程門數(shù)StudentTypeSt[PERSON];//學(xué)生數(shù)組第20頁(yè)inti,j;for(i=0;i<PERSON;i=i+1){cin>>St[i].id;St[i].GPA=0;

for(j=0;j<COURSE;j++)

{cin>>St[i].score[j];St[i].GPA+=St[i].score[j];

}St[i].GPA/=COURSE;}輸入及計(jì)算過(guò)程第21頁(yè)輸出部分cout<<"學(xué)號(hào)\t高數(shù)\t英語(yǔ)\t體育\t平均分"<<endl;cout<<"----------------------------------------------"<<endl;for(i=0;i<PERSON;i++){cout<<St[i].id<<"\t";for(j=0;j<COURSE;j=j+1)cout<<St[i].score[j]<<"\t";cout<<int(St[i].GPA*10)/10.0<<endl;}第22頁(yè)三.結(jié)構(gòu)體與指針structStudentType{

charid[10]; //學(xué)號(hào)

intscore[3];//課程成績(jī)

floatGPA; //平均分};StudentTypeSt={“100001”,98,95,89},StudentType*ptr=&St;例:id組員score組員GPA組員結(jié)構(gòu)變量Stptr使用ptr訪問(wèn)St組員:ptr->組員名或(*ptr).組員名cout<<“學(xué)號(hào):”<<ptr->id<<“,”<<“數(shù)學(xué):”<<ptr->

score[0];第23頁(yè)structStudentType{

charid[10]; //學(xué)號(hào)

intscore[COURSE]; //課程成績(jī)

floatGPA; //平均分};constintPERSON=2;//學(xué)生人數(shù)constintCOURSE=3;//課程門數(shù)StudentTypeSt[PERSON];//學(xué)生數(shù)組StudentType*ptr;//結(jié)構(gòu)體指針例8利用結(jié)構(gòu)體指針-統(tǒng)計(jì)學(xué)生平均分程序第24頁(yè)for(ptr=St;ptr<St+PERSON;ptr++){cin>>ptr->id;ptr->GPA=0;

for(intj=0;j<COURSE;j++)

{cin>>ptr->score[j];ptr->GPA+=ptr->score[j];

}ptr->GPA/=COURSE;}輸入及計(jì)算過(guò)程第25頁(yè)輸出部分cout<<"學(xué)號(hào)\t高數(shù)\t英語(yǔ)\t體育\t平均分"<<endl;cout<<"----------------------------------------------"<<endl;for(ptr=St;ptr<St+PERSON;ptr++){cout<<ptr->id<<"\t";for(intj=0;j<COURSE;j++)cout<<ptr->score[j]<<"\t";cout<<int(ptr->GPA*10)/10.0<<endl;}第26頁(yè)第27頁(yè)例9定義一個(gè)結(jié)構(gòu)體Rectangle(矩形),依據(jù)給定矩形左上角頂點(diǎn)坐標(biāo)和右下角頂點(diǎn)坐標(biāo),計(jì)算該矩形面積。structRectangle{

inttopleft_x;

inttopleft_y;

intbottomright_x;

intbottomright_y;};Rectangle結(jié)構(gòu)類型定義:第28頁(yè)輸入函數(shù)Input(),返回結(jié)構(gòu)類型值RectangleInput(intx1,inty1,intx2,inty2){ Rectangletmp; tmp.topleft_x=x1; tmp.topleft_y=y1; tmp.bottomright_x=x2; tmp.bottomright_y=y2; returntmp;}第29頁(yè)計(jì)算面積函數(shù)GetArea()doubleGetArea(Rectanglerect){returnfabs((rect.bottomright_x-rect.topleft_x)*(rect.bottomright_y-rect.topleft_y));}第30頁(yè)intmain(){ Rectanglerec; inttlx,tly,brx,bry; cout<<"Pleaseinputfourintegersforthetwovertexofrectangleintheorder:"<<endl; cout<<"topleft_xtopleft_ybottomright_xbottomright_y"<<endl; cin>>tlx>>tly>>brx>>bry; rec=Input(tlx,tly,brx,bry); cout<<“Area=”<<GetArea(rec)<<endl; return0;}主函數(shù)第31頁(yè)例10詞頻統(tǒng)計(jì)

輸入一系列英文單詞,單詞之間用空格隔開(kāi),用“xyz”表示輸入結(jié)束,統(tǒng)計(jì)輸入過(guò)哪些單詞以及各單詞出現(xiàn)次數(shù),統(tǒng)計(jì)時(shí)區(qū)分大小寫字母,最終按單詞字典次序輸出單詞和出現(xiàn)次數(shù)對(duì)照表。第32頁(yè)structWordList{ charword[50];//單詞 intfreq;//頻數(shù)};結(jié)構(gòu)體類型定義:WordListlist[5000];//單詞表程序結(jié)構(gòu):main()輸入單詞并進(jìn)行詞頻統(tǒng)計(jì)Sort()排序Print()輸出第33頁(yè)關(guān)鍵程序段-輸入并統(tǒng)計(jì)單詞

WordListlist[5000];//單詞表inti,num=0;//num統(tǒng)計(jì)單詞數(shù)chartemp[50];cin>>temp;//輸入一個(gè)單詞

while(strcmp(temp,"xyz")!=0) {

for(i=0;i<num;i++) { if(strcmp(list[i].word,temp)==0) { list[i].freq++; break; } } if(i>=num) { strcpy(list[i].word,temp); list[i].freq=1; num++; }

cin>>temp; }第34頁(yè)按字典次序排序voidSort(WordListlist[],intcount){ for(inti=0;i<count;i=i+1) for(intj=count-1;j>i;j=j-1) if(strcmp(list[j-1].word,list[j].word)>0) { WordListtmp; tmp=list[j-1];//交換結(jié)構(gòu)體變量 list[j-1]=list[j]; list[j]=tmp; }}第35頁(yè)voidPrint(WordListlist[],intnum){for(inti=0;i<num;i++)cout<<list[i].word<<"\t"<<list[i].freq<<endl;}輸出函數(shù)Print()第36頁(yè)7.4枚舉類型

枚舉類型描述一組次序值集合,如一個(gè)星期7天數(shù)據(jù),一年12個(gè)月份數(shù)據(jù),…。枚舉表中數(shù)據(jù)使用符號(hào)名稱列出,增強(qiáng)了程序可讀性。枚舉類型定義格式:enum<枚舉類型名>{<枚舉符號(hào)表>};例:一周7天數(shù)據(jù)定義以下:enumWeekdayType{SUNDAY,MONDAY,TUESDAY,WEDNESDAY,THURSDAY,FRIDAY,SATURDAY};WeekdayTypeworkday;第37頁(yè)說(shuō)明:每個(gè)枚舉元素是一個(gè)整數(shù)常量,默認(rèn)情況:取0,1,2,3,4,5,6定義枚舉類型時(shí),能夠?qū)γ杜e符號(hào)初始化例:enumWeekdayType{SUNDAY=7,MONDAY=1,TUESDAY,WEDNESDAY,THURSDAY,FRIDAY,SATURDAY};3.枚舉類型數(shù)據(jù)不能直接輸入輸出第38頁(yè)#include<iostream>usingnamespacestd;enumWeekdayType{SUNDAY,MONDAY,TUESDAY,WEDNESDAY,THURSDAY,FRIDAY,SATURDAY};intmain(){WeekdayTypeworkday;for(workday=SUNDAY;workday<=SATURDAY;

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(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)論