iT邦幫忙

0

【從零開始的 C 語言筆記】第二十五篇-副函式

  • 分享至 

  • xImage
  •  

不怎麼重要的前言

上一篇介紹了要設計一個程式時會使用到的流程圖,如果對於憑空想像程式怎麼寫有障礙的朋友,可以考慮使用流程圖的方式來輔助寫程式!

今天我們來介紹另一個很重要的語法--「副函式」!


副函式?

不曉得大家還記不記得,在遙遠的第三篇我們有稍微的介紹主函式(main function),一個程式主要運行的部分就是主函式了,大家有沒有想過既然有主函式,會不會有副函式之類的呢?

今天我們就來介紹副函式吧!

先來舉一個只有主函式的判斷奇偶數程式:

#include <stdio.h>

int main()
{
    int n;

    scanf("%d", &n);
    
    if(n%2==0){
        printf("even.\n");
    }
    else{
        printf("odd.\n");
    }

    return 0;
}

https://ithelp.ithome.com.tw/upload/images/20211104/20142565kaqBWPYiCK.png

轉換成由副函式來判別後傳值(偶數回傳0,奇數回傳1):

#include <stdio.h>

int judge_num(int);

int main()
{
    int n;

    scanf("%d", &n);

    printf("%d", judge_num(n));

    return 0;
}

int judge_num(int num){
    if(num%2==0){
        return 0;
    }
    else{
        return 1;
    }
}

https://ithelp.ithome.com.tw/upload/images/20211104/20142565LqNUIBN3L0.png

也可以由副函式直接代勞輸出:

#include <stdio.h>

void judge_num(int);

int main()
{
    int n;

    scanf("%d", &n);
    judge_num(n);
    
    return 0;
}

void judge_num(int num){
    if(num%2==0){
        printf("even.\n");
    }
    else{
        printf("odd.\n");
    }
}

https://ithelp.ithome.com.tw/upload/images/20211104/20142565xp4H0TpArt.png


正式使用副函式

  1. 規則

(1) 宣告函式:就像變數在使用前需要宣告,副函式也必須在使用之前就宣告好。
https://ithelp.ithome.com.tw/upload/images/20211104/201425651NZHvdZTJg.png

(2) 副函式的資料型態:就像變數有不同的資料型態一樣,但函式中的資料型態是針對回傳值的型態,且與變數不同的是也有無回傳值的資料型態(void)。
https://ithelp.ithome.com.tw/upload/images/20211104/20142565J6ATXcAp50.png
https://ithelp.ithome.com.tw/upload/images/20211104/20142565a2Nfjbn92f.png

(3)副函式可要求傳入值:副函式可以接受其他函式的傳入值進行處理使用,有傳入值的話呼叫副函式時也要記得傳值。
https://ithelp.ithome.com.tw/upload/images/20211104/20142565AhlIGsZUtK.png
https://ithelp.ithome.com.tw/upload/images/20211104/20142565l479mv2Tv0.png

  1. 應用
    寫一個程式,讓使用者輸入整數n,並把小於等於整數n的所有質數列印出來。

我們可以把判斷質數的部分單獨拆出來,用另一個副函式去處理,這樣主函式看起來就會清楚很多:

#include <stdio.h>

int is_num_prime(int);

int main()
{
    int n;

    scanf("%d", &n);
    printf("小於等於n之所有質數: ");
    for(int i=2; i<=n; i++){
        if(is_num_prime(i)==0){
            printf("%d ", i);
        }
    }

    return 0;
}

int is_num_prime(int num){
    int k=0;
    for(int i=2; i<num; i++){
        if(num%i==0){
            k=1;
            break;
        }
    }
    if(k==0){
        return 0;
    }
    else{
        return 1;
    }
}

https://ithelp.ithome.com.tw/upload/images/20211104/20142565tBb4aD7bU8.png


看到這裡就大概介紹完副函式的概念了,這是一個很重要的語法,除了可以增加函式的閱讀性(把單獨功能拆出來寫),也可以讓程式愈發簡化容易維護(某功能出錯只要找那個功能的部分確認就好)。

下一篇我們再來詳細介紹變數的生命週期吧!


圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言