第八章 函数
8、1  函数概述
1、 C语言的函数:
C语言的函数是子程序的总称,包括函数和过程。(有返回值、无返回值,教材中称为:有返回值函数,无返回值函数)。
C语言函数可以分为库函数、用户自定义函数。库函数由系统提供,程序员只需要使用(调用),用户自定义函数需要程序员自己编制。
2、 C语言的程序由函数组成,函数是C语言程序的基本单位
前面章节介绍的所有程序都是由一个主函数main组成的。程序的所有操作都在主函数中完成。事实上,C语言程序可以包含一个main函数,也可以包含一个main函数和若干个其它函数。
C语言程序的结构如图所示。在每个程序中,主函数main是必须的,它是所有程序的执行起
点,main函数只调用其它函数,不能为其它函数调用。如果不考虑函数的功能和逻辑,其它函数没有主从关系,可以相互调用。所有函数都可以调用库函数。程序的总体功能通过函数的调用来实现。
必须的,起点
    main()主函数
f函数
e函数
d函数
c函数
a函数
b函数
3、 使用函数的意义(补充)
有些同学提出,我只用一个main函数就可以编程,为什么这么复杂,还要将程序分解到函数,还要掌握这么多概念,太麻烦了?我们说对于小程序可以这样做,但是对于一个有一定规模的程序这样做就不合适了。使用函数的几个原因:
(1) 使用函数可以控制任务的规模
一般应用程序都具有较大的规模。例如:一个齿轮误差分析软件系统的源程序行数要数千行。一个传动链计算机辅助设计系统的源程序行数5万多行。
使用函数可以将程序划分为若干功能相对独立的模块,这些模块还可以再划分为更小的模块,直到各个模块达到程序员所能够控制的规模。然后程序员再进行各个模块的编制。因为各个模块功能相对独立,步骤有限,所以流程容易控制,程序容易编制,修改。
一般一个模块的规模控制在源程序60行以内(但是也不必教条化)。
(2) 使用函数可以控制变量的作用范围
变量在整个模块范围内全局有效,如果将一个程序全部写在main()函数内,大家可以想象,
变量可以在main函数内任何位置不加控制地被修改。如果发现变量的值(状态)有问题,你可能要在整个程序中查哪里对此变量进行了修改,什么操作会对此变量有影响,改动了一个逻辑,一不留神又造成了新的问题,最后程序越改越乱,有时连程序员自己都不愿意再看自己编写的程序。都是“大”惹的祸。
使用函数后,变量局限于自己的函数内,60行代码内,太好了,能控制吗?
函数-函数通过接口(参数表,返回值)通讯,交换数据。
(3) 使用函数,程序的开发可以由多人分工协作。
一个main()模块,怎么合作?
将程序划分为若干模块(函数),各个相对独立的模块(函数)可以由多人完成,每个人按照模块(函数)的功能要求,接口要求编制代码,调试,确保每个模块(函数)的正确性。最后将所有模块(函数)合并,统一调试、运行。
(4) 使用函数,可以重新利用已有的、调式好的、成熟的程序模块
想象一下,如果要用到求平方根,如果系统不提供sqrt这样的函数,怎么办?(数学书,考虑算法,编制求平方根代码)。C语言的库函数(标准函数)就是系统提供的,调式好的、常用的模块,我们可以直接利用。事实上我们的代码也可以重新利用,可以将已经调试好的,功能相对独立的代码改成函数,供以后调用。
4、 函数的一些概念
(1) 主函数、其它函数
(2) 主调函数(调用其它函数的函数)、被调函数(被其它函数调用的函数)
(3) 标准函数(库函数)和用户自定义函数
(4) 无参函数、有参函数
(5) 无返回值函数、有返回值函数
5、C语言使用函数的一些说明
(1) C程序是由函数构成
一个C源程序至少包含一个main函数,也可以包含一个main函数和若干个其它函数。函数是C程序的基本单位。
被调用的函数可以是系统提供的库函数,也可以是用户根据需要自己编写设计的函数。
C函数库非常丰富,ANSI C提供100多个库函数,Turbo C提供300多个库函数。
(2) main函数(主函数)是每个程序执行的起始点
一个C程序总是从main函数开始执行,而不论main函数在程序中的位置。可以将main函数放在整个程序的最前面,也可以放在整个程序的最后,或者放在其它函数之间。
8、2 函数的一般形式
函数应当先定义,后调用。
函数定义的一般形式:
[函数类型] 函数名([函数参数类型1 函数参数名1][,…,函数参数类型2,函数参数名2])
{
  [声明部分]
  [执行部分]
}
函数头
函数体
说明:一个函数(定义)由函数头(函数首部)和函数体两部分组成
1、 函数头(首部):说明了函数类型、函数名称及参数。
(1) 函数类型:函数返回值的数据类型,可以是基本数据类型也可以是构造类型。如果省略默认为int,如果不返回值,定义为void类型。
(2) 函数名:给函数取的名字,以后用这个名字调用。函数名由用户命名,命名规则同标识符。
(3) 函数名后面是参数表,无参函数没有参数传递,但“()”号不能省略,这是格式的规定。参数表说明参数的类型和形式参数的名称,各个形式参数用“,”分隔。
2、 函数体:函数首部下用一对{}括起来的部分。如果函数体内有多个{},最外层是函数体的范围。
函数体一般包括声明部分、执行部分两部分。
(1) 声明部分:在这部分定义本函数所使用的变量和进行有关声明(如函数声明)。
(2) 执行部分:程序段,由若干条语句组成命令序列(可以在其中调用其它函数)。
注意:函数不能单独运行,函数可以被主函数或其它函数调用,也可以调用其它函数,但是不能调用主函数。
例8-1:输入三个整数,求三个整数中的最大值,打印。
不使用函数(除main外)
main()
{
  int n1,n2,n3,nmax;
  scanf(“%d%d%d”,&n1,&n2,&n3);
  if(n1>n2)
    nmax=n1;
  else
    nmax=n2;
  if(n3>nmax)
    nmax=n3;
  printf(“max=%d\n”nmax);
}自定义函数怎么用c语言
使用函数
extern int max(int,int,int);
main()
{
  int n1,n2,n3,nmax;
  scanf(“%d%d%d”,&n1,&n2,&n3);
  nmax=max(n1,n2,n3);
  printf(“max=%d\n “,nmax);
int max(int x,int y,int z)
{
  int m;
  if(x>y)
    m=x;
  else
    m=y;
  if(z>m)m=z;
  return m;
}

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。