黑马程序员——C语言基础05—函数

——Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ——-
一、什么是函数?

1)任何一个C语言程序都是由一个或者多个程序段(小程序)构成的,每个程序段都有自己的功能,我们一般称这些程序段为“函数”。
所以,你可以说C语言程序是由函数构成的
2)每一个函数用来实现一个特定的功能。
3)一个C程序由一个main函数和若干其他函数构成。由主函数调用他函数,其他函数也可以相互调用。同一函数可以被一个函数或多个函数调用多次。

二、怎样定义函数?

  1. 在程序中的所有函数必须先定义,后使用。通过函数函数,可以看出C语言是一门面向过程的语言。通过不同功能的函数来实现最终结果的实现。
 1)指定函数的名字,以便以后按名调用;
 2)指定函数的类型,即函数返回值的类型;
 3)指定函数的参数的名字和类型,以便在调用函数时向它们传递数据。对无参函数不需要这项;
 4)指定函数应当完成什么操作,也就是函数时做什么的,即函数的功能。这是最重要的,是在函数体重解决的。
/*类型名 函数名(参数类型 参数)
 {
    函数体
        }*/

2. 函数分类

1)无参无返回值函数
    void 函数名()
    {
       函数体
    }
 2)无参有返回值函数

      类型名 函数名()
    {
       函数体
       return 返回值;
    }
 3)有参无返回值函数
    void 函数名(参数类型 参数)
    {
       函数体
    }
 4)有参有返回值函数
    类型名 函数名(参数类型 参数)
    {
        函数体
        return 返回值;
    }

三、函数的声明与调用

1.一个函数调用另一个函数需要具备以下条件:

1)被调用的函数已经是定义的函数(是库函数或者用户自定义的函数);
2)如果使用库函数,应该在文件头文件用#include指令将调用有关函数是所需要的信息。
3)如果用户自定义函数,而该函数的位置在于调用他的函数的后面(同一个文件),应该在主调函数中对被调用打函数进行声明。

2.那么如何声明一个自定义函数呢?

1)函数类型 函数名(参数类型1 参数1, 参数类型2 参数2…);
2) 函数类型 函数名 (参数类型1,参数类型2…);
注意:如果被调函数在主函数的后面则需要声明。

3.函数的调用过程就是值传递或者址传递的过程。(址传递是指后面的指针)

1)调用函数时,实参值确定;实际参数和形式参数的个数 类型完全一致,如果不一致会造成精度丢失。
2)定义函数后并不会真正的给形式参数分配内存空间,而是当函数的调用时才会分配。
3)通过return语句将函数值带到主调函数。例如下个实例,求两个数值的最大值,将max函数的z值return到主调函数中。
4)如果函数不需要返回值,则函数不需要return语句,即void函数类型。

5)行参的值在函数内部可以被修改,但不会影响主调函数中实际参数的数据。

四、函数实例

1)求x、y两值的最大值

#include<stdio.h>
//先编写max函数
int max(int x,int y)//定义max函数,有两个参数
{
    int z;//定义临时变量z
    z=x>y?x:y;//把x和y大者赋给z
    return z;//把z作为max函数的值返回main函数
}
//再写主函数
int main()
{
    int max(int x,int y);//对max函数的声明
    int a,b,c;
    printf("请输入两个整数:");//提示输入数据
    scanf("%d,%d",&a,&b);//输入两个整数
    c=max(a,b);//调用max函数,有两个实参,大数赋给变量c
    printf("最大的数是 %d",c);//输出大数c
    return 0;
    }


2)输入两个数,打印(printf)这两个数的和、差、积、商、以及余数。

#include <stdio.h>

int sum(int x,int y)
{
    return x+y;//定义求和函数
}
int minus(int x,int y)
{
    return x-y;//定义相减函数
}
int multiply(int x,int y)
{
    return x*y;  //定义相乘函数
}
int Shang(int x,int y)
{
    return x/y;  //定义相除求商
}

int Yushu(int x,int y)
{
    return x%y; //定义相除求余
}

int main()
{
    int a,b,t1,t2,t3,t4,t5;
    printf("请输入两个整数a和b,并以空格隔开:");
    scanf("%d%d",&a,&b);
    t1=sum(a,b);
    t2=minus(a,b);
    t3=multiply(a, b);
    t4=Shang(a, b);
    t5=Yushu(a, b);
    printf("a与b的和是%d,差是%d,积是%d,商是%d,余数是%d\n",t1,t2,t3,t4,t5);


    return 0;
}

五、函数的嵌套调用与递归调用

1、定义函数时,一个函数内不能再定义另一个函数,也就是不能嵌套定义,但可以嵌套调用函数。

2、如果在调用一个函数的过程中又出现直接或间接的调用函数本身,则称为函数的递归调用。
例如:

`int f(int x)
    {
        int y, z;
        z=f(y);        //在执行f函数时候又调用了f函数时
        return (2*z);
        }
`

注意:递归函数不建议经常使用,因为极其的消耗内存。

如果想要递归,必须满足三个条件:
a 自己能够调用自己
b 存在一个能让递归结束(否则将会是一个死循环)
c 能够找到一个规律能让规模缩小

3、递归 分为递推阶段 和回归迭代阶段

int getAge(int n)
{
    int age;
    if (n==1){
    age=10
    } else {
    age = getAge(n-1)+2; //回调自己的函数
    }
    return age;
    }
Python网络爬虫与推荐算法新闻推荐平台:网络爬虫:通过Python实现新浪新闻的爬取,可爬取新闻页面上的标题、文本、图片、视频链接(保留排版) 推荐算法:权重衰减+标签推荐+区域推荐+热点推荐.zip项目工程资源经过严格测试可直接运行成功且功能正常的情况才上传,可轻松复刻,拿到资料包后可轻松复现出一样的项目,本人系统开发经验充足(全领域),有任何使用问题欢迎随时与我联系,我会及时为您解惑,提供帮助。 【资源内容】:包含完整源码+工程文件+说明(如有)等。答辩评审平均分达到96分,放心下载使用!可轻松复现,设计报告也可借鉴此项目,该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的。 【提供帮助】:有任何使用问题欢迎随时与我联系,我会及时解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 下载后请首先打开README文件(如有),项目工程可直接复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值