1. 程式人生 > >c++學習總結(一)---函式

c++學習總結(一)---函式

一.心得總結

在上學期的c語言的學習中,我初次接觸了程式設計,感覺比較新奇也比較有挑戰性,從一開始什麼都不會,到慢慢可以寫程式,心中慢慢積累起成就感。在上學期程式設計中解決一道難題,雖然很好,但程式碼很長,有些語句反覆使用,但卻沒有方法找到簡單的方法。老師說過寫出好程式才是一個程式設計師該做的。而這一學期學的函式,便可以起到簡化程式碼的功能,使用可以使冗長的程式碼縮短,而且還可以縮短執行時間。在解決簡單的題目時,可能感覺不到程式碼縮短過程式變得簡單,但當遇到十分複雜的題目時,函式的功能便可以完全展現出來了。因此用好函式,是接下來階段學習c++及更多語言的重要任務,我也因此要求自己反覆琢磨函式的正確用法。下學期的課程都十分難,在剛開學這幾周的學習,就可以完全感受到,而越難的題目就越應該用好函式。接下來簡單介紹總結一下函式。

二、內容總結

1.函式定義的一般形式為:

      返回值型別             ↙形參表可以為空,但括號不能省略

型別識別符號 函式名(形參表)  ←  函式首部

{

    語句                                   ←函式體,可以為空,但花括號不能省略


}沒有分號

2.形參與實參

    類似於區域性變數,函式的形參為函式提供了已命名的區域性儲存空間。他們之間的差別在於形參是在函式的形參表中定義的,並由呼叫函式時傳遞函式的實參初始化。

    實參則是一個表示式。它可以是變數或字面值常量,甚至是包含一個或幾個操作符的表示式。在呼叫函式時所傳遞的實參個數必須與函式的形參個數完全相同。與初始化式的型別必須與初始化物件的型別匹配一樣,實參的型別也必須與其對應形參的型別完全匹配:實參必須具有與形參型別相同,或者能隱式轉換為形參型別的資料型別。

3.函式返回型別

    函式的返回型別可以是內建型別(如 int 或者 double )、類型別或複合型別(如 int& 或 string*),還可以是void型別,表示該函式不返回任何值,bool型別,表示判斷。

4.引用

型別名&引用名=某變數名;

某個變數的引用,和這個變數是一回事,相當於該變數的一個別名

int n=4;                                定義引用時一定要將其初始化成引用某個變數,不初始化編譯不過

int &r=n;

r=4;

cout<<r;//輸出4;

cout<<n;//輸出4;

n=5;                                    引用只能引用變數,不能引用常量和表示式

cout<<r;//輸出5;

5.指標變數

<1>其內容為地址(儲存位置)的變數,簡稱指標。它所指向的地址上存放的變數稱作目標變數。

形式:型別識別符號   *變數名

int *i-point,*j-point;

<2>指標變數同也可以賦值:

int i,*-point;

i-point=&i;

也可以在定義指標變數時賦初值:

int i;

int *i-point=&i;//取地址運算;

*i-point=3;//取內容運算;

<3>一個指標變數只能指向同一型別的變數。即整型指標變數只能指向整型資料的地址,而不能放其它型別資料的地址。絕對不能對未賦值的指標變數作“取內容”運算。

int main()

{int a,b;

int *p1,*p2;

*p1=10;*p2=100;

cout<<a<<'\t'<<b<<endl;

cout<<*p1<<'\t'<<*p2<<endl;//p1,p2為隨機值,應在“取內容”前加上p1=&a;p2=&b;

}

<4>指標的運算

++(--):指向下一個(或上一個)同種型別的資料

-int a[4];int *p=a;p++;

-int b=2;int *q=&b;p--;

+n(-n)

-int a[4];int *p=a;p+=2;

-int b=2;int *q=&b;p-=2;

<5>指標變數作為函式引數:

函式的引數可以是指標型別,它的作用是將一個變數的地址傳送到另一個函式中。指標變數作為函式引數與變數本身作函式引數不同,變數作函式引數傳遞的是具體指,二指標作函式傳遞的是記憶體的地址。

<6>陣列與指標

int a[10],*p;

p=&a[0];//陣列第一個元素的地址

p=a;//直接用陣列名賦值,p是變數,a是常量

若陣列元素為int型,則指向其的指標變數也應定義為int型。

int a[10];

int *p=a; int *p=&a[0];//這兩種情況均為賦初值;

通過指標引用陣列元素

int a[10];

int *p=a;//為指標變數賦初值;

*p=1;//通過指標變數為陣列元素賦值;

*(p+1)=2;a[1]=2;//p+1指向陣列的下一個元素,而不是下一個位元組;

三、常見題型

1.用傳址呼叫來實現swap:

#include<iostream>

using namespace std;

void swap(int &a,int &b)//定義swap()函式,形參是傳址呼叫

{int tmp=a;a=b;b=tmp;

}

int main()

{int c=1,d=2;

swap(c,d);//交換變數

cout<<c<<‘'d<<endl;

return 0;

}//程式輸出為:2 1

2.求任意兩個自然數的最大公約數

#include<iostream>

int gys(int m,int n);

int main()

{int x,y,ys;

cin>>x>>y;

ys=gys(x,y);

cout<<ys<<endl;

return 0;

}

int gys(int m,int n)

{int r,t)

if(m<n)

 {t=m;m=n;n=t;

  }

r=m%n;

while(r!=0)

{m=n;n=r;r=m%n;}

return n;

}

3.判斷一個素數的函式,輸入一個數,判斷它是否是素數,是輸出yes,不是輸出no

#include<cstdio>

#include<cmath>

int ss(int x);

int main()

{int n;

cin>>n;

if(ss(n))cout<<"yes";

else

cout<<"no";

return 0;

}

int ss(int x)

{int j;

if(x=2)return 1;

j=2;

while(j<=sqrt(x)&&x%j!=0)j++;

if(x%j==0)

return 0;

else

return 1;

}

以上就是我對函式方面的總結。