計算機概論:C/C++程式設計
|
第6章 模組化的程式設計基礎:函式 |
|
|
授課教師:陳慶瀚 WWW : http://www.miat.ee.isu.edu.tw/cpp E-mail : pierre@isu.edu.tw |
|
6.5 函式的傳回值
在函式原型宣告時,第一個宣告的元素就是函式的傳回值的資料型別,任何的基本資料型別(如int, char, float, double...等)或自訂的資料型別都可以使用,但是如果函式不傳回任何值,則我們要把資料型別宣告為void,意思是不傳回值。以下我們將陸續說明各種傳回值型別的使用方法。
void函式
有些函式並不傳回值,這些函式必須宣告為void函式,例如範例程式6-5的函式increment()就沒有傳回值,範例程式6-6又是一個使用void函式的例子。
/*----------------------------------------------------*/ // 範例程式6-6 // 阿拉伯數字轉大寫中文─void函式 // 陳慶瀚,2001 /*----------------------------------------------------*/ #include <iostream.h>
void DisplayUpperWord(int x); // 函式原型宣告
void main()
{
int x;
cout << "輸入一個0-10的整數 : ";
cin>>x;
DisplayUpperWord(x);
}
void DisplayUpperWord(int
x)
{
cout<<"你輸入的是 : ";
switch( x ) { case 1: cout<<"壹"; break; case 2: cout<<"貳"; break; case
3: cout<<"參"; break; case
4: cout<<"肆"; break; case
5: cout<<"伍"; break; case
6: cout<<"陸"; break; case
7: cout<<"柒"; break; case
8: cout<<"捌"; break; case
9: cout<<"玖"; break; case
10: cout<<"拾"; break; default:
cout<<"無效的數值\n";
} }
DisplayUpperWord(int x)函式需傳入一個0-9之間的阿拉伯數字的變數值,函式內部使用switch-case語法偵測變數值並顯示對應的大寫中文。DisplayUpperWord(int x)沒有傳回值,所有在函式前的資料型別宣告為void,而函式內可以不使用return指令,當然如果要在函式最後一行加上
return;
其作用與沒有加上這一行是相同的。相反的,如果一個有傳回值的函式,則函式內一定要有return指令,隨後還要有傳回值,程式才能正確的編譯。以下我們就要看看各種
char傳回值
以下範例展示一個傳入char參數,再傳回char變數值的函式。
/*----------------------------------------------------*/ // 範例程式6-7 // 小寫字元轉大寫字元─char傳回值 // 陳慶瀚,2001 /*----------------------------------------------------*/ #include
<iostream.h>
char Upper(char x); //宣告函式原型,傳入char參數,傳回值資料型別是char
void main()
{
char
x,y;
cout << "輸入一個小寫字元 : ";
cin>>x;
y =
Upper(x);
cout
<< y<<endl;
}
char Upper(char x)
{
char
t; //宣告一個區域變數t;
t=x-32; //將小寫字元轉為大寫字元
return
t; //將大寫字元傳回
}
bool傳回值
bool資料型別只有兩種變數值:true和false。使用bool傳回值可用於判斷函式執行的結果為true或false。範例程式6-8就是使用bool傳回值的函式例子。
/*----------------------------------------------------*/ // 範例程式6-8 // 檢查字元是否為大寫─使用bool傳回值 // 陳慶瀚,2001 /*----------------------------------------------------*/ #include <iostream.h>
bool is_upper(char c); //宣告函式原型,傳入char參數,傳回值資料型別是bool
void main( )
{
bool b;
char c;
cout<<"輸入一個字元 :";
cin>>c;
b = is_upper(c); //傳回true或false
if(b==true)cout <<"你輸入的是大寫字元";
else cout <<"你輸入的是小寫字元";
}
bool is_upper(char ch)
{
bool b = ch >= ‘A’ && ch <= ‘Z’ ; //ch介於'A'和'Z'之間,b=true
//否則b=false
return b;
}
int傳回值
/*----------------------------------------------------*/ // 範例程式6-9 // 計算N2─使用int傳回值 // 陳慶瀚,2001 /*----------------------------------------------------*/ #include <iostream.h>
int square(int value); //宣告函式原型,傳入int參數,傳回值資料型別是int
void main( )
{
int sq;
for (int k=0;k<20;k++)
{
sq = square(k); //呼叫square()函式,傳入整數k,將傳回值指定給sq變數
cout<<k<<"\t"<<sq<<endl;
}
}
int square(int value)
{
return (value*value); //傳回整數的value*value
}
long
Return Type
有些運算的值域非常大,使得int整數型態的變數無法涵蓋可能的運算結果,例如16位元的整數只能涵蓋–32,768 (–215)到32,767 (215– 1);32位元的整數則可以涵蓋2,147,483,647 (231– 1) 到–2,147,483,648 (–231),如果上述的值域範圍還不夠,我們可以宣告長整數long,範例程式6-9就展示一個用來計算2N的函式的範例。
/*----------------------------------------------------*/ // 範例程式6-9 // 計算2N的函式─使用long傳回值 // 陳慶瀚,2001 /*----------------------------------------------------*/ #include <iostream.h>
long powerof2(int
value); //宣告函式原型,傳入int參數,傳回值資料型別是long
void main( )
{
int p;
for (int k=0;k<20;k++)
{
p = powerof2(k); //呼叫函式,傳入整數k,將傳回值指定給sq變數
cout<<k<<"\t"<<p<<endl;
}
}
long powerof2(int value)
{
//計算2N = 2*2*2*......*2(N個2)
//例28 = 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 = 256
long seed=1; //設定連乘的初始值
for (int t=0; t<value; t++)
{
seed = seed*2; //迭代連乘
}
return seed;
}
float傳回值
絕大多數的科學和工程計算都不可避免的使用浮點數,範例2-10
/*----------------------------------------------------*/ // 範例程式6-10 // 計算兩點所構成直線的斜率─使用float傳回值 // 陳慶瀚,2001 /*----------------------------------------------------*/ #include <iostream.h>
//宣告函式原型,傳入4個int參數(兩點座標),傳回值資料型別是float
float slope(int x1, int y1, int x2, int y2);
void main( )
{
float m;
int x1=5,y1=4,x2=8,y2=12;
m = slope(x1,y1,x2,y2); //呼叫函式,傳入兩點座標,將傳回值指定給m變數
cout<<"slope =
"<<m<<endl;
}
float slope(int x1,
int y1, int x2, int y2)
{
//計算m =
float s = float(y2-y1)/float(x2-x1);
return s;
}
double傳回值
如果需要雙精準度浮點數的計算,我們可以把函式的傳回值宣告為double,如範例程式6-11。
/*----------------------------------------------------*/ // 範例程式6-11 // 計算sin值─使用double傳回值 // 陳慶瀚,2001 /*----------------------------------------------------*/ #include <iostream.h>
#include <math.h>
const double dPi=3.14159265359; //宣告一個全域型態的常數
//宣告函式原型,傳入以degree為單位的整數角度值,傳回值資料型別是double
double mysine(int angle);
void main()
{
int j;
double dsine;
for (j=0;j<=90;j++)
{
dsine = mysine (j);
cout<<"sin("<<j<<") =
"<<dsine<<endl;
}
}
double mysine (int degree)
{
double d;
//將度度量轉為徑度量,呼叫內建sin函式,傳回值指定給d
d = sin((dPi/180.0)*degree);
return d;
}
|
||
計算機概論:C/C++程式設計 義守大學電機系 陳慶瀚 |