? asked in 電腦與網際網路程式設計 · 1 decade ago

c++函數void的問題

#include <iostream>

using namespace std;

___(1)___ doit(int n);

int main( )

{

int n=1;

doit(n);

cout << n;

system("PAUSE");

return 0;

}

___(2)___ doit(int n)

{

int m = n;

m--;

cout << m;

}

這題的1跟2裡 我試過填 int或void都能執行

可是我不清楚為什麼

也不知道void是要在什麼時候用是什麼意思

希望有人能教我

謝謝

3 Answers

Rating
  • 阿非
    Lv 4
    1 decade ago
    Favorite Answer

    function 前面的型態(int, void, float....)

    那個是回傳資料用的 要跟回傳的資料型態一樣

    以上面的程式碼來說

    如果副程式的型態是int

    然後最後寫一個return m;

    則在main裡面a

    你可以寫n = doit(n);

    這樣子ok 意思是n得到了 進去這個副程式之後回傳的值

    因為回傳(return) 的資料是m 他的型態是int 而且n跟m一樣都是int

    但是 如果你的副程式寫void

    他的意思是沒有回傳 所以用上面的用法就錯了

    有void 程式碼裡面就不會有return 這個字出現

    如果還有不懂的話就寄信給我吧

  • 1 decade ago

    在函式名稱前面的東西是指回值

    在你的程式裡面因為沒用到傳回值 ( return ) 所以用啥都沒差

    我在這示範一個有用到傳回值的程式

    #include<iostream>

    using namespace std;

    int a(int i)

    {

    if(i<1)cout<<" 輸入有誤 "<<endl;

    else if(i==1)return 1;

    else return i + a(i-1);

    }

    int main()

    {

    int t;

    cout<<"計算 1 + 2 + ... + n 的值"<<endl;

    while(cout<<" 請輸入 n 值 -> " && cin>>t)

    cout<<a(t);

    }

    對程式再補充一下

    在函式 main 內直接用 cout 輸出 a 函式

    就代表是輸出 a 函式的傳回值

    然後在 a 函式的 return 在大於 2 時都會再重複呼叫一次自己

    這種方式叫做遞迴

    假如你輸入 5 時

    在程式中就會是 a(5)

    然後進到函式後又會做以下變化

     a(5)

    ->5 + a(4)

    ->5 + 4 + a(3) 或 9 + a(3)

    ->5 + 4 + 3 + a(2) 或 12 + a(2)

    ->5 + 4 + 3 + 2 + a(1) 或 14 + a(1)

    ->5 + 4 + 3 + 2 + 1

    雖然這種功能的算法只要用公式就好

    但是這可是練習函式遞迴的最好程式

    (我用的這台電腦沒有裝編譯器 所以程式碼有錯請包含)

Still have questions? Get your answers by asking now.