-
- 素材大。
- 1003.50 KB
- 素材授權(quán):
- 免費下載
- 素材格式:
- .ppt
- 素材上傳:
- ppt
- 上傳時間:
- 2017-06-16
- 素材編號:
- 66953
- 素材類別:
- 數(shù)學(xué)課件PPT
-
素材預(yù)覽
這是一個關(guān)于C++程序設(shè)計基礎(chǔ)PPT,這節(jié)課主要是了解函數(shù)性質(zhì)( Function Character ) 指針參數(shù) ( Pointer Parameters ) 棧機制 ( Stack Mechanism ) 函數(shù)指針 ( Function Pointers ) main參數(shù) ( The main’s Parameters ) 遞歸函數(shù) ( Recursive Functions ) 函數(shù)重載 ( Function Overload ) 。函數(shù)(function)表示每個輸入值對應(yīng)唯一輸出值的一種對應(yīng)關(guān)系。這種關(guān)系使一個集合里的每一個元素對應(yīng)到另一個(可能相同的)集合里的唯一元素。函數(shù)f中對應(yīng)輸入值的輸出值x的標(biāo)準(zhǔn)符號為f(x)。包含某個函數(shù)所有的輸入值的集合被稱作這個函數(shù)的定義域,包含所有的輸出值的集合被稱作值域。若先定義映射的概念,可以簡單定義函數(shù)為,定義在非空數(shù)集之間的映射稱為函數(shù),歡迎點擊下載C++程序設(shè)計基礎(chǔ)PPT哦。
C++程序設(shè)計基礎(chǔ)PPT是由紅軟PPT免費下載網(wǎng)推薦的一款數(shù)學(xué)課件PPT類型的PowerPoint.
C++程序設(shè)計教程(第二版)
第五章 函數(shù)機制
Chapter 5 Function Mechanism
第五章內(nèi)容
函數(shù)
C++的函數(shù)是完成既定任務(wù)的功能(過程)體,它涵蓋了數(shù)學(xué)函數(shù)和一般過程.所以基于過程編程本質(zhì)上就是基于函數(shù)編程
函數(shù)機制
一是指程序運行過程中對函數(shù)調(diào)用的數(shù)據(jù)管理和處理過程
二是指編程中函數(shù)的使用規(guī)范.它包括函數(shù)參數(shù)的屬性和傳遞規(guī)則,函數(shù)返回類型的匹配與審查,函數(shù)名字的識別原則,函數(shù)體效率的選擇,函數(shù)體中數(shù)據(jù)的訪問權(quán)限等
練習(xí):采用函數(shù)調(diào)用方式,輸出下列歡迎界面。
練習(xí):用函數(shù)調(diào)用的方式求解兩個數(shù)的差。
void main() {
int max(int x,int y) ;
int a,b,c;
cin<>>a>>b;
c=max(a,b); //a,b為實參
cout<<"The max is “<<c;
}
int max(int x,int y) //x,y 為形參
{int z;
if (x>y) z=x;
else z=y;
return(z);
}
形參與實參、函數(shù)名與返回值之間的關(guān)系:
說明:
(1)形參在函數(shù)被調(diào)用前不占內(nèi)存; 函數(shù)調(diào)用時為形參分配內(nèi)存;調(diào)用結(jié)束,釋放內(nèi)存。
(2)實參可以是常量、變量或表達式,但必須有確定的值。
(3)在被定義的函數(shù)中,必須指定形參的類型
(4)形參與實參類型一致,個數(shù)相同
(5)實參對形參進行單向“值傳遞” ,不能把形參的值反向地傳送給實參。形參與實參占用不同的內(nèi)存單元.
建議:
1)定義函數(shù)時都要指定函數(shù)類型。
2)定義函數(shù)時指定的函數(shù)類型與return 返回值的類型一致。
3)對于不帶回值的函數(shù),用void 定義為空類型,此時函數(shù)體內(nèi)不能出現(xiàn)return語句。
在以下情況下可省去在主調(diào)函數(shù)中對被調(diào)函數(shù)聲明。
1) 函數(shù)定義出現(xiàn)在函數(shù)調(diào)用之前
1. 函數(shù)性質(zhì) ( Function Character )
函數(shù):對輸入?yún)?shù)負責(zé),埋頭做自己的事,最終返回結(jié)果
函數(shù)組織:通過在函數(shù)中進行函數(shù)調(diào)用來擴展運行的規(guī)模,層層疊疊的函數(shù)構(gòu)成樹結(jié)構(gòu)
做法:將若干個函數(shù)組織成文件,又將若干個文件構(gòu)成程序的辦法來進行編程分工
跨越數(shù)學(xué)函數(shù)的C++函數(shù),有四種形態(tài)
返回類型 func ( 參數(shù)列表 ) ;
返回類型 func ( ) ;
void func ( 參數(shù)列表 ) ;
void func ( ) ;
黑盒原則:函數(shù)使用者應(yīng)關(guān)注性能,而少去左右實現(xiàn)細節(jié)
int cost ( int n, int m ) {
return n*10; // 運輸n次m斤
}
int cost ( int n, int m ) {
return m*10; // 運輸m次n斤
}
// 選擇下一個最好的
int cost ( int n, int m ) {
return (n>m? m:n)*10; // 保證運輸次數(shù)最少
}
參數(shù)傳遞:形參是對實參的克隆,克隆必須遵守類型匹配規(guī)則
void f(Type a); //a為形參
void g(){
Type x;
f(x); //x為實參
}
2. 指針參數(shù) ( Pointer Parameters )
傳遞指針:指針參數(shù)也是值傳遞的,指針值的真正用途是進行數(shù)據(jù)間訪,以達到操作數(shù)據(jù)塊(大小由之)的目的。
傳遞引用:引用參數(shù)本質(zhì)上也是值傳遞的,它表現(xiàn)為名字傳遞,即以形參的名字來代替實參名字.如果實參不是實體名而是表達式,那么其表達式所對應(yīng)的臨時實體取名為形參,并要求其為常量引用
意義:指針和引用參數(shù)的存在,使函數(shù)實際上可以訪問非局部的數(shù)據(jù)區(qū),函數(shù)的黑盒性便名存實亡.但這并非一定壞事,指針是一把雙刃劍,或靈巧或邪惡.引用是為了防范指針非安全的無意操作
void swap(int *p1, int *p2);
void main()
{
int x1=100,x2=200; int *pp1,*pp2;
pp1=&x1;pp2=&x2;
cout<<x1<<x2);
swap(pp1,pp2);
cout<<x1<<x2);
}
void swap (int *p1, int *p2) {
int temp;
temp=*p1;
*p1=*p2;
*p2=temp;
}
傳遞指針須附帶傳遞單位數(shù)據(jù)的個數(shù)
3. 棧機制 ( Stack Mechanism )
運行時內(nèi)存布局
棧區(qū)的演示程序(函數(shù)的嵌套調(diào)用)
int funcA( int x,int y);
void funcB( int & s);
int main(){
int a=6,b=12;
a=funcA(a,b);
}
int funcA(int x, int y){
int n=5;
funcB(n);
return;
}
未初始化局部數(shù)據(jù)的不確定性
#include<iostream>
void f(){
int b; // 未初始化
std::cout<<”B=>”<<b<<“\n”;
}//-------------------------
int main(){
int a; // 未初始化
std::cout<<”A=>”<<a<<“\n”;
f();
}//-------------------------
// 8804248
// 2788048
4. 函數(shù)指針 ( Function Pointers )
函數(shù)類型:函數(shù)類型因參數(shù)類型、個數(shù)和排列順序的不同而不同,也因返回類型的不同而不同.
函數(shù)指針:指向代碼區(qū)中函數(shù)體代碼的指針.不同的函數(shù)類型,其函數(shù)指針也不同
用法:函數(shù)指針經(jīng)常用作函數(shù)參數(shù),以傳遞連函數(shù)本身都不知道的處理過程(函數(shù))
4.1不同的函數(shù)指針,不能相互賦值
int g(int);
int (*gp)(int) = g;
void f();
void (*fp)();
fp = f;
gp = fp; // error
指定函數(shù)指針類型,定義函數(shù)指針數(shù)組
typedef void (*MenuFun)();
void f1(){ cout<<"good!\n"; }
void f2(){ cout<<"better!\n"; }
void f3(){ cout<<"best!\n"; }
MenuFun fun[]={f1,f2,f3};
6. 遞歸函數(shù) ( Recursive Functions )
形式上:一個正在執(zhí)行的函數(shù)調(diào)用了自身(直接遞歸).或者,一個函數(shù)調(diào)用了另一個函數(shù),而另一個函數(shù)卻調(diào)用了本函數(shù)(間接遞歸)
本質(zhì)上:程序在運行中調(diào)用了相同代碼實體的函數(shù),卻在函數(shù)棧中重新復(fù)制了該函數(shù)的整套數(shù)據(jù),由于每套數(shù)據(jù)中的參數(shù)也許不同,導(dǎo)致了計算條件發(fā)生變化,使得函數(shù)得以逐步逼近終極目標(biāo)而運行
6.1 現(xiàn)實問題
猴子第一天摘了若干個桃子,當(dāng)即吃了一半,還不過癮,又多吃了一個;第二天早上有將剩下的桃子吃了一半多一個。以后每天如此,直到第十天想再吃時,只剩下一個桃子了,問猴子摘了多少個桃子呢?
求N!
一個球從100米高度落下,每次落地后反彈原高度的一半,再落下。問第10次落地后,共經(jīng)過的距離為多少米?第10次落地后的反彈的高度?
6.2 分析遞歸的實質(zhì)
遞歸的兩個組成部分:
回推
遞推
遞歸存在的條件:
遞歸結(jié)束的條件
遞歸調(diào)用的參數(shù)應(yīng)該是逐步逼近結(jié)束條件
6.3 消除遞歸
int f( int n ){
for( i=1,s=1;i<=n;i++)
s=s*I;
return s;
}
6.4 遞歸的意義
可讀性
效率
7. 1 函數(shù)重載 ( Function Overload )
定義:一組概念相同,處理對象(參數(shù))不同的過程,出于方便編程的目的,用同一個函數(shù)名字來命名的技術(shù)稱為函數(shù)重載
意義;
解決函數(shù)的命名的問題
例子:求x絕對值函數(shù)
int abs( int x )
double abs( double x )
#include< iostream.h>
int abs( int a ){
return (a>0)?a:-a;
}
double abs( double a){
return (a>0)?a:-a;
}
void main(){
cout<<abs(-10)<<endl;
cout<<abs(-12.23)<<endl;
}
7.2重載函數(shù)的匹配(編譯)
規(guī)則
尋找嚴(yán)格匹配的函數(shù)
尋找相容的函數(shù)
例子
重載是不同的函數(shù),以參數(shù)的類型,個數(shù)和順序來分辨
void print(double);
void print(int);
void func(){
print(1); // void print(int);
print(1.0); // void print(double);
print(‘a’); // void print(int);
print(3.1415f); // void pirnt(double);
}
7.3參數(shù)默認:
一個函數(shù),既可以嚴(yán)謹和地道的調(diào)用,也可以省略實參,使用默認的參數(shù)值調(diào)用,達到此種方便編程目的的技術(shù)稱為參數(shù)默認
using namespace std;
void delay(int a = 2); // 函數(shù)聲明時
int main(){
delay(); // 默認延遲2秒
delay(2); // 延遲2秒
delay(5); // 延遲5秒
}
void delay(int a){ // 函數(shù)定義時
int sum=0;
for(int i=1; i<=a; ++i)
for(int j=1; j<3500; ++j)
for(int k=1; k<100000; ++k) sum++;
}
默認參數(shù)的規(guī)則
默認參數(shù)的值只能在聲明中
void point(int =3,int =4)//聲明時
void point( int x,int y){ //定義時
cout<<x<<y<<endl;
}
默認參數(shù)的值只能從后往前設(shè)置。
默認參數(shù)的值設(shè)定不能出爾反爾。
void func( int a=1);
void func(int a=2);
7.4無名參數(shù)
例如:
void point( int a ,int ){//定義時,第二個形參省略)
cout<<a<<endl;
}
void main(){
print(12,15);//調(diào)用時必需有第二個實參
}
7.3重載和參數(shù)默認的選擇
它們都是通過參數(shù)的變化來分辨處理任務(wù)的不同.如果參數(shù)決定了不同的處理過程,則應(yīng)重載,否則參數(shù)默認更簡捷一些
8. main參數(shù) ( The main’s Parameters )
程序運行:操作系統(tǒng)讀入命令以啟動程序
重定向命令:操作系統(tǒng)讀入命令后,識別并自我消化的參數(shù)
main函數(shù)參數(shù):操作系統(tǒng)讀入命令后,不能識別參數(shù),將其直接傳遞給所啟動的程序
命令重定向
// f0509.cpp
#include<iostream>
using namespace std;
int main(){
for(int a,b; cin>>a>>b;) cout<<a+b<<”\n”;
}
main函數(shù)參數(shù)
// f0510.cpp,標(biāo)準(zhǔn)的輸入輸出設(shè)備
#include<iostream>
using anmespace std;
int main(int argc, char** argv)
{
for(int i=0; i<argc; ++i)
cout<<argv[i]<<endl;
}
//從命令提示符開始
#include<iostream>
#include<fstream>
#include<sstream>
using namespace std;
void main( int argc, char ** argv){
if(argc!=3) cout<< “ print error!”;
else{
ifstream fin(argv[1]);
ofstream fout(argv[2]);
for(string str;getline(fin,str);)
out<<str<<endl;
}
}
模塊化程序設(shè)計ppt:這是模塊化程序設(shè)計ppt,包括了自頂而下、逐步求精的程序設(shè)計思想,過程與函數(shù),綜合實踐練習(xí)—求五邊形的面積等內(nèi)容,歡迎點擊下載。
循環(huán)結(jié)構(gòu)程序設(shè)計ppt:這是循環(huán)結(jié)構(gòu)程序設(shè)計ppt,包括了循環(huán)結(jié)構(gòu),用For-Next語句實現(xiàn)循環(huán)結(jié)構(gòu),用Do While-Loop語句實現(xiàn)循環(huán)結(jié)構(gòu),嵌套的循環(huán)結(jié)構(gòu)等內(nèi)容,歡迎點擊下載。
vb程序設(shè)計教程ppt:這是vb程序設(shè)計教程ppt,包括了確定數(shù)據(jù)的性質(zhì):數(shù)據(jù)類型,兩種數(shù)據(jù)表達:常量和變量,算術(shù)運算符和表達式,VB編程的開始:使用窗體,賦值和輸入輸出等內(nèi)容,歡迎點擊下載。