C零基础课程-20-函数入门:为什么使用函数?


视频地址: https://www.bilibili.com/video/av73223995
函数可以将大的计算任务划分为多个较小的任务,一个设计得当的函数可以将不必要的细节给隐藏起来使程序的整个结构更加清晰,也降低了维护代码的难度。
我们其实已经多次使用(调用)函数:printf、scanf都是C标准库的函数,从之前的使用经历,也能体会到上一句话的意义。
我们以下再看一个具体例子的修改过程。
今天的视频涉及的函数语法知识,在之后的视频中都会一一介绍。

判断数字的奇偶性

#include <stdio.h>

int main(int argc, char* argv[])
{
    int nValue = 0;
    printf("请输入需要判断的数字");
    scanf("%d", &nValue);

    if (nValue % 2 == 0)
    {
        printf("偶数\r\n");
    }
    else
    {
        printf("奇数\r\n");
    }
    return 0;
}

通过函数封装判断算法

#include <stdio.h>

int IsEvenNumber(int nNumber)
{
    if (nNumber % 2 == 0)
        return 1;
    else 
        return 0;
}

int main(int argc, char* argv[])
{
    int nValue = 0;
    printf("请输入需要判断的数字");
    scanf("%d", &nValue);

    if (IsEvenNumber(nValue))
    {
        printf("偶数\r\n");
    }
    else
    {
        printf("奇数\r\n");
    }
    return 0;
}

如果没有函数封装,修改了判断算法

#include <stdio.h>

int main(int argc, char* argv[])
{
    int nValue = 0;
    printf("请输入需要判断的数字");
    scanf("%d", &nValue);

    while (nValue != 0 && nValue != 1)
    {
        nValue -= 2;
    }

    if (nValue == 0)
    {
        printf("偶数\r\n");
    }
    else
    {
        printf("奇数\r\n");
    }
    return 0;
}

以上的算法修改,导致程序的结构与之前的版本有较大不同。
但是,如果将新算法封装在判断奇偶性的函数中,则与原有结构看起来非常一致。

int IsEvenNumber(int nNumber)
{
    while (nNumber != 0 && nNumber != 1)
    {
        nNumber -= 2;
    }
    
    if (nNumber == 0)
        return 1;
    else
        return 0;
}

int main(int argc, char* argv[])
{
    int nValue = 0;
    printf("请输入需要判断的数字");
    scanf("%d", &nValue);

    if (IsEvenNumber(nValue))
    {
        printf("偶数\r\n");
    }
    else
    {
        printf("奇数\r\n");
    }
    return 0;
}

进一步封装

#include <stdio.h>

int IsEvenNumber(int nNumber)
{
    while (nNumber != 0 && nNumber != 1)
    {
        nNumber -= 2;
    }
    
    if (nNumber == 0)
        return 1;
    else
        return 0;
}

int GetUserNumber()
{
    int nValue = 0;
    printf("请输入需要判断的数字");
    scanf("%d", &nValue);

    return nValue;
}

int main(int argc, char* argv[])
{
    int nNumber = GetUserNumber();

    if (IsEvenNumber(nNumber))
    {
        printf("偶数\r\n");
    }
    else
    {
        printf("奇数\r\n");
    }
    return 0;
}

面向过程编程:函数使得程序模块化

使用函数封装细节,使得程序员只要面向函数的接口编程(参数与返回值),而不用关心函数内部细节。
这有利于分清职责,也提高了合作的灵活性。
类似于手机充电线,只要接口能够适配,那么并不关心USB线的另一端是怎样的供电设备。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值