【从零开始的 C 语言笔记】第二十五篇-副函式

不怎麽重要的前言

上一篇介绍了要设计一个程序时会使用到的流程图,如果对於凭空想像程序怎麽写有障碍的朋友,可以考虑使用流程图的方式来辅助写程序!

今天我们来介绍另一个很重要的语法--「副函式」!


副函式?

不晓得大家还记不记得,在遥远的第三篇我们有稍微的介绍主函式(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


看到这里就大概介绍完副函式的概念了,这是一个很重要的语法,除了可以增加函式的阅读性(把单独功能拆出来写),也可以让程序愈发简化容易维护(某功能出错只要找那个功能的部分确认就好)。

下一篇我们再来详细介绍变数的生命周期吧!


<<:  Node-RED学习心得(实战篇1)

>>:  原来Arduino开发板的 脚位与程序内数字的对应 会随着开发商不同而改变?

Day24|【Git】认识 git tag 标签常用指令、标签与分支的差异

介绍完分支後,这篇来讲解「标签」吧! 标签在日常生活中可以解释成标示简单讯息的小牌子,而在学习阶段,...

[Day-11] R语言 - K - mode 实作 ( K - mode in R.Studio)

您的订阅是我制作影片的动力 订阅点这里~ 影片程序码 library(naniar) data(ir...

JavaScript学习日记 : Day15 - 原型与继承(二)

F.prototype 我们可以使用new F()这样的构造函数创建一个新object,如果F.pr...

#3 JavaScript Crash Course 2

今天教 Promise Async / Await。 Promise Promise 这个东西跟时间...

DAY1 糟了!是世界奇观! 前言

前言 我是去年刚毕业与今年四月刚退伍的新鲜人。大学读的是资管系,在学期间没什麽写程序,没错,资管系毕...