05函数

作者: 忘带充电宝de皮卡丘 | 来源:发表于2018-05-28 18:16 被阅读0次

    C语言中的函数可以帮助我们编写大型应用程序,同时c中的函数也是oc语言函数(方法)的基础

    任何一个应用程序都包含的功能模块:

    • 联网模块

    • 数据下载

    • 界面搭建

    • 数据解析/数据显示

    [前言] 在大型应用程序开发过程中,对于某个代码片段需要反复的使用,我们(程序员)可以将这个需要反复使用的代码片段[封装] 成一个[函数],给这个函数起个名字,当需要使用这个代码片段时,只需要通过名字去[调用]这个函数就可以了

    首先,函数必须先定义,然后才能使用[调用]

    一丶函数的定义

    //函数声明 (声明,是给编译器看的)
    返回值类型 函数名(参数列表);
    //函数定义(实现) (实现,是给链接器看的)
    返回值类型 函数名(参数列表)
    {
        //函数体
    }
    

    返回值类型,可以是int,char,double 等等这些基本数据类型,也可以是复合数据类型

    函数名,必须符合标识符的命名规则

    参数列表,这里是多个变量的定义列表

    函数体,所有在main函数中可以写的代码,在函数体中都可以书写

    二丶函数的分类

    系统函数/库函数

    库函数,指的是由官方或者第三方编写的函数,这些函数不需要程序员再进行开发,只需要在需要使用对应功能的函数时,通过函数名调用就可以了,同时需要包含对应的头文件

    #include<stdio.h>
        //printf scanf
    #include<unistd.h>
        //sleep
    #include<stdlib.h>
        //abs
    #include<math.h>
        //pow sqrt sin cos
    

    自定义函数

    指的是,函数的名字,函数的功能(函数体),都需要程序员自己自定义

    1.main函数,main函数的函数名是固定的,但是功能是自定义的

    2.完全自定义函数,函数名,函数的功能,都需要程序员自定义

    三丶自定义函数

    1.最简单的自定义函数

    //所有的函数 都必须单独定义(不能嵌套定义)
    //函数声明,声明语句必须以分号结束
    //函数声明是给编译器看的
    void func(void);
    //函数定义(实现)
    //函数定义是给链接器看的
    void func(void)
    {
        printf("🐰\n");
    }
    //左侧void,表示没有返回值
    //右侧void,表示没有参数
    

    2.带参数,带返回值的自定义函数

    带参函数

    void func1(int a);
    void func2(int a,char b);
    func1(10);//10 是实际参数,简称“实参”
    //调用带参函数时,会发生参数的传递,称为“传参”
    //传参,将 实参 传递给 形参
    //传参,就是赋值
    func2(100, '+');
    

    带返回值函数

    //函数定义(实现)
    int fun(void)
    {
        printf("返回之前\n");
        return 0;//当程序执行到return语句时,当前函数立即结束
    }
    

    return的使用

    (1)在返回值类型为void的函数中使用return,不能带有返回值

    void foo(int a,int b)
    {
        int sum=a+b;
        printf("%d\n",sum);
        return;//结束当前函数
    }
    

    (2)在返回值类型不为void的函数中使用return,可以带有返回值

    int fun(int a,int b)
    {
        int c;
        c=a*a*a+b*b*b;
        return c;
    }
    

    (3)特殊函数

    void fun(void);
    //参数为void,表示一个参数也不能传
    void fun();
    //参数为空,表示可以传入任意多个、任意类型的参数,但是所传参数无法保存 
    

    四丶函数的栈空间 和 函数调用

    [注] 函数调用发生时,会立即在内存的栈内存区开辟一个属于这个函数自己的[栈空间],这个[栈空间]用来存储函数内部的局部 变量(普通变量,数组等等),这个[栈空间]的大小取决于这些变量所要占的内存大小

    函数调用结束时,[栈空间]被释放

    五丶递归函数

    递归函数的书写步骤:

    • 明确函数的功能,根据函数的功能确定函数的原型(声明)

    • 找出递归函数退出的临界条件(特殊情况)

    • 大胆假设整个函数的功能已经写好,直接调用自己(本函数)就可以完成想要的功能

    [结论] 凡是用循环可以实现的,用递归都可以实现

    六、练习

    1.编写函数,判断一个字符是否是表示数字的字符,如果是返回1,不是,返回0

    #include <stdio.h>
    int func(int n);
    int func(int n)
    {
        if (n>=48&&n<=57)
        {
            return 1;
        }
        else
        {
            return 0;
        }
    }
    
    int main(int argc, const char * argv[])
    {
        char a;
        scanf("%c",&a);
        printf("%d\n",func(a));
        return 0;
    }    
    

    2.编写函数,判断一个字符,是否是表示16进制数字的字符

    ‘0’ — ‘9’+ ‘a’ — ‘f’

    #include <stdio.h>
    int func(int n);
    int func(int n)
    {
        if ((n>=48&&n<=57)||(n>=97&&n<=102))
        {
            return 1;
        }
        else
        {
            return 0;
        }
    }
    
    int main(int argc, const char * argv[])
    {
        char a;
        scanf("%c",&a);
        printf("%d\n",func(a));
        return 0;
    }
    

    3.编写函数,求4个数的平均值。

    int avg(int a, int b, int c, int d);
    #include <stdio.h>
    int func(int a,int b,int c,int d);
    int func(int a,int b,int c,int d)
    {
        int sum=(a+b+c+d)/4;
        return sum;
    }
    
    int main(int argc, const char * argv[])
    {
        int a,b,c,d;
        scanf("%d%d%d%d",&a,&b,&c,&d);
        printf("%d\n",func(a, b, c, d));
        return 0;
    }
    

    4.编写函数,传入n,打印以n为底的倒三角型

    传入:5

    输出:

    *****

    ***

    *

    #include <stdio.h>
    void func(int n);
    void func(int n)
    {
        for (int i=1; i<=(n+1)/2; i++)
        {
            for (int j=1; j<=i-1; j++)
            {
                printf(" ");
            }
            for (int k=n;k>=2*i-1 ; k--)
            {
                printf("*");
            }
            printf("\n");
        }
    }
    
    int main(int argc, const char * argv[])
    {
        int n;
        scanf("%d",&n);
        func(n);
        return 0;
    }
    

    5.编写函数,传入n,打印以n为底的正三角形

    #include <stdio.h>
    void func(int n);
    void func(int n)
    {
        for (int i=1; i<=(n+1)/2; i++)
        {
            for (int j=1; j<=(n+1)/2-i; j++)
            {
                printf(" ");
            }
            for (int k=1;k<=2*i-1 ; k++)
            {
                printf("*");
            }
            printf("\n");
        }
    }
    
    int main(int argc, const char * argv[])
    {
        int n;
        scanf("%d",&n);
        func(n);
        return 0;
    }
    

    6.编写函数,求两个数的最小公倍数,用返回值返回。

    #include <stdio.h>
    int func(int a,int b);
    int func(int a,int b)
    {
        int sum=(a>b?a:b);
        for (int i=(a>b?a:b); ; i++)
        {
            if (i%a==0&&i%b==0)
            {
                sum=i;
                break;
            }
        }
        return sum;
    }
    
    int main(int argc, const char * argv[])
    {
        int a,b;
        scanf("%d%d",&a,&b);
        printf("%d\n",func(a, b));
        return 0;
    }
    

    相关文章

      网友评论

        本文标题:05函数

        本文链接:https://www.haomeiwen.com/subject/xezgjftx.html