觀光客
👥+1
電腦教學
隱藏選單
回應(10)
通報違規

 殺時間C++程式練習(5):函式、傳遞參數、變數型態

放開那女孩
本文:2012-10-06T23:36:39
函式(F u n c t i o n)

函式就像一個小工廠,你將原料給它,它就會將原料做處理,加工為各式不同的產品。

函式就是指具有特定工作的一段程式碼。
-----------------------------------------------------------------------------------------------------------------------------
變數型態:

一般而言變數有三種,區塊變數、區域變數和全域變數。
以生命週期來看,區塊變數 < 區域變數 < 全域變數。
同一程式中三種變數取相同名稱時,變數有效順序:區塊變數 > 區域變數 > 全域變數。

區塊變數:
被定義在某個區塊中,離開此區塊,就算是在同個函式中,也不能再存取此變數。
例如:
for(int i=0;i < 5 ;i++){ //區塊變數

區域變數:
在函式內所宣告的變數,離開此函式,此變數的生命週期即馬上結束,即不佔用記憶體。
例如:
int main(){
int i=10,j=20; //區域變數
char c; //區域變數
string str; //區域變數
.
.
.

全域變數:
一般痊癒變數都宣告在所有函式的最前面,它的生命週期是由程式開始執行到結束。
例如:
#include<iostream>
using namespace std;

int i = 50; //全域變數

int main(){
.
.
.


-----------------------------------------------------------------------------------------------------------------------------
函式可以定義在主程式段的前面(如下)或後面,如果定義在主程式後方,在主程式前要先宣告,以免編譯時找找不到自訂的函式,參考實作範例。

定義函式:

#include<iostream>

void funName(參數){

程式段

return 回傳值;


int main(){
.
funName(參數);
.
.


1. 函式中的return 可以是 int,char,string 等等...,若不回傳任何值,必須用void。

2. 參數可以是變數、陣列或物件等等...。

3. 函式中不可再定義另一個函式。

4. 函式若不傳回值,可以省略 return。執行途中若想離開函式,可使用return描述。

5. 主程式段中呼叫函式的兩個方式如下:

(1)變數 = 函式名稱(參數);
#include<iostream>
int square(int x){
int j;
j = x * x;
return j;


int main(){
int i = square(2);
.
.


結果: i = 4;

(2)函式名稱(參數);

呼叫執行函式,不將值指定給某個參數。
-----------------------------------------------------------------------------------------------------------------------------
//實作範例: 平均分割C l a s s - C網段

#include<iostream>
#include<string>
using namespace std;

string showip(char *C[20]);

int main(){
char *C[20];
string CIDR,ip;
int num,n,evy,Network,SubnetMask,BroadCast;
cout << "輸入要分割的*-C 網段位置(例:192.168.1.0/24): ";
cin.get(*C,21);
cout << "輸入要分割幾個子網路: ";
cin >> num;
cout << "輸入要查詢第幾個子網段: ";
cin >> n;
ip = showip(*C);
evy = 256/num;
switch(num){
case 2:
SubnetMask = 128;
CIDR = "/25";
break;
case 4:
SubnetMask = 192;
CIDR = "/26";
break;
case 8:
SubnetMask = 224;
CIDR = "/27";
break;
case 16:
SubnetMask = 240;
CIDR = "/28";
break;
case 32:
SubnetMask = 248;
CIDR = "/29";
break;
case 64:
SubnetMask = 252;
CIDR = "/30";
break;

n = n-1;
Network = evy*n;
BroadCast = Network + evy - 1;

cout << "Network: " << ip << Network << endl;
cout << "Subnet Mask: " << ip << SubnetMask << endl;
cout << "BroadCast: " << ip << BroadCast << endl;
cout << "Valid IP: " << ip << Network+1 << " ~ "<< ip << BroadCast-1 <<endl;
cout << "CIDR: " << CIDR << endl;
system("PAUSE");
return 0;


string showip(char *C[20]){
char showip[20];
char *ptr;
int count=0;
string ip;

ptr=NULL;

ptr = *C;

while(*ptr!="\0" && count <3){
ip = ip + *ptr;
if (*ptr == "."){
count++;

ptr++;

return ip;

-----------------------------------------------------------------------------------------------------------------------------
執行結果:


-----------------------------------------------------------------------------------------------------------------------------
請練習寫出查詢 C l a s s - A 與 C l a s s - B級平均子網段分割資訊。
編輯 - 2012-10-07T00:11:12
編輯 - 2012-10-07T02:08:50
補充 - 2012-10-17T21:12:57C l a s s - B 平均子網段分割

#include<iostream>
#include<string>
using namespace std;

string showip(char *C[20]);

int main(){
char *B[20];
string CIDR,ip;
int num,n,evy,Network,SubnetMask,BroadCast;
cout << "輸入要分割的*-B 網段位置(例:172.17.0.0/16): ";
cin.get(*B,21);
cout << "輸入要分割幾個子網段(2,4,8,16,32,64,128,256): ";
cin >> num;
cout << "輸入要查詢第幾個子網段: ";
cin >> n;
ip = showip(*B);
evy = 256/num;
switch(num){
case 2:
SubnetMask = 128;
CIDR = "/17";
break;
case 4:
SubnetMask = 192;
CIDR = "/18";
break;
case 8:
SubnetMask = 224;
CIDR = "/19";
break;
case 16:
SubnetMask = 240;
CIDR = "/20";
break;
case 32:
SubnetMask = 248;
CIDR = "/21";
break;
case 64:
SubnetMask = 252;
CIDR = "/22";
break;
case 128:
SubnetMask = 254;
CIDR = "/23";
break;
case 256:
SubnetMask = 255;
CIDR = "/24";
break;

n = n-1;
Network = evy*n;
BroadCast = Network + evy - 1;
cout << endl;
cout << "Network(網段) : " << ip << Network << ".0" <<endl;
cout << "BroadCast(廣播) : " << ip << BroadCast << ".255" << endl;
cout << "Subnet Mask(遮罩) : " << "255.255." << SubnetMask << ".0" << endl;
cout << "Valid IP(可用IP) : " << ip << Network << ".1" << " ~ "<< ip << BroadCast << ".254" <<endl;
cout << "CIDR(無類別域間路由): " << CIDR << endl;
system("PAUSE");
return 0;
補充 - 2012-10-17T21:21:35string showip(char *B[20]){
char showip[20];
char *ptr;
int count=0;
string ip;

ptr=NULL;

ptr = *B;

while(*ptr!="\0" && count <2){
ip = ip + *ptr;
if (*ptr == "."){
count++;

ptr++;

return ip;

---------------------------------------------------------------
執行結果:

---------------------------------------------------------------
補充 - 2012-10-17T21:23:41
補充 - 2012-10-17T23:14:24C l a s s - A 平均子網段分割
#include<iostream>
#include<string>
using namespace std;

string showip(char *C[20]);
char *A[20];
string CIDR,ip,whether;
int num,n,evy,Network,SubnetMask,BroadCast;

int main(){


cout << "輸入要分割的*-A 網段位置(例:10.0.0.0/8): ";
cin.get(*A,21);
cout << "輸入要分割幾個子網段(2,4,8,16,32,64,128,256): ";
cin >> num;
cout << "輸入要查詢第幾個子網段: ";
cin >> n;
ip = showip(*A);
evy = 256/num;
switch(num){
case 2:
SubnetMask = 128;
CIDR = "/9";
break;
case 4:
SubnetMask = 192;
CIDR = "/10";
break;
case 8:
SubnetMask = 224;
CIDR = "/11";
break;
case 16:
SubnetMask = 240;
CIDR = "/12";
break;
case 32:
SubnetMask = 248;
CIDR = "/13";
break;
case 64:
SubnetMask = 252;
CIDR = "/14";
break;
case 128:
SubnetMask = 254;
CIDR = "/15";
break;
case 256:
SubnetMask = 255;
CIDR = "/16";
break;

n = n-1;
Network = evy*n;
BroadCast = Network + evy - 1;
cout << endl;
cout << "Network(網段) : " << ip << Network << ".0.0" <<endl;
cout << "BroadCast(廣播) : " << ip << BroadCast << ".255.255" << endl;
cout << "Subnet Mask(遮罩) : " << "255." << SubnetMask << ".0.0" << endl;
cout << "Valid IP(可用IP) : " << ip << Network << ".0.1" << " ~ "<< ip << BroadCast << ".255.254" <<endl;
cout << "CIDR(無類別域間路由): " << CIDR << endl;

system("PAUSE");
return 0;
補充 - 2012-10-17T23:19:20string showip(char *A[20]){
char showip[20];
char *ptr;
int count=0;
string ip;

ptr=NULL;

ptr = *A;

while(*ptr!="\0" && count <1){
ip = ip + *ptr;
if (*ptr == "."){
count++;

ptr++;

return ip;

----------------------------------------------------------------
執行結果:

----------------------------------------------------------------
請試著將C l a s s - A 、B、C合併為一個程式,判斷輸入的IP網段,執行不同級別的分割方法。
  👥+1  回應(10)  (DMCA Compliance - Abuse 投訴)
[變更為 舊回應在上方][目前是 新回應在上方]
流行的象徵
10 F:2013-02-02T01:02:35
0.0

(觀光客) GGY - 118.232.203.19
9 F:2013-01-25T10:06:47
大大挺有時間的喔~解釋的還蠻清楚的說~比我以前正X的老師還清楚

(觀光客) 可可 - 211.74.250.237
8 F:2012-10-17T23:42:30
恩恩!感謝大大~

(觀光客) 可可 - 211.74.251.237
7 F:2012-10-17T01:01:36
大大您說的開機時後按F8進入安全模式刪除,那請問這樣會不會也把其他需要用的刪除掉呢?怕亂刪除不知道會不會刪到其他的變成電腦不能正常使用?^^"
放開那女孩 - 2012-10-17T20:06:14如果三天兩頭就出現籃底白雲,表示電腦已經不太穩定了。你指的暫存檔是網路的,還是C槽中的暫存檔?
重灌會比刪除暫存檔更能讓電腦恢復正常的運作速度,如果你暫時沒有重灌的打算,可以到軟體應用區,搜尋"清理",下載系統清理程式進行刪除暫存檔的動作。God Bless you~


(觀光客) 可可 - 59.104.163.91
6 F:2012-10-17T00:58:46
大大,我只要每次電腦出現藍底白字當機後,再開機暫存檔就變成不能刪除,就會像正在使用中的程式一樣不能刪除,大概就是這種情形!

放開那女孩
5 F:2012-10-16T23:47:12
4F 可可,你說暫存檔無法刪除,是否能描述詳細一點?
一般使用CClean就很好刪除暫存檔了!
如果真的無法刪除,可以再開機時,按F8,進入安全模式刪除。

(觀光客) 可可 - 211.74.251.50
4 F:2012-10-16T03:52:25
大大!請問一下,我電腦出現藍底白字當機後,重新開機之後,暫存檔卻無法刪除,導致暫存檔一大堆,拖垮電腦速度,請問大大知道該怎樣解決嗎?感謝!

(觀光客) 可可 - 211.74.251.50
3 F:2012-10-16T03:49:33
good

(觀光客) 屌爆了 - 101.12.206.58
2 F:2012-10-14T18:54:15
屌爆了

放開那女孩
1 F:2012-10-06T23:37:18


[0.16] 🍌