我爱编程

05函数

2018-05-28  本文已影响0人  忘带充电宝de皮卡丘

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;
}
上一篇下一篇

猜你喜欢

热点阅读