模块化程序设计-函数

函数的分类

1 用户使用角度分类

(1)库函数。它是由系统提供的,用户不必去定义,可以直接使用它。比如printf()函数、puts()函数等等。

(2)用户自定义函数。

2.2.2 函数的形式角度分类

(1)无参函数。在调用无参函数的时候,主调函数不向被调函数传递数据。无参函数一般用来执行指定的一组操作。无参函数可以带回也可以不带回函数值。

(2)有参函数。在调用函数时,主调函数通过参数向被调函数传输数据,例如strlen()函数就是有参函数,主函数传递一个字符串到strlen()函数,strlen返回值是这个字符串的长度。

2.3 函数的定义

c语言要求,在程序中用到的所有函数,必须“先定义,后使用”。例如想用max求两个数的最大值。必须先按规范对它进行定义,指定他的名字、函数返回类型、函数实现的功能以及参数的个数和类型,将这些信息通知给编译系统。这样程序执行max函数的时,编译系统就会按照定义式所指定的功能去执行。如果事先不定义,编译系统是无从知晓max是什么,要实现什么功能的。

对于c编译系统提供的库函数,是由编译系统事先定义好的,库文件中包含了对各函数的定义。程序设计者不必自己定义,只需要用#include指令把有关的头文件包含到本文件中即可。例如在程序中用到sqrt,fabs,sin等数学函数,就必须在文件模块开头写上:

#include<math.h>

库函数只提供了最基本、最通用的一些函数,而不可能包括人们在实际应用中所用到的所有函数。我们往往需要自己定义想要用的而库函数并没有提供的函数。

函数的嵌套调用

c语言的函数定义是互相平行、独立的,也就是说,在定义函数时,一个函数内不能定义另一个函数,也就是不能嵌套定义,但是可以嵌套调用函数,也就是说,在调用一个函数的过程中,又可以调用另一个函数

输入四个整数,找出其中最大的整数

#include<stdio.h>
int main()
{
    int max4(int a,int b,int c,int d);
    int a,b,c,d,max;
    printf("please enter 4 integer number:");
    scanf("%d%d%d%d",&a,&b,&c,&d);
    max=max4(a,b,c,d);
    printf("max=%d\n",max);
    return 0;
}

int max4(int a,int b,int c,int d)
{
    int max2(int a,int b);      //声明max2
    int m;
    m=max2(a,b);
    m=max2(m,c);
    m=max2(m,d);
    return(m);
}

int max2(int a,int b)
{
    if(a>=b)
      return a;
    else
      return b;

}

函数的递归调用

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

int fun(int a)
{
    int b,c;
    c=fun(b);   //在执行的过程中又调用了函数fun
    return(2*c);
}

在调用函数fun的过程中,又调用fun函数,这是直接调用本函数,
这种调用都是无终止的调用,显然程序中不可能出现这种状况,而是应该出现有限次数的、有终止的递归调用,这可以用if语句来控制

用递归的方法求n!
这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值