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;
}
以上就是我對函式方面的總結。