版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 貴州大學(xué)《行政監(jiān)督學(xué)》2023-2024學(xué)年第一學(xué)期期末試卷
- 貴州財(cái)經(jīng)大學(xué)《生物制藥綜合實(shí)驗(yàn)》2023-2024學(xué)年第一學(xué)期期末試卷
- 貴陽(yáng)學(xué)院《裝飾材料構(gòu)造與人體工程學(xué)》2023-2024學(xué)年第一學(xué)期期末試卷
- 2025江西建筑安全員C證考試(專職安全員)題庫(kù)附答案
- 2025青海建筑安全員B證考試題庫(kù)及答案
- 2025年四川建筑安全員C證考試題庫(kù)
- 貴陽(yáng)信息科技學(xué)院《機(jī)械原理(實(shí)驗(yàn))》2023-2024學(xué)年第一學(xué)期期末試卷
- 硅湖職業(yè)技術(shù)學(xué)院《工業(yè)發(fā)酵分析》2023-2024學(xué)年第一學(xué)期期末試卷
- 2025貴州省建筑安全員《A證》考試題庫(kù)
- 廣州新華學(xué)院《實(shí)驗(yàn)設(shè)計(jì)與數(shù)據(jù)處理》2023-2024學(xué)年第一學(xué)期期末試卷
- DB13T 2974-2019 信息系統(tǒng)集成服務(wù)資費(fèi)評(píng)估指南
- 春節(jié)期間施工現(xiàn)場(chǎng)安全方案
- 黑龍江省建筑工程施工質(zhì)量驗(yàn)收標(biāo)準(zhǔn)DB23-2017
- 自貢鴻鶴化工股份有限公司20萬(wàn)噸離子膜燒堿等量搬遷升級(jí)改造項(xiàng)目
- 醫(yī)院關(guān)于成立安全生產(chǎn)領(lǐng)導(dǎo)小組的通知
- 【施工方案】空調(diào)百葉施工方案
- ppt模板熱烈歡迎領(lǐng)導(dǎo)蒞臨指導(dǎo)模板課件(15頁(yè)P(yáng)PT)
- 領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)1
- 腦卒中的腸內(nèi)營(yíng)養(yǎng)支持
- 電業(yè)安全工作規(guī)程——電氣部分電業(yè)安全工作規(guī)程
- 6.8相遇問(wèn)題(課件) 數(shù)學(xué)四年級(jí)下冊(cè)(共15張PPT)人教版
評(píng)論
0/150
提交評(píng)論